From 0a30cc3551bfcfc44c08e7358226d53e215519f7 Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Mon, 9 Oct 2023 09:24:58 -0700 Subject: [PATCH 001/216] roll back fix of behavior of Graph/ValueGraph views for a node when that node is removed from the graph (breaking internal tests) RELNOTES=roll back fix of behavior of Graph/ValueGraph views for a node when that node is removed from the graph (breaking internal tests) PiperOrigin-RevId: 571958083 --- .../test/com/google/common/graph/AbstractGraphTest.java | 9 +++------ .../com/google/common/graph/AbstractNetworkTest.java | 9 ++++----- .../google/common/graph/StandardMutableValueGraph.java | 9 ++------- .../test/com/google/common/graph/AbstractGraphTest.java | 9 +++------ .../com/google/common/graph/AbstractNetworkTest.java | 9 ++++----- .../google/common/graph/StandardMutableValueGraph.java | 9 ++------- 6 files changed, 18 insertions(+), 36 deletions(-) diff --git a/android/guava-tests/test/com/google/common/graph/AbstractGraphTest.java b/android/guava-tests/test/com/google/common/graph/AbstractGraphTest.java index a8209244c037..756a50c68276 100644 --- a/android/guava-tests/test/com/google/common/graph/AbstractGraphTest.java +++ b/android/guava-tests/test/com/google/common/graph/AbstractGraphTest.java @@ -385,13 +385,10 @@ public void removeNode_nodeNotPresent() { public void removeNode_queryAfterRemoval() { assume().that(graphIsMutable()).isTrue(); - putEdge(N1, N2); - putEdge(N2, N1); - Set n1AdjacentNodes = graph.adjacentNodes(N1); - Set n2AdjacentNodes = graph.adjacentNodes(N2); + addNode(N1); + @SuppressWarnings("unused") + Set unused = graph.adjacentNodes(N1); // ensure cache (if any) is populated assertThat(graphAsMutableGraph.removeNode(N1)).isTrue(); - assertThat(n1AdjacentNodes).isEmpty(); - assertThat(n2AdjacentNodes).isEmpty(); IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(N1)); assertNodeNotInGraphErrorMessage(e); diff --git a/android/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java b/android/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java index b9558f706e86..a5fc1b254bc6 100644 --- a/android/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java +++ b/android/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java @@ -670,12 +670,11 @@ public void removeNode_nodeNotPresent() { public void removeNode_queryAfterRemoval() { assume().that(graphIsMutable()).isTrue(); - addEdge(N1, N2, E12); - Set n1AdjacentNodes = networkAsMutableNetwork.adjacentNodes(N1); - Set n2AdjacentNodes = networkAsMutableNetwork.adjacentNodes(N2); + addNode(N1); + @SuppressWarnings("unused") + Set unused = + networkAsMutableNetwork.adjacentNodes(N1); // ensure cache (if any) is populated assertTrue(networkAsMutableNetwork.removeNode(N1)); - assertThat(n1AdjacentNodes).isEmpty(); - assertThat(n2AdjacentNodes).isEmpty(); IllegalArgumentException e = assertThrows( IllegalArgumentException.class, () -> networkAsMutableNetwork.adjacentNodes(N1)); diff --git a/android/guava/src/com/google/common/graph/StandardMutableValueGraph.java b/android/guava/src/com/google/common/graph/StandardMutableValueGraph.java index 1ad474083610..0ea641a5b1cd 100644 --- a/android/guava/src/com/google/common/graph/StandardMutableValueGraph.java +++ b/android/guava/src/com/google/common/graph/StandardMutableValueGraph.java @@ -24,7 +24,6 @@ import static com.google.common.graph.Graphs.checkPositive; import static java.util.Objects.requireNonNull; -import com.google.common.collect.ImmutableList; import com.google.errorprone.annotations.CanIgnoreReturnValue; import javax.annotation.CheckForNull; @@ -137,21 +136,17 @@ public boolean removeNode(N node) { } } - for (N successor : ImmutableList.copyOf(connections.successors())) { + for (N successor : connections.successors()) { // requireNonNull is safe because the node is a successor. requireNonNull(nodeConnections.getWithoutCaching(successor)).removePredecessor(node); - requireNonNull(connections.removeSuccessor(successor)); --edgeCount; } if (isDirected()) { // In undirected graphs, the successor and predecessor sets are equal. - // Since views are returned, we need to copy the predecessors that will be removed. - // Thus we avoid modifying the underlying view while iterating over it. - for (N predecessor : ImmutableList.copyOf(connections.predecessors())) { + for (N predecessor : connections.predecessors()) { // requireNonNull is safe because the node is a predecessor. checkState( requireNonNull(nodeConnections.getWithoutCaching(predecessor)).removeSuccessor(node) != null); - connections.removePredecessor(predecessor); --edgeCount; } } diff --git a/guava-tests/test/com/google/common/graph/AbstractGraphTest.java b/guava-tests/test/com/google/common/graph/AbstractGraphTest.java index a8209244c037..756a50c68276 100644 --- a/guava-tests/test/com/google/common/graph/AbstractGraphTest.java +++ b/guava-tests/test/com/google/common/graph/AbstractGraphTest.java @@ -385,13 +385,10 @@ public void removeNode_nodeNotPresent() { public void removeNode_queryAfterRemoval() { assume().that(graphIsMutable()).isTrue(); - putEdge(N1, N2); - putEdge(N2, N1); - Set n1AdjacentNodes = graph.adjacentNodes(N1); - Set n2AdjacentNodes = graph.adjacentNodes(N2); + addNode(N1); + @SuppressWarnings("unused") + Set unused = graph.adjacentNodes(N1); // ensure cache (if any) is populated assertThat(graphAsMutableGraph.removeNode(N1)).isTrue(); - assertThat(n1AdjacentNodes).isEmpty(); - assertThat(n2AdjacentNodes).isEmpty(); IllegalArgumentException e = assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(N1)); assertNodeNotInGraphErrorMessage(e); diff --git a/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java b/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java index a29ffc5ae42b..5d3f53505870 100644 --- a/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java +++ b/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java @@ -677,12 +677,11 @@ public void removeNode_nodeNotPresent() { public void removeNode_queryAfterRemoval() { assume().that(graphIsMutable()).isTrue(); - addEdge(N1, N2, E12); - Set n1AdjacentNodes = networkAsMutableNetwork.adjacentNodes(N1); - Set n2AdjacentNodes = networkAsMutableNetwork.adjacentNodes(N2); + addNode(N1); + @SuppressWarnings("unused") + Set unused = + networkAsMutableNetwork.adjacentNodes(N1); // ensure cache (if any) is populated assertTrue(networkAsMutableNetwork.removeNode(N1)); - assertThat(n1AdjacentNodes).isEmpty(); - assertThat(n2AdjacentNodes).isEmpty(); IllegalArgumentException e = assertThrows( IllegalArgumentException.class, () -> networkAsMutableNetwork.adjacentNodes(N1)); diff --git a/guava/src/com/google/common/graph/StandardMutableValueGraph.java b/guava/src/com/google/common/graph/StandardMutableValueGraph.java index 1ad474083610..0ea641a5b1cd 100644 --- a/guava/src/com/google/common/graph/StandardMutableValueGraph.java +++ b/guava/src/com/google/common/graph/StandardMutableValueGraph.java @@ -24,7 +24,6 @@ import static com.google.common.graph.Graphs.checkPositive; import static java.util.Objects.requireNonNull; -import com.google.common.collect.ImmutableList; import com.google.errorprone.annotations.CanIgnoreReturnValue; import javax.annotation.CheckForNull; @@ -137,21 +136,17 @@ public boolean removeNode(N node) { } } - for (N successor : ImmutableList.copyOf(connections.successors())) { + for (N successor : connections.successors()) { // requireNonNull is safe because the node is a successor. requireNonNull(nodeConnections.getWithoutCaching(successor)).removePredecessor(node); - requireNonNull(connections.removeSuccessor(successor)); --edgeCount; } if (isDirected()) { // In undirected graphs, the successor and predecessor sets are equal. - // Since views are returned, we need to copy the predecessors that will be removed. - // Thus we avoid modifying the underlying view while iterating over it. - for (N predecessor : ImmutableList.copyOf(connections.predecessors())) { + for (N predecessor : connections.predecessors()) { // requireNonNull is safe because the node is a predecessor. checkState( requireNonNull(nodeConnections.getWithoutCaching(predecessor)).removeSuccessor(node) != null); - connections.removePredecessor(predecessor); --edgeCount; } } From 5116b41032e08c483645562bfc17084f0b5a3386 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 09:47:10 -0700 Subject: [PATCH 002/216] Bump ossf/scorecard-action from 2.2.0 to 2.3.0 Bumps [ossf/scorecard-action](https://github.com/ossf/scorecard-action) from 2.2.0 to 2.3.0. - [Release notes](https://github.com/ossf/scorecard-action/releases) - [Changelog](https://github.com/ossf/scorecard-action/blob/main/RELEASE.md) - [Commits](https://github.com/ossf/scorecard-action/compare/08b4669551908b1024bb425080c797723083c031...483ef80eb98fb506c348f7d62e28055e49fe2398) Fixes #6762 RELNOTES=n/a PiperOrigin-RevId: 571964095 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 64b2fb97cfae..4566c9dc6ad8 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -37,7 +37,7 @@ jobs: persist-credentials: false - name: "Run analysis" - uses: ossf/scorecard-action@08b4669551908b1024bb425080c797723083c031 # v2.2.0 + uses: ossf/scorecard-action@483ef80eb98fb506c348f7d62e28055e49fe2398 # v2.3.0 with: results_file: results.sarif results_format: sarif From d3164553605614e1ef17750d7f58bc3fc3ce6d45 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 9 Oct 2023 10:44:07 -0700 Subject: [PATCH 003/216] Bump github/codeql-action from 2.21.9 to 2.22.1 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.21.9 to 2.22.1. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/ddccb873888234080b77e9bc2d4764d5ccaaccf9...fdcae64e1484d349b3366718cdfef3d404390e85) Fixes #6761 RELNOTES=n/a PiperOrigin-RevId: 571980557 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 4566c9dc6ad8..c027cc5e34e2 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@ddccb873888234080b77e9bc2d4764d5ccaaccf9 # v2.21.9 + uses: github/codeql-action/upload-sarif@fdcae64e1484d349b3366718cdfef3d404390e85 # v2.22.1 with: sarif_file: results.sarif From 27b442887b76aef94dafc91edcaf156ad9ad8617 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 10 Oct 2023 01:37:41 -0700 Subject: [PATCH 004/216] Add `@GwtIncompatible` to a bunch of tests that had neither that nor `@GwtCompatible`. Such changes are no-ops, given that we construct our test suite based on the presence of `@GwtCompatible`. PiperOrigin-RevId: 572171057 --- .../guava-tests/test/com/google/common/base/DefaultsTest.java | 2 ++ .../com/google/common/base/FinalizableReferenceQueueTest.java | 2 ++ .../test/com/google/common/base/PackageSanityTests.java | 2 ++ .../test/com/google/common/base/StandardSystemPropertyTest.java | 2 ++ guava-tests/test/com/google/common/base/DefaultsTest.java | 2 ++ .../com/google/common/base/FinalizableReferenceQueueTest.java | 2 ++ guava-tests/test/com/google/common/base/PackageSanityTests.java | 2 ++ .../test/com/google/common/base/StandardSystemPropertyTest.java | 2 ++ 8 files changed, 16 insertions(+) diff --git a/android/guava-tests/test/com/google/common/base/DefaultsTest.java b/android/guava-tests/test/com/google/common/base/DefaultsTest.java index 7b990ba5239a..06b3c5da3619 100644 --- a/android/guava-tests/test/com/google/common/base/DefaultsTest.java +++ b/android/guava-tests/test/com/google/common/base/DefaultsTest.java @@ -16,6 +16,7 @@ package com.google.common.base; +import com.google.common.annotations.GwtIncompatible; import junit.framework.TestCase; /** @@ -23,6 +24,7 @@ * * @author Jige Yu */ +@GwtIncompatible public class DefaultsTest extends TestCase { public void testGetDefaultValue() { assertEquals(false, Defaults.defaultValue(boolean.class).booleanValue()); diff --git a/android/guava-tests/test/com/google/common/base/FinalizableReferenceQueueTest.java b/android/guava-tests/test/com/google/common/base/FinalizableReferenceQueueTest.java index 7838f371a269..56f2a805bcac 100644 --- a/android/guava-tests/test/com/google/common/base/FinalizableReferenceQueueTest.java +++ b/android/guava-tests/test/com/google/common/base/FinalizableReferenceQueueTest.java @@ -16,6 +16,7 @@ package com.google.common.base; +import com.google.common.annotations.GwtIncompatible; import com.google.common.base.internal.Finalizer; import com.google.common.testing.GcFinalization; import java.lang.ref.ReferenceQueue; @@ -36,6 +37,7 @@ // - .class files aren't available // - possibly no real concept of separate ClassLoaders? @AndroidIncompatible +@GwtIncompatible public class FinalizableReferenceQueueTest extends TestCase { private @Nullable FinalizableReferenceQueue frq; diff --git a/android/guava-tests/test/com/google/common/base/PackageSanityTests.java b/android/guava-tests/test/com/google/common/base/PackageSanityTests.java index f524fbb6ccae..c9eeed0decf7 100644 --- a/android/guava-tests/test/com/google/common/base/PackageSanityTests.java +++ b/android/guava-tests/test/com/google/common/base/PackageSanityTests.java @@ -16,10 +16,12 @@ package com.google.common.base; +import com.google.common.annotations.GwtIncompatible; import com.google.common.testing.AbstractPackageSanityTests; /** Basic sanity tests for classes in {@code common.base}. */ +@GwtIncompatible public class PackageSanityTests extends AbstractPackageSanityTests { public PackageSanityTests() { // package private classes like FunctionalEquivalence are tested through the public API. diff --git a/android/guava-tests/test/com/google/common/base/StandardSystemPropertyTest.java b/android/guava-tests/test/com/google/common/base/StandardSystemPropertyTest.java index 3a88366c0cc0..f4907a337e1e 100644 --- a/android/guava-tests/test/com/google/common/base/StandardSystemPropertyTest.java +++ b/android/guava-tests/test/com/google/common/base/StandardSystemPropertyTest.java @@ -20,6 +20,7 @@ import static com.google.common.base.StandardSystemProperty.JAVA_EXT_DIRS; import static com.google.common.truth.Truth.assertWithMessage; +import com.google.common.annotations.GwtIncompatible; import junit.framework.TestCase; /** @@ -27,6 +28,7 @@ * * @author Kurt Alfred Kluever */ +@GwtIncompatible public class StandardSystemPropertyTest extends TestCase { public void testGetKeyMatchesString() { diff --git a/guava-tests/test/com/google/common/base/DefaultsTest.java b/guava-tests/test/com/google/common/base/DefaultsTest.java index 7b990ba5239a..06b3c5da3619 100644 --- a/guava-tests/test/com/google/common/base/DefaultsTest.java +++ b/guava-tests/test/com/google/common/base/DefaultsTest.java @@ -16,6 +16,7 @@ package com.google.common.base; +import com.google.common.annotations.GwtIncompatible; import junit.framework.TestCase; /** @@ -23,6 +24,7 @@ * * @author Jige Yu */ +@GwtIncompatible public class DefaultsTest extends TestCase { public void testGetDefaultValue() { assertEquals(false, Defaults.defaultValue(boolean.class).booleanValue()); diff --git a/guava-tests/test/com/google/common/base/FinalizableReferenceQueueTest.java b/guava-tests/test/com/google/common/base/FinalizableReferenceQueueTest.java index 08ead4365d78..8bddca227626 100644 --- a/guava-tests/test/com/google/common/base/FinalizableReferenceQueueTest.java +++ b/guava-tests/test/com/google/common/base/FinalizableReferenceQueueTest.java @@ -16,6 +16,7 @@ package com.google.common.base; +import com.google.common.annotations.GwtIncompatible; import com.google.common.base.internal.Finalizer; import com.google.common.testing.GcFinalization; import java.lang.ref.ReferenceQueue; @@ -36,6 +37,7 @@ // - .class files aren't available // - possibly no real concept of separate ClassLoaders? @AndroidIncompatible +@GwtIncompatible public class FinalizableReferenceQueueTest extends TestCase { private @Nullable FinalizableReferenceQueue frq; diff --git a/guava-tests/test/com/google/common/base/PackageSanityTests.java b/guava-tests/test/com/google/common/base/PackageSanityTests.java index f524fbb6ccae..c9eeed0decf7 100644 --- a/guava-tests/test/com/google/common/base/PackageSanityTests.java +++ b/guava-tests/test/com/google/common/base/PackageSanityTests.java @@ -16,10 +16,12 @@ package com.google.common.base; +import com.google.common.annotations.GwtIncompatible; import com.google.common.testing.AbstractPackageSanityTests; /** Basic sanity tests for classes in {@code common.base}. */ +@GwtIncompatible public class PackageSanityTests extends AbstractPackageSanityTests { public PackageSanityTests() { // package private classes like FunctionalEquivalence are tested through the public API. diff --git a/guava-tests/test/com/google/common/base/StandardSystemPropertyTest.java b/guava-tests/test/com/google/common/base/StandardSystemPropertyTest.java index 3a88366c0cc0..f4907a337e1e 100644 --- a/guava-tests/test/com/google/common/base/StandardSystemPropertyTest.java +++ b/guava-tests/test/com/google/common/base/StandardSystemPropertyTest.java @@ -20,6 +20,7 @@ import static com.google.common.base.StandardSystemProperty.JAVA_EXT_DIRS; import static com.google.common.truth.Truth.assertWithMessage; +import com.google.common.annotations.GwtIncompatible; import junit.framework.TestCase; /** @@ -27,6 +28,7 @@ * * @author Kurt Alfred Kluever */ +@GwtIncompatible public class StandardSystemPropertyTest extends TestCase { public void testGetKeyMatchesString() { From db3017fd252e7484cd710653277fcc6b090c2d59 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 10 Oct 2023 12:05:16 -0700 Subject: [PATCH 005/216] Fix double-source-jar error during releases: MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ``` Building and deploying the android flavor (this may take a while)... [ERROR] We have duplicated artifacts attached. [ERROR] Failed to execute goal org.apache.maven.plugins:maven-source-plugin:3.3.0:jar (attach-sources) on project guava: Presumably you have configured maven-source-plugn to execute twice times in your build. You have to configure a classifier for at least on of them. -> [Help 1] ``` I had fixed the same issue with _snapshot_ deployment in cl/559489724 (by no longer passing `source:jar` to `mvn`), but apparently that fix doesn't apply to _release_ deployment. I'm guessing that the relevant part of our release command is `-Psonatype-oss-release`, which (among other things) [activates a `maven-source-plugin` configuration change](https://github.com/google/guava/blob/a78bea41aedba50469641968ee3d98b24836e491/pom.xml#L329-L334): Presumably that introduces a second `maven-source-plugn` execution in much the same way as passing `source:jar` does. I previously fixed a similar problem in jimfs (cl/536746714) by removing the "normal" `maven-source-plugin` configuration, leaving only the `sonatype-oss-release` configuration in the parent. I don't remember whether I investigated removing jimfs' `sonatype-oss-release` configuration instead. Probably I should have at least investigated, since that's what we're going with here. As best I can tell, this doesn't interfere with _snapshot_ source jars, which are produced even without `source:jar`. (Notice that the configuration that may be the source of the problem was copied from the old `oss-parent` pom. This is at least the second time that that pom's configuration has caused us trouble, the other I recall being cl/492304151—well, and probably the aforementioned jimfs source-jar issue, too.) This prepares for the release that contains the fix for https://github.com/google/guava/issues/6634, among other issues. RELNOTES=n/a PiperOrigin-RevId: 572327204 --- android/pom.xml | 26 +++++++++----------------- pom.xml | 26 +++++++++----------------- 2 files changed, 18 insertions(+), 34 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index d38ddb2c8633..fb6ac0eb8137 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -23,7 +23,6 @@ 9+181-r4173-1 - 3.3.0 2023-02-01T00:00:00Z UTF-8 @@ -172,12 +171,14 @@ maven-source-plugin - ${maven-source-plugin.version} + 3.3.0 attach-sources - post-integration-test - jar + verify + + jar-no-fork + @@ -335,19 +336,10 @@ sonatype-oss-release - - org.apache.maven.plugins - maven-source-plugin - ${maven-source-plugin.version} - - - attach-sources - - jar-no-fork - - - - + org.apache.maven.plugins maven-javadoc-plugin diff --git a/pom.xml b/pom.xml index 8d0d6a61a62e..95c9043f8ef5 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,6 @@ 9+181-r4173-1 - 3.3.0 2023-02-01T00:00:00Z UTF-8 @@ -173,12 +172,14 @@ maven-source-plugin - ${maven-source-plugin.version} + 3.3.0 attach-sources - post-integration-test - jar + verify + + jar-no-fork + @@ -329,19 +330,10 @@ sonatype-oss-release - - org.apache.maven.plugins - maven-source-plugin - ${maven-source-plugin.version} - - - attach-sources - - jar-no-fork - - - - + org.apache.maven.plugins maven-javadoc-plugin From ca01197df672a6ca9c14824144f4688b354b04f9 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 10 Oct 2023 18:45:52 -0700 Subject: [PATCH 006/216] Inline `*FauxverideShim` classes into their subclasses. Way back in cl/12024317 / cl/12147166, these classes had to be separate because each defined a `copyOf` method, whose erasure matched that of a method declared in the subclass. But in cl/13495337, we removed those methods. At that point, we could have inlined the classes. But there was no need, and I sort of liked keeping these weird, do-not-call methods in a separate file. But the indirection is mildly confusing, such as in obscuring that `ImmutableSortedSet` extends `ImmutableSet.CachingAsList`, not just `ImmutableSet`. RELNOTES=n/a PiperOrigin-RevId: 572427348 --- .../common/collect/ImmutableSortedMap.java | 254 +++++++++++++- .../ImmutableSortedMapFauxverideShim.java | 285 --------------- .../collect/ImmutableSortedMultiset.java | 124 ++++++- ...ImmutableSortedMultisetFauxverideShim.java | 177 ---------- .../common/collect/ImmutableSortedSet.java | 135 +++++++- .../ImmutableSortedSetFauxverideShim.java | 193 ----------- .../google/common/collect/ImmutableBiMap.java | 38 +- .../collect/ImmutableBiMapFauxverideShim.java | 70 ---- .../common/collect/ImmutableSortedMap.java | 288 +++++++++++++++- .../ImmutableSortedMapFauxverideShim.java | 324 ------------------ .../collect/ImmutableSortedMultiset.java | 157 ++++++++- ...ImmutableSortedMultisetFauxverideShim.java | 214 ------------ .../common/collect/ImmutableSortedSet.java | 148 +++++++- .../ImmutableSortedSetFauxverideShim.java | 208 ----------- 14 files changed, 1136 insertions(+), 1479 deletions(-) delete mode 100644 android/guava/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java delete mode 100644 android/guava/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java delete mode 100644 android/guava/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java delete mode 100644 guava/src/com/google/common/collect/ImmutableBiMapFauxverideShim.java delete mode 100644 guava/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java delete mode 100644 guava/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java delete mode 100644 guava/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java index 15c384eb73e2..9e350cc83d6e 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -57,7 +57,7 @@ */ @GwtCompatible(serializable = true, emulated = true) @ElementTypesAreNonnullByDefault -public final class ImmutableSortedMap extends ImmutableSortedMapFauxverideShim +public final class ImmutableSortedMap extends ImmutableMap implements NavigableMap { /* @@ -1146,4 +1146,256 @@ private void readObject(ObjectInputStream stream) throws InvalidObjectException // This class is never actually serialized directly, but we have to make the // warning go away (and suppressing would suppress for all nested classes too) private static final long serialVersionUID = 0; + + /** + * Not supported. Use {@link ImmutableSortedMap#naturalOrder}, which offers better type-safety, + * instead. This method exists only to hide {@link ImmutableMap#builder} from consumers of {@code + * ImmutableSortedMap}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMap#naturalOrder}, which offers better type-safety. + */ + @DoNotCall("Use naturalOrder") + @Deprecated + public static ImmutableSortedMap.Builder builder() { + throw new UnsupportedOperationException(); + } + + /** + * Not supported for ImmutableSortedMap. + * + * @throws UnsupportedOperationException always + * @deprecated Not supported for ImmutableSortedMap. + */ + @DoNotCall("Use naturalOrder (which does not accept an expected size)") + @Deprecated + public static ImmutableSortedMap.Builder builderWithExpectedSize(int expectedSize) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain a non-{@code Comparable} + * key. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this dummy + * version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass a key of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object)}. + */ + @DoNotCall("Pass a key of type Comparable") + @Deprecated + public static ImmutableSortedMap of(K k1, V v1) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of(K k1, V v1, K k2, V v2) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls to will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, + V v1, + K k2, + V v2, + K k3, + V v3, + K k4, + V v4, + K k5, + V v5, + K k6, + V v6, + K k7, + V v7, + K k8, + V v8) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, + V v1, + K k2, + V v2, + K k3, + V v3, + K k4, + V v4, + K k5, + V v5, + K k6, + V v6, + K k7, + V v7, + K k8, + V v8, + K k9, + V v9) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, + V v1, + K k2, + V v2, + K k3, + V v3, + K k4, + V v4, + K k5, + V v5, + K k6, + V v6, + K k7, + V v7, + K k8, + V v8, + K k9, + V v9, + K k10, + V v10) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Use {@code ImmutableSortedMap.copyOf(ImmutableMap.ofEntries(...))}. + * + * @deprecated Use {@code ImmutableSortedMap.copyOf(ImmutableMap.ofEntries(...))}. + */ + @DoNotCall("ImmutableSortedMap.ofEntries not currently available; use ImmutableSortedMap.copyOf") + @Deprecated + public static ImmutableSortedMap ofEntries( + Entry... entries) { + throw new UnsupportedOperationException(); + } } diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java b/android/guava/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java deleted file mode 100644 index 9b40f556f466..000000000000 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java +++ /dev/null @@ -1,285 +0,0 @@ -/* - * Copyright (C) 2009 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.common.collect; - -import com.google.common.annotations.GwtIncompatible; -import com.google.errorprone.annotations.DoNotCall; - -/** - * "Overrides" the {@link ImmutableMap} static methods that lack {@link ImmutableSortedMap} - * equivalents with deprecated, exception-throwing versions. See {@link - * ImmutableSortedSetFauxverideShim} for details. - * - * @author Chris Povirk - */ -@GwtIncompatible -@ElementTypesAreNonnullByDefault -abstract class ImmutableSortedMapFauxverideShim extends ImmutableMap { - /** - * Not supported. Use {@link ImmutableSortedMap#naturalOrder}, which offers better type-safety, - * instead. This method exists only to hide {@link ImmutableMap#builder} from consumers of {@code - * ImmutableSortedMap}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableSortedMap#naturalOrder}, which offers better type-safety. - */ - @DoNotCall("Use naturalOrder") - @Deprecated - public static ImmutableSortedMap.Builder builder() { - throw new UnsupportedOperationException(); - } - - /** - * Not supported for ImmutableSortedMap. - * - * @throws UnsupportedOperationException always - * @deprecated Not supported for ImmutableSortedMap. - */ - @DoNotCall("Use naturalOrder (which does not accept an expected size)") - @Deprecated - public static ImmutableSortedMap.Builder builderWithExpectedSize(int expectedSize) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain a non-{@code Comparable} - * key. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this dummy - * version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass a key of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object)}. - */ - @DoNotCall("Pass a key of type Comparable") - @Deprecated - public static ImmutableSortedMap of(K k1, V v1) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of(K k1, V v1, K k2, V v2) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls to will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, - V v1, - K k2, - V v2, - K k3, - V v3, - K k4, - V v4, - K k5, - V v5, - K k6, - V v6, - K k7, - V v7, - K k8, - V v8) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, - V v1, - K k2, - V v2, - K k3, - V v3, - K k4, - V v4, - K k5, - V v5, - K k6, - V v6, - K k7, - V v7, - K k8, - V v8, - K k9, - V v9) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, - V v1, - K k2, - V v2, - K k3, - V v3, - K k4, - V v4, - K k5, - V v5, - K k6, - V v6, - K k7, - V v7, - K k8, - V v8, - K k9, - V v9, - K k10, - V v10) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. Use {@code ImmutableSortedMap.copyOf(ImmutableMap.ofEntries(...))}. - * - * @deprecated Use {@code ImmutableSortedMap.copyOf(ImmutableMap.ofEntries(...))}. - */ - @DoNotCall("ImmutableSortedMap.ofEntries not currently available; use ImmutableSortedMap.copyOf") - @Deprecated - public static ImmutableSortedMap ofEntries( - Entry... entries) { - throw new UnsupportedOperationException(); - } - - // No copyOf() fauxveride; see ImmutableSortedSetFauxverideShim. -} diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java b/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java index ba6cb4313ebb..ff4bdb978c5d 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java @@ -53,7 +53,7 @@ */ @GwtIncompatible // hasn't been tested yet @ElementTypesAreNonnullByDefault -public abstract class ImmutableSortedMultiset extends ImmutableSortedMultisetFauxverideShim +public abstract class ImmutableSortedMultiset extends ImmutableMultiset implements SortedMultiset { // TODO(lowasser): GWT compatibility @@ -681,4 +681,126 @@ Object writeReplace() { private void readObject(ObjectInputStream stream) throws InvalidObjectException { throw new InvalidObjectException("Use SerializedForm"); } + + /** + * Not supported. Use {@link ImmutableSortedMultiset#naturalOrder}, which offers better + * type-safety, instead. This method exists only to hide {@link ImmutableMultiset#builder} from + * consumers of {@code ImmutableSortedMultiset}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMultiset#naturalOrder}, which offers better type-safety. + */ + @DoNotCall("Use naturalOrder.") + @Deprecated + public static ImmutableSortedMultiset.Builder builder() { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass a parameter of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable)}. + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of(E element) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable, Comparable)}. + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable)}. + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2, E e3) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable)}. + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2, E e3, E e4) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable, Comparable)} . + * + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2, E e3, E e4, E e5) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable, Comparable, + * Comparable, Comparable...)} . + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of( + E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain non-{@code + * Comparable} elements. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#copyOf(Comparable[])}. + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset copyOf(E[] elements) { + throw new UnsupportedOperationException(); + } } diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java b/android/guava/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java deleted file mode 100644 index c8a7ed782fc4..000000000000 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java +++ /dev/null @@ -1,177 +0,0 @@ -/* - * Copyright (C) 2011 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the - * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.common.collect; - -import com.google.common.annotations.GwtIncompatible; -import com.google.errorprone.annotations.DoNotCall; - -/** - * "Overrides" the {@link ImmutableMultiset} static methods that lack {@link - * ImmutableSortedMultiset} equivalents with deprecated, exception-throwing versions. This prevents - * accidents like the following: - * - *
{@code
- * List objects = ...;
- * // Sort them:
- * Set sorted = ImmutableSortedMultiset.copyOf(objects);
- * // BAD CODE! The returned multiset is actually an unsorted ImmutableMultiset!
- * }
- *
- * 

While we could put the overrides in {@link ImmutableSortedMultiset} itself, it seems clearer - * to separate these "do not call" methods from those intended for normal use. - * - * @author Louis Wasserman - */ -@GwtIncompatible -@ElementTypesAreNonnullByDefault -abstract class ImmutableSortedMultisetFauxverideShim extends ImmutableMultiset { - /** - * Not supported. Use {@link ImmutableSortedMultiset#naturalOrder}, which offers better - * type-safety, instead. This method exists only to hide {@link ImmutableMultiset#builder} from - * consumers of {@code ImmutableSortedMultiset}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableSortedMultiset#naturalOrder}, which offers better type-safety. - */ - @DoNotCall("Use naturalOrder.") - @Deprecated - public static ImmutableSortedMultiset.Builder builder() { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass a parameter of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable)}. - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of(E element) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable, Comparable)}. - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of(E e1, E e2) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable)}. - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of(E e1, E e2, E e3) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable)}. - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of(E e1, E e2, E e3, E e4) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable, Comparable)} . - * - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of(E e1, E e2, E e3, E e4, E e5) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable, Comparable, - * Comparable, Comparable...)} . - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of( - E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain non-{@code - * Comparable} elements. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#copyOf(Comparable[])}. - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset copyOf(E[] elements) { - throw new UnsupportedOperationException(); - } - - /* - * We would like to include an unsupported " copyOf(Iterable)" here, providing only the - * properly typed "> copyOf(Iterable)" in ImmutableSortedMultiset (and - * likewise for the Iterator equivalent). However, due to a change in Sun's interpretation of the - * JLS (as described at http://bugs.sun.com/view_bug.do?bug_id=6182950), the OpenJDK 7 compiler - * available as of this writing rejects our attempts. To maintain compatibility with that version - * and with any other compilers that interpret the JLS similarly, there is no definition of - * copyOf() here, and the definition in ImmutableSortedMultiset matches that in - * ImmutableMultiset. - * - * The result is that ImmutableSortedMultiset.copyOf() may be called on non-Comparable elements. - * We have not discovered a better solution. In retrospect, the static factory methods should - * have gone in a separate class so that ImmutableSortedMultiset wouldn't "inherit" - * too-permissive factory methods from ImmutableMultiset. - */ -} diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java index cf814d712995..eacee8aeb05e 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -60,7 +60,7 @@ @GwtCompatible(serializable = true, emulated = true) @SuppressWarnings("serial") // we're overriding default serialization @ElementTypesAreNonnullByDefault -public abstract class ImmutableSortedSet extends ImmutableSortedSetFauxverideShim +public abstract class ImmutableSortedSet extends ImmutableSet implements NavigableSet, SortedIterable { static RegularImmutableSortedSet emptySet(Comparator comparator) { if (Ordering.natural().equals(comparator)) { @@ -763,4 +763,137 @@ private void readObject(ObjectInputStream unused) throws InvalidObjectException Object writeReplace() { return new SerializedForm(comparator, toArray()); } + + /** + * Not supported. Use {@link ImmutableSortedSet#naturalOrder}, which offers better type-safety, + * instead. This method exists only to hide {@link ImmutableSet#builder} from consumers of {@code + * ImmutableSortedSet}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedSet#naturalOrder}, which offers better type-safety. + */ + @DoNotCall("Use naturalOrder") + @Deprecated + public static ImmutableSortedSet.Builder builder() { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. This method exists only to hide {@link ImmutableSet#builderWithExpectedSize} + * from consumers of {@code ImmutableSortedSet}. + * + * @throws UnsupportedOperationException always + * @deprecated Not supported by ImmutableSortedSet. + */ + @DoNotCall("Use naturalOrder (which does not accept an expected size)") + @Deprecated + public static ImmutableSortedSet.Builder builderWithExpectedSize(int expectedSize) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass a parameter of type {@code Comparable} to use {@link + * ImmutableSortedSet#of(Comparable)}. + */ + @DoNotCall("Pass a parameter of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E element) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#of(Comparable, Comparable)}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E e1, E e2) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#of(Comparable, Comparable, Comparable)}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable)}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3, E e4) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#of( Comparable, Comparable, Comparable, Comparable, Comparable)}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable, Comparable, + * Comparable, Comparable...)}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain non-{@code Comparable} + * elements. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#copyOf(Comparable[])}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet copyOf(E[] elements) { + throw new UnsupportedOperationException(); + } } diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java b/android/guava/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java deleted file mode 100644 index ca19d79db194..000000000000 --- a/android/guava/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java +++ /dev/null @@ -1,193 +0,0 @@ -/* - * Copyright (C) 2009 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.common.collect; - -import com.google.common.annotations.GwtIncompatible; -import com.google.errorprone.annotations.DoNotCall; - -/** - * "Overrides" the {@link ImmutableSet} static methods that lack {@link ImmutableSortedSet} - * equivalents with deprecated, exception-throwing versions. This prevents accidents like the - * following: - * - *

{@code
- * List objects = ...;
- * // Sort them:
- * Set sorted = ImmutableSortedSet.copyOf(objects);
- * // BAD CODE! The returned set is actually an unsorted ImmutableSet!
- * }
- *
- * 

While we could put the overrides in {@link ImmutableSortedSet} itself, it seems clearer to - * separate these "do not call" methods from those intended for normal use. - * - * @author Chris Povirk - */ -@GwtIncompatible -@ElementTypesAreNonnullByDefault -abstract class ImmutableSortedSetFauxverideShim extends ImmutableSet { - /** - * Not supported. Use {@link ImmutableSortedSet#naturalOrder}, which offers better type-safety, - * instead. This method exists only to hide {@link ImmutableSet#builder} from consumers of {@code - * ImmutableSortedSet}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableSortedSet#naturalOrder}, which offers better type-safety. - */ - @DoNotCall("Use naturalOrder") - @Deprecated - public static ImmutableSortedSet.Builder builder() { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. This method exists only to hide {@link ImmutableSet#builderWithExpectedSize} - * from consumers of {@code ImmutableSortedSet}. - * - * @throws UnsupportedOperationException always - * @deprecated Not supported by ImmutableSortedSet. - */ - @DoNotCall("Use naturalOrder (which does not accept an expected size)") - @Deprecated - public static ImmutableSortedSet.Builder builderWithExpectedSize(int expectedSize) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass a parameter of type {@code Comparable} to use {@link - * ImmutableSortedSet#of(Comparable)}. - */ - @DoNotCall("Pass a parameter of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E element) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#of(Comparable, Comparable)}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E e1, E e2) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#of(Comparable, Comparable, Comparable)}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E e1, E e2, E e3) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable)}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E e1, E e2, E e3, E e4) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#of( Comparable, Comparable, Comparable, Comparable, Comparable)}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable, Comparable, - * Comparable, Comparable...)}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain non-{@code Comparable} - * elements. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#copyOf(Comparable[])}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet copyOf(E[] elements) { - throw new UnsupportedOperationException(); - } - - /* - * We would like to include an unsupported " copyOf(Iterable)" here, - * providing only the properly typed - * "> copyOf(Iterable)" in ImmutableSortedSet (and - * likewise for the Iterator equivalent). However, due to a change in Sun's - * interpretation of the JLS (as described at - * http://bugs.sun.com/view_bug.do?bug_id=6182950), the OpenJDK 7 compiler - * available as of this writing rejects our attempts. To maintain - * compatibility with that version and with any other compilers that interpret - * the JLS similarly, there is no definition of copyOf() here, and the - * definition in ImmutableSortedSet matches that in ImmutableSet. - * - * The result is that ImmutableSortedSet.copyOf() may be called on - * non-Comparable elements. We have not discovered a better solution. In - * retrospect, the static factory methods should have gone in a separate class - * so that ImmutableSortedSet wouldn't "inherit" too-permissive factory - * methods from ImmutableSet. - */ -} diff --git a/guava/src/com/google/common/collect/ImmutableBiMap.java b/guava/src/com/google/common/collect/ImmutableBiMap.java index c0d3ed715350..0c71e7e14d65 100644 --- a/guava/src/com/google/common/collect/ImmutableBiMap.java +++ b/guava/src/com/google/common/collect/ImmutableBiMap.java @@ -30,6 +30,7 @@ import java.util.Arrays; import java.util.Comparator; import java.util.Map; +import java.util.function.BinaryOperator; import java.util.function.Function; import java.util.stream.Collector; import java.util.stream.Collectors; @@ -45,8 +46,7 @@ */ @GwtCompatible(serializable = true, emulated = true) @ElementTypesAreNonnullByDefault -public abstract class ImmutableBiMap extends ImmutableBiMapFauxverideShim - implements BiMap { +public abstract class ImmutableBiMap extends ImmutableMap implements BiMap { /** * Returns a {@link Collector} that accumulates elements into an {@code ImmutableBiMap} whose keys @@ -642,4 +642,38 @@ Object writeReplace() { private void readObject(ObjectInputStream stream) throws InvalidObjectException { throw new InvalidObjectException("Use SerializedForm"); } + + /** + * Not supported. Use {@link #toImmutableBiMap} instead. This method exists only to hide {@link + * ImmutableMap#toImmutableMap(Function, Function)} from consumers of {@code ImmutableBiMap}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableBiMap#toImmutableBiMap}. + */ + @Deprecated + @DoNotCall("Use toImmutableBiMap") + public static + Collector> toImmutableMap( + Function keyFunction, + Function valueFunction) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. This method does not make sense for {@code BiMap}. This method exists only to + * hide {@link ImmutableMap#toImmutableMap(Function, Function, BinaryOperator)} from consumers of + * {@code ImmutableBiMap}. + * + * @throws UnsupportedOperationException always + * @deprecated + */ + @Deprecated + @DoNotCall("Use toImmutableBiMap") + public static + Collector> toImmutableMap( + Function keyFunction, + Function valueFunction, + BinaryOperator mergeFunction) { + throw new UnsupportedOperationException(); + } } diff --git a/guava/src/com/google/common/collect/ImmutableBiMapFauxverideShim.java b/guava/src/com/google/common/collect/ImmutableBiMapFauxverideShim.java deleted file mode 100644 index 2f1f25c82982..000000000000 --- a/guava/src/com/google/common/collect/ImmutableBiMapFauxverideShim.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright (C) 2015 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.common.collect; - -import com.google.common.annotations.GwtIncompatible; -import com.google.errorprone.annotations.DoNotCall; -import java.util.function.BinaryOperator; -import java.util.function.Function; -import java.util.stream.Collector; -import org.checkerframework.checker.nullness.qual.Nullable; - -/** - * "Overrides" the {@link ImmutableMap} static methods that lack {@link ImmutableBiMap} equivalents - * with deprecated, exception-throwing versions. See {@link ImmutableSortedSetFauxverideShim} for - * details. - * - * @author Louis Wasserman - */ -@GwtIncompatible -@ElementTypesAreNonnullByDefault -abstract class ImmutableBiMapFauxverideShim extends ImmutableMap { - /** - * Not supported. Use {@link ImmutableBiMap#toImmutableBiMap} instead. This method exists only to - * hide {@link ImmutableMap#toImmutableMap(Function, Function)} from consumers of {@code - * ImmutableBiMap}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableBiMap#toImmutableBiMap}. - */ - @Deprecated - @DoNotCall("Use toImmutableBiMap") - public static - Collector> toImmutableMap( - Function keyFunction, - Function valueFunction) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. This method does not make sense for {@code BiMap}. This method exists only to - * hide {@link ImmutableMap#toImmutableMap(Function, Function, BinaryOperator)} from consumers of - * {@code ImmutableBiMap}. - * - * @throws UnsupportedOperationException always - * @deprecated - */ - @Deprecated - @DoNotCall("Use toImmutableBiMap") - public static - Collector> toImmutableMap( - Function keyFunction, - Function valueFunction, - BinaryOperator mergeFunction) { - throw new UnsupportedOperationException(); - } -} diff --git a/guava/src/com/google/common/collect/ImmutableSortedMap.java b/guava/src/com/google/common/collect/ImmutableSortedMap.java index f38922e43b64..55a10c2919e4 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -64,7 +64,7 @@ */ @GwtCompatible(serializable = true, emulated = true) @ElementTypesAreNonnullByDefault -public final class ImmutableSortedMap extends ImmutableSortedMapFauxverideShim +public final class ImmutableSortedMap extends ImmutableMap implements NavigableMap { /** * Returns a {@link Collector} that accumulates elements into an {@code ImmutableSortedMap} whose @@ -1167,4 +1167,290 @@ private void readObject(ObjectInputStream stream) throws InvalidObjectException // This class is never actually serialized directly, but we have to make the // warning go away (and suppressing would suppress for all nested classes too) private static final long serialVersionUID = 0; + + /** + * Not supported. Use {@link #toImmutableSortedMap}, which offers better type-safety, instead. + * This method exists only to hide {@link ImmutableMap#toImmutableMap} from consumers of {@code + * ImmutableSortedMap}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMap#toImmutableSortedMap}. + */ + @DoNotCall("Use toImmutableSortedMap") + @Deprecated + public static + Collector> toImmutableMap( + Function keyFunction, + Function valueFunction) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Use {@link #toImmutableSortedMap}, which offers better type-safety, instead. + * This method exists only to hide {@link ImmutableMap#toImmutableMap} from consumers of {@code + * ImmutableSortedMap}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMap#toImmutableSortedMap}. + */ + @DoNotCall("Use toImmutableSortedMap") + @Deprecated + public static + Collector> toImmutableMap( + Function keyFunction, + Function valueFunction, + BinaryOperator mergeFunction) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Use {@link #naturalOrder}, which offers better type-safety, instead. This method + * exists only to hide {@link ImmutableMap#builder} from consumers of {@code ImmutableSortedMap}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMap#naturalOrder}, which offers better type-safety. + */ + @DoNotCall("Use naturalOrder") + @Deprecated + public static ImmutableSortedMap.Builder builder() { + throw new UnsupportedOperationException(); + } + + /** + * Not supported for ImmutableSortedMap. + * + * @throws UnsupportedOperationException always + * @deprecated Not supported for ImmutableSortedMap. + */ + @DoNotCall("Use naturalOrder (which does not accept an expected size)") + @Deprecated + public static ImmutableSortedMap.Builder builderWithExpectedSize(int expectedSize) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain a non-{@code Comparable} + * key. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this dummy + * version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass a key of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object)}. + */ + @DoNotCall("Pass a key of type Comparable") + @Deprecated + public static ImmutableSortedMap of(K k1, V v1) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of(K k1, V v1, K k2, V v2) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls to will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, + V v1, + K k2, + V v2, + K k3, + V v3, + K k4, + V v4, + K k5, + V v5, + K k6, + V v6, + K k7, + V v7, + K k8, + V v8) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, + V v1, + K k2, + V v2, + K k3, + V v3, + K k4, + V v4, + K k5, + V v5, + K k6, + V v6, + K k7, + V v7, + K k8, + V v8, + K k9, + V v9) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a map that may contain non-{@code Comparable} + * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass keys of type {@code Comparable} to use {@link + * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, + * Comparable, Object, Comparable, Object)}. + */ + @DoNotCall("Pass keys of type Comparable") + @Deprecated + public static ImmutableSortedMap of( + K k1, + V v1, + K k2, + V v2, + K k3, + V v3, + K k4, + V v4, + K k5, + V v5, + K k6, + V v6, + K k7, + V v7, + K k8, + V v8, + K k9, + V v9, + K k10, + V v10) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Use {@code ImmutableSortedMap.copyOf(ImmutableMap.ofEntries(...))}. + * + * @deprecated Use {@code ImmutableSortedMap.copyOf(ImmutableMap.ofEntries(...))}. + */ + @DoNotCall("ImmutableSortedMap.ofEntries not currently available; use ImmutableSortedMap.copyOf") + @Deprecated + public static ImmutableSortedMap ofEntries( + Entry... entries) { + throw new UnsupportedOperationException(); + } } diff --git a/guava/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java b/guava/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java deleted file mode 100644 index 7b2e4d7552ec..000000000000 --- a/guava/src/com/google/common/collect/ImmutableSortedMapFauxverideShim.java +++ /dev/null @@ -1,324 +0,0 @@ -/* - * Copyright (C) 2009 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.common.collect; - -import com.google.common.annotations.GwtIncompatible; -import com.google.errorprone.annotations.DoNotCall; -import java.util.function.BinaryOperator; -import java.util.function.Function; -import java.util.stream.Collector; -import org.checkerframework.checker.nullness.qual.Nullable; - -/** - * "Overrides" the {@link ImmutableMap} static methods that lack {@link ImmutableSortedMap} - * equivalents with deprecated, exception-throwing versions. See {@link - * ImmutableSortedSetFauxverideShim} for details. - * - * @author Chris Povirk - */ -@GwtIncompatible -@ElementTypesAreNonnullByDefault -abstract class ImmutableSortedMapFauxverideShim extends ImmutableMap { - /** - * Not supported. Use {@link ImmutableSortedMap#toImmutableSortedMap}, which offers better - * type-safety, instead. This method exists only to hide {@link ImmutableMap#toImmutableMap} from - * consumers of {@code ImmutableSortedMap}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableSortedMap#toImmutableSortedMap}. - */ - @DoNotCall("Use toImmutableSortedMap") - @Deprecated - public static - Collector> toImmutableMap( - Function keyFunction, - Function valueFunction) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. Use {@link ImmutableSortedMap#toImmutableSortedMap}, which offers better - * type-safety, instead. This method exists only to hide {@link ImmutableMap#toImmutableMap} from - * consumers of {@code ImmutableSortedMap}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableSortedMap#toImmutableSortedMap}. - */ - @DoNotCall("Use toImmutableSortedMap") - @Deprecated - public static - Collector> toImmutableMap( - Function keyFunction, - Function valueFunction, - BinaryOperator mergeFunction) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. Use {@link ImmutableSortedMap#naturalOrder}, which offers better type-safety, - * instead. This method exists only to hide {@link ImmutableMap#builder} from consumers of {@code - * ImmutableSortedMap}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableSortedMap#naturalOrder}, which offers better type-safety. - */ - @DoNotCall("Use naturalOrder") - @Deprecated - public static ImmutableSortedMap.Builder builder() { - throw new UnsupportedOperationException(); - } - - /** - * Not supported for ImmutableSortedMap. - * - * @throws UnsupportedOperationException always - * @deprecated Not supported for ImmutableSortedMap. - */ - @DoNotCall("Use naturalOrder (which does not accept an expected size)") - @Deprecated - public static ImmutableSortedMap.Builder builderWithExpectedSize(int expectedSize) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain a non-{@code Comparable} - * key. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this dummy - * version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass a key of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object)}. - */ - @DoNotCall("Pass a key of type Comparable") - @Deprecated - public static ImmutableSortedMap of(K k1, V v1) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of(K k1, V v1, K k2, V v2) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls to will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of(K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, - V v1, - K k2, - V v2, - K k3, - V v3, - K k4, - V v4, - K k5, - V v5, - K k6, - V v6, - K k7, - V v7, - K k8, - V v8) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, - V v1, - K k2, - V v2, - K k3, - V v3, - K k4, - V v4, - K k5, - V v5, - K k6, - V v6, - K k7, - V v7, - K k8, - V v8, - K k9, - V v9) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a map that may contain non-{@code Comparable} - * keys. Proper calls will resolve to the version in {@code ImmutableSortedMap}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass keys of type {@code Comparable} to use {@link - * ImmutableSortedMap#of(Comparable, Object, Comparable, Object, Comparable, Object, - * Comparable, Object, Comparable, Object)}. - */ - @DoNotCall("Pass keys of type Comparable") - @Deprecated - public static ImmutableSortedMap of( - K k1, - V v1, - K k2, - V v2, - K k3, - V v3, - K k4, - V v4, - K k5, - V v5, - K k6, - V v6, - K k7, - V v7, - K k8, - V v8, - K k9, - V v9, - K k10, - V v10) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. Use {@code ImmutableSortedMap.copyOf(ImmutableMap.ofEntries(...))}. - * - * @deprecated Use {@code ImmutableSortedMap.copyOf(ImmutableMap.ofEntries(...))}. - */ - @DoNotCall("ImmutableSortedMap.ofEntries not currently available; use ImmutableSortedMap.copyOf") - @Deprecated - public static ImmutableSortedMap ofEntries( - Entry... entries) { - throw new UnsupportedOperationException(); - } - - // No copyOf() fauxveride; see ImmutableSortedSetFauxverideShim. -} diff --git a/guava/src/com/google/common/collect/ImmutableSortedMultiset.java b/guava/src/com/google/common/collect/ImmutableSortedMultiset.java index d2991bce9c61..30064252959e 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedMultiset.java +++ b/guava/src/com/google/common/collect/ImmutableSortedMultiset.java @@ -55,7 +55,7 @@ */ @GwtIncompatible // hasn't been tested yet @ElementTypesAreNonnullByDefault -public abstract class ImmutableSortedMultiset extends ImmutableSortedMultisetFauxverideShim +public abstract class ImmutableSortedMultiset extends ImmutableMultiset implements SortedMultiset { // TODO(lowasser): GWT compatibility @@ -606,4 +606,159 @@ Object writeReplace() { private void readObject(ObjectInputStream stream) throws InvalidObjectException { throw new InvalidObjectException("Use SerializedForm"); } + + /** + * Not supported. Use {@link #toImmutableSortedMultiset} instead. This method exists only to hide + * {@link ImmutableMultiset#toImmutableMultiset} from consumers of {@code + * ImmutableSortedMultiset}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMultiset#toImmutableSortedMultiset}. + * @since 21.0 + */ + @DoNotCall("Use toImmutableSortedMultiset.") + @Deprecated + public static Collector> toImmutableMultiset() { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Use {@link #toImmutableSortedMultiset} instead. This method exists only to hide + * {@link ImmutableMultiset#toImmutableMultiset} from consumers of {@code + * ImmutableSortedMultiset}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMultiset#toImmutableSortedMultiset}. + * @since 22.0 + */ + @DoNotCall("Use toImmutableSortedMultiset.") + @Deprecated + public static + Collector> toImmutableMultiset( + Function elementFunction, + ToIntFunction countFunction) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Use {@link #naturalOrder}, which offers better type-safety, instead. This method + * exists only to hide {@link ImmutableMultiset#builder} from consumers of {@code + * ImmutableSortedMultiset}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMultiset#naturalOrder}, which offers better type-safety. + */ + @DoNotCall("Use naturalOrder.") + @Deprecated + public static ImmutableSortedMultiset.Builder builder() { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass a parameter of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable)}. + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of(E element) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable, Comparable)}. + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable)}. + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2, E e3) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable)}. + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2, E e3, E e4) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable, Comparable)} . + * + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of(E e1, E e2, E e3, E e4, E e5) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain a non-{@code + * Comparable} element. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable, Comparable, + * Comparable, Comparable...)} . + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset of( + E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a multiset that may contain non-{@code + * Comparable} elements. Proper calls will resolve to the version in {@code + * ImmutableSortedMultiset}, not this dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass parameters of type {@code Comparable} to use {@link + * ImmutableSortedMultiset#copyOf(Comparable[])}. + */ + @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") + @Deprecated + public static ImmutableSortedMultiset copyOf(E[] elements) { + throw new UnsupportedOperationException(); + } } diff --git a/guava/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java b/guava/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java deleted file mode 100644 index 94a2f560da4b..000000000000 --- a/guava/src/com/google/common/collect/ImmutableSortedMultisetFauxverideShim.java +++ /dev/null @@ -1,214 +0,0 @@ -/* - * Copyright (C) 2011 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the - * License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either - * express or implied. See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.common.collect; - -import com.google.common.annotations.GwtIncompatible; -import com.google.errorprone.annotations.DoNotCall; -import java.util.function.Function; -import java.util.function.ToIntFunction; -import java.util.stream.Collector; -import org.checkerframework.checker.nullness.qual.Nullable; - -/** - * "Overrides" the {@link ImmutableMultiset} static methods that lack {@link - * ImmutableSortedMultiset} equivalents with deprecated, exception-throwing versions. This prevents - * accidents like the following: - * - *

{@code
- * List objects = ...;
- * // Sort them:
- * Set sorted = ImmutableSortedMultiset.copyOf(objects);
- * // BAD CODE! The returned multiset is actually an unsorted ImmutableMultiset!
- * }
- *
- * 

While we could put the overrides in {@link ImmutableSortedMultiset} itself, it seems clearer - * to separate these "do not call" methods from those intended for normal use. - * - * @author Louis Wasserman - */ -@GwtIncompatible -@ElementTypesAreNonnullByDefault -abstract class ImmutableSortedMultisetFauxverideShim extends ImmutableMultiset { - /** - * Not supported. Use {@link ImmutableSortedMultiset#toImmutableSortedMultiset} instead. This - * method exists only to hide {@link ImmutableMultiset#toImmutableMultiset} from consumers of - * {@code ImmutableSortedMultiset}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableSortedMultiset#toImmutableSortedMultiset}. - * @since 21.0 - */ - @DoNotCall("Use toImmutableSortedMultiset.") - @Deprecated - public static Collector> toImmutableMultiset() { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. Use {@link ImmutableSortedMultiset#toImmutableSortedMultiset} instead. This - * method exists only to hide {@link ImmutableMultiset#toImmutableMultiset} from consumers of - * {@code ImmutableSortedMultiset}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableSortedMultiset#toImmutableSortedMultiset}. - * @since 22.0 - */ - @DoNotCall("Use toImmutableSortedMultiset.") - @Deprecated - public static - Collector> toImmutableMultiset( - Function elementFunction, - ToIntFunction countFunction) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. Use {@link ImmutableSortedMultiset#naturalOrder}, which offers better - * type-safety, instead. This method exists only to hide {@link ImmutableMultiset#builder} from - * consumers of {@code ImmutableSortedMultiset}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableSortedMultiset#naturalOrder}, which offers better type-safety. - */ - @DoNotCall("Use naturalOrder.") - @Deprecated - public static ImmutableSortedMultiset.Builder builder() { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass a parameter of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable)}. - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of(E element) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable, Comparable)}. - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of(E e1, E e2) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable)}. - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of(E e1, E e2, E e3) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable)}. - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of(E e1, E e2, E e3, E e4) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable, Comparable)} . - * - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of(E e1, E e2, E e3, E e4, E e5) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain a non-{@code - * Comparable} element. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#of(Comparable, Comparable, Comparable, Comparable, Comparable, - * Comparable, Comparable...)} . - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset of( - E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a multiset that may contain non-{@code - * Comparable} elements. Proper calls will resolve to the version in {@code - * ImmutableSortedMultiset}, not this dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass parameters of type {@code Comparable} to use {@link - * ImmutableSortedMultiset#copyOf(Comparable[])}. - */ - @DoNotCall("Elements must be Comparable. (Or, pass a Comparator to orderedBy or copyOf.)") - @Deprecated - public static ImmutableSortedMultiset copyOf(E[] elements) { - throw new UnsupportedOperationException(); - } - - /* - * We would like to include an unsupported " copyOf(Iterable)" here, providing only the - * properly typed "> copyOf(Iterable)" in ImmutableSortedMultiset (and - * likewise for the Iterator equivalent). However, due to a change in Sun's interpretation of the - * JLS (as described at http://bugs.sun.com/view_bug.do?bug_id=6182950), the OpenJDK 7 compiler - * available as of this writing rejects our attempts. To maintain compatibility with that version - * and with any other compilers that interpret the JLS similarly, there is no definition of - * copyOf() here, and the definition in ImmutableSortedMultiset matches that in - * ImmutableMultiset. - * - * The result is that ImmutableSortedMultiset.copyOf() may be called on non-Comparable elements. - * We have not discovered a better solution. In retrospect, the static factory methods should - * have gone in a separate class so that ImmutableSortedMultiset wouldn't "inherit" - * too-permissive factory methods from ImmutableMultiset. - */ -} diff --git a/guava/src/com/google/common/collect/ImmutableSortedSet.java b/guava/src/com/google/common/collect/ImmutableSortedSet.java index c730fa496dff..7bc915c5372b 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -64,7 +64,7 @@ @GwtCompatible(serializable = true, emulated = true) @SuppressWarnings("serial") // we're overriding default serialization @ElementTypesAreNonnullByDefault -public abstract class ImmutableSortedSet extends ImmutableSortedSetFauxverideShim +public abstract class ImmutableSortedSet extends ImmutableSet.CachingAsList implements NavigableSet, SortedIterable { static final int SPLITERATOR_CHARACTERISTICS = ImmutableSet.SPLITERATOR_CHARACTERISTICS | Spliterator.SORTED; @@ -854,4 +854,150 @@ private void readObject(ObjectInputStream unused) throws InvalidObjectException Object writeReplace() { return new SerializedForm(comparator, toArray()); } + + /** + * Not supported. Use {@link #toImmutableSortedSet} instead. This method exists only to hide + * {@link ImmutableSet#toImmutableSet} from consumers of {@code ImmutableSortedSet}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedSet#toImmutableSortedSet}. + * @since 21.0 + */ + @DoNotCall("Use toImmutableSortedSet") + @Deprecated + public static Collector> toImmutableSet() { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Use {@link #naturalOrder}, which offers better type-safety, instead. This method + * exists only to hide {@link ImmutableSet#builder} from consumers of {@code ImmutableSortedSet}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedSet#naturalOrder}, which offers better type-safety. + */ + @DoNotCall("Use naturalOrder") + @Deprecated + public static ImmutableSortedSet.Builder builder() { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. This method exists only to hide {@link ImmutableSet#builderWithExpectedSize} + * from consumers of {@code ImmutableSortedSet}. + * + * @throws UnsupportedOperationException always + * @deprecated Not supported by ImmutableSortedSet. + */ + @DoNotCall("Use naturalOrder (which does not accept an expected size)") + @Deprecated + public static ImmutableSortedSet.Builder builderWithExpectedSize(int expectedSize) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass a parameter of type {@code Comparable} to use {@link + * ImmutableSortedSet#of(Comparable)}. + */ + @DoNotCall("Pass a parameter of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E element) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#of(Comparable, Comparable)}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E e1, E e2) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#of(Comparable, Comparable, Comparable)}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable)}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3, E e4) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#of( Comparable, Comparable, Comparable, Comparable, Comparable)}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} + * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass the parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable, Comparable, + * Comparable, Comparable...)}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. You are attempting to create a set that may contain non-{@code Comparable} + * elements. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this + * dummy version. + * + * @throws UnsupportedOperationException always + * @deprecated Pass parameters of type {@code Comparable} to use {@link + * ImmutableSortedSet#copyOf(Comparable[])}. + */ + @DoNotCall("Pass parameters of type Comparable") + @Deprecated + public static ImmutableSortedSet copyOf(E[] elements) { + throw new UnsupportedOperationException(); + } } diff --git a/guava/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java b/guava/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java deleted file mode 100644 index ff3ac12d5e11..000000000000 --- a/guava/src/com/google/common/collect/ImmutableSortedSetFauxverideShim.java +++ /dev/null @@ -1,208 +0,0 @@ -/* - * Copyright (C) 2009 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.common.collect; - -import com.google.common.annotations.GwtIncompatible; -import com.google.errorprone.annotations.DoNotCall; -import java.util.stream.Collector; - -/** - * "Overrides" the {@link ImmutableSet} static methods that lack {@link ImmutableSortedSet} - * equivalents with deprecated, exception-throwing versions. This prevents accidents like the - * following: - * - *

{@code
- * List objects = ...;
- * // Sort them:
- * Set sorted = ImmutableSortedSet.copyOf(objects);
- * // BAD CODE! The returned set is actually an unsorted ImmutableSet!
- * }
- *
- * 

While we could put the overrides in {@link ImmutableSortedSet} itself, it seems clearer to - * separate these "do not call" methods from those intended for normal use. - * - * @author Chris Povirk - */ -@GwtIncompatible -@ElementTypesAreNonnullByDefault -abstract class ImmutableSortedSetFauxverideShim extends ImmutableSet.CachingAsList { - /** - * Not supported. Use {@link ImmutableSortedSet#toImmutableSortedSet} instead. This method exists - * only to hide {@link ImmutableSet#toImmutableSet} from consumers of {@code ImmutableSortedSet}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableSortedSet#toImmutableSortedSet}. - * @since 21.0 - */ - @DoNotCall("Use toImmutableSortedSet") - @Deprecated - public static Collector> toImmutableSet() { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. Use {@link ImmutableSortedSet#naturalOrder}, which offers better type-safety, - * instead. This method exists only to hide {@link ImmutableSet#builder} from consumers of {@code - * ImmutableSortedSet}. - * - * @throws UnsupportedOperationException always - * @deprecated Use {@link ImmutableSortedSet#naturalOrder}, which offers better type-safety. - */ - @DoNotCall("Use naturalOrder") - @Deprecated - public static ImmutableSortedSet.Builder builder() { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. This method exists only to hide {@link ImmutableSet#builderWithExpectedSize} - * from consumers of {@code ImmutableSortedSet}. - * - * @throws UnsupportedOperationException always - * @deprecated Not supported by ImmutableSortedSet. - */ - @DoNotCall("Use naturalOrder (which does not accept an expected size)") - @Deprecated - public static ImmutableSortedSet.Builder builderWithExpectedSize(int expectedSize) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass a parameter of type {@code Comparable} to use {@link - * ImmutableSortedSet#of(Comparable)}. - */ - @DoNotCall("Pass a parameter of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E element) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#of(Comparable, Comparable)}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E e1, E e2) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#of(Comparable, Comparable, Comparable)}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E e1, E e2, E e3) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable)}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E e1, E e2, E e3, E e4) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#of( Comparable, Comparable, Comparable, Comparable, Comparable)}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain a non-{@code Comparable} - * element. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass the parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#of(Comparable, Comparable, Comparable, Comparable, Comparable, - * Comparable, Comparable...)}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet of(E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) { - throw new UnsupportedOperationException(); - } - - /** - * Not supported. You are attempting to create a set that may contain non-{@code Comparable} - * elements. Proper calls will resolve to the version in {@code ImmutableSortedSet}, not this - * dummy version. - * - * @throws UnsupportedOperationException always - * @deprecated Pass parameters of type {@code Comparable} to use {@link - * ImmutableSortedSet#copyOf(Comparable[])}. - */ - @DoNotCall("Pass parameters of type Comparable") - @Deprecated - public static ImmutableSortedSet copyOf(E[] elements) { - throw new UnsupportedOperationException(); - } - - /* - * We would like to include an unsupported " copyOf(Iterable)" here, - * providing only the properly typed - * "> copyOf(Iterable)" in ImmutableSortedSet (and - * likewise for the Iterator equivalent). However, due to a change in Sun's - * interpretation of the JLS (as described at - * http://bugs.sun.com/view_bug.do?bug_id=6182950), the OpenJDK 7 compiler - * available as of this writing rejects our attempts. To maintain - * compatibility with that version and with any other compilers that interpret - * the JLS similarly, there is no definition of copyOf() here, and the - * definition in ImmutableSortedSet matches that in ImmutableSet. - * - * The result is that ImmutableSortedSet.copyOf() may be called on - * non-Comparable elements. We have not discovered a better solution. In - * retrospect, the static factory methods should have gone in a separate class - * so that ImmutableSortedSet wouldn't "inherit" too-permissive factory - * methods from ImmutableSet. - */ -} From e38ed2673c7a74defd0495f66b00ef49726bd54e Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 10 Oct 2023 18:49:59 -0700 Subject: [PATCH 007/216] Avoid exposing some types outside the scope in which those types are visible. Java doesn't mind this, but it's not like it's accomplishing anything for us. RELNOTES=n/a PiperOrigin-RevId: 572427947 --- .../com/google/common/base/CharMatcher.java | 28 +++++++++---------- .../src/com/google/common/base/Converter.java | 2 +- .../com/google/common/collect/Multisets.java | 2 +- .../com/google/common/primitives/Doubles.java | 2 +- .../com/google/common/primitives/Floats.java | 2 +- .../com/google/common/primitives/Ints.java | 2 +- .../com/google/common/primitives/Longs.java | 2 +- .../com/google/common/primitives/Shorts.java | 2 +- .../com/google/common/base/CharMatcher.java | 28 +++++++++---------- .../src/com/google/common/base/Converter.java | 2 +- .../com/google/common/collect/Multisets.java | 2 +- .../com/google/common/primitives/Doubles.java | 2 +- .../com/google/common/primitives/Floats.java | 2 +- .../com/google/common/primitives/Ints.java | 2 +- .../com/google/common/primitives/Longs.java | 2 +- .../com/google/common/primitives/Shorts.java | 2 +- 16 files changed, 42 insertions(+), 42 deletions(-) diff --git a/android/guava/src/com/google/common/base/CharMatcher.java b/android/guava/src/com/google/common/base/CharMatcher.java index 47b4ed2b13b0..d945806840ee 100644 --- a/android/guava/src/com/google/common/base/CharMatcher.java +++ b/android/guava/src/com/google/common/base/CharMatcher.java @@ -970,7 +970,7 @@ public final String toString() { } /** Negation of a {@link FastMatcher}. */ - static class NegatedFastMatcher extends Negated { + private static class NegatedFastMatcher extends Negated { NegatedFastMatcher(CharMatcher original) { super(original); @@ -1014,7 +1014,7 @@ void setBits(BitSet bitSet) { /** Implementation of {@link #any()}. */ private static final class Any extends NamedFastMatcher { - static final Any INSTANCE = new Any(); + static final CharMatcher INSTANCE = new Any(); private Any() { super("CharMatcher.any()"); @@ -1111,7 +1111,7 @@ public CharMatcher negate() { /** Implementation of {@link #none()}. */ private static final class None extends NamedFastMatcher { - static final None INSTANCE = new None(); + static final CharMatcher INSTANCE = new None(); private None() { super("CharMatcher.none()"); @@ -1227,7 +1227,7 @@ static final class Whitespace extends NamedFastMatcher { static final int MULTIPLIER = 1682554634; static final int SHIFT = Integer.numberOfLeadingZeros(TABLE.length() - 1); - static final Whitespace INSTANCE = new Whitespace(); + static final CharMatcher INSTANCE = new Whitespace(); Whitespace() { super("CharMatcher.whitespace()"); @@ -1285,7 +1285,7 @@ public String toString() { /** Implementation of {@link #ascii()}. */ private static final class Ascii extends NamedFastMatcher { - static final Ascii INSTANCE = new Ascii(); + static final CharMatcher INSTANCE = new Ascii(); Ascii() { super("CharMatcher.ascii()"); @@ -1359,7 +1359,7 @@ private static char[] nines() { return nines; } - static final Digit INSTANCE = new Digit(); + static final CharMatcher INSTANCE = new Digit(); private Digit() { super("CharMatcher.digit()", zeroes(), nines()); @@ -1369,7 +1369,7 @@ private Digit() { /** Implementation of {@link #javaDigit()}. */ private static final class JavaDigit extends CharMatcher { - static final JavaDigit INSTANCE = new JavaDigit(); + static final CharMatcher INSTANCE = new JavaDigit(); @Override public boolean matches(char c) { @@ -1385,7 +1385,7 @@ public String toString() { /** Implementation of {@link #javaLetter()}. */ private static final class JavaLetter extends CharMatcher { - static final JavaLetter INSTANCE = new JavaLetter(); + static final CharMatcher INSTANCE = new JavaLetter(); @Override public boolean matches(char c) { @@ -1401,7 +1401,7 @@ public String toString() { /** Implementation of {@link #javaLetterOrDigit()}. */ private static final class JavaLetterOrDigit extends CharMatcher { - static final JavaLetterOrDigit INSTANCE = new JavaLetterOrDigit(); + static final CharMatcher INSTANCE = new JavaLetterOrDigit(); @Override public boolean matches(char c) { @@ -1417,7 +1417,7 @@ public String toString() { /** Implementation of {@link #javaUpperCase()}. */ private static final class JavaUpperCase extends CharMatcher { - static final JavaUpperCase INSTANCE = new JavaUpperCase(); + static final CharMatcher INSTANCE = new JavaUpperCase(); @Override public boolean matches(char c) { @@ -1433,7 +1433,7 @@ public String toString() { /** Implementation of {@link #javaLowerCase()}. */ private static final class JavaLowerCase extends CharMatcher { - static final JavaLowerCase INSTANCE = new JavaLowerCase(); + static final CharMatcher INSTANCE = new JavaLowerCase(); @Override public boolean matches(char c) { @@ -1449,7 +1449,7 @@ public String toString() { /** Implementation of {@link #javaIsoControl()}. */ private static final class JavaIsoControl extends NamedFastMatcher { - static final JavaIsoControl INSTANCE = new JavaIsoControl(); + static final CharMatcher INSTANCE = new JavaIsoControl(); private JavaIsoControl() { super("CharMatcher.javaIsoControl()"); @@ -1474,7 +1474,7 @@ private static final class Invisible extends RangesMatcher { "\u0020\u00a0\u00ad\u0605\u061c\u06dd\u070f\u0891\u08e2\u1680\u180e\u200f\u202f\u2064\u206f" + "\u3000\uf8ff\ufeff\ufffb"; - static final Invisible INSTANCE = new Invisible(); + static final CharMatcher INSTANCE = new Invisible(); private Invisible() { super("CharMatcher.invisible()", RANGE_STARTS.toCharArray(), RANGE_ENDS.toCharArray()); @@ -1484,7 +1484,7 @@ private Invisible() { /** Implementation of {@link #singleWidth()}. */ private static final class SingleWidth extends RangesMatcher { - static final SingleWidth INSTANCE = new SingleWidth(); + static final CharMatcher INSTANCE = new SingleWidth(); private SingleWidth() { super( diff --git a/android/guava/src/com/google/common/base/Converter.java b/android/guava/src/com/google/common/base/Converter.java index 63f4394f4821..a34c734ab47a 100644 --- a/android/guava/src/com/google/common/base/Converter.java +++ b/android/guava/src/com/google/common/base/Converter.java @@ -571,7 +571,7 @@ public static Converter identity() { * "pass-through type". */ private static final class IdentityConverter extends Converter implements Serializable { - static final IdentityConverter INSTANCE = new IdentityConverter<>(); + static final Converter INSTANCE = new IdentityConverter<>(); @Override protected T doForward(T t) { diff --git a/android/guava/src/com/google/common/collect/Multisets.java b/android/guava/src/com/google/common/collect/Multisets.java index 8bcc639ab2fc..2611df0277ac 100644 --- a/android/guava/src/com/google/common/collect/Multisets.java +++ b/android/guava/src/com/google/common/collect/Multisets.java @@ -1145,7 +1145,7 @@ public static ImmutableMultiset copyHighestCountFirst(Multiset multise } private static final class DecreasingCount implements Comparator> { - static final DecreasingCount INSTANCE = new DecreasingCount(); + static final Comparator> INSTANCE = new DecreasingCount(); @Override public int compare(Entry entry1, Entry entry2) { diff --git a/android/guava/src/com/google/common/primitives/Doubles.java b/android/guava/src/com/google/common/primitives/Doubles.java index 81bf104ce358..ce491bc982ee 100644 --- a/android/guava/src/com/google/common/primitives/Doubles.java +++ b/android/guava/src/com/google/common/primitives/Doubles.java @@ -287,7 +287,7 @@ public static double[] concat(double[]... arrays) { private static final class DoubleConverter extends Converter implements Serializable { - static final DoubleConverter INSTANCE = new DoubleConverter(); + static final Converter INSTANCE = new DoubleConverter(); @Override protected Double doForward(String value) { diff --git a/android/guava/src/com/google/common/primitives/Floats.java b/android/guava/src/com/google/common/primitives/Floats.java index d7f156b1e8a7..c42f2f1eead0 100644 --- a/android/guava/src/com/google/common/primitives/Floats.java +++ b/android/guava/src/com/google/common/primitives/Floats.java @@ -284,7 +284,7 @@ public static float[] concat(float[]... arrays) { private static final class FloatConverter extends Converter implements Serializable { - static final FloatConverter INSTANCE = new FloatConverter(); + static final Converter INSTANCE = new FloatConverter(); @Override protected Float doForward(String value) { diff --git a/android/guava/src/com/google/common/primitives/Ints.java b/android/guava/src/com/google/common/primitives/Ints.java index cbd81fb12163..8932af267223 100644 --- a/android/guava/src/com/google/common/primitives/Ints.java +++ b/android/guava/src/com/google/common/primitives/Ints.java @@ -335,7 +335,7 @@ public static int fromBytes(byte b1, byte b2, byte b3, byte b4) { private static final class IntConverter extends Converter implements Serializable { - static final IntConverter INSTANCE = new IntConverter(); + static final Converter INSTANCE = new IntConverter(); @Override protected Integer doForward(String value) { diff --git a/android/guava/src/com/google/common/primitives/Longs.java b/android/guava/src/com/google/common/primitives/Longs.java index ce6a6fa39485..f50ee01ca1c1 100644 --- a/android/guava/src/com/google/common/primitives/Longs.java +++ b/android/guava/src/com/google/common/primitives/Longs.java @@ -438,7 +438,7 @@ public static Long tryParse(String string, int radix) { } private static final class LongConverter extends Converter implements Serializable { - static final LongConverter INSTANCE = new LongConverter(); + static final Converter INSTANCE = new LongConverter(); @Override protected Long doForward(String value) { diff --git a/android/guava/src/com/google/common/primitives/Shorts.java b/android/guava/src/com/google/common/primitives/Shorts.java index 85ffd3ba85f5..e7cc8538b491 100644 --- a/android/guava/src/com/google/common/primitives/Shorts.java +++ b/android/guava/src/com/google/common/primitives/Shorts.java @@ -335,7 +335,7 @@ public static short fromBytes(byte b1, byte b2) { private static final class ShortConverter extends Converter implements Serializable { - static final ShortConverter INSTANCE = new ShortConverter(); + static final Converter INSTANCE = new ShortConverter(); @Override protected Short doForward(String value) { diff --git a/guava/src/com/google/common/base/CharMatcher.java b/guava/src/com/google/common/base/CharMatcher.java index 4ed1e9a90e6f..42dfca3d840e 100644 --- a/guava/src/com/google/common/base/CharMatcher.java +++ b/guava/src/com/google/common/base/CharMatcher.java @@ -971,7 +971,7 @@ public final String toString() { } /** Negation of a {@link FastMatcher}. */ - static class NegatedFastMatcher extends Negated { + private static class NegatedFastMatcher extends Negated { NegatedFastMatcher(CharMatcher original) { super(original); @@ -1015,7 +1015,7 @@ void setBits(BitSet bitSet) { /** Implementation of {@link #any()}. */ private static final class Any extends NamedFastMatcher { - static final Any INSTANCE = new Any(); + static final CharMatcher INSTANCE = new Any(); private Any() { super("CharMatcher.any()"); @@ -1112,7 +1112,7 @@ public CharMatcher negate() { /** Implementation of {@link #none()}. */ private static final class None extends NamedFastMatcher { - static final None INSTANCE = new None(); + static final CharMatcher INSTANCE = new None(); private None() { super("CharMatcher.none()"); @@ -1228,7 +1228,7 @@ static final class Whitespace extends NamedFastMatcher { static final int MULTIPLIER = 1682554634; static final int SHIFT = Integer.numberOfLeadingZeros(TABLE.length() - 1); - static final Whitespace INSTANCE = new Whitespace(); + static final CharMatcher INSTANCE = new Whitespace(); Whitespace() { super("CharMatcher.whitespace()"); @@ -1286,7 +1286,7 @@ public String toString() { /** Implementation of {@link #ascii()}. */ private static final class Ascii extends NamedFastMatcher { - static final Ascii INSTANCE = new Ascii(); + static final CharMatcher INSTANCE = new Ascii(); Ascii() { super("CharMatcher.ascii()"); @@ -1360,7 +1360,7 @@ private static char[] nines() { return nines; } - static final Digit INSTANCE = new Digit(); + static final CharMatcher INSTANCE = new Digit(); private Digit() { super("CharMatcher.digit()", zeroes(), nines()); @@ -1370,7 +1370,7 @@ private Digit() { /** Implementation of {@link #javaDigit()}. */ private static final class JavaDigit extends CharMatcher { - static final JavaDigit INSTANCE = new JavaDigit(); + static final CharMatcher INSTANCE = new JavaDigit(); @Override public boolean matches(char c) { @@ -1386,7 +1386,7 @@ public String toString() { /** Implementation of {@link #javaLetter()}. */ private static final class JavaLetter extends CharMatcher { - static final JavaLetter INSTANCE = new JavaLetter(); + static final CharMatcher INSTANCE = new JavaLetter(); @Override public boolean matches(char c) { @@ -1402,7 +1402,7 @@ public String toString() { /** Implementation of {@link #javaLetterOrDigit()}. */ private static final class JavaLetterOrDigit extends CharMatcher { - static final JavaLetterOrDigit INSTANCE = new JavaLetterOrDigit(); + static final CharMatcher INSTANCE = new JavaLetterOrDigit(); @Override public boolean matches(char c) { @@ -1418,7 +1418,7 @@ public String toString() { /** Implementation of {@link #javaUpperCase()}. */ private static final class JavaUpperCase extends CharMatcher { - static final JavaUpperCase INSTANCE = new JavaUpperCase(); + static final CharMatcher INSTANCE = new JavaUpperCase(); @Override public boolean matches(char c) { @@ -1434,7 +1434,7 @@ public String toString() { /** Implementation of {@link #javaLowerCase()}. */ private static final class JavaLowerCase extends CharMatcher { - static final JavaLowerCase INSTANCE = new JavaLowerCase(); + static final CharMatcher INSTANCE = new JavaLowerCase(); @Override public boolean matches(char c) { @@ -1450,7 +1450,7 @@ public String toString() { /** Implementation of {@link #javaIsoControl()}. */ private static final class JavaIsoControl extends NamedFastMatcher { - static final JavaIsoControl INSTANCE = new JavaIsoControl(); + static final CharMatcher INSTANCE = new JavaIsoControl(); private JavaIsoControl() { super("CharMatcher.javaIsoControl()"); @@ -1475,7 +1475,7 @@ private static final class Invisible extends RangesMatcher { "\u0020\u00a0\u00ad\u0605\u061c\u06dd\u070f\u0891\u08e2\u1680\u180e\u200f\u202f\u2064\u206f" + "\u3000\uf8ff\ufeff\ufffb"; - static final Invisible INSTANCE = new Invisible(); + static final CharMatcher INSTANCE = new Invisible(); private Invisible() { super("CharMatcher.invisible()", RANGE_STARTS.toCharArray(), RANGE_ENDS.toCharArray()); @@ -1485,7 +1485,7 @@ private Invisible() { /** Implementation of {@link #singleWidth()}. */ private static final class SingleWidth extends RangesMatcher { - static final SingleWidth INSTANCE = new SingleWidth(); + static final CharMatcher INSTANCE = new SingleWidth(); private SingleWidth() { super( diff --git a/guava/src/com/google/common/base/Converter.java b/guava/src/com/google/common/base/Converter.java index 63f4394f4821..a34c734ab47a 100644 --- a/guava/src/com/google/common/base/Converter.java +++ b/guava/src/com/google/common/base/Converter.java @@ -571,7 +571,7 @@ public static Converter identity() { * "pass-through type". */ private static final class IdentityConverter extends Converter implements Serializable { - static final IdentityConverter INSTANCE = new IdentityConverter<>(); + static final Converter INSTANCE = new IdentityConverter<>(); @Override protected T doForward(T t) { diff --git a/guava/src/com/google/common/collect/Multisets.java b/guava/src/com/google/common/collect/Multisets.java index ce8aee9fe532..7a0eb10a358c 100644 --- a/guava/src/com/google/common/collect/Multisets.java +++ b/guava/src/com/google/common/collect/Multisets.java @@ -1171,7 +1171,7 @@ public static ImmutableMultiset copyHighestCountFirst(Multiset multise } private static final class DecreasingCount implements Comparator> { - static final DecreasingCount INSTANCE = new DecreasingCount(); + static final Comparator> INSTANCE = new DecreasingCount(); @Override public int compare(Entry entry1, Entry entry2) { diff --git a/guava/src/com/google/common/primitives/Doubles.java b/guava/src/com/google/common/primitives/Doubles.java index f5133ecde42a..7fcbae957445 100644 --- a/guava/src/com/google/common/primitives/Doubles.java +++ b/guava/src/com/google/common/primitives/Doubles.java @@ -289,7 +289,7 @@ public static double[] concat(double[]... arrays) { private static final class DoubleConverter extends Converter implements Serializable { - static final DoubleConverter INSTANCE = new DoubleConverter(); + static final Converter INSTANCE = new DoubleConverter(); @Override protected Double doForward(String value) { diff --git a/guava/src/com/google/common/primitives/Floats.java b/guava/src/com/google/common/primitives/Floats.java index d7f156b1e8a7..c42f2f1eead0 100644 --- a/guava/src/com/google/common/primitives/Floats.java +++ b/guava/src/com/google/common/primitives/Floats.java @@ -284,7 +284,7 @@ public static float[] concat(float[]... arrays) { private static final class FloatConverter extends Converter implements Serializable { - static final FloatConverter INSTANCE = new FloatConverter(); + static final Converter INSTANCE = new FloatConverter(); @Override protected Float doForward(String value) { diff --git a/guava/src/com/google/common/primitives/Ints.java b/guava/src/com/google/common/primitives/Ints.java index 4eaa5a6a49b1..afd4a7b4a07b 100644 --- a/guava/src/com/google/common/primitives/Ints.java +++ b/guava/src/com/google/common/primitives/Ints.java @@ -337,7 +337,7 @@ public static int fromBytes(byte b1, byte b2, byte b3, byte b4) { private static final class IntConverter extends Converter implements Serializable { - static final IntConverter INSTANCE = new IntConverter(); + static final Converter INSTANCE = new IntConverter(); @Override protected Integer doForward(String value) { diff --git a/guava/src/com/google/common/primitives/Longs.java b/guava/src/com/google/common/primitives/Longs.java index 8369973cc789..7c5a5d3bbb8f 100644 --- a/guava/src/com/google/common/primitives/Longs.java +++ b/guava/src/com/google/common/primitives/Longs.java @@ -440,7 +440,7 @@ public static Long tryParse(String string, int radix) { } private static final class LongConverter extends Converter implements Serializable { - static final LongConverter INSTANCE = new LongConverter(); + static final Converter INSTANCE = new LongConverter(); @Override protected Long doForward(String value) { diff --git a/guava/src/com/google/common/primitives/Shorts.java b/guava/src/com/google/common/primitives/Shorts.java index 85ffd3ba85f5..e7cc8538b491 100644 --- a/guava/src/com/google/common/primitives/Shorts.java +++ b/guava/src/com/google/common/primitives/Shorts.java @@ -335,7 +335,7 @@ public static short fromBytes(byte b1, byte b2) { private static final class ShortConverter extends Converter implements Serializable { - static final ShortConverter INSTANCE = new ShortConverter(); + static final Converter INSTANCE = new ShortConverter(); @Override protected Short doForward(String value) { From 6736cad8d092650d881ef0bada406ba843549ef1 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 11 Oct 2023 09:11:53 -0700 Subject: [PATCH 008/216] Simplify our `maven-javadoc-plugin` configuration, and move both it and `maven-source-plugin` to the default phase (which is `package`). MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I doubt that this ends up being a complete no-op in all scenarios (if only because of the phase change), but I didn't _set out_ intending to change any behavior, and my various tests all passed: - `mvn clean javadoc:jar deploy -DskipTests=true -Dmaven.deploy.skip=true` (also also a similar test _without_ `javadoc:jar`, as discussed below) - `mvn clean deploy -Psonatype-oss-release -DskipTests -Drelease -Dmaven.deploy.skip=true` (now that it's passing after cl/572327204) - `mvn clean install -DskipTests` As part of this CL, I'm removing `javadoc:jar` from the command line we use for snapshots. I do this out of fear that it will someday result in "duplicated artifacts" (like cl/571437790), use the wrong configuration, or just run twice—as apparently it does in my test of the main changes from this CL: ``` [INFO] --- javadoc:3.5.0:jar (default-cli) @ guava --- [INFO] No previous run data found, generating javadoc. [INFO] Building jar: /usr/local/google/home/cpovirk/tmp.lS88PuqjZ4/git/guava/target/guava-HEAD-jre-SNAPSHOT-javadoc.jar ... [INFO] --- javadoc:3.5.0:jar (attach-docs) @ guava --- [INFO] Configuration changed, re-generating javadoc. [INFO] Building jar: /usr/local/google/home/cpovirk/tmp.lS88PuqjZ4/git/guava/target/guava-HEAD-jre-SNAPSHOT-javadoc.jar ``` The new snapshot command appears to run Javadoc exactly once, as desired: ``` [INFO] --- javadoc:3.5.0:jar (attach-docs) @ guava --- [INFO] No previous run data found, generating javadoc. ``` (While in the neighborhood, I considered also investigating a [switch from `jar` to `jar-no-fork`](https://maven.apache.org/plugins/maven-javadoc-plugin/examples/javadoc-nofork.html), similar to what we did for `maven-source-plugin`, but I didn't bother. FWIW, I didn't notice any duplicate steps, so the switch might not buy us anything for Guava in particular.) Also, I removed some mentions of `org.apache.maven.plugins`, which are redundant because that is the default. RELNOTES=n/a PiperOrigin-RevId: 572593797 --- android/guava/pom.xml | 10 ---------- android/pom.xml | 36 ++---------------------------------- guava/pom.xml | 10 ---------- pom.xml | 36 ++---------------------------------- util/deploy_snapshot.sh | 2 +- 5 files changed, 5 insertions(+), 89 deletions(-) diff --git a/android/guava/pom.xml b/android/guava/pom.xml index 9b03bdddbc6c..a7b79ff6b57a 100644 --- a/android/guava/pom.xml +++ b/android/guava/pom.xml @@ -200,16 +200,6 @@ ../../overview.html - - - attach-docs - - - generate-javadoc-site-report - site - javadoc - - maven-resources-plugin diff --git a/android/pom.xml b/android/pom.xml index fb6ac0eb8137..7f875246c804 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -19,7 +19,6 @@ 3.37.0 2.21.1 2.8 - 3.5.0 9+181-r4173-1 @@ -97,7 +96,6 @@ - org.apache.maven.plugins maven-enforcer-plugin @@ -118,13 +116,6 @@ - - maven-javadoc-plugin - ${maven-javadoc-plugin.version} - - ${java.specification.version} - - @@ -175,7 +166,6 @@ attach-sources - verify jar-no-fork @@ -214,7 +204,7 @@ maven-javadoc-plugin - ${maven-javadoc-plugin.version} + 3.5.0 true true @@ -226,13 +216,12 @@ -Xdoclint:-html true - 8 + ${java.specification.version} ${maven-javadoc-plugin.additionalJOptions} attach-docs - post-integration-test jar @@ -269,7 +258,6 @@ - org.apache.maven.plugins maven-enforcer-plugin 3.0.0-M3 @@ -336,25 +324,7 @@ sonatype-oss-release - - - org.apache.maven.plugins - maven-javadoc-plugin - ${maven-javadoc-plugin.version} - - - attach-javadocs - - jar - - - - - org.apache.maven.plugins maven-gpg-plugin 3.0.1 @@ -417,7 +387,6 @@ - org.apache.maven.plugins maven-compiler-plugin @@ -98,7 +97,6 @@ - org.apache.maven.plugins maven-enforcer-plugin @@ -119,13 +117,6 @@ - - maven-javadoc-plugin - ${maven-javadoc-plugin.version} - - ${java.specification.version} - - @@ -176,7 +167,6 @@ attach-sources - verify jar-no-fork @@ -208,7 +198,7 @@ maven-javadoc-plugin - ${maven-javadoc-plugin.version} + 3.5.0 true true @@ -220,13 +210,12 @@ -Xdoclint:-html true - 8 + ${java.specification.version} ${maven-javadoc-plugin.additionalJOptions} attach-docs - post-integration-test jar @@ -263,7 +252,6 @@ - org.apache.maven.plugins maven-enforcer-plugin 3.0.0-M3 @@ -330,25 +318,7 @@ sonatype-oss-release - - - org.apache.maven.plugins - maven-javadoc-plugin - ${maven-javadoc-plugin.version} - - - attach-javadocs - - jar - - - - - org.apache.maven.plugins maven-gpg-plugin 3.0.1 @@ -411,7 +381,6 @@ - org.apache.maven.plugins maven-compiler-plugin From ade79ed534e3cb01a3f76c7d50e687f41701a72c Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Fri, 27 Oct 2023 14:19:17 -0700 Subject: [PATCH 033/216] Add "Sec-Ad-Auction-Fetch" header. Add "Ad-Auction-Signals" header. Spec: https://wicg.github.io/turtledove/#handling-direct-from-seller-signals. RELNOTES=N/A PiperOrigin-RevId: 577303702 --- .../com/google/common/net/HttpHeaders.java | 19 +++++++++++++++++++ .../com/google/common/net/HttpHeaders.java | 19 +++++++++++++++++++ 2 files changed, 38 insertions(+) diff --git a/android/guava/src/com/google/common/net/HttpHeaders.java b/android/guava/src/com/google/common/net/HttpHeaders.java index 4c1f865b540a..ca3b75374af6 100644 --- a/android/guava/src/com/google/common/net/HttpHeaders.java +++ b/android/guava/src/com/google/common/net/HttpHeaders.java @@ -855,6 +855,25 @@ private ReferrerPolicyValues() {} * @since 32.0.0 */ public static final String OBSERVE_BROWSING_TOPICS = "Observe-Browsing-Topics"; + + /** + * The HTTP {@code + * Sec-Ad-Auction-Fetch} header field name. + * + * @since NEXT + */ + public static final String SEC_AD_AUCTION_FETCH = "Sec-Ad-Auction-Fetch"; + + /** + * The HTTP {@code + * Ad-Auction-Signals} header field name. + * + * @since NEXT + */ + public static final String AD_AUCTION_SIGNALS = "Ad-Auction-Signals"; + /** * The HTTP {@code CDN-Loop} header field name. * diff --git a/guava/src/com/google/common/net/HttpHeaders.java b/guava/src/com/google/common/net/HttpHeaders.java index 4c1f865b540a..ca3b75374af6 100644 --- a/guava/src/com/google/common/net/HttpHeaders.java +++ b/guava/src/com/google/common/net/HttpHeaders.java @@ -855,6 +855,25 @@ private ReferrerPolicyValues() {} * @since 32.0.0 */ public static final String OBSERVE_BROWSING_TOPICS = "Observe-Browsing-Topics"; + + /** + * The HTTP {@code + * Sec-Ad-Auction-Fetch} header field name. + * + * @since NEXT + */ + public static final String SEC_AD_AUCTION_FETCH = "Sec-Ad-Auction-Fetch"; + + /** + * The HTTP {@code + * Ad-Auction-Signals} header field name. + * + * @since NEXT + */ + public static final String AD_AUCTION_SIGNALS = "Ad-Auction-Signals"; + /** * The HTTP {@code CDN-Loop} header field name. * From 9e3a9fb26d843fce9493d211462882ccb87ebc52 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Sat, 28 Oct 2023 09:52:46 -0700 Subject: [PATCH 034/216] Bump github/codeql-action from 2.22.4 to 2.22.5 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.4 to 2.22.5. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/49abf0ba24d0b7953cb586944e918a0b92074c80...74483a38d39275f33fcff5f35b679b5ca4a26a99) Fixes #6813 RELNOTES=n/a PiperOrigin-RevId: 577476329 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index b53e6afce8b5..58a9cabda657 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@49abf0ba24d0b7953cb586944e918a0b92074c80 # v2.22.4 + uses: github/codeql-action/upload-sarif@74483a38d39275f33fcff5f35b679b5ca4a26a99 # v2.22.5 with: sarif_file: results.sarif From c61f415b50d6a1be67521a62a98c6007d2c4b221 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 30 Oct 2023 13:29:34 -0700 Subject: [PATCH 035/216] Remove bogus nullness annotations from cl/575459262. (Four annotations correct out of five isn't too bad...? :)) (continuing progress toward https://github.com/google/guava/issues/6567) RELNOTES=n/a PiperOrigin-RevId: 577938765 --- .../guava/src/com/google/common/collect/ImmutableSortedSet.java | 2 -- guava/src/com/google/common/collect/ImmutableSortedSet.java | 2 -- 2 files changed, 4 deletions(-) diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java index c8c3e1f6d12c..a9fecc2d69d1 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -724,7 +724,6 @@ public final E pollLast() { @Deprecated @SuppressWarnings("MissingOverride") // only an override under JDK 21+ @DoNotCall("Always throws UnsupportedOperationException") - @CheckForNull public final E removeFirst() { throw new UnsupportedOperationException(); } @@ -740,7 +739,6 @@ public final E removeFirst() { @Deprecated @SuppressWarnings("MissingOverride") // only an override under JDK 21+ @DoNotCall("Always throws UnsupportedOperationException") - @CheckForNull public final E removeLast() { throw new UnsupportedOperationException(); } diff --git a/guava/src/com/google/common/collect/ImmutableSortedSet.java b/guava/src/com/google/common/collect/ImmutableSortedSet.java index 24d85b9f12a8..c96e53d1d14d 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -792,7 +792,6 @@ public final E pollLast() { @Deprecated @SuppressWarnings("MissingOverride") // only an override under JDK 21+ @DoNotCall("Always throws UnsupportedOperationException") - @CheckForNull public final E removeFirst() { throw new UnsupportedOperationException(); } @@ -808,7 +807,6 @@ public final E removeFirst() { @Deprecated @SuppressWarnings("MissingOverride") // only an override under JDK 21+ @DoNotCall("Always throws UnsupportedOperationException") - @CheckForNull public final E removeLast() { throw new UnsupportedOperationException(); } From 7aa5b21bd388809cd628edf8d1d4c429d000c494 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 31 Oct 2023 08:59:39 -0700 Subject: [PATCH 036/216] Prepare to make `ImmutableMultimap` collectors available in guava-android (but don't do so yet). This CL also includes updates to avoid problems with reflection when Java 8+ APIs are not present. That means adding a `serialVersionUID` (so that Java/Android reflection doesn't try to compute one with reflection) and skipping `NullPointerTester` (compare cl/550872250) and some `FauxveridesTest` tests (compare cl/576629272) under Android. This CL is further progress toward https://github.com/google/guava/issues/6567 RELNOTES=n/a PiperOrigin-RevId: 578200572 --- .../com/google/common/collect/FauxveridesTest.java | 2 ++ .../common/collect/ImmutableListMultimapTest.java | 1 + .../common/collect/ImmutableMultimapTest.java | 1 + .../common/collect/ImmutableSetMultimapTest.java | 1 + .../common/collect/ImmutableSortedMapTest.java | 1 + .../com/google/common/collect/ImmutableBiMap.java | 2 ++ .../common/collect/ImmutableListMultimap.java | 14 +++++++------- .../com/google/common/collect/FauxveridesTest.java | 2 ++ .../common/collect/ImmutableListMultimapTest.java | 1 + .../common/collect/ImmutableMultimapTest.java | 1 + .../common/collect/ImmutableSetMultimapTest.java | 1 + .../common/collect/ImmutableSortedMapTest.java | 1 + .../com/google/common/collect/ImmutableBiMap.java | 2 ++ 13 files changed, 23 insertions(+), 7 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/FauxveridesTest.java b/android/guava-tests/test/com/google/common/collect/FauxveridesTest.java index 41d7ba1a9ff0..9dfac093f071 100644 --- a/android/guava-tests/test/com/google/common/collect/FauxveridesTest.java +++ b/android/guava-tests/test/com/google/common/collect/FauxveridesTest.java @@ -50,10 +50,12 @@ public void testImmutableBiMap() { doHasAllFauxveridesTest(ImmutableBiMap.class, ImmutableMap.class); } + @AndroidIncompatible // similar to ImmutableTableTest.testNullPointerInstance public void testImmutableListMultimap() { doHasAllFauxveridesTest(ImmutableListMultimap.class, ImmutableMultimap.class); } + @AndroidIncompatible // similar to ImmutableTableTest.testNullPointerInstance public void testImmutableSetMultimap() { doHasAllFauxveridesTest(ImmutableSetMultimap.class, ImmutableMultimap.class); } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java index 126074004224..cb68484ea1a1 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java @@ -574,6 +574,7 @@ public void testEmptySerialization() { } @GwtIncompatible // reflection + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { NullPointerTester tester = new NullPointerTester(); tester.testAllPublicStaticMethods(ImmutableListMultimap.class); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java index ac09593bac1d..bf32922e1468 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java @@ -128,6 +128,7 @@ public void testEquals() { } @GwtIncompatible // reflection + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { NullPointerTester tester = new NullPointerTester(); tester.testAllPublicStaticMethods(ImmutableMultimap.class); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java index 33d4ec1aa356..0db23b6aa94a 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java @@ -595,6 +595,7 @@ private ImmutableSetMultimap createMultimap() { } @GwtIncompatible // reflection + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { NullPointerTester tester = new NullPointerTester(); tester.testAllPublicStaticMethods(ImmutableSetMultimap.class); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index f3e7c1bd6b8a..39b907a776a5 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -659,6 +659,7 @@ public void testNullGet() { } @GwtIncompatible // NullPointerTester + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { NullPointerTester tester = new NullPointerTester(); tester.testAllPublicStaticMethods(ImmutableSortedMap.class); diff --git a/android/guava/src/com/google/common/collect/ImmutableBiMap.java b/android/guava/src/com/google/common/collect/ImmutableBiMap.java index 30e293ebf80a..b40df1b5eb61 100644 --- a/android/guava/src/com/google/common/collect/ImmutableBiMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableBiMap.java @@ -591,4 +591,6 @@ Object writeReplace() { private void readObject(ObjectInputStream stream) throws InvalidObjectException { throw new InvalidObjectException("Use SerializedForm"); } + + private static final long serialVersionUID = 0xdecaf; } diff --git a/android/guava/src/com/google/common/collect/ImmutableListMultimap.java b/android/guava/src/com/google/common/collect/ImmutableListMultimap.java index 7c04f450054e..f0d107aa8e04 100644 --- a/android/guava/src/com/google/common/collect/ImmutableListMultimap.java +++ b/android/guava/src/com/google/common/collect/ImmutableListMultimap.java @@ -196,6 +196,13 @@ public Builder putAll(Multimap multimap) { return this; } + @CanIgnoreReturnValue + @Override + Builder combine(ImmutableMultimap.Builder other) { + super.combine(other); + return this; + } + /** * {@inheritDoc} * @@ -220,13 +227,6 @@ public Builder orderValuesBy(Comparator valueComparator) { return this; } - @CanIgnoreReturnValue - @Override - Builder combine(ImmutableMultimap.Builder other) { - super.combine(other); - return this; - } - /** Returns a newly-created immutable list multimap. */ @Override public ImmutableListMultimap build() { diff --git a/guava-tests/test/com/google/common/collect/FauxveridesTest.java b/guava-tests/test/com/google/common/collect/FauxveridesTest.java index 41d7ba1a9ff0..9dfac093f071 100644 --- a/guava-tests/test/com/google/common/collect/FauxveridesTest.java +++ b/guava-tests/test/com/google/common/collect/FauxveridesTest.java @@ -50,10 +50,12 @@ public void testImmutableBiMap() { doHasAllFauxveridesTest(ImmutableBiMap.class, ImmutableMap.class); } + @AndroidIncompatible // similar to ImmutableTableTest.testNullPointerInstance public void testImmutableListMultimap() { doHasAllFauxveridesTest(ImmutableListMultimap.class, ImmutableMultimap.class); } + @AndroidIncompatible // similar to ImmutableTableTest.testNullPointerInstance public void testImmutableSetMultimap() { doHasAllFauxveridesTest(ImmutableSetMultimap.class, ImmutableMultimap.class); } diff --git a/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java index 609e4545a87f..1b1252c22f55 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java @@ -605,6 +605,7 @@ public void testEmptySerialization() { } @GwtIncompatible // reflection + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { NullPointerTester tester = new NullPointerTester(); tester.testAllPublicStaticMethods(ImmutableListMultimap.class); diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java index ac09593bac1d..bf32922e1468 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java @@ -128,6 +128,7 @@ public void testEquals() { } @GwtIncompatible // reflection + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { NullPointerTester tester = new NullPointerTester(); tester.testAllPublicStaticMethods(ImmutableMultimap.class); diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java index 37b9672f0bd2..b5eeb58bc406 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java @@ -628,6 +628,7 @@ private ImmutableSetMultimap createMultimap() { } @GwtIncompatible // reflection + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { NullPointerTester tester = new NullPointerTester(); tester.testAllPublicStaticMethods(ImmutableSetMultimap.class); diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index 9eb466cd416d..bc6c014d49ef 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -685,6 +685,7 @@ public void testNullGet() { } @GwtIncompatible // NullPointerTester + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { NullPointerTester tester = new NullPointerTester(); tester.testAllPublicStaticMethods(ImmutableSortedMap.class); diff --git a/guava/src/com/google/common/collect/ImmutableBiMap.java b/guava/src/com/google/common/collect/ImmutableBiMap.java index 0c71e7e14d65..f1777e62eb24 100644 --- a/guava/src/com/google/common/collect/ImmutableBiMap.java +++ b/guava/src/com/google/common/collect/ImmutableBiMap.java @@ -676,4 +676,6 @@ private void readObject(ObjectInputStream stream) throws InvalidObjectException BinaryOperator mergeFunction) { throw new UnsupportedOperationException(); } + + private static final long serialVersionUID = 0xcafebabe; } From 609f02920e51d7413dbf5f8b6ee104cc301b53f8 Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Tue, 31 Oct 2023 12:04:55 -0700 Subject: [PATCH 037/216] Upgrade to use Gradle 8.4 RELNOTES=Upgrade gradle version in sample app to 8.4 PiperOrigin-RevId: 578259506 --- .../gradle/gradle/wrapper/gradle-wrapper.jar | Bin 61624 -> 63721 bytes .../gradle/wrapper/gradle-wrapper.properties | 3 +- integration-tests/gradle/gradlew | 29 ++++++++++-------- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/integration-tests/gradle/gradle/wrapper/gradle-wrapper.jar b/integration-tests/gradle/gradle/wrapper/gradle-wrapper.jar index afba109285af78dbd2a1d187e33ac4f87c76e392..7f93135c49b765f8051ef9d0a6055ff8e46073d8 100644 GIT binary patch delta 41204 zcmZ5{b95%((seSiZQHhO+qRP@<}68$AGx`lh~)fFsaj;MiX97^(}w;JdeIg_EK=f{qUxfgB1;VggKi&SA9v8P52JERa$mc|$lmVvfx{qi69Qt` z*fZ)^M2W{1fVoSt`s`K{cHR_Ov(<|-{;q0kYpPXc^iz@|EJ@}9Rkl^$`6gZKo4=jl zD2P(#uTcD*y0DWmpF`Dtw^s9E&tgueEt9jYdg)|4^CH zb}H5tkozJO-=TYiQxbjRT%6PCU;JFRQPXAQ>rlRozg33`4{|4|Q{K zP#?n!$RS}A3u8%zoT~YzxuAqLNKTa(NWlJ4XU{EHZHY-(GB_2uuL{a8BMNcj)?=dUUT2HO%1h(mqG)ntl zN?SX{UvgL}$DJsYuN~%ASKh2fJrBPH#2??t43t8?^fOWdaMj%wk$O`DK4(tRuA(&E zog=Ry-f5N`!=ByQeZ>yqokNEb4OV)~d*KM!+n@>L3iD=%hcWl5GV|Tcwvb**xo{vG!%lw${AnQ~eWceyLLtO0ikN#30gs-w0?6D+m(Pg;;(saJJH6dgz zPtR9$S)TMwL6Y4dX7dYUtY^k@&mLj>shqlfVB>uT4%k z-sD&k5#S$1G!f+SeqV-O07FX!@mC%6H?4gT42hV?{rCiRc9Cr9B1@ZjfX@!wme?JN zAJ(4)af-zesN2Gr=Jn#7mg9j8%5Jvi=KRdf+^w(o&rhoFI@|08W-G$DW;^7um(;k@ zrb`3p^aRVime{Nq^@gWKx`2>bX7zjX*(w=Bcc4S{A@7F|ytuV3;DP(RjMa4RmukeWjWwVyaGM*D6m`mn7ZGF34w6Gb!;w3^St z3XgDy{pdd{y~uiAiiTGa2wO@_XU;qFfTIXAZ1RMapg5FqfM@t-DJO(?zaynola?z< zq^^3=9HQZI#n>+*T*@Eef3h6)^xyrwTYa3S(|cxi6h6LV6~ufKNVoA3J4aC#kWj^9 zU$rtnC%FQ(!JWlPz7l4OHcH%})DUBe?Ui1bJ3TXHGHytpNOUMTkK>O63oL1f0R~Vl z5Q&~zYZ~evszs-g;%QS1E$G6>(o=zr5zmFhgtr72k-dOTT1h;>q0$c5&3}By18rDv za{zTEQI@fiS&|kEha>S}so7LsIpivt5vVHE)F!Z@B(20{Xj&vc)i}Ts+cmgXxl^-r zfwK2C3bRXuS7T6w6&q}%IY$i(=8BOF%1u8n14+J?DQ}GLQC#%nt^E3w&nfRL0C{8o z1kK9$eh2k$?D=o(;&vtePX11A3JhkVfk_W3;pVPI(@owrFYG{UOG!MTtY45i(<@=S zN=P|BG2-(N7nJ4OA>%O~hs;#8d_UEH{2?oTcEBiMv{=Wp@WM@3;N z0{Wcat;=K&itA=*;~J(LXVs)n9~I^r%a4*|S$W0d?v?Q`{73J$KUQ_4q5`Sm3BFa? zV(eIUY#=VrrlfmrNrXeQej79wf^Or9m^X&%-g`DZ;Yi7Q4g&5ll^1FyD)W@D)KrVh zl|juxjkCEccS-qdV|;zxQr12&?HgSGVY)!2YK($@QY2deG%8D@JL$e1pta(|J1t#f zUVXCDHNM8*jvht|y!My(A~`L3>E<-DLux~cq>XNop^vVrBZxb}{nb5fA()O1T|^S(dc&uFNXX z1sOhL*eHNaulR)m@PE4EooRR|dslppGSL#gzaw^n>yc)xGtbqT1u>8fY9^T3tzg#i zEiiQ#AQn{r#eEUXY8>4+Mrqk_>>(;GWqA*KMTOm5@A`nZy=B$H-C?( zlF23*1jz}fkjVi@l)zFo10^&Obb)3fg9^P$h^iuJQ;Z*^a6Q;+qAQe?3Q<`pw}KAg zydA$doAnNj?u2d+;V1>M^FI~FysSLcf+g$@#ZKq8d0w`C6|MR|Uw=akFnT;VD^Hq9 zGI0`KoFoRj=k7WyyDED&OeSn42gbbM%*0-x1h2w>1ew$^fC2Ap-F{$PBzXEyrTj37 z|B%v`@t;f5{H-YoPp3c_sfip(oYcsVma9E!ya2Bhu7Ag^4(~_@9b)^=9|exlV;ye0 zkAQyjF?9L1MD~jY>AmX`ua2~kR*f1DUXh7s5&IJF3N2tvARh{hNrID-Z54AhWLP_F zFm8P-mQDjHL1nr5DLdug=(vCHfzCO_8J zEp}ADT4%<15ZL|G=AWR}ikGH-x5cS%WlZt>I`kA<%!uoz)|GAv_cah!+Y7h`@it zu8EEaceVwi{ki&o3?rRBTObvKrW@02mSpQ zD^OwQTHZFUnC}|{%QT@iPD87>s#7FYY?`8-wKN+V%kaw0n!Qwe`tejf7W4-uxMOEn z1(Vn|#vOg*_XsP}L^5eoi@55}u8>pdAD)HjFyCfJ{bvuXw4_?hqm*=Twu)n|8EDp} z+eYBWOMCAP%?4JsQxu}o<$vt%1F1M%3xE{do_y6?#u;H-jLua7VHFrsRou*Me7~Cn z1C`5D3zl~V=mjbZ4Z8f}+vsFcsxmOvll-$BZaszJJA)xbGmlU*&%|6w=(r4LQP#B8qZL4?#bw;rFwrUZe%Cl!17wp@m_D+-Nz5%B% zt?XT&zh679<@}P7y-eRZC5R&rPv$LF|5=J}QFnrP@w`@`o?^n3b3RXV&PMS=L{r+! za7Y9Oi2VBUB6J$%+V116)8xd1RLkFT*ANt*svo|*ApHGBmxixy&&1idy8M>im6v+s zJJG|fRAA@k#dU*&gHSrR)2GZ}tv0Z_0F(hXtyrUQ8WJo|a{ ziMWa`=&FqTs``tea&48@-F9e+V6{bmb@ln8%ChSG*rBYNCc8(^^J?+vcr*X*TlY&* zP`b0Uu~>NJh1l@*S4;+P70*S3Lo7CoK;d@+>MMofl3$_1TyK>=!U7BZw?Q zhMTsbi~7e-*pV{h+ncBqVqK6o#QCoWmO$-zcY?U8;xN7nN;fJ;JVN(eDNSd5D)gSH zWK>0(S2{&H?qD%k!{JNVuQ3tZ8$}9(;3+1vRTU|By?jbx*xdmg2%wem?uec@=pCKR zAWz(=cMrn>0cfkX0ZqqumOvoKy0-yri$e3lL`0*=|UF=Xo;nNB$R++7AqF1I$2 zZvCA#{pqrH;X7TditMr4QzKe8tYz#nZ6q5vj(Ua#bB__qb=;@iZ@p%Qg^;6D$z44A zh(2vy6$HmZxDhoJsL3VEmK6%>Dlcc!l(mcUV1(oOxE z`#HlgHd3=fPzjTlsAlQngunQjxoK8k2*4DNg|*W#mnx?YRFxRP7EwrMqU2oRtpMtL zxPS_E(=%Mu@}{MByzHWw_iUI8VR?cgJ+c;FlPE8-W=Lmm)AL@i#FS3`Nlhz; z;VGl5;Zpo)d6Bv+f3=idnJQ{bP%GC!Xo6b_hE|$O4RtQ1jx#G)d`K!=l&<^(h*HRs zB7rxC9LE_a62%!yf|{!|a{rJQm%q?~j7l6=D332v${pu@2oAIzsn#Y}EYi#wau{h| zT8}|=`?eb;fUz6p&v2*t%b~K}6e!jLKTlnsUkmQxi4+N7N)oF?5 zTBO*$S5&^zn+N6;KzZ&f-aD|>ic#ydB&->9(A|2Jp9(0;J(sv_dtpCp-h&4Q4`;Z; ztbWGaBh8)gv1G?HF&5~?h?M$s*1Sf28_pImEJRH-6bfwR%*v!e)#l5NRLD3#{KS_? z6i(c44`X6_Mr|W0@*mtFl(dVhZY50MO0@|5h4iNR^AspN6*hcRG`6RM{DAR0fzaxx zV^i-Je6DP8BQrssMCdS^h?JD)5qQ7|;!N=(g7m^(s~Gl)4Og&J6psP1 zS#-)hqqC_6Ngq1M9Xll{ONfA$!bY2bGt!YanL@r}o`q{yizFpUBV|F>HmDP_qul~O z^GDy4;p&fuVEdH)0HvGx#b1NSl4Sbqi(j-^TH$Q3^GH~D=O2WcMmU9To-E(KfTN=~ zV)vf^#83N&^X~F*ARv#BARzqz#m{|KLg1d#vNHO3zbD?#8U_w+git1$g-`;5xUe$X zC=rVy`=D`<64u&G)^*ypN5$PJmeHfpod_yHB+?h?m&%yy7VEe+t9F{(>2}@&kI>fF z+s7r>cOCjmY2tdaNYSK{BGq!Y5@&;41-eS~ae4e^_^jqDow$f2$l+U8qkzFuJKz*Y zyf0<&oj9~w-Nv@NLb^%a;e>7_rS~eQoL-xTuFHixV-<#6M&RBE$pouJrvuD%_jE(T zB~*fuRYWbf#*~#bP95h(cA4KKmjf@4j!Rod?_6o=<1O>g-bU)3M60w*-6Blln@L^m zRnr^#E+18zbKXAh@xiqtiJ8OP~2gfQxKj?}%vZ1~_f?(Z9C zL1*8t>OW|tYIseB)Gr47Zak-ZJu`wqm*TA1ys4|yeHr@+$MJ_R`zUv}tj6}DCO(?F zW|-yiM?*!7TyX)@e&&@7I0EKuwOJ;{&^GR!Hp1gDU=P@A4c{fePF)5E7=SV3jU&u^ zd#Eh(1m*qk&ErnQVr`y$*p%_iIR%R_(>q4QJNeIT4pq!2+l}oKFM5j=*+XU%j{wQA zT|*h4`o-juGLfXPh%Dq>_~hq|7U<7%SbL;I(L1W5?h?rfd~-sIc}U0&M7L+e@-usO z=5d>(eL2|aGfzk}5;vLEq`Jc_ zqs5Y&%;Ky-dQqvn2U=F zOw&jV-Ln)N*Q3%LSYyx$ROZ(q>N#foT1`&!0S8&Ft3nwRVG%D&0Jdd;1%i%e5t7B} zGzV`_Y(mT6gTebw*5Ia#73$3pH~W?>3^o3vR7h{gD8*E+DShpw=iDgybRfx-`BpQ& zuSGbVQSGry{Na0-L$+z_pusx%wy1Gh=C1r>-6SPYk7W{dS1`&b5t zEzQ7aO27)*RV5w96QYtLuJ>RA3jB_2a`#38E9Y*J{li9W$7iPf6V`^JoTBPy7DcT3 z`Z-Ny1zBK8+;Yb9V!Rr!BhXZPv?oqaTe-2q3}zbMH88WL=T^Sa5@wyQl{O&5q#<3e zYR58zpYSxGw<6G|oQB8x`KQu`T395ovNoz4-fYk{FVkk;Wd(rLm4k@ucY#~KO4xG; z&h#KT{d?LxwY#!wrShOhm&1UIjZ2~3>k<1!Rq@vvu(N->cGf5T2XL}eGRQ?XOE8_+ zUs?=17A7jj4id&@jsb&G#$gk46NK}NPIPR9aVY)DON&6w*03?B`6Z$+U_HmM@5@aIrq<(LqW+FVb*+6#Ws3C^mh`AE%ol zMtB;`f@JdQ{w+;T5l%f~wn!IcE#@Jt@qJRJNR0}6D}rr%nzpt{ff&dZ%>-ScVmm?g zzNyc&qQ&v*w1&`RS0(ia__dIwDCMU*6yhvkTIg?oSeRuZuxppe0mTN^i z*2P*uOiV8$ww9$R>NwH7toID>_M3muuJbZpxtb-f{!1V>F9X4xEUkhW$}*1c{PpI| z@9XyJy+2=1Tp)5CR7YSKXdMNI9oS=y^hZTe@S5r=jkHH(5O%cae)MKQgHaSv)drF< zIa3`KXPpT;*1D<*m}dOC=?d8T{E1g}Nrf?lutJUL#vqQc7Dsy)X^eIYR{UC>IGvm8 z>x^B7KC@&>E!XVr-NQVJwMJFgYdt|Rk7hLOIyDzhzU`yHOBQR5ahBewS^quqkrsi~mA1?%c`k2!r9qq@hyJktY{Wzu2NN8NPL*fCZqund&7Vh;v9i$|t(GgzQQ{bCshm$73o|_+C17X%@WIp!y1!r7O zBnLC~&VgBG`mY498zb+QaY>+(#d|TbvLv z4K`g8D{8%IE&1}RO^fq3Qv*mHSg-B1`+^e7A5Jwc;e>))Za=;WBN6q&4F`CR$Mdk% zX~mY<36Ag)EZeZ4C;L5Dn!YC#qIUebb&ywbGmyT`KrW5~LiqH@2b(1Ip`ofC-Y;Ab z=%z}uCS`64lmN?QU~iVV$y0ve>=t)of;xX&CeJL8H=jWVq>=0tcM_IRP1rXJz<+*w zqe*%9%eR%F{Tb$~3>>MX;%@4NV$hF&ywyaKa@E20;eJLdG4)rCN?c}PRecm;OJ0JN zn2e+@9+jyChBuCiFagZwS*E^(13zVyMvYzrd!g-kiB1UC$t|sJ1GG=c(5=&k zsQbbZgZ(g!P17t0l&&CA(jB0 zr!^m>UO@LhJ~xZ3O#f#x_i3j0mxF?U6#q?V?tdh6-U&)F96vJ{x<6L4AiozV*8dWx z&;@fH|AM482oMmq|8o-t@JbO)1zEuJqw%UKMHO6J1tq#gZd!Fj2|0#?QW6{uJ@^mf zRT;gbXZFtMS@A3QSExAgf0!OuCoJ$E;MPl>Y_3*wIhmbT`Tasbu#C}Wb{`XK@-lXF zWmHR^P#Xj;ld6oxf+BKpiHJ?~>&Oir3?y}a^9Yyz!34eCpTPXibLV!Gy3oEW&Yw6* zhIB0g=_wFft-}&wlcHAo<>ei7$n`$%(S=T%9<`~tKg&+~kFw(^XuUbEYh3p*J&t3- z^*ja&>ZgJnuvv{d>rS)?2*ELTvZnL)nDGSb`Oj#3ZO1-|ga_totxMKL2pn5a)Q6Q?=n`#eE)1NynuJ&48uPJwQ zj({)t^IEKt*H+@=0Bpa8VTQ0l#%zXw5~_JUhUr?g9Y;`tx(X}Y^9^rtW=Wxb_)j+s zT&mfmmKIC*)=fN9rpVY>?%A=g>8Xr@>F5)m5O4JoPd63sWXG0?}Iqw62ipHvB`4ka~b zzdcfVWZjRxZD!CCh;H&F*G;$;69D*;F^(36)rGec!BBJw(IPC=I-(~LEmzKUET?EJ zk5F|*M5ah3j|0$kpZxVhCHV@KIG>RInF(?AFZXH5{lc=q|Fn16y038c@n?A1Yna6l~&_zku`JHXY z^SIu0ma~1FY<fY(69) zfHMlon>SWBSih%>gZ>une91BIl%-(wi!W`{**>{JYG@~YHV;Oq;rI4a>J+>#SyaWj zeV+%lV#qmkyUo}Hz_U!bl+94RmVDC_l(9Ws8W^%a@E|tSm@f2fs_dfBy2pn!j&Iq} zrl;A{nq%l+?yC*xfxd`(v~rVgml9#y{RKGhmmbR)CUO@IcT}9U3m!B1hYoJ@eKMtw zUF-LFYi4?JY3H`>#7H>I39Jn<7zpv$Z9agSh=HoEz!OLh>wN7UF4HC`QI8x}<}i4m z*t_R0yxkw~z&iBkQB&+*MTW5R-9O+4sN;a_1CdAjvoeJz-e3tIPhM=uv(&16RqZH9 z8rDhHrpQjXThC)>_{FRg8Nu)DZ<6o>2r)?(s(Et<^UBmn_E__U6;1_}PKC7D5B-wW zw$JGA89rg)PFC|JzEL4RzCfNJx`m5?(r4z`QPe6&Fz@!?%b6#j5>Lc34s4F!m}ULI zr~T+jTTr>Kkdt;5wxgsSk2t+^CK$}{Ju56RdA2E(D3IKEZR{KCnYDW^&K+>AirD6G z4=|c4I}fR>A0GLnj6RsMN=#vGaFpDmYLZU~L^hv-EKLU}{(xVbWIbbS$KUeM^GE!G zmz;=G>m!1IPv)XII2X(+`%XI65BAT1^_pga15d6OlLdZf-T7@g!HJExx`Pu#iK-w! zVHvbJdTm%>VlcIJ;$ZbC3- zy4aR1*cMaCVWq*sWLz{i!TVf>$wxwZ6>l8884ccG$aX#X`e3xP!GwxJ^>9<_rZJ9Xa&|wh$)!wYRWh>RnHzY+lWWY638>&B zcWF! zqi2Ug7G}JzyXDW=u$EsPx>$DTh%qLF2lk+USORzX-uEz)0@L+e!6dLIB_trKWvCC4hfn#Wo~-40JnH9 z@;iegoEv`sfLR?KHn2;>hnQ!^T-;X&_NGd}TZRH_;U6sq7wA9^Fr^UnOtW`CL67kG zAc6J)mTpN?6OH*wAog0I$*Bd{XsH{NkPPZTM}6AUX_Avol7}^f2yfEJ6)I?FW2#cO&=1Nu!!TQ9s=`_n zs13DPWMs0+P0O1sfr_TRUHd1|Z^CkZ7JA-vzvQ^i3ru^?`}-ViJV1fSr+<1|50_uu z0W*Dm*GKx`v)*c}ee95H* z00=Ib8;p+iUh?o*!^riKDoLjpYQ3k`;ic4&nP(}3hB!r%VO8VI9IE@N2P+biUZo2O ziIkK_$XaPCVKJO4A!3Gijj72iN9Lm}KuLiyTF|4E?YoNuEg#!Hwfnm!d1WLP^P))E zO!EnIG`16Uu`+B`bJI5T?205*3HH?lRkQ~i2pTq(T1(o}?F3k~=+pru^B}FVMOr{s zR_1l;@+z&BmqnN@odS=VWz{adSk--_zNN249Eq!jXP&NmpB5(dYISduaxW7r(7Z8n zHHAS=d?UH}45GDp70^Ut<$HqP+KP*oKG9j_nWvRT3$~i2N;NI7!+7d@@{Lw3UAmWs z?pU`;bO`81!Y*CmWm7_$2IY5Qj zay`V%gBvpjimBNb4JM3t``oV@2vN)g-yTYqJv?`OFU)Q!b$Jxn;V^+)=d}y-a}74k z0>_Ywx&~p)RR2e2ZCu+K&2?!PkE2xXVg?Booa9+zbI_u8PoEjs(+_lLE|me%ZXVQD z-&njRL5uGfvw;=4jn@=GzheSHu;km*j9;5h=xozgYwN4)44MMGpQ142fQ%JruW63( z`j{1G5l~_nD&3>Is*U`}<(dbZ>gFyA{!c@ta%)uF=|&C5HMl;d0|zh=Lkt*kZm3AQ zBMzfr2d`7Y6~oU{kb?;k&6}aQG6Z2IwVHU=RCKu$hiLJLH=5Yfch)Kh?C_S}aJc{F+2Bm(sz z%4SR1@Rsjo=IHC@v#ITvcu?9)fAWk#%*>;|mG9D@&6sS8ER7n(qJ}X}$!<%IkivGi zfnQ+v>#uqC#94pGUMMsPt|wzcfGqSe*lbjQ@~2(3FT(b#GlJ(mLf%g9mrFfi0R z3gRQQDce@ITv&7Rcv!87&rJ47#OyI}wpD%)X%~bt^|{5Xx3{x-{5THbI zZZ4Ypa2LyVK3DA27$o51WR-0%8Oxt%Z&`YxA~ULiOsye~1B);GBbPBPi;l> zTri?_ILsaI=r>D91k^@!CQX*$=ajRiI>lOGwzd@l8G<5vuQE82sGfc-z)VsVcq|UUJ9d&4ioxIk^p4Wlou|i3+8re>zwMK2?38r zTqHX$rqplA7l`mqZdqQ1Iv*DI)AA%|(H~Q{!fFLDTZK8nU*iitN28LKneQ)U3;3S> zK1P!}CC|37VLfh|Y$=~jnW4WT1dIN_KDWtQ8}3?m$nQ^_<4+q=5}_j-;)%GK6TDRu z?@4^Si>(7{xJ6jndq$Ej zk9{N_fednv33xE^K86a_I(|@|jm9!DskL-WCfntpT207$sIihoY1<_!gsWT(L4}m5 zEJOY~^zGV!>TS!(t10BYw5zmj5>H(~`nL7tPRDxE&4fVOcD4A^vtGV-+i~~3z?!m- zvFhm9JlpRsQroS^>irf_O<@5pB#R#e7mdqFz>njvV@k9Q9LMHt)WGo?{DRxv7XmrL z1SqyPRf1SZUJOER`YiIwqvP#Y)^I_sNtiS^^CoGZ2GrG z*`JARasbZ+}NrixnS z7~_RuSD?$D>h!GW5N*}J4^2H6ctOZQ`w^SN<^V<={oW7#4D1w8sMlQ3f=kmFOqrFk zv}Zbpa~H5f7`gbx;PN>c@{~(gV9EPd}v^P^Xy>%Xqb4 zxDri#4uiV#$g;54=O0||Z&rP8mdCq^ilV2jp4@6qSQ5nR09V~?f8f*!q_p}pXXS3p zU~T$xV|4&|c{a?ak1_6;+%00fWpu2R>};m|Sd&K(;YEOeYwrA+U6-5BoosqqX;(*8 zz?O2BsPPOFB^Y%#MpilPp`y78)xP1frX+BYt$2megrVy#>d`^5TQ!^lIT0UnNqSHM z7H&Ir%$Y|03D84t$;n~>J~u&lFwR>+D#@`gE%wn?tkFo%`#f2Qj&7!WCG(;r_6n1E zKcDj;VO1lB_Ce}o5K?j_bZsI{OBHQRfCm%MG+%*9QF zdXZm)Okvrk-L>|p|LQ8V>Cq1;efT?&T!%(5rxl$S?b8+h0ebuhWWqCRqHt8A@5~k> zXk0rUT%7jehl0Y+inM#LaVoL1oUw!u^4VA!HJOPlY0(oMYkx<#mw2M+l3F0e^n2>! zb!uU=KW4_TZzTUo!VpFF4k!@iH+ zQb_n6imLKQdT+8b5X~`cAM@GOnGV=f{P4N;{)zbIWw8F)t-(++JyhI`kt=tQBhkQz8xi|X!@p~s8XrLY=>be(%_lACSA!#Va zH4~O3FtHi$H)yEs%Tm#X7mOz>Yrzz@qOcQR*rV0qSNDlcxk2JoWf-_m0bdVDf7>>| zZWPOV?1Y2uW(Giod6=mOn-Unb>k;lZ)WcC-4ak%{cFOnxu*THA{qh)NC^1HWmilwU0CeB(!;XA~g9= z*s&NH5pXK8soYrAuO2Ahtc{y$B&pW+ZEGxSYs?0WVx$@feVt(pDM#xYLHotX1jW$= z!()$t)@dTvi7M8qjnGjg=zs| zbjKX_sqHSYzhSnH)%2OdorC>CvyZVICskmoO#i^Z7aJ1(1`#@bAdD&3jBk2@4m)EB z&eEBqcXv61uj2%Lgp-dn5eyKIU->4LrS3o zRk11RP80O*)tS({f~WQ}!$c)b@kC>$X+_^7{xa~_v!teY&nEq3qTAcugN?1QPS2)3 zS1VmjV5xQ6vYv(A3$4+W`e%8DCo~E_kI#9`1<0VP>s;Bc|0s76v4Oi=AVQm{>wF8Q z#b8bKIGEWP7h*h*Jb`&cwKif>amK#_vc)=3+}-&3IAi#CWGxmx3Iu1xi-`lS9h}C=0E|umAtpQJFQ%9-?NMI*-GR3}R!l$FQcJ&k3;kTg+{sV^ZZT8< zQf*w-QGTOBdaFI5V%~9^R;6Zyq8F2-C^u5mn6re^laOP_rSKaWicZO{${BZ8E|d>F zF;l+wY!286%@sB5VDGURYHT}-;RF( zV0^OYR~IxGS3XRgDVHnM{^(xiQT3e~XUoBj|iLno{kdnZBhn-PCI$aGLh_lG+{Yz9-yG ze!0UVxNJ9LK4BW8gMI3_F!M@XLa6iQ`aAj*^D~|$(%O@)^*6ZL9h^dYP8R=M&aE?n z99h|*2ICl>m)c1)zWh%ZUts@`9{d&m8^g^POa|^Ws~=ik8&`+63yabu+&%spZ?n4CTS%I%T;FfzZ zV5wby0x5ZeI!9K9xig`C(9PKU5a$IH$vS--zvW=%4$K^j{FPUA{{}K!Qa^I6QeBC6 zdPLNQUv=(i&o=0&U1o7TxqHFR8R#|<*)3mE%PX#^Xk0h)C2CD2=(bm>=gwkP8(#P9 zj02~!b@zg8PGIS81wY-C>v=M&5sz&2qJWfr{^EWgTJ!_`CL~`IpTL}A=T7qKd6ZqyAd&IHl)*CNy>Y*!87YW(I6|zKP)lN>=|#^5HI@ z8z1=?zq^6yL0a;hLWL?@OC!uk*E^?mi`@yGEe)+Z*KkC*zZT~?xg4WFfCv%bf_`zC4p}RkirLY0OqX!jiT6jl2vO5zFna6Es%ZE zXkqRduoi$qkwB~24CqbK>Zabp-rBT3vgg|{lyu47S2#r3PQw*OPrd+4q+w-V+C$PksRZ-3e=6)`N%sEBD(sBLn*@_ft8; zX(q7h`j-H3!+PoO@-Mw%@_;Sw|5&%SWdElVMl?q%-~E>ci~Kui!Ipeyi=QlMhY!@# z!qY(i3In%<7GqLtgrJr536$T$@ez?LY{^iqEu-NSE|o9{ch1W3U`3nH`Og1#m`@BG zNEfU?qLE8~zm5lV&Xbqg#3E7J8bYlum?yGI%jaa?v zSHognXH(;1Ya;4?%dVBxhgFludT3Zs@Ir|LA!l`Oo(G1pd+ za_(c1>fF&KIY4bYQKP()s_Tc*-)d!4)ycLETg(LcrKab*@;D8|ZK~C|O8_;=gig!h z<~I-@z%Vs`Cnb^A%$$BPkPa|6ditD)$wj5+?^!(|cAAkI!tIUVoQFPa40!RtVxXD$ zNl6=OCT`O;5vZ8RiWdfopa`KJc(mYA>5zWN)7Vb1_S3P?S=VC=#ENx=$0|qS8eugO ztIC;RSB}ti;@-^RR>SpUhXO|>k?B`Qdt#Tp=Ev9pkd#JheOTZa;QQUGMI%%sWR+;o#qloiKrQ6ezta?;MI=Le8O%FdVgKMqOTOy%2HE%=1 z0<4Qeq9Nh;#;SfA+y8J*9!9{k({6VWx%}Y2Px&wcS1J(*}(Y zMss+gYjCAk|4=eYPw42m>!!9BjZu$-UFFU7${F$0CSTS*b{PmR*1Qn-mM3jftkVur z9SK**wjo*;DYK3vi&z}u#C6ay=L{$H%;NXG_=9;_h&0#7B|=bA1(a=KpH*?e(-U5c zCe7|K|J;;yYt;O^E}wfgukgHR_zY6Gd5#(QnmF(x^b+4`&_?t_@p}_b=ut6tYjg>mJ|l$^HB4 zaK&@jg|_U))j8g*Jt-+0#a->CYy(37h5Oan zjp3pNWo4kV=d9ei_!>+dHhOkC!n{}C!jUJvu8#br1Dn@%4ed=2DY#tO=4aTN*?ffp z{68U$5tINECcC06;XrWA80{A4y)!7DlDmb7q|l~Nim<{{RhiEq5*^xg9929KHRhPL z5>&n1;joC^hcKl)KZe^5qtirokNM1{kEYq%8ccD9a*Vq&rkuF6KC)EI#KXP^l0y^f zqV%R(vQ1)oWxm9IlnS!H;)GO_sY~2-QEW}QROOKiR<~%~G3NA_X{-b*xMLKSZeR#fdtJi99%71Rd`iJYTn~&6GmQ zRJVp$Hyv|qys$Cqc&;q~jR@!q{V7sl3nbolHf9|=n#2CapI2;Lku@7ZVD|Fm&R@u3 zN)Ft`OeS`s1q$m;6^FDfkSFLiAef41kSD-J7ce4cM+zvE0mc@+z6p(nAxP7|f(XL8 z{1X2rie)gfJ)Yz0e%<@L{>l4mM3!0K3g=<%JepaLC{Xxy3flsSO$R;dpqRUT*xK46 ztMV*4H94|rF`C~q)XbT_^_6KUBfd|ifjzN7VRH081PR&TQm()h_*R2fO6BuQ=&{$5AmgTr%K*?2azdM zH;G>jEYN;V_reljo0QnJ6FdjSS{vVsjC8A9;D0a%aRE%}Bgm-?LECuku52RFErNJv z(oSc{u}vOx4XmeN+k!K5V2Z2j<7Nc~(i6Zrr(f1StbM2C|Ds}y&$o*Ve=u>2G!&<^ zPUqVr?o*!!y-B6r9JJUyfEVtTl$))XpOg|`mz@H{agXDv_P)P`)75T0#NzG{GEw`hXny)_@7UT4*X9EiPhB8 zLeoP3LX^p1hBqXI6$#WXAV-#7{GnN(9!tGYkVeh9^aF8{Bu3G4DHBH2>DiHK-v72% zXs{1lSMy4*TN9|JrS+02Lk@HI%`P`{(>K4j|MRN(Wm4$R=NI+>&2MtD?bA z5pt-E(;34(@I;v8Jq$n+3bGgp94%*!F^(RxGzuJ%5)1utghqNO7d7c!1X8ktv=A1Y zT0SES3D*k~BsAFO<8661vP@xC_tH#QI+8nz9V=iBIPRjF&1@tC$5X5= z_ma!*X|WS*4`~OIs74T)uwADaP|_hDvT@h=FGFlmUutZ){TEyo6o1&pr?6aHvb3eN zHKtanL`^}7UPj{}tqcL45@gM@%&u0OldPac9BqGvV;$<<)3G~k0T;btI-lG)$8ssl zv7XSj@ht=O7)&-FPqvAecuTyN?;dnhS(XQ?w!g>f+$I$2nAiIB$kC&FtQ4OK^#3>& z)EX`_3^?fOVSIB)uVKKJHLcVk9Swtkg1}K{iQ|e2>DEt|4KD^TpU_tke#-nTIVKA~ z6?Z2a+(os@m162Vj8bouz?x>3U@xYdw!u)-V}wOc+9mb#&e@$cOsuZeO$W!14@uUBZXn&w3sJDAeZt8{>2z-y?Jj0F9Ok_W z#`sS2gpohTgLw=DS2)mAhRnDa4Pe9d3~8bDXx<<~S3A?ashy*~lYv^{dIlk&w)ekq zEW!U>-1#0td_z8X1MgVixF)8fRw@=pC^={{)eJ}HasKDz6NSit)>LR-Cc9{t(Pw= zv|Qx;p-J}ZtbzA2N7dKQbOz66Q)yu?YAzP>p2>-uHEsVk2VD(yuCKO5N|npuDz0Bx zvx^OZ9ibCAvZ_vVntyB9)VstI>$F^nZRN~$H~rbxakhzTD-tWP~! zHTKSR!y8c@JpKz79>G?+F7Uvg&+mk>lwM4~jY|VaGv*ZGN@L?42r@y}JI1RGz4N_z?kbMpbw#2i!r~O zo{VCUNvlrNc8LoyLt9%T4Uo=~74jgvQ(>!|o4B!~4+fVfx-D<;%#=&X5TC zMDGIZhLoEQ?z;$vo`rhy+x z$}^nt<&qQJw$7dBs7ppG|Rj7Y|XQ|B*t=R^Pf zH|L(xbB3D|;Q9OiJ&091JTiVRXse$TgUEl4(L_(!6n`&PV1nvDF|o?;A=XPe$?FZ5O)=SsAg7a1rGV2IL7sryQZ_PmE0BWKixf|uA8fGVmvXaj z?T<%!e$$Tu$2r}vFZtUaU^jw2OG$mBj3<4~IF>_+OEzs-BOZiYH!}3eZM2?_r)_ci z^p>pUr1iUM03oVBR!2MZ^PEaw7tWQn_UxyJlT2*Pvs&Yd6@+0>pH=B=IehekaAsp| z&#;UpPAA+sY`x3&C1-bB=Bw2v;i%`-xWG)UZ_)u{q3e%ifri%eld=+!#*sZXmXWCj5g{)USL*MG;}`s)fjIi&u_&U?w;}CI z$~hSNK<=PwriP*GJr%6F+E?w|!;a&m!^qlcLG=b54)n zdXC?i(mI#C0u}^IaQTY7+e$Mwc%Kg#`@gy3Sc!t+oeT>=7&6h?2ZKOndV3 zxJvc$1ZD1~^E2X+ze0B>U+XBQ;W@20pZnjEY6xm@UwJzR<)BeRk;hkVRB{`PRx&zy z16T3vFgA1KgCVq8qJP-)BZ=rR#F1&UvC?XfV{=Rr9S0#JnK6bWMrR+eu@%JJgh7Z? zB2AA)2_u0ot%|R3Q&AuyZC`urV9*m&YI9S}j@&7Suo<;_5EQC8ovt>FN?BoO7%Va< zJ@$o<%x?3Hs0ipu-BHU7pG$Q4Vv;;3Cvz#rd_GEn z--ppDjTWA0fz2`+UYc4h&Ln%lrY?!8<6Ez=C!m6JkbQTjijhK3Dw|X^pj_r?$D%8P zy@`ToAXg&mO>K&4adO(H#ueNmKDvEf96)@VpIwR^Wqol+TiUZGEVm;Tg+*d9a8ItE z>SWmAuS^m4()<7KWmxeVA$gx`cHrkgVgJ7a1<@Z5cy&UTLizY>@A}t5Ar@a+4Np1- zz9nT9sT3K_u%9+{*(Xs;2AwARew@d*+im7J{7vlrhvrVRMAcK2?7J2n>5Fi!I;_Xv zJ@FQF9(GqxE6?5^xzCoK*DD!9?+7~#ve5A+?6QM85CPs=mB&Ti$k+6z5D>(BUBRre z=WWI$KoyvZe(X+i7PHqr9F@C%TmeddNqhnVXeTQevX0(~_`I!fA3dB2*sP+uM}Ux6 zp+6qaqxti#bvH^@!na+T_twA%s@OkAcv{+IG?@#FXY-58N-SIZhcP zIkGj;Bvvr~Cf_iWa$yb9L9S&#Y`kWpa{vYaZ;u7s_5;on;%Jg#Kh{zeg?!J#-0yBA znyZf{kkxPh!3S9dzw~pK9NE&C$007VV`-sQp-BEAy7BAj7Fn`}#xS+%sn@*2R9Fns z#OtiODHOz;7!8@*(W3y9Kpsjukvd*Mi?)p)z45s5&>-8#ds`d}ZXd9${!A~sJlc9d zC;D`CT2s@a?-n}Vtt&o|5|gKlrPwTepX!MFsIkB-$qY9Cv~9RCb_VxljjdPr=S4Dz zTeCqn!oo}KxUCl9+Sxz26XDiVEPU_}r=iF*fifaeFb8JsZx=Y3@QZ)vU&GBhshb@T z+|83oQ&ks7E3=OdRycGhi^Ha($$lvSN*r7o6QsYfC@`s?>A1tie!8)>rsFF1R&AHj zM4b({lQD8gNzi}ao8lE~?V#yY*ys#(a=70o)Gm5~Ur1fDb!AsV%o5niUG+4&XXKN5 z6zgVz+fB?)THGprlw7bD@Obq1Dz7wURIId3#Xw!TaJIb6V}Hkrh@;%=^MXGI2C{GX z8)cBy=(<%4%C@O<(nNh>LqSN7b9z&IE*>$`a3X3M(Y((J^V3OXbN1%pL?RRRq#!~Y zJZS3+GK3p^#n~~4KYcP?3U1mSo`Zu%C1Eyo7H2R(g4p%|S!Fd+ccu@_;pJlT+Xhz5`9FjF`NUpI>#Jyf`Qah`b|38_uy)e2%O6wskSP_E9lA@05r>1Jv=Y_}IJG+8c8J02AdIHVSE0{@dl_Ye#TK7Q_dAkn0PLDUG{y#3-^evfIyd$RT z=l-NJ65?HB)P5}maFa)pEw!^yZ6r%!ZT-WhJHEk- zJ8qkXMSc(UI`5L&@Ba2n>6qRlFjsPW>FI%}C%S(58INZl5znal7T+T*%?A}tHYTNw(;JyXptLTrmXJkO1;zdChEz?a(tz& zDc$-;=jq}&&Vo6D;s866eY4;Kr3R|SGnh^mNH~)=jPR~k-$P$wc zvv?hOB2bI=oHh%ZWfe|-nRh^so8hz~cRN`N@;hq{5X3@+ah|>|DKivWIO6C=AU+(t zBfT0+U4*g|vaz(Zz{nj?24$5RR{NAE?XG3yJQ+=~ryStHLJ-@^@=J53;I)#V*Bw5k zn(>=?)J1>8QVPzxjl}C@E~%V80WQ0k-lVni$aD$4Al~;fc*}2C=8mu1vdgqZxtut# z*WoS@zyd>nqDML_8~l`9xlaKMOZ?TKRp&bob%tqD7Idx^|M^qZTlpXe?8|@@jce>r zCw_~9BmZNoSKozc`kH?4dl2rehYg7%($#>VN7l&o{L?00Z$#zmB8H%avVlNx=tr(J zH)gzA7g^8y4xk*Q)|?#aGX=~m(!pH4|8t@ND3ARi&z+qiD;;g2RB&4xbR);jG`%YZ zzeV`gu29wBfLG3c;Y`*y1DwiplbtbICTD8ghxYg1yA3LsO}@h+L4N-uE9J&AzuI0I za9!}}0>Y#!5;33NC{{r$ox(8Mc5oNV62hO_5>pe zSRkuG4rie3wM0UUI#ihsFED4hSS?`4z~G?pu(jfLlo%|7NsrW-`$e9vCZ6Q#NfjPZ zDvW9GG(5LEq+L&GnmR=8!nSA;Cbd_rL#-oLNxKE+SAM3iM?uPvd2~dRXEw{mCKo)m z!$g0jo9GESXWpN_|@@Q0qVzA-wUARtQx#pYU0>IMe- zc`IX%Q!e?OS@*0f4@Y9Qa!GX7K3PKwW@kuX{|Xn|S+=f+1!t7VDO$QPVSlUx4j18e z#E+O(F&wyx3k#H|eix0m#F6PINt|f1h#WW95T1pvmSXKx@}XwXIE6+f;z&CWE zNEc}5FF2Q0p@&;^ClL7M6QgoYsLj9WGKJJ3G_&cqR{jq20HiX4iRg_j_j+s zC#KNrBR>RQd19^;Ltp8v2tu37ecs7cn)uW(Da1e_KzJV+&z~6>+Yx&+2^AV3w#Z65 zJ~O@=5lJ%dhN0_BS$tLpxH#U-Nfo z%BIzC&Lu*`d*mXJ_RQ!2PCfMg#ONHj-J^sxj!EK#C&Ui|z%Xkx(d2!Qs^Ht=fl?Yq zFJx1%?lN%%gPg=ngzD9Ft${Rz-1(ae-|b6vlJlr(^angNkd)8zBqt0X5R)hFBk$m( z0X2X(K0S;=-nnef{M*JT{fHhK(3rgC2%O)kzqdmCfCkj|op6CShmZLF?L%a?XVt5_ zYgV(5g2hiG6u%=PhxMC4Xzz>=%TvS~Io15rD6|mN>%9^rnN^o4qlkM+e7ME?;M`ay zu??9+Cj&apADPje{Af0SYHCK}sJ!$smVKruSa*h$-;xHq;njCo?2Xe=a+ioF{X>R% zH?4rg{^tG-z6^NRTlxFf{jdJTbwX4mVL(9kd)4@p+eEBTh*b18!XQ7Z9SSxHP?ijn zqHgooEajgmCgKO_kQRFz8!0>D#}w&=It%P*2w0|2k|mC{@HnbxlJ$*jc}2SeDZ&e5 zxAhJ4vljHftS`@Sa~&e{QexF~I?(^Zjf82;;ZQ@|Wv2nIr`EU6ckZG)W}a{SLUa+k zF|=dLY3-3+pLk-Em_PmClBl`CzXOI6kJ`B$jdQc4Ue6kI9 zG^J`P@FNN(ZJ(ROF=ja$K8^p7X#!fAsB`4aFXVO(_YEud`9HzXbR6P@ps7S+x7Wn; zcl;LjLEy@e&y9oo$AqGdMte$jE*y2^yH)7Ffs53d@J+=pY&l74nd6tc+Ln?rLwFay zry|T&YwDC2py9@mPm{yLp7zg|R`zPU8>45ZF(@B2hvN=Vnn%C9&l7(Mg?jsZ&K|@i z+rDC3-v^nsXOEP%<9E-}aK$qjhb&i}@09o3!$8x$DR&G%Ja0hp+!)boy8!hyCKa~d z**XMGB+D3_{_xp0E^|K7CeXZUJr$s#nl`s$kqvVLEw__JT#4IAa61W)X*aR05Q`vD zZv3SCve^UvY`VS$pXsuzE4RCD)V_smQjeP!=6i!>dO$-f>JsT3lo4EK`|z@ylN<`k zM#lfmNe8M;QCOA%H{AK592Deo#XF^T0^C1&(7pRhvk$sXO`esR>DknnF2@eIdD6-7 z(cg!ACS2mdNt*p|LTfVG>zUM_meW`sPi31dY^I&)W1v3FNgrl>rM2t5+=2Zr%>S_A zDY5jktHRf>Ij{yB2N}Th_jh~se|Kgk>L8`5BV7As|%K&He z&%;z5wJk?{&I*!Mbcri)e-e*!@Z@WYd+;EPXcA;h#BefJAIE;^;C>Z3x{UBZDe<0} zq%BKzwQ{Ry8wxjr<0P1JsvE942RmtX!Cv{-wDb2D;8 z9Dxbk;l2D@+&LR4b z)e6Lt=l#@k&+3xcvr@CwjlWNeL97pY6Rwod)p;riA*X-Fe*Pg?qU#6~2*d&rwk1Dj0UY!#25u zxZJets$>7aB-4e5mr_02;fn`V+$1f=xO@()rEQ5VF!crcNo}%I*4(bZqf)>XRMLt zVGtbrB31S#ia>1%HMp^&tT~(`8}s0Ez#fc)Z_K^j=yFLpw8Z$8{{L4zQu7qT|sT=)|@`ribR$0-MMKqu7j_bkjh*3{NYp8NYe|IW#Mxbq|?~HBW z8OupwvtO(38={Hm-APsPYOe7+XYc(eI=M>qK}T1EH`{k48hJ|uI-UO&c}wzsG3Qqi z#>LUHXO#MFHh6k&tvnFRN61}LEV`ZBI0o6HodVI=Inn=%vh%V>vfsT^@&JyAch zsKJkbH4SWuNEgP5p=<@>yA~;^zRa=%+U6cnntg>#bvqK=kI=ZCxDXH^@qxH3;|c}# z7@uA}Q}6Iqf*rw6kVt|*Gkl34|LL8+?tn1R<`$&6XUI{zgR1*tKt$56^eeLt8`7=! z&+cFAOZa>^Hm9&jabZKY;7g?UUO1;0`glaP3$MY=R3OJ6ojqA8VD~|xV80|fPric0 z=z`UYLF6FW!clC}!Gz#O>`K)B+f<-L$}mNg!WW5b?kB2FA0r6;g%(p3+Vd}#3)_2a zAQF7q?KezuM@(KN)!!7_X}0Q>bDVK`%O|*Tc}pie-&5$cTuiYCT+j+x&@t(&epXYF zcBN+^wdTv5Wd4+%Mzd>%`ttThQ6(xN2!4z#Ju5HzJ7YfyGoj;6w@>CytA83$7-8*UqQ#Ncdv z>Mf$iX=imf$4@gT^}Q?ydgr!Di?!R*;i&q1l>2eMfRLkt>8XQ>w0vb#;L0k;@05Ih zi`)g^M6sj~1A@4;j2| z|Cff4!hC_7@_h?ECD9Wmg&?K#lN^ozKTpOkNPbeJc6|0q{M^nO{H&fxDb78`_@9)N z-C{2ru}>PL20o=Aj|NE7JpE4qp4*SZOgVqudONZ3rFcL+NyUWL zx~nYPp)7ZCDn`&Udk)IF?wWA>Kzd{2UP{K14xck`;|-rlHnlR3ELW z1e=gJCTUjE5|CS4#w5>mb3am>6*T8NwO*T3D~p}x_2s0`Juz?io6(f)U(4mt=CBFp zsfiY?Q&*l%bx+8~FvwTf2U|a)O{7LybMgZ5x++*mvglM!V}U3ZPATR3kLCJ;hn8IR5jkSfzvbZF_ zDY@(t576}0_FeFl9gYD<(ho**hvN^Cg8It}Q*1yI@(ylrBdt)08B9Q=)!^`FiJPM( zP4EZXWU4!4or&fSuOm&xRg)E@p=lR9GkjM_HhBFv?>L+KeZ*j{+w{J5Z>ix<@ax@x zVC0*^=mbc?5o+-KZ;zjJ@Gv&G(H=c!D`b!5Dd2Qd+vn9*Y5dwmZ^kph_RW>{!9KH@ ze}w2-zt*NgNAt+AzfL2i-gq0L1uibg;!v(9Y5y^!T$GBi($6*MC_H2)UR$u)7rFT&u4XP_?_VZpHGb zpPd@h&NhmwBM!&m*H;ovj%~sDhzC|i1HYznsHHrdve1gDQ|3!$Ruq0Rbsyns5{=+7 z`Ssf)XJ2Yh*|$?jsig|^HKp0<=y+N%%4M+!4nCNN-%%3!nzb;v#H*SU4O2hJN3DGQ zb9c+3$K({HfN8HxZGp>Hncu2@hC%1-APZ#8r%Y@Sm^v+gyfFxHA6nV@1bV6)6E#>d zE-Y6rX=wG5jS`0DWjeS2{+m|+i)Q%L*T>VSO9+eJGmv$Dkig~`kL=;v*7-r|fFWg8 z)QF^3c{V(2L^5w4to9X-e##aob-Ao(A3qJP$_g}yOjhT*oGym@)!ZWfcSbDAeG(|9 zo99V5lXkNvDwKAc;J1uf3p1tsDOFv^MXQr<3WWiHYl zi?@BW$){XS)>}xI(7{)cuN#DAe13b@F6oL{0AqAtja@OxSd)%S$IFjJx()$G6RxTSw z2tb0%TO{n;cbPX?f|#}gE9MZC-+t#sXfQv|2 zRneo9{nOXtW>O_#Ukv^~t5P}u-B^c_QJtCsMM8v=7DFBk4xD7hBFe@6vr^Hv(O2hj zA^Z|$;EkZHJX<%_Ho}}rYeqsyY#M1AOCgz3h|MN5!5U`wNtI)o!5q7VjGQ;vFRK|{z|w-NSStWS>-RU5W+RiT)7Evr{XLb5uZ+VIyS z9+~$bex2*#`bO=2Uy_fj$~GT+ZG^*m*>{st_pU*aDl1~XJaj<7B=aH|WK*SRS?mx& zhosu?JkSA?!zg9{twe6Y3HR<-DI%kw)SYwSPb;+BedSl@hC&|0Z-B9gUcqNnwwisF^I+8O_FP1j&no3I<3VOUJG$r#lu>Ua&Z$s-P_XG$_6)px}4dG>hK z=fbL}8Xtk1Lvr^ixIv;MTe7@!MN#k1BSw1E#RVf3u{Q3@sd`8k#P z&2@9Fzt03HO=ybF*Zbf4J#M;O{rJc87=66;JZ~o6tj;$fH>^*c;OoQgU75>u;@=Va zbO=y)9qh&VoH(YAQu*YNCQva8%uE?N?oJu{rnZjl%jfEKv;SB(pVQ23{hf2kdwrvd zdX2GmdAE94>U8U9Q<=M6{F!?!D0S@Sf#hq$|Gc2( zGC$l{h#qtk1?Fei)_hFdpJMw<2)-xRr;ch61@^idUGCbMUj-r?WzVeKKHRy4@;icV zzIK6#dt{E0eJdrNyyKkG^YltEGnON|{ON&JIn*A7p_j-Dm%hQ)bN>kUz(qOYLm)xs zIG3nLZp+K>nW$%FkT@er2?ioRH7ft^MuZv25+cV3G>>1q76y4KhyrY2Ays$tczXo4pUq5~A6J#o1 zyMDk(N}Fb8=9jVD5dlLMU~+YifIKATH;Gu-ptJtRW@LY=Ut0NAGdD(bPz5_E$4`L< zO}55@w-bcpN~o9YW#u>LNo8fwJYk--h!LI12oXSNX>W%TYMN(l#nL5!1OK~q^Hd%b zZoI6+9_*)uh|x@=AF|m?0BJf}A4;U`T+GsFt8Mjh>!# zDU%pgfJ5^zdDX5k6Ygmp9*{?8yhCME>8|~Sss=YeW*RWUp9_4yDr?-7pV-#Oh99XN zK4Uc^q5?he9jBw8Cp{r?$`T>`+z;)ly$k~=)!8S)P6o#O9A~seg8kRyv z)C>Mzp4Iv;>0{#aH}vn5+@x$3IWBL8DU2^g`W1T$poeny%WyYO8Er+ST799}O^1=m zI!z9;0So2d7;7ivuIc$9AYsUHl@_b4>;*~M<(6`o;%XPbjcV7%z;abSGkSX28c1m$ z{mwi*ge^O&=HebDhZ|KBmBMzh1j#AlVe5&2{Fi!vRmk!x>q208`Q(i)7eKo0C~j1A z3)Mce-lH^7#>pVRV{bt6IeKF0F&)@XXvL{5&hK{&20 zzjpO7D_#$@BfpahtF@BVJ@h|V>c#9^9t$(1;?y`ow}I=NiwTs?#}w-+GYn!SeFQ^# zvW9+UNAW^`G3*ylq(wfc-AtMoacK@D!N3CMp0RoVsg?_g?)yz@SNO3kRO=PbeRn+} z=$OD@rf&OF&_TjBLFe^*wO}jOYee)NOP;$kmCYMq^EcTb5n{(cB%9FWPCQ-6{`?C<} z4^KgKT*evGh7I^^yPt~gXtu7EP)#8ilGCSwGZL{(nT?)tEV8Nz#ZWUAU)hwd3^FoV z-+uZe1Cmx zx7@jpegtmgD!M6H^meG^omo-kaxtDHa)zo0=(G-O2E(q*N@^=pxn;$FO0lzl8Pi7r zG#>^9w?_T8$Xpiee-WZ$>#g!c6AN86D28-OLD;1G4r)7QuRjFpWy^5wXA=-!-~yHk zxK0#8i4L}dK43Aon@(Dx1LBETPDldQ3T9@l5IYjCxSqV;{Br-1Tnpj7QGfjG2X=*u z6?wyD(qYl#%^SuXnge{d_&b3+cfga4&?22Sw-`){{^w z#XN)H8*C^)t^BdTiz4&=WpWYW`;1BxZj;qFl}v+=N&bCo{lEBc#DNM#_2f10g>6D; z57)5aVg`ZEg=OlvZ{ZCupTD(k^vFsLF|~ed?X*45);yi|k@TV^LHmR}eOw{G>NnabvAF%%>tbweq1#@kfumar?aA5QIfNG3pNXRI z`)Z~UF17mCF!XzRpp~^;bLnLFdg&sZ2i@YmRHs|*ogQ_G4`ouaG+zV5aZb+;$(u*Q z={3t#q!8-GdB)hyH6o=iP%TRar*9VUA@0Ny9C2!tdC%T5yG@7oax)I3pV=Qqg_nTR{K{j-%i13I}HQcxhL`TcyY`PsifZ$NtLWf%hhhS&c zxKoe{gnLFqPT4wC_6xdrI7!i%hBBUI7B4yKd}J|v802;bs9>1JYtT1X^bOSEiRl&R z+FIKUhXwFdLE`^x_E@v|*2@_)qpktFib5!@yd%zbygFQ1w}h+Py=-ia5BWSkFZ_KR zYb&3@;r;z|O_PNg2vSu{7^xjjGss?UcE$cTOqFXA4XNB&_UIDRp2*%H)AJRtA9M9faR>cp z0^M)(a$Y=i)keuf&3l~V)ya)iod&E}w+jX~ON=3THCK(sGvQ#-35~VY3Zw__Nvm^H z*VCd#FPjgq1=#eTLj1FYpTiqv`wA-k~fvbW5$m%H{ z<^qPWMTpLQz&*X94uXD<>+=w-$&@B`iPOkdr%{%A)Ftf_v6p^>jyAW}(lIhZG2I?! z#N(oQ)P{$nL>I6zmF48-S@WDH&fae2Qde6*PG}l6wWMLnkGEx3Rv+cskoI>N*0zvl z8ch{OM`}N1>m3UkAG_4*4_CNEhM0NtsOz7jgMespbBC|$-x66E5q(5yCo^@ke2|le(0J^MKO9&ezi{WE zK8$DFQ3^+x3<*Q@jx< zG8QKLo28-a#ZbO1b{pRFF;uV-QhiYu_<aqX3cHw} zvO_uoj(=}s_Bfe^WpIc?31k$m#$~-c=A3ap+dGW%XqOxB9c<#ONBP?;HjE8~u=>14 zq7#XuSEv&(XDu4w1G#bWYT+e|P}Sc}=<&+akJ=Q}XgQc(&_~#o@_Xg995}8-~{&U*9Wyx<5`+us+*u6VtJxIHfVs9k8CVvVm4+kxTT^2$Xg!7p}f2 z$KM6vAzN0Z(92R1=vPXf8WE^YjhIYZf0YKxPUBRleA&X-j5)x^s8GC0;-Nk!$~%Zc zzsdWpW#GiJ3_Z#gtT+BU$K+6In3n5z**-9FSAT&&B_q6dWIbsQlN~Ti*)onT-Xip~ zzGl(2bV{0~#_@@v*!@*>Q1}DOHZ+p(o)=>l&Du zgYd>Sxe9fMnHhZYWo{pfdJJhYaZQg)tnQvQ5S~Fw`9Sd*A15yAYKo2+)6;xLIV9HP z^Cz0YJs5Gr)T}F@b%*oTR&b*crdB}=_(E=hrSL)~AYP(7fL@*MTw0lab0~a`f>YC<^#OotFa64{B`$s53CtnHU_K59z($cjM7Mh#JO|lHB;A2Ve(q8ok*^6rka@iVRNS40x4|lv0(cQG?kwV;) zoL&S?w9f~W3hLGXv5I(wJeTC`tpS;DVfW$If-QWN&R_7v)W6A73mIPY1b~_bcRauy zO4zKiD9|pOMVX37^s7U=7J;Za$2&FTG-c+rh38o@;@V;w4rQTbgUB>&Wwv2!>fuJ) zpbl$f%j;5>%i{A>vKJDA8uoQW+d%Gv1rUNygDIhaoRJv3u8hsAWvPTFqulyD8X=#$ zoc%7O)ykZkvnw`@p_tKE0j{>L=$H?XnwYZAm-T^O@bTpRe1z%vb+^ln`%s^R+JY8hF__?;xXXU zsC2gVI7Q$5;Ia;J)xs;m1?lo&;S-c85!9EM%4&(qhQGAV2#CvpcXXw{fW*EeEZy-F zIS(}6Cok(GnWjluhXFXB9{X#JA8d*u^=;Fi)gr_p+EyvB=cpe=XO~6y#+4S<*BVX} z5a2g1^dRPl2&3S!w&<)A+nTL}hZU2lz?!yrw1#WLj$r6h$&OG#u=R}+hE2HY>Eg@r z5XBlpN#@E`ZhYYz2VdM}Jn0?jBZ}Cv9Ye^ z$$vgEosoVxb{jt|Dd)%FJbk)xrkw#Y5RyKwu< zbgHUnnW$+w8~~|MNtVzonQOZ>lw2~nY&BXV2Fpe`W{aH5>6N88|j% z?_0C5xE)f;Nh(V4Wb&>(YLJ@q8yg6(GB1C9Pl4jn0f^c*Isr{^rJ8>(!1fS5_T?o= zQO$SmC28wPEu@$>$vBGJNwnLNjTM;Ov}V5a1+kJ53|o-wOrPaJ-g%9m%^33BM!Sn5 zT|$VUe+=H;37q5t4pQ?QaqhU{1M<`@@u^*eAiH&MLe9J?sp;pq0k)(CvA(iR=Ou*I z+cAX}AeZY(-CD|B%wz%8))B8T-IHQ(YAXI0RLUu;QXh|AXN*6lX%nNJ)i%#df@}T) zt6$_aKlh8Cx8u3UH*hAKC;bGmk`^pI)Gr5kT8-6rjeeCKL6Y<_1`|vIqI!&AYe!w# zcLCGCV1MCF_rg6S{wrlZK-wR;4Fj!y<^@1h^ z2t@?&O}fG0Xu{yqNj>U9@F8ym5wCfl9wj3Is`*1lib+F?NO-W*P-&!VvF#;i3zbWq zn`iKf>qju3uNBiJLbJq$d4@sb`8$!0YjA78NJZN_A_$vCXYa=Lh5j8eI#)bne*2Ud z*a;w4T@h+r4i;FM?LFBpAREyZeW8Kr#BhC+DqjgAtVjQtS_QKf5&aSClzTK_4xh+l zC^h|C9?NMq+w&qW1j?jHZ#WNf6A8A1HjFPfLDjFbxabn*l2^17+2nv>vBAsaM8GV9 z0D0k07G|N~F)Hsdt~{^TBn2)Ek?imx@S9Ge8?4aidmA(9dJjUv8`9n}CNCja8}5!P z6N>0!`^Fy2VdbW$x$HS(g&IVf+o{7)1%%!4JRe>9!W^BMP;0k08qXG)P?1OYygVva z!nZ%WFKC=-Z57r2;W-hg{)9A3LkYadW3A$PCK+`HbWV0&a9b_EI_cKeHU-Pa09gHg43P3Q&+=Y2?ICSx(dSra(ZTAU;{2&N{KaKrdVTO3}4rKQr6TCufWJsCZ# z&%T0%*<-L;wbkHs^y=;lb&qhw_PSPUG=_W|&*vX=NSgA>EOT_yu6(CbWBlJOz1)V` zmPcV8NS=K4=!QxXYE$VNRt+vXfQ+N(oZ+j|vDX)rFr-A4(*@$Pd-gS#Qhb%il=0@M z>OP`5JBqv?$Pw8HW(vWyWnx%D-*pj5ZTml{np=Z@mQ-qyds2|Or{$&CTK|d@#MKe8 zLVkK&P+dQfQPUHUQOiiACtgaO_9^COJ@FJ6_5okYiBPbawmUFwj30S^0@#vqWqu}; z&8Z1D+zxCZ#JF|pldHB^yTq@mJ%mT+na}j~whs|V-UzS;67rFN(V}?UK3Zl86 zE(dz;&~Jw2QsdVG%w?$O*V;218Na@Jc7^-XFl=4c{rhIbIf*f|`sie4M;_^)3{B^= z3@{{#OoT-fCHvisX-X+VY=B)Cv%yzwoqd)PT1gdmL{Yh|*3T8h>}p^)gro;)SAah_ z+M5jX-duMC3S&p~q#eeXC2abz(p^xgcw$vbt1-WB_lG;k)gXoP#OV2y1ONYuAztS5^1h-6c7If&%i5Uhfs| z@1Jk}IM068e&2o8*|X0)XV%$ky$5+a$t-O+vp%JXK>xD(-krsO6w5NMxh*E&%v1b$ zt-Q)&gT5*Cwkqo?uM8r=x$!EAj!d26n<|s9>H<_snaSfOyGL6tOTahq@4jj%-d(~JMyr)g6GR>wiCojoOH6>bOMw`qY3Wug zmbS@h0p%-ZgaauYHS)*Ly}lk$7YyB9yfPgIe~y=SyG1#2l;>;Kw#hi?b$wKPz)+et z)gr0XOpeIn{53xBsuQ>L!XrGaFhyXR4RIj`nNr-{BpR>b*SGK*3RCUT4 zpZFzhX|Tk7oTRT}cvKxeFt^DyC2`;d4>;YgOW>d6a42wakd(3OkE{qqI$asi-=lSq z4XK-ivV$+(+W_vJ%=vs`sA}s{0JRZ@=f&g(W9#5`P9b&mG-dCEv-1NDrS~}_hxDGJ zz*JW84~48vaQ!Nq+4VKURj4+KKz%OY`|(-FX%?Ynl=oE7eCmAa;JFB_)p*xI+oVe* z>oU8+iVxf28p7=U7=9bY42Y@(F6`SAM=4*E$Azs-WZx8$aJdb1O^SDs>cfg4Plc8| zZudrR_9iAgb;#(mguncdkLc?lr^l(N2sD7c>_K}`pCbJvac;M4cqow8hpajPq?brm z)Gq6=MMx1UICf!%UA?8{VF!4XoTcjK?%`78sJUbVdfXSZn$i9C6Wd+{w(`CZa#0P; z5SgLr!8%*3_F0hGn=C+Gk6@`@khg|rJ4>12^LhugHYdPAap#Ebtcv7gHPa97zJLsN zxz2v7#u>{jA8~Y>rPAA_ul{69x-N^aTQt&p0^tp~EB0ma>VNnUVBL^x-xB}Ylv0cN zzWnEYleOcYds7I&(W@S*9h65#3{E}#+lM?%ry6kHQsT2tXy zf0-YW(V!BvIxmt8VB+--O0Lzs`J{NNK-T+dDw+or)B4uE(M@HcNF|eRIrF$EhJmRL za`{8W-oM?`B0eC3@!Q!>2fwG_W!v?!&z=9}kta-6*DaT-X(gp|l9w*Fbl(>)MSd^l z^XItvkeYFDSp?9sXRnhCS|vH1M)#(^2W6d+b9KX5y7!3dH6)!&4D=xs;_VxF^q!bA?|5sv|;=RxXhZ=W~D*%B|eba9H7F@V?NJIsL{C&I>!e; z(I{6&*Elbqc5N=54ek4Ocqj{-kbZEcBB+&8uWl1aVfDrtHky9&1SDDFxf-5&SC&!q#iHBua}%fkF$vgm@#Bnusuh;T%zZOYsw zJKueBI9jd+CYZzih&H6JUVc(mJi3tFX2Lf7t)|;a@T2+sbMIsJ@0IS!i4+-=G3vvz zDJ|xMvt=el93ykz5fYx$s02H?rxMumYn8v#_ITD}L~EkLJ|8yPvPpMBzP{!2HE5sh z@Pan)O=b!#V#rxd>FDsNbBTh(%Xd8!?!|N2kvG8>IY2krO0+akyQitROb&aLR9(zj zom~}JhN5Mvlt@jF%u}0SI!SrBNKgH#a%Wz-*<-}T=aq}4OXI6Wj|Nv8nw%D^iV;zg zHoGVd-}0d;&2BPT3DGb^Yp@YJY;Be45G;qOPdYxx!dFY5n+aUp-q=PhHy>CFOEj zIt`hv_1TFDrMo$GcT=wjxxtC2wmC7I{CNH&QzyXFjDRPPI?mB>E!WCzXJvIatTkY%*rM`lmF&rMA0>}~AEpstR- z^@0;%s&IX4JEnHGIE1r|q}o+I-$f-0q`nL-fMa9J&wHC9Jt=IqEF+e>Th(l9-Bs>n z6s^B`iY(H*Max&ysDypE?{EF~^tCB_xnDKU+o#@6%$3ZqF5t8Ms(YKjFTQ&)GU*w@ zv{JCQB1gVX2Tf)+k;K-my-M6;JK%xESMgQ>zTnY>mDhjtneoxoxZoEY>;2o(y_d(dxpL zV&D7{qD}d}xu(fsudxXrwB#`{63|JU9McT&n1>UFOgb!lJNogOImMnb)e*j$H_6hz z8EAJ5+10+d8cg=vVA~WBO;Mf3ABz(ciLS*t<<6+5kvxw(NsFWHUXI&B;g|RxbrF|= z5fe9M7wYDFaTNQJrWfCHlIYn==n3Y)RgmeJsrg2l)!OIkmj`Nf&GIi|wSfPP56fpAJ(S;SmHSQ!HWTHsrm9*C$2 zt|E;?2V0EpJ7vLqKUsf{8Ghj9)Q}EB2hN19hL9I?p5h>i9(96R9mr0@D4B!kxSxkz zQd>}X+53ij!5A_LH&B2smZgEQa8&6k>UDwa7*$uOGm}EGU$QD_TGAK0CzQ4jj%J6h zV|O<%Lc~;mWL${KZ6b)CPVeQ<0K=KjP@~4Ks2I_LNIEGvG;Xj8_B7I%7V+shUri2K zR0R5CC}Vv$PYlL6qwTZaWL=Q<%VulddX1kDH{!xts|Wtr`VAUzM?6j4s#;$rTAVE6Ty4zwx$mW4A+NDIVR2Yj=-@}^k4#! z=5&e+qjKXS(pwyJjA3qxZ;DCA*xLm86dA3vs}d7&Zy^|cC~MT(*(Qm5PTWMf!EY$L zfw;KNG3yihy}{=q&Bhz!Otc8h-_WEW{F4po5z%}W9V#n;>MUAQO*vJSHw|$;(wCPo z9ZFp}1#8cyiA1HzJ;q>t2kBy_VSK4V`;lIYkBwp5g;zlI%66C2$5Vx#Am;tO8TehJ*9i5hDxM z;8EbV^VK`^1D@<*;9Ic;CUPl0e&Ww)v=>cj>AQ}6DlK@-C^_ux>|5*8ynJ`e*_e9s z{dSWH=4q!K#s(K_j{$&sJIpQ9Fk+} zB8N)VkCFm!h6K)8Cx<`S_r&g|_|@2Febyc`??l6B5x3DQtZ07Skv|dpvTu(nIEA!_ zcj*NZe+^wLMv-iJG{Yh&tkiKv72C}Rs4radx@j(7dwJF_I44+TNR)>HiB5K;s)SIV zRmc6y(%ksCo4(({wd}~vD@~gQxt9>kMb?(g_b$4SLlmIF5ms)}py3$JoN84PknAP# zc2$nuTRJ6Gi|XAdrR#x_kEfo~1`a*ZQ>s?XVP)+g)c&k~WbqARY}y~vaCGELzz}CU zfz1$CQCf5Ki^rnO3z)62CH=w^n>Tc_!^djrxMJJg|u>%tz9c zP_!?@bv5tH$Z7%miUlyZ>09-cm>C>|&4ORe!=VnVGF5@w(GvyGV;Gv0OQ@Mgm`w>7 zr=4-fi9{Ykk#ymD442>)uQn4M8ZdEM0!hP>*^$(w8HDGK7!4MY8w2CSo5ApKAXslo z=AcPxax0Ky^TcGN?$Nul6vOKL-{ebj1H zW|)9JoOm~wGXzFNYJPE7>P)G4779}ADUi_g%(3k4K1%HGJeW;CuDqb=F+Cmj`N(fBWLG>lDB)of8 zGh`R0NKKxYNb)%aNr8_>av1ZCic~y%^Qc1*s!i6RYGUBnxQ9my%$%NnY5n6bRWq+= z;p58k7|1~c<@K-Ht6vkJTzAARd|w&;D}5Ow;{6TJ>Sg<7$DMG;<;vxe=`+zQoB)7S zX@pKh({!AU5_5OCOq(813N=;%$B9_OkZz;izfHCGfPtc)oIYti29IbhB7$F0H-gTb z-kTq|GMZc12BG@V7V5dmx?br;KGMD%=XrXiy0bh`>-i1hK(*SFd->ftdf<}#`c~vR z;L)Qki2o1Y!8q*mE8HIxmzxN2kId)eAcwHxs%HW{No*f1WPO)_ame#a8vedPenMlT z;a9GDy`-p_r;3c?Y{q!G8=|=>rzm1{>uOo%MjsTf*r+z=cjMY zL;_;JDx{**1!8*Oq_|CN^*RA{4l&{CHB){i3NW4z}6$EV$2XpRO!Crf+nDf zyvVYe>`9|7lArr#UO;`!x3yHML!rEWp1PP$-|W{}Z2F%n8D>{TXVPqBlDQiI6O{u= zz40biZ5|PajfJTu@*V;Kw}`PR@=qBWs^t|0uaz2Y6vvhrUzrCcujJd3;ZaXC*ywP$ zQ%01sFu{qr0@VvU`3-VF+hJwBjkea)6UZ?k0evwlhJtzt6Ukoh4-9Vg64T0flAnZB zU@>WsPBS{yZZfuKZ!$tQA8>y_P{CG+ce+5*h)T8jofJu%U(*y0;g%d^Z642Y8;zP>S?GQTN~cqPwr|`9Vv1^nuXU4tJJh} z)%7!7>NNAkUp28`EzWUE2QbkEl|+kOjCf%o0nJM6Y%!ckSGzoAeV_G1-$F*8U%^^O zw~|SOCu*DD#4})TFp`R!)O+LIMhUWP4zNM+Ewo$H6BI)^niVXR`k&cH>zm(1_iah* zJ(iL$SRnHsUozU_wp%me+0+>=$;0BUB)={ocqS_Cd#~wnf z#+-tf`%?t7fc--n4KYGsWGRGqDuXW^Kr1z*eO!N(5liZQ~a^cI)GNL zSw6c21{LVjp^c8_rX3j98d^^BuCTa(BSrT3?TidgTa8qL!5y1a-F;9E{Q{uijh(yt zLi=BWd`&&?h?9Hw$5<^`aratEpMKcABI`NyptL7Dt8y|a=Ipuv#BxdOO*Lw9Y*$k2 z5OpYi6YTN}44T~gR%8;Hs4Hdp@c_v2BQNiHufhu7w9?gxAOF~hUiIDUm|U zx4W*kIfVtYM&J9Ji@S5`wFTwTHAp7qKToEA?@7YZ zco9O;rFG%z1bd5P7@+57j9i(cQchb@_(k<&OUjS#sxRt#t8045*6kzp4tegtM%(tp zIngTjh`IJEcUCyx_9>B0{tCcUwz4VWZ3tyAj^c5#7L$@S(o9YemoJ)ZPrigRQHKUI z>39JzI;08l(%}0-kP1n0wVh*k1mepuQNd2s2%>5RUidpvT^BU-9@rsIGW0Nzbi#|l z7fHFs=J~#qeJQbMWPw^ClTojM6(0LG&P!f746HNL64(^_rB1~5r?}g`%pf#4LxoO| zY5~uT3tr&!b45)67$6UEavfnK3a6r0C7P8fPwyjqqHCfCS1&S}#{se&&08sEuea9G ztFv6F%TsBMf~&Vf(pl_9%4}M~GccakUZ|4;&6!P0@l^_fQb;RmtSfh zGhg)7TKi-5p2*v45!rsoqV^2-La=<-ANdi}t)dgKb%Vy%tH;)WXD_N~-|J%6jbvBM zyAY&i7aD2njNGtpXb`^Hl;b3XT1vS)5y-^+LU4{oN+_Hx5t#3ex10Y8<1Y&eU{{8- z3E>MSwcvucs6}bx1~Li22t2BfILVJ(Rpl_IqAq6>QUg0%NGrtASqOAf`@)vz{(5(M z<2jWct|puEAsd)&8tM8&EB#ZTzq4nGwp+ut0x}xx1&Y{JTsAcNbMIv^8OJUxyrXuj@kr4FlVas}Ow&yq4PcWAjGc*XaCl&3vg_ zd~cl!@yiheHM?)~`sO<9YaO**D;<$OW)ITL4{)h+=SVOJ_C(koy=)Fa>6BQQ!poZ( zo>0v>8sI%j9z2960CE{|z}QASb5t7$tdwD`ftz5vDv3h#`($Zd@y^_Z?A9w`cAaFO z5!o7IS^Cb&&Ahg*;Uv4GXi6Lr7N(wW+3t)DL*IhYa-z$D7^errl9aB)BENc&P$X65f ztOJX)RyA})N(ur-i4ZVQms4-t9eYsVupg?1yuy6$Me~UZBF4I5*qkk<+LXSVi9*|ckezycy=zh0cR#>5}oE07D zF#(+vjJ?YLtA`Z)YE|?%rgoJH+FD#SgdT;~tf0rjwV!QeLQ*jK`cG6j5h>VZT?pEO zP>_QA*F~`YL|=O&X-vU58~XQ5^L*$+VDAl$dnU4$gd6a}hQU44PLYHXSZ34WUL@D@ zf<7Mu`q1kIZr{{p{BsVw^ZnMh(4?0OXwr)a%%4wD;35xrotX}7xJ7dh-sOQC_fxaI z7YY~sgN7*zTmpc*1X#f1TNL-;U+pvTGogQf6;WVd_#eR61)y+2w%?Qfuk`E#A^8V{ zNfGd*un-t~3+dkY4Lj~4uS7X!L1)=WvkID2StjOI`yFVvv6M+c{51tzx?LH>u-3^h^NfKRN1 z|26$BQG&qm_Ze|ujwB(rFffiTmYkL@#%6ZroKTGdJI;Rw_=!HXLBRNfrm+LF+ERdX z_Yv>S-ve!v2iKza6Al31?ce`)9>^p-fLl00;pA%nFV%$qE|K3Q@BglN|6o*jS1_(K z3okwQgDL%YZ9S-~{(y+)4kdE_J9izQ>EH}sLrsLxd|jOXS)-5c7Z!dnj-=0T($6}> z4F5xXP(btnaSZq`5!09Ce~5p|6~e&KJRr6Q|0bd&1|a==0i1_)aC~Y1^gt7iiT>@1 zg?2Hf|LPh%WP~oK6R3eb@0URp775IG^i$SG>4**vQUI2GO9YEKX@ei;HzFu_bGRQLS(_pKHdRIK{J366$;Q%Ip>WSr2!$xQt+%$(5O v<39-MJ>YA8{009z#z%UO@^{eTcg*1d1!3_wg%V2uMgS%YANotV{S)zjc9=jx delta 39055 zcmZ6yV{~OPhb)HS zzXM2kh6Ci(M*<>p!vPJ?;G51dAtC>%@9@tNVL?Ekq5pk?Fv#hvbszAIKnbABRZp)} zN%R|qR)jG*7+OmS^jL=qI%%)3ME^o$gM3Te4+2pv=w~V!8;ORZXk949Fxl|JiMZgkGrZF_RwgkF{t!MAmjs#D zoliD7MXvrj5Y*)I1<@Io6KOc03~+RrX|gJ+!xl+%}`Qk~+FEQ8NZyJH9;A zM!+on+=b(NYY^2k>JoLQ3O*NxzlezqW?*o3wbP_}{DM0PJjq9Awq`P%<{6?ua^Ae1 z>v>TvMtWsDYl`;*LJD#>rj&YAOkwr}qY>Bb2%8Tk;^46~o?fv%^By3Djq7H=k&M9F zVqe)g$~-V{S7)zT%m#BIuIVBgKtJZvm>Nr;6<%qMcAVs3`Nw>Hcz_;H+u7ON>+#ra zDpv|4ER|+l;qP;6EObJ5G3Uv#{e`L%pYb|h8l6)dyMuYug?t_Mfyt>Uw1#V(u+FMy zOfySG)T1?h(;15Au_yop%kQ=*91T!Ju9d03lkDcVR7Ei z`K;5mxsQN_TC3x5SvSUc#YBwQdxG=#%3|PtM{QyN@EFCL5bRLdqTn;Ek*}@dF znqpF4y+MqA9c92SG0u?ty+u)P5mso#pM`m-c7Xx3w-{Wk-U1KecY+|W+ZHD4a}m3r zPrgtItB8C0aFSLR(S$U(&vcE!5<-Cu;%rUi&GnYhjTq4~;~p+z=ICwn!sx^295s6A zPT<1Z#Muf-t3jV42}P@nOkJ>Ms>K*w+flg$l7_VT>vB4Yv;jv^MOpnBEwI{m(dy~j zk$+=#u=(5N9=JN}i!C+qq#fq{mPq$&18>(BBDo-me``9E5fSP-7cv-FILG+vr5ACZ zC4T)MfBql$YIirv1I7{y1MC&igptR-ed&8#=v&K)1T?{eXq^J1NJhnOiODeJ=OvU4 z>8_L&Yke(zsRF?Jq8Z7QrP=PlUJGKH)|#@LkNVRox>%c<`Z6|hw!S`|uAl;Owwdxx zhlOy9cF1DSsBooB2K&kA2vm7Waab_w3{DDlTta7GjDy0qF0rph~JgcM(cpmP~ zYnHjh?n@|ffM{bcw%`8M(+PTymEd#KL-!W`GpX@!nX;)xax@ zwl#lU0l!1uT&43QNM%~dRZBn}yIMB!iR3%{H`!zN8XhR@Q(0>|dZ%)aB) zDe)PdyAo2H2h%Ee01SgIO-HMEIH95#GLHqePnHWS4gI^?kPVbegw~ySbHmD;ukja- zBAxGnB6~(3i`J={u3xtm89^FODx%Za-TGNRQgaP8yV4p0ff-y#!-4%|l>eNv|HAGc z)(VZ>GSqfz=-=avmAaUD9$L7>oYuS zgd@Vc-=SiPaq*SJOIMvp_RpaRh1jp3xD=Za-3#Z|D_RxHiVh_3{!ac6LVS3<1Oh6(Ew>O&~F@kGMBc}3AZfdd94lC58* zy!Tv?;7NllfcJkmgU%_@_O_0Ur`L$GGvXVZ*MX0vqx>-nq7V@S)f`et`a&>aDgMBU zN;6ce=o@$eT0ie*59&&+ByB0RC?yd6K=xsMNOx1@iS0RZPx_-O z{d8k_fIkBPFZ)aE_u3lt^ zbcB^4yF zv+%tEalY`M&ubF=JVQ*WRocgD8!DbOJ~CC<6)id~m6^QUL(4Z68v1RG#XV-};XTt% zwu`!-?g*0IOND7Unv9CuCw6a4aYaE*?~SET*2 zTwFX3)G@^ZD3x9@hbwE)mO{KO1hTRm?)P}-DGUp@WR_H*Tj=8XY1pm7SyJVh} z3)VHL{e%6MT3s9xJW{JtisL&MLzW(aFm}PJ$4#YTcKnpG(YimW_c6g>HPE-$lGOx| zjxmHU+MMPK?^3W@&o+sZm@q`ZvlQ$Lal%|^gnhzw%}S;?T+#j^G=M3v|Eea8vIURA zD1gB?YzZHon@gD9WpP!pLC!k&)4h1_$0&FuBhG;&uU5lkY^B5I#T;8t1{78%1?ddF zw1yPp0fmv7Nw)y=3^I@0s^3{d?FK%;kXlI@m5@CgVlIIr4%({yZ&1DLh{;zUMuY)K z2ZLsAW$JIl)AEoGV4sJN+3zzSyMuNacszdfVuPP4)i#+1b&^Z0kL?Ukx4C6{h6r2b z#pT$)2IndAD>YW_!=r1McI3R>+tl5D87UKC-#`p-K;7ZknZ9f}RCfn0F6q<*e2>{4 zc~EIik~7s)th6tKANKF$2$HW07(B!J1iPhezu~;n{(eVy4og>)i1aKWx9HKKqmE>0 z1iXsTLk(>;cggz-&dAVxk@_`wnIL`LSld3H!BRMr#KQTHzE>vHO(u|@3?2!Dk8h-Bi27L|7I{gd~B_fTL>N8!%$a_cJ_a7hO zvJYWi)Xcpx&Bqp?|BPW32Q=RPDBy?x>Wp_{<|gS`^ttFjO9*@?>;Ts#N!MhaOl2Oe zB_60HozkeF*YnIb^bjTx(qs;j4yMykZN4X#60E>RHFHJhOc-WkFQKLcNbT;9yGY>& zH4!5RHO(kJ6w@wD6I`zodwvcwbsccUbi-0Q zTl-s7*&iT~AUFTYRSBRm1_3Zo1`-HH%?S9^D%Y)ms4Rpgk?AulU>t3>UZ$XsKbKS) z{M$@$zSp=l?GOnV`JTrzWV#!8y>uiw&DoJhz^sWx%HefA*>=6*&iM?uJEjf9wZTbW zpEVL@q~=?mB1Pln(PvZUP-a#(m*Om@4WSS%)Z#IdYV8g((mI#Y>?X{64CUG5j{vZ| z#jTyp5^JjD9h$LtQTm6+V!nuPJ%wFN3FSsP{Z%wrMiH(5ae6H<{g=37Cdep+9@C)zG%u&$+GEI zCgS%ryvP8RtFtY(BZ`m1#$GY&0tMXk0Y)SnPGxs~KgNj*md{zp*rUaZ-s)BSb-(Jq zGmba@Yd8-dtFoN-plGDY; zq7|W}{zJRMN|t%?Gf^k+)Zay9Lu@>G4ca4!?Qc+wuw6JxV`|Z4y84ZVGBoe8GtdKa z#%LeY0c}o)ZGoFE)mP#3X4v2}Z(cvxq*d=NTrDNQQcCfQgaof;DhOXIUOHEW%>-(F z1reR3-)$BB+BoDIZ5{sZr2%6UsvTw4F=2=NyfM5BH&^!+=0Ed|Zjmq65+n!+1qyIq zm=f52fe)C`I`c$RNB{2Om?>TYl})4(cNRNMatjLP)vy&WZx*k?q-B7gNI)!Rb+=dy z{@cq~{%aLM30zrCNw>N^r-+b~?+YXMaCdLN{AE^dkvyo`?|#bH@w)5pdy?Vz+dUr0 z%&VFNy+fLE1TWb(brCk6EKK2DV`Lf^BaDHY#14Rt7)Lk{Ty&JgE>StW#!p6k-VhQE zlN4dRd{qC#TGq*2&4ekK7>C&o*g)X`dGsj@N1KqB%txtfQI#Y2a#2d_ zQ@&@SS4b2k0U@tdX@rxBK{qB2TMHP{30j|6nIIdew0GwJb$-9sNi6BwYF{0q&R9zrY7?V7t_AjYzYdHete)EZR!;b#5(D7vO@sof z#>l{c>*52``KnPtQW?V0v@Mh$_W6JS;>IK`*xyTWARtam){^HKSIty=HIAov>%BSS zXa8SV#KxzedqdI&FH_zjV0`b z^8+Z@>6Q38(M?fDQkr3;%Mv%&~zt4t%EhDBe#*16J+1*SH_ z3r-WPM1PL6M5g&lvZUMQfGZ08fcvSyejO6#Fdouy3t@=ZU#n`9xRVMnxD`qJ)d%nV z<~na4uy*Mld4f5sx}_tBoriP=ttQk@d#xF>$=$ixHfjpt^QO_+sS^O;zxuiNwt5n0 zl@c%GF~K>eOPeCBkkad0eR=h`7o@7OVUjHkhB+F01HU#~EPKMTUIwc>YRIp2h9ybx znNBSX5zob=ew+N@feUc^tzQU&6|w{mD!eSF zp^-E+Z1Eow!9QUIdgjO5h=U0%cM*#$f-8GT=VmXYFtNS{n_`MJ++WS$PWjoRT)T%x z=X+z|W@o_7jlc3^64w^A1tmOy>)vi$hI_np=TYo22f+Za@2}$~Z9WNZ_Bc-u$hyvG z43g!{e@f}GMdvaO;4$*9N$o2l^BuqV6Vx_!z;MDV4DZMsHfG;E?HQ*ZdE6n?9d7_C z!0Rh2Nzp^)w}(o0^c{wGZ8S^D!-Ln}5GG%|d%M7RFa-3N!Y%M39E~c)>2SB42Xurt zTNjb08ITq1WKU6=Y?n~f@E-nFP=qX53T~HHCKMf?BF~M(2_;TiL`j8k`emYw zGy%cD^|$Hy)&;z*H$u%G=%=6s5}e*(!v%%weNms|r*TCVc?`U1ex z2a@8@VR;s*O0{XI-BlzZIafB4lP0C*D49j)v*~wT%uw5)Lm0u{Qk?jg^Z`#{j;Jw~ zDw)@f^n7!V&`s)NHE9>MORbYr3Pr?bH8#?$k9dMVv=68}>8;;hU>@EKK*HEX zOg1W<1;8eqN;cM+cGgUW{s5QMEmhZT2V0T}2`D~1G0S)#2k-f0S4EG&+6dKK=J})J za`j|diCa14R`mqC$CU3^UH}InR9hmeQ&qiF4zgkHB6{uaDZ7bTp#hSFLe-u^Zh_CM zpE0DG_#HoKT#b5>c#nVcPY-}-OSWe4rLx!Z8*0g#q~5lcMS8wuAhwb`Hxx1~h29;u zBR{H_ojGJG(zTEeN!pdFvBJX>RWY<7oN}2PA(BG=X)xL&VZdn*Spbk>!npR(qZr?l zeUeXScL#+wTwf8%;hS<97pbPU^$GbfUD0o;8PmL>IYtvU7j7_>D2}_kO2q9NSO?VI z0gFoqlETw7k@MgipOag#zb&JhBeWVG(e4N|OzjXk;+x7M1nvt|(JWu>xY)+DQ<0@$ zWj}Z$5}`Y>gg^d^tq!i!dv$EH6sg7gjhci9i@l8XYaVd907{nZ2>!JLt#U;4&SK(}z}|*?*p*M7jDs z^!azXlrc&ztbtgDh7&Wu6;>e#3C zT8xi#UG_6uRs_?@!+*Ujx-7jBo+9e~%}+QrpK9&qg-4U;@Lb__D+r#?l zmU=Qy^?~wVttLt2-Tv@H^I~@xfEiZ=hc#DnMJ*41>w9j|^yp5xc3LTV=Sze!0is_& zrJn;BJNIJZOE(m=&R0!)uQa7-x#^YJ*XXQ^I~C@n#0g-?+_Ois;{vi5odIY=G=JQ; z2ZN);31qb_(&47fj>9aY*k#)dD%9_W;6r-0RjxRO9`CqbF2oU*dF3aBn>Yc3xh!&@ zvi9oR=GaKN507@faYd=V^T&z#17)>$I#&aDinlC|&C`8y8XZ}cvN^c3Rq9LbORnCX zBN?XKvfK^2-^X8sZ5$W+HUP>KT!c|-(#MYFGf~{Z{A@>}jAS&$TqbnfLQtk`;wq_M zOf}M^U2qolbf;K0tQ0qpP*pfCJ;?_ZsAyt@b zlKEu%&hZ3=2D~|ed_q1xPxy58g%^&p_TtaDChtDvHs-72B_I9E-9f0 zT(2%D^WfLP_6EZ5z=p60AxA+oEYNB9n}rX@o3k|)+e&Yt0Kx@B83RB`Blny7#>(?z zPFfKZIH(!)=cfE;U9b619s@p~-rxeolgZ7PNDK1%-kE4k6oNt22Y<+rV2aa8OS$sK zQj%zJ`Kb@9qS%tG;`ngL0k$4Fagrd+R{f2eBGRG^^b+ga!ClN<$24>Gn|Tzr>H_M4GOZWnxJUY8ZG^}5Y# zq4IlEeu|U+NwI|U0IorLS!Kq$!~L*if>&@eF(6lUYTQI<6f!q5KSQU-cx_0eb#Bh; z1!6W2?M`nLv(@^x7VsQwOv_=e{Sp&(h0|*J{-4OQzKN<|8#2(%zyiVUYH6hHnn7_|_Ay=f6Y(^lZN9n5d zxBnhni7QK;AOAwx%9%2aTZ8#&XOV0agAgc;fQuPIQc02-896Z`2WYXxk-xh2m*PV7uz2Qw`jSlxvr#gB(|wn@dK` zPic~`IO1n8?`PKWPJ9+g?G6vDm*AZ0JppSzmI$cy{B=G8yCgQ^F8MBB>??;9jbB(9 z85?kq7-s<3H=UzQQj0+|?XM$}B=)4pa)D}Je+kk4V+GapQBobn1LwfGB4jCuHfaUr z85Sy)Wv;WwsnQA6VZIIPq$%ugg#Uzj23_A_87K%y5f}&v*Z;sAiC+o~*&nA#hu;en z>3=CcZaT`#3gEtg5a3(k9|`gG>~ocJXl09nEG|yBNJuY<0tmLMW@aWy&&U37v}QcM z^;z2{koY-5d21*Ijwyaf9*eYykF1M(ODMxWndK2 z4daVm^LfL6cI&hZF=^)Jl|0IP1uva$w)g(I0ayQ9LYm679mGVc0A`Sh^!egss3X?`ey*XH` zpk!P{2%4HW;a>-`GJQGW)SfDhyKnm2*}CU;}s-^R;2k&Vd~eUt4ybJSnv=q z&3WU0b1@z8_WVT}C|-RkWh@cFfQ0~o(8QxQJ#kzR?%g53x?G=M@Q)m8)92kbQi2^J zfNVLx0%*ezxo@@Pwjz1be|N0AQ?aVNWDahi^wJ+Xs35#t1rm4pqi^PJLHlpntM?3% z?nlo*;KXEJ=me~w2pgd|)Lg&OHyuawkFjLM*`q!ywfi=1up=Jj=|gbCY9ps?pq zFCz^%FcIvxPGf7I&7j-5jYe0dkpCs@A9*H;1R!7f21s!|-%AQ@xRIjIXetgXdv40c zws|5|TWI~4IW8ut)2{Ip1~oUJr$6Bvi%qoBxJ?hGwFL13V6ud0KlVZW+vnyIPffWW8cbH}pDP$QF^*M2S7+jBIT%GeH>~)QQoIwHjY)%Dn-^CFjB&HqH82wemg7LW~m(DqtDHO00g7 z0O?4x()pnPl89sfDvXRHX|r)o6OdZtWIEuz8xkN~#M`LK4N}}6Ox_<(eIxxZyNrYlT&pZFc9Ht147; zywp-QFMnp?1|BS@&nhX7+RTh^gT7HB)f2*86D~6r6zc=6J%V~u(@AjfxWZdYAjnN z2TQrd-LM3LBK@USIT{Ni|Cx9lbcN4hsF6o-fvnb*&mw;}_KW_L@T321a_4~1E2W4x zPc9i?=5!hkro*&AMDvLR#hK;XKt|Ku4<($T&(0l;-9q$nxyxB*+-IMhjC@(DDtiD$;|KSM zMS(CC#TWZdnQP{>b(dE*j>BpK+>tR6<47+cgL7`t7xoDKs0LqWo&0hc>w(YlqKHF4 zkaYPAO1|EAAPl$thR^@}f;BxgmjVe+J6Ih+!11gr4>!a2tkhhuxUOr#L3p+65%+#_ zO+Ivw79gPEk zX651J6tlQoo}htjsrQ?aQ;mv|x57wgRl&>e(3SKKefWe}kd|sI62Zt{rZ__lhuXH| zq3sS)oWQ))Ewdk{-(*d;mL@BUXwN4jQHC+D;{qEjqNY@R7Bzhqy+Ui+t5FYs9&&8S z7r)MMXvk&Jwl)kr2Zdub0zm%@692zZo2``ZARv)sC`=8WAsnZ}_9<3Vjbz>r^#9G& zh3~!BhNvJQXVgGueT;vDJ177KQ#)f<*BotcBej)|Z~uwu?THx(5u$#osd18x5Gs^G zTugSEAGqK{BnnAcX5&m~78D}e<-zV1BdayR?$kA<@tpYW@8irdh zezKZ1_88jly#Ko57D>^OpQhK`FWEPKC%S+WUQYvouSa7L*5eBN=0kwu`JLs{Yjm8C zU;e%*frDTEVco0L$?Y!NhyIYD%N>QlYQZ5I0XJ9SzAC|xGaJ^J6Cc)Jr(mQYibB%} zGjDR;F)C;4gH>h?K7)njE=_(H^sw3@S(hG@@(@Zu zDJywcH}nIrx)@_x(-nYew$8q4yefK#D#q^JIkWJDbxl@!^bkuV68_q7U6G2yl38Qi z28%ebB2#XOSyN$6nS2SuynsTS2XhftrMgIGMolJ?qJ$@vCfsp?tS)(hMy1w*rkh3d z$|YRWqVicze>O?GQnO-WqeF|jsfR@pNVAet<&kre@+R{LVF1uB|BYp>Qe#T*J!OJ# zshBzsC)3ozq5v#0&@NTul^ip7sXhN^jBB3%;NBsWdZ9w=ZlEn}e2S`FF%{;LsCm9} zL?h3DiOs%WkE4$YJ8WVh$7CTc$%hTIHdZv?bdfavCr*eBIbMuin?Ajn44Kt-keL-9 zZZsq<>oXGE8}NMo=xz&s$bi@uL8?3Sd^9PP4bGU=uiHh6%>*1~Rx9G< z``8lMSX_1qCuA`@QFF?*r5Y_qrBvByEZbLC)#|r81I(W))u$LL(Oy&k^`!~RPh+4& zF_fEDwlx}9kjvEeJAzSAbk|4pr3pzF%Wc63iYF?NTEoHaW~tcqQn`8O0uUeuYcM!M zI;Kb$R-;y}^1014*usJ_V0KcWhDzx#w;_(WS&(7HTUR05GG<_0VUo=ywGVN=4yMa1 zXm|=&0b7ekbo1CO)?#zrMqJp2MB@x}CT{JiVwv*ff}WKZ+uK$Wn$#k~U-wd~M9nZbU@xwf_y;z^E+Ef!m-9kes<~s4xQ{rVdQ=FYIDYtVv{JC* z@Zdo-!7Y{BoHCNX&bPAC1)-&4WV4qisX`5N13J8>omfq?;wp@h#gYDeL5gWgvQTByT_YdR1V$uk ztMaP$>r_sd2Oo--EtnBxOX6SGQCaS)kV-{gd_oWt$)}v)5%73!H z0h*R56R#@D^ZVbxw1!zg%YMhW4rFAIK7{|E#=Tx3%O?rJ9bt@v&^c2y?3AqJ<-wl! zKt*AQk%DxKixbP5v0|~jR3_JxT()b_OTeFyMRV|GDm|KU;OzQ^ng%73v%PE|eyIG^ zJM93+LhM?}UacX{b4Y_pKyEg87r1V>4{)Q1c1;>8#>pjS3v-RILTlZ~0^0&tecxJO zPAYp=JtZ@9%~^ID1dOdTK?-u>uUapbO9Lsueb-8*54Z)Y=OO8gc9Nbh78r7{SLrk1kNF0<{Rc=W9n%O3RSfpdI8fWO$Y zv>K_}r`3s>_=PHYyd|m`6;PR((^_`t)i|u+OR!LqK_r9=+FKTnHQ6;9x!lPqV3Sc~ z(cDpCo`h)|WgP}T&tfSs$$~XHsn^>dky8fY6?_0@!G@Vnby= z@*#g*53)vqXRnGuIe!xG7)Zc7rVw?|2!Bno<2=HAYb5S6Dr zg&b}qZkr;YtHw7{85woO3DC!2mw#7x8bzKe?7awOxym_rP9ru1b^&E5>RGoPI4FO_ zYjcbJ`DA1czf9%FsZ^6J0t7LHO~Xg3^aU9n*o$5#W`Q#uUAWZcuT;*9G6TA29v`6Z zBy~Pwn?1Veu%9Uvc3r+ZQkep(+@ju0b7GlYWhs$p*-_W+7B!dwM1SH#MfJbDh*oDE zmd}f|uwC*l7mfnJ>L$R#{fhGPD@+FxdT8qPmrRxhaqjF*YlwG~0qMlMNl+CFY_!;f zCf%bS0WJLr4k^>7*~;obN80xYZQo)HU9p)}p=>1ofduKDUAktx#ZFKXSAw zipZpcS|Hz^vf)r*{GMK}ACd$5hhJ(2$1v*k-BvykXlg`^znr^Q7;KCpjEINx5i2g1 zhe*&z{}m5GMetG1W2K4)?rcOPY0q-{3{1}fkZ@tQ^Nwu$0o4Ts&w=q^qT+F1dC=e` zc_$=n$)@BF4wOW0vgL7!dFfenf4<2%gf2(o+YM8}xn{7raAj18C<$7&-hPQ3|2vVuf zhb^@epb+gT1~4vKR{{yBQ~{dS|zB&##nUZ!dV=ziTR;DtXna z8zQ#4-E*BwCOm?}*g#^R8fqFIa_=seexw)8Hj7nbqOWpcP7SGXl~vTQ3WouXgD+np z%)Lxl&CM=kCu4}W*Z=xg&j;^YxMp>Bc9pBdx>&|G0c<)U1T=7AF?l=wJY45wamAWo zmBZCi8kti$4<)`xPx3e3jgnT_dK46$4(ZNt(Uu9^xp$qzX26#55wmXNIyMa^LypIW zUXbh;gFVnq7UNDO`)$;~>L_?d@t5__{+XEGvyPSE;avq^5qLY(uIrU9=gJcBQlTVi z{Aop|2;jG!9h#{WEtnI+ER9frQ1N_E#5uDC5Gz0H*o3@=un_?K6?spqH?eIg+aJKvqrtjhOeT@ zJ!Q*TS5x`8-f`k7_mD+dorUurI?QHbv?Xtg01@t0bTJ!=$sU5^uaCLGHRbO9*QU*( zB?dj}X`C529F1vfo6&!GoNDFo@e)VnKWjwBtvE~v$~Uq*%PPQcjzU+5Pn#Jw^AeX3 z0r-1t%|(QPcxC04X+3oAcoBQD8sC^-Ud(OpZIv93*`1>I{@B)Dx+f1Fz4SsHzS#@{ z01!=Q#%%RKFatvl-zmN$ZoDGpnG~I;T!O zcIS01{yQAs*^tmE)!82T<{*bB2Vf8{)@8_2Ui0^p&_y5ECe$${Y(2w{Ay*5?WE*y7QT1{748ucm3l;q;=BuKdTpddHMS)bMe#XN|+M3rGY zr-GTKaOeQMllOz`9Ij7j_DvM6z^&0{e3_AcjJic7B*~G$xok18c_!}U{v+JN7wgz` zqOp-YE%5xjXKb;}^#;}(0=Qw}EE{*EIw_j&8%sKKQ1*}KKMwL9=Z!-};Kuc^TK7b6 zVvD)YWB0#QMsM_lXZN!?<&lYuGa5jVIHcsFzkueuEH&>yQ2V<92o7l2x5AV}SFswY zElbe<@DfDd6yJB07bT`I2zOfkH;85A%&Wb<-+!RP7e<&B)?U#y3TSwObwo6>u$R`~ z*q71tDCz3g-`kv0V{n?QzE7rby`QGTAJo>?YFe6U2edsRTfm%8+940FH-bZ|)0oj* z4Q%XC{${+6KAw0)wZdYwXGv`546!Ho_artoMey%Q?bW=`6`!Ca5!|1Fd*clZITGep z)#}U*rlNadLCck31h6Z-&l7rwliHk6JLMQr`LH$HdT9(93xxf7#a4~4T=17<%8l+- zte^*)3C>+X58Zn(T5u-g_v0TpVBC2*fbF~f2A!^>l?DCR9?7ToX-H_*RXe6>npPIS zmBl{7SdrBlHf^fVu)_q#LKK8XkxNs^PMF~k3paHfy}F?40W_)%er&mi31HMhF>Rc< z|0omXikR+Xu5j!$+Ix(Q@caGYigdttErMc$zJ--wd-ofR{@V|+-H%(~6PaOL` z_9OV?_?fmyG>4-_20&gRDIQLKCbl9gRf*A#F|Lj;reBiPP?%bc-Cj)EVph^PPON7| z-v-Xz!uCzF252gG9M?dr0)OIfPoJEjmOpRJw822;UOO^0p*@`?a&#i++JsZw9!$4e zPm3C}{Urli;qnVqU{n!>6+lsBLH>-w{6aeIw=?P16^-L6==z7L=$2q~wGK!B=1}`1 zkyH|!XY3Aa;ZF46{NZ3InuU;Yg5*Oh_0U{9C=Yqc0FX%VTCp9XdF>k11 zT#v9mhNYv5#d36>Yok8p4b3uqSPn>geI~rS;?xS=HDL~r{QRa3b1bPw+#LXvvqqh~ z)wTc7xY2)CFWRh-xLMTCo# zA1R(0ob~6Zdjk+4sFU2H<2&C75XkSs?h3mQ3< zG^L(7T=-IbPPNq-KpyS4r-&UZ_~7;i2Y`D)vhL_>qA1Lsx$+G4{-Rzu zp(=XTnuIG_u*hL?m_=;5m&##@P%WF@AEs`K?p1qB#w3&uO6pLF&j|4t8c8aiE}mjU7pkN3b+FxMmN11vSnj^1NshU zSweGgy!#aOGcdJT0~z~zpoj_KYaQAf^ZJuNW}r|4e$a#6D0sU~9Ab9SnI<~jB4JMa zTo`zUT@64PNg&Z^a@iTA)lasMxzcNOZq2b{r0lA(YiqbN@ePw5OR=jv_^Z{b+0+w$ z<>5j&`wVASXYQLr3&*>DP4@X@hty|9e4OPq0en#W?*?ZRp*}qHza_Hn8=NLFb6Bu{ z+h&SZOaHZP7I2Hx#Anm-U*f-YHz1rH?*El|?MTu7x5b5P=)WERkF^p7I@|F9WPP{9 z(D~6e676XH%R?!wVMzSRG$NNVRmMY-4oa1rmI8sv&Bn~mrL8*JETr7Tv>YFiuSoT0 zKeXE4_Q0M$s06OZ9nLYEgrdE-eNS>-4c{+r48K8~2zHMW!_vmM^;Vo``rQd`j_(Bi z+|N6S<_Iv|7Hpm%&{1`XgUOx)z7jjP*=`$x%-#FU_t3z|!P*e2kDQ_M{@mhR)2y68 z_RcF?U>n?v3U*B7&!BVSu#{M7GG){KEzq)O_XyQH;RThhc2PSXph)ZOdee`b%Kb?p63%zK>ZM|s=BGHG4pq`wE`Z^ZI1uw@THsa%=oSuOm`l#P z<-dmDtM*P2dpEXkcy&Yp4X@~7m*P~B_If(w|9zRrdpw4>U&U1v;zY=jT_s^W_{r3J zC95n?;$1)a@`0=PL1i}nb_XW79s7L9CTo^gCq}Q0;prE~DnKQnxu4Dz-zGPmKhE@o z`s#rE3m3^@LZ^y&(CoMiP-*3nxP2yj*L*eRflbcQhT)wxWwW!3#-Tk4#+&2;+_Ou8 zN;C00d-|G1E37@tja1*(oVTUu9qxjkX1z-}=x>$hIx`*+gSeomrTR>e&26?{V{a&E z&b)9~IxjILVrFjYz8t1VuyW_4j>4qDU~p8hVl$pA*35r5s+}~F^x8+((=19b zi?wh0E-8KzDTsv>D4|Vc#$<}ngw_gYhPio^tA}&YjLmG75e+q?P-37skEmCwxg=Jwe&UasCWV+ptLu?# zWQFO&w2MY<&UWHv)a*Rc;6iY;mF`k4;)6};*MuA@n#~uQ`-XyZwZZ%j zE)FqGf`nyBbqk|cqE)-V=+GKJq4yJLY-4Yq!6P&y5&2VzAB;N`$wycw|+Aj z>OzhN&%K&cCGt$Gh`MBLLQVx0T?>&@sh@AwBuI)5bvo%?{~L;!AY(9$fi!cBu!w|N zW!L&*hBW(=5yF%pMi(u#a$d`jJIy*rUiR_}>_3T&6!N9gj(iUl8hvLJV{&?m_Evm&6&9IFg4jALw`-L=AgjuT;YgXfV+F zZp^MfU1wK1US{VEcL5+?Q9U3J?M=VBK(F_E^1g;0+f%bya$n>zZ_9I|5~7I2>)1x>lH*2^+1DbgYuU5E(@IBoz4U^i1-8N9w z0|czkn1H50_+);*O@LzQQv-nsRM(FyT22O~@1jTh8xivC{>@$a6ods-`g+fiPP_dO z4r@M)R~?onZr0W3%hU5FQncHM#Rd@1j?GRx1gpVAz`^}%#~&}QpAu`Q;?2Px0pEDT zY3JN~Jxb(APC1@jpz{n1Dy-+K_b>}B;*HzFrq{GKd6uWj;*JVLsy=5sB1Jwg4KXQ| z!!{#&Lp(JRTkHJ@KA_45BLn}>n2a?jUDZzr5D+pTu{#G~OBGEM`;GfiZ0 zgNQT;8e@w_y+$n6JOn+cee)*61aY;4$C*XZyvQkq980C@Pw z+a)b+(%nD3(X{*YqR;s)@cGFcSoA6_0fNS2Fa!aEC7PbhL~e?EGkGhV!bEDUApxIe zrZ?)#@+Sd+G1eV}jA^DfpzhrLQ$#_jHq1$X5DHa=g`}O>6rYpaZ#~k$k4zZOSb2Ri zx`+so!B~1U0F)@aF!bNZ*Cbm<4s)|hMjB3VnVYJo0_!X41TFkmjQSq@mio?7Q_3Pq z+ewRf2$k{5r0poi%<715?5Ss}dt;&+eOEferp^Fh@2sn}wQ=z3k$cKz60v96sx!l# zZEOFTOEjOZ79K3};+*~}E|r6=DSeiw)d6#iKgywm@f7l>=iR^X$#-c-I!)xuKv{!o zeCD8GaeCXnlqrAuka~8jK8B#%()@$cWO<3H189)0il-&gAy%%BIur-F%OKs3`GIpy zrwaiH*9r-oNrTVzTqKMq^W>y-urJB&ma5uN9V(OVjdn@t<1eadH$ioC;b_P_p^bCM zFo$U?=aKEyR%(gLF#OYsX9y@HcdwaHilKLgwf_5L3Gq1c&?!Gp?;ERUQ4^JO5-c5Q zqdAq#ly3wQ0;_OHFgd8f<%+SiAo~GWhere8RGFY3lpYTwOhyd-D>vc|-DuJ4OrsU^ za-uIRa`fgW%6hd>Fb_mSjtkI5=Td>P(QVK*p6B>O()#sB_Md*uyoZ@uUbI} zlNCkz!Mw27QKleOsH^CH!HO8$L;jNtEuNDXrD_DWlVH@Sg?p@i3NJR|K zJy{6DecSV5pGDSi^*@EZu)PCD1bQ{NY|(1)phvn8yZb@GH+O-hmlzRtd%uEz-jWW@ z)6y_K3e*9t?_0GHjxViqBy`ARQ}q|E8WkyWb5=(0p3XHK7yd;4UXjqO4hl4-pO#PD z6>D_1DjUtZ;86#v^O3wj4(6aJQVDbFmUJ_7V{(J`5$X-k8WBX@ zAoWeqVR$eUL8RfAfX3iOWa5*T;AHPm*YN^_tsA1>`JQOKdh0jeU_sfAY=5B#5TpPO zB*~;IlCz%WupLnfCRFNf_W1zc>2K(*qAwbs!mrynnnBYbE23^-F)6p9mu73!j_H6^ zf;Xn*ssG$c`8VTZt!UgkKr~r6@VP5r^|aWPQFtc;@v$H;fGdVH4qm)Y<%821nLMgT zWMP*S0cE=wONgG!nODps-BfUp1RreR@e^>X~d$0A|k5^?&`{wy?r=C8@b(;E>5x62ERAK_f>IHF~6{N3u3-{1hAfPeMj-yi%=~?5it}vvQ)|_maJk0 zN+6#ZL8yeH6E+Fj9cjSLDS4buz@g&ti-F*gF@SkMpFu|;IL1siyE){~ewpmwxGM+! z{5PrL<{mS_$7>Az|4CYc36vzJe+jwO-~WIL|9+8p30~ezfDBm)VWGTP5G^Z+#9TF$ z`Q>H-7M4UQicqyI(l*&+Uhcm{JCuhDT{*WG5NQs-r}eB|OOU-hMpSU9G}%V)|7`)P}J zliGR2+yJbf-<~rW5VvRb4gpdF%30fskm*1@*wkbJ;QZ7wHcj(>IIfqa4$IeOy8>Hi z82mXlnyt}v4bGPIo3L5^HcZ2e3=lpDv|YZ)1fjzjx_AVb6ck9Rrgz8Nzel}`Ou3YI z_Rl8MZL_URRt|h!Mzsmqd1+b9PfCfB7=(76nuR9ohQz;%UaNdzWnHrT?M~1!i9`~5 zn~rP)tgB=q>11UorK;*VJ&-}FENp089R;7nogAfy?b>=wOre>TTqnPk+qc2ho#rOc zvfG@;r}UfXQMnJg`z~zfVeS;PHWa38f)5?i_A#|5m}>xGoesPHy5g|Q{gnkSmpjp` z34>f=2#b%IDm*5@KaKIY*;!?{-3v=&p@EVOh&j`M&z*7*s$O?_Tx$zH(5CiTp+rbw z@iE#}{#SEg+F8A3629=4%jLh^nx)u3Fl9~eQa7^yjYmU0=Xtcu3$f~GhasL4i?>+R z(+dNv?aHN{fIoB6O>E^eI?>Nkzhxh(l-(`Mbo80qD;_Nbefe)-Q&4y+Fzu&ibD)#} zjQN}1(od?TLt@c3oF`NBDHBm2s!#KT1RrDTjTG0~qdAx#=WSC#?}7pXPchoRk@77q zU_!g|7$v^#GD*C{ziAiRg^ZaRAd@jS1qhfMfk_K&2wo+`o?>l7q@LBozhG%!aTz}a zB>+fxr{o87Aq)5IvQj!^<{+E`&gWAAvh5a#IdqI0+qNIpXw&YHd+0|Qdv6D1sri2N(qQ0@L6}-Gu2C3h{SrTE!<7l5d&`PJGqoUhiykNGn(CrRhol{9PDE z=;B3t2PFr&GVR$gx6U6%B48RbC914_;l}6+e!}*}GCQK@$2d^@A&ki4$Q1-|4GhNR z0J~!2Kv9NqElD91PP74(2x-cbP@Tw8bIHHR`GHX7bZQ$_vDq*RGw(&&W zvqTC?3Jkt=_6l15S5tCccV70LZFP_EZup&0qMuz87YI^Y>!e4H?dUZrT4(I+QkBA#3>S8s4b&n>kn9GW3H}*|)bmgodd5I#J4vQT6k2h)m2RDc?EsAi zOHxG_Swnir86_`c#!8{wF3p*)7EXZT!%ESCcJZxljK97s&KatWVwF_?AvbQ;=Ea}= zYkFxw@+7-X&0?c@8{EK{O1p=;53N)5qw~k#QQ^w`&ug0s5)f={j-$=a8%?=10Ys3u z>a%s2IiMbmBou(nHu^ETaz4^w`GImUbk^HN>Yjx_jT?PUuwpRs?_A7C&lbRO+I@IY zYV?(jsVX>5%^t@H<0Ez1C}R*NZUat^VYD$GG#46YvV-mjY_#d7$*J|sr_xlt^!$NF z9~Ex$mTcC6v#CeK0oygh;07!vocV?a*pagUD+lPZN+a2bBnf8yPYpgs^mX=ZGvjQW zWUzviB7TWodV>CvNm3*l8#N$&k&Sn0Q-wB!L_1a`^KfDp18!=1YE#3E+BcG%k z{Up3`5eKyjA)NgJX6rovlFji3uDfX}#@!(7oL)v*tzvABht=ZwU(9U7cdF$QXAAzR zpCVA$PE5%=W*b|!;AwH|VJoXRyosZzTv16xr(qzisbl_88;319^cP@`dsEz=HDY9mmWUEmR+sAha7B_^I9;qE4)YyY%M3ctUUGp! zz!=@|&xprgF}zW5xn0`yf$|1yyl+xk8E0B$@mFq~cW^XGUDwm0$(LC?f_sFyBU%h$ zR~K>)Sl2>zz9Hks6nZO8hc--5i5_V?g^`Fe91A6s z0vEB$iqC!^8c!HpA8mfVf5rUez_DUrkOU_jQa7`Jw)y98Zb1}+Es?@1wyG7t5@ahC zqN|-ekfpdGEZ@XfvqYi$8X`u~!!M?P?)m?qFCn!m?_2+DTz@EmfC&F12>#o}HKhgV z^B)&i_oS0O89N~+0YfMQmGm6||jd#nN(B z_0s%uk%cLU*brTQQ`P>wtoFxq_sX;8&iA{X?K}U;_F6pS{LA}C)8}N{iO&i5$wo@T z>-tTOcU)-l{mgw?Ai(b=FXr?GZ*rKCAEE!hnomuF8?-{-RBiFVxK4EDzt< zfb*LPJno67Q7ZlHrxC}Hu&qyde+gx0uW*ECUI^M95q#G`1YpQ54P#uj`gT@ZhccLo zQ6(Zz45kUsD?|R}7DET{_&yC!YkESLZwaJc zYY#kV=2?N5TZK>DXC*XG@rdkBx5BC66)hB78%2+NRhK?kjnM{SK#Z|5EKe5(7s{Qg zQ}W1}cX5DL2=Iq4=@%Z>v0ak4%68>F8ZfWCMdOO_SEuTcE#5n6PR%_Sls<*PhHAHj zscv2h%J$wK-?jQ0f;$WaPw8#!xL}fdd8hPI?D#;yNNp~jqNm7Fglcp-j`ErcXZ5|E zqeD!;H|q9CVN>vcSR-ZOh>=*N<+qlxKupMFQylM}0zl+u2PFzdEJ~x27K0gSkrge(-n-1Fgo!W_@uylt&DNde!{nSFxa?vd$?ka+B=9$fnmhHUKR~_u;ERx zF6qL85?=Qz;~+D#Kl;;JVAc)qM0;Bbb_Vgq=qaWY%w3B5d}APVt&S-EyH?HJ%ngia z5&(u<9%9Uul;dvP@(^SKA5gJmr{^dVRF#~IZy9a(>s8Cgw5J5Z{^cNG<(rKl=X#b7NhZV)q#9zg@8is9FQk=Zt>;mWvOE(6-p7P`;-NEL zfGYtsz-Z(J1+s)y&lHYS+|}Hu9iWL+7!gtO@G;u+3*IVzcky7;k31%93x$8~E!k6;YSjVl@fMv5T0GfuLMqyIBkY zZX~1wrq9G5lkrI*0}+oUgvpNSJ%M2R&te)4nQUAufjg06?=@2p)4Xy*1p+*nU$fjkxW^QXUFCRDqeEP(CG3lk28 zDT)ctzv8`Y*n56+aA+FP9Vt|j_C*HQ5|iic_r!HFyXh7?u@*z`?+A3z$(ep!%Cgg+ z$>*eG>W`gW97m8M`*VE4gWTn2NF8FkRxaeea(iD``XejWj|{x|bG$AJFf*&0S}Rp6 z#=@;iHaPRI;N6OQ87$u{JAleNTAzyHoV|_I;uDG!texo=%TLXBg#+%vOSx|xtU1cT z*;BRmNU@f=Caf(v2GcK;QE0wA$=?H?o>6?#?iMcWTe))$E)aaICh5ei#6&Mp&Q?C? zJ5ie?xpgcU@7dw^hsXK|9pZc5tlcp^xp!Zme}>_OxF12HtR98m;{e0(cLNeXV>pWx z%w=;qX=Slc%*-yw$*uYrp*^K{1)r&6H}l?DU%`BVQD6g0^YpCWNcgj_6Q8J2JygLX zZ;(+rhb1iESokWhmQgu-HP)XrJLxQG5+PY-xyJXTL60|c#^1RTi*v7`mX9kC=OHL^ z7Chr2tbF}5jB)+OSOESRhe-55w-bO+x!9pxWcsiN1Br1vi6o}Lj{pnP<;trlA60M) zLeMubF4tMjL&kE}H&fjM?BU#=M%(UH#;9-_WA$B2;EAs`3_Ua|4swI~;4Kw+<||yM zV>nJ!VTxHZG%IuJm8h}n{MHo*1DZbi+lOa z+eoPXX=^Lvlj-22LAjehfNZ-aB=0eGE(E+UXZk!qqQ3myakNLytGEZh8xQt66gm^@ zr#RN%hdz2JK%tC3n+T&+@DiHi{tEZqFI!N0Et00xfTPPeR09ucmBZz_c$4+L?KI@%w2@16k#7@d!{9OJc`f_t z?|B#p8ato|WyLO1gUD}UuXDwL8#9|ZEW;j|CwMz6_%VViS|>vv`%vWWiwHlB?+2z+ zf=#>32lWs)X)@0~oyj)So+9ssvgr=?IrRQE|Gk#}aXL)^yr>2oJo}dIRC7)oIyXyf z11euic135!)jp@j6(pVqq&t}$XmNUFx{>!5t6I6K^pmRVZKI4dGg0fEDiEF&PkGv= zp8?QRL^K%IvhEBJ4?6G!5{hr)tyFfBYWqOv(mcy7fg6KY3*?=QY&Hn)9nT_&E1^0P z3skPhAFHYUAVP?Pr4{rjVPP-Lt1t)WfOBN8wzVpiFVIgML6(1^f=bRIx1q)Ac&S3A zv^NIpT>DXkB8fg9UlKE|23d-jXBqTmw6fF9R>E)x;9^=uUk8ouYB9M{R_9Ny#~(Kt zhbu9U)4Wwse93aVilNF%*#6nH@%Ub^iHC;p5PPQdFPWhDz@OC>+E35}GDwIa09nrJ z$stFB?R?s#HW}}_Ibahn5fSDl`ZC~adOR=ER=GosiXS?N^_uyJKHOQ7!Y_!WrP7kB z2U#!9Z=mBh(VXE{X0IyT9{=**#Tg1!9s#4SAm05Ps|)S%M;Jv+^}xGVJ7H6I-0`d| z=7qemuk-Lb+I{#6)v?~4LDJ3!;EH}b^F9Kd?UtYZ?xr7WMqx4ns3YWh$OB((V^mho zr$kl7N%hHaoLeSZ(TR^1-WRyww|+jegAL|ZjAl@f9Q^Fx`x?&$5^NgtfH)pbCT0pXTKBu$fCu|%rz|8*H9ATbl>AOl)>WMT~9Mb`Xr z`>u-_onE5j=hfl}o*<5xo78a$V|ML1$-rdjQ4Sc=teyLklCn}8l6 zP`NE8{O{DM;P>T94%<}jHRP$P@`D=F*_3{{&aTA+_)F;vMIS}IWSm;Vx0=OUqU9uTG~Z`umJ?6Rv_BYd>#AOGqV^6S;xUvl9?;_l zalG>&??QH*TmN3@B!yTC2B0msjaVq&V9;KJ?bRz%-2iUekW~~*s)sG+2wk6LQ~ePOd$GXW=Gg@zLiKhxfp(SexM zP=a=DqyU2=F!9oD*(JUuMrMA&3b@FfkgBuoB}l8=w&=KXXVTNlbK}M;F2NI=+-ojT z1e^k~!&I`Hbx>AlNbSxGh6WRj8`~isL2RFK3R@m6cG{Pq@YY%OtJ8&903vP)yhYUO zy^qDmFFsK}TK86TKRFk|M?XX#+23mTQw6{#@c_bdp(sr$?zkj3LNDRl7sK=5qUJe> ztK5jaAVq^A3-&Y@(ji6b=l+HlLOA*&@-rrni=#)|ca+nclAK(ou9)%1mfm+Ts`=k8 ztiBQ}e-gfQ1Xmns{{`|-#q=cE@2J|-X2eX9@Lbq=LGa+kXJz44iUc2L!663SmOFP`K)+vO(KQr?x@cacRz> zt6>uO;uJDLLr52m^NtKPhl9d|cp;IR82}UeIw5N@l=nUkBo#+G&<}hChDhPjn1VRO znDSTOnk;*|kZe)73cP}5y~S>~;aUG2xlfz^nYPz6tfJn&X2$cgC%bB#B3g0N+>g0R z7xSa+4xqLSxuA?q`;;nW!l#Ny<1l?#bxtF5LiVs9`C@F0e|pXh&kIQmp{yYf1i&(V zQ5x)-{rs#JPy%Y(mBNCFuz`S}y8Vz4=i(olbFSDv8;(m7;=-3nuKe;V_laQf1A)Uc z&@3T5WPv=^9l6o_L);J7w`>=iL1H|T!-gkv~_U{2L@E>tj7HO7jj+m1gQxv zqfbw~$Xz`^NMQ912^N2FER=&Y-go}wP-oRu&ayf}^gFQY-r!NT6xQ%u$l8;%J2{#v z7gOj>Q4!vZSaL<+yCK)#8IegB!4abDLn`o86+$kr<{{62t@oAs-Fj0&7*H~|V{i;= z!iLnl(-$B-TL;zwwRCcGhR<*zl>Y{1)-P@+dG?N0rvA7mLG&Z>1Bw?EOigKzbBH@1 zg(%R2!iazu^1`7^07QZ!?kC#Q%=-pe8OWGnQWZI_1u5G&VM^0>S;{5$5GO8Q&kMm? z)7DBSXx4Nj_NJs`a$C9XWWFGo*M$~Q>_N%BKZSt^_CYzJo3^l_&CEi;7V zNpRd*U8t? z>griftx`(7Z#Yt*rZ)%kG^hj2Yl}}kSN*Q-SC^G(Zp*4}kYE`c4xo4fzBnC-I$bZs z#ooXV=h*{U@exgGWWxm*Nv2)1ePDT%MdF)&zW*V1^GDUH5DV;dr%+67!R+0Aji#vp z^#guVr`4SEi`?wmDCs-mdxOn}wws8kNW?OD6RDMAqx~ zFafco$iue4rfilb&=hJzf`f(}vVdR#7RnVR>liSLUrTd!OBUcQZMM?3zermC=%=C@ zGD8k$+y1R};Ty4BVAXYj|ExUp{xNk)){#LElgmgJ6+uEv-w~S_I3~x$8b++2xkq$r-B&mtowX4?+^9k~;-u6R!m>eJ!^BFPZPyYk zJD_wh*qT$DtOjp=RivSeL%mdnI|tMMZwh`TS>jB*F4;)Z+RWiHqV#sVlrn2a12^bAN`nVqE4e5tmObPpFgJN3F8B~q}h%`*;?NrQKX+VuUhztmENWNb; zfu($fscAWAfWjLN44ApQ_1yjd=`P)seytCv*{wk8F5bQ1DA~n+Ee;e%@qvz^dSxRc z@e%KHzvJ~6P?l=K1=|^cA1&npl5ppx{>%%+r+j5}{sQGsx@89AAE8Id9HB@3go>g3 zS6cfO?6y??xJw|It+NU{r)J%XBeq-`lbkw!>hl63}OtX-Ilgnt@hlBC>$2=o*CqjuW!2br+i>Cj8T<7sWyf6c6ezeG+vdpz>AR z9g70jQ>)6NwL3s)O}TB?@HngZ--tFzDv;6}q)ltOxMD4~ipZMgsWRJPHJT-D3mKJ) zujDqy`!X?vqmOJMb&x4no~1wBi?Z!zeoe8aysIh5d%H~&bGJN}&=Mb5bf}mE{(uw= z8)>D}l_$BVlA8H~p>{AvOlK-@Oj@Z=7B;6Qbd5b!8*SgW(adP4Pk@-b;7D_0=^pV- zHAB;f>K>*Ee_LAB_nu#9J``(O(*+NHGI2pjQtDv_o`4<23PHjRx8*4?p(iQwyXs5& zs9)8&wnq^U!3UZa*%x$bSLCn)a*v!hElH8+G$MMlItT8vnvFH}3tuzv|F&e|(qR^Df<$WXIJ5T&yK$(Dfw? z4eCoxOi)`Gf?}}y5xUR$v(pl`{Ow2sIM?C{$itM?;IR~{ z;J=&+Lpo?>64!D@MPxB^WJNSpyusxQ84CF_uN@4j-AQnhwcp-%q_K6C&!L{hg7`hX ztL2YqvtM%o%1bX?)rUlisDuO;pOMYVDZ01Ik^GeHVMavG87nG`Hld0CwXheyDHv4J zdTizmPt-PkMepeYHgb+(gAZe5;t zzv56+=373zS6sQU%jSw`^8Iuj!dR9S2>nY$sq|Q|ePeWCN0a9WO%%9;CS*^(*Al|e z6r->qZy_~1&EU4nv3KDnv?{q7xNtgLAo7Iawt(D}ItpV@z(p~pWsbul-ke)k0!^I~) zXk1Cb?TQWpiV(Wo-9q#8=H-|Vp;yTXN%B4{C#%{8b^Z{OJnHv?Kr%w!mCUhG1un%8}+tVyZy1Z4hBFtWgLICF(*e?WkFp@B@e z2U?ufgYN9HTfg%E{Qn?#{+Rraklz1jW0?PFW3>NQmFPSp1CkPT|HG*X-mz@aZQl~A z+IdwilF)|IhDt{m!jKFl6Q#FG-`%Q(F*URtv#a*5uRt+YORyk{YsyK7DUq9RoYrUI;WL6tuN@L# zSl>Rg<2+#r(8P|W&Ylg@y>7*ow}IL@fz^tGRBP>AtF^M7v1GGI!mBo7&}aQ(bKiR6 zHN-D%r0jG}`RKmIT)sD73bLB8*6@eC_&X949cUhuxJeLoZgEkCOU0z>n!fLP;-Kwe z|JGcg(`0kK+;%d`(^-n|CVSyG(oAWnF_m-eka>OwD3M#Rk0H!_IwxoM@|I)WR>qQd*-Y$0=8`WcpM{wuwCTG z{@;EQE~9b%9TXs-P+A}$g8zO`VF6W|kUl!9OZ?;wonw!#(izRd=-?LXm9j6UO5v92 z^NB39vgixtxAC1MzZwGB?bidTtVF>C71vA@5r(LUlyW7d{{#?lhqnIxLzGXHL7gkm z^V4Q;#w4j{d2wT%@Uh)7q51O<^=^;n`>z=hYQfioT&T;Vm~LcACdsUsP6-II5Sqs! z&r$xXGQ7Z&eNFiN)+Gpa4};0Am+lZNzl&VNNjb{gMk1m9Kx1iUt%Fqa+8LKSradd5)=H;>Ds?sYu2;p3^Dd)H48lez#Asbcgh&Lp8-@NmOu3umbAQ zHcUQo8&2SxDIYft57w%dO%3>~Gg1MfLr+{G`mSucpH3iq91K*GbYh9c4sHoqv(QQ@ zG0_W`by2iNFm)zmUO;0DcT0A*R(XdO)dK!H0Bjc*Z7ZlXwo&vZ5u1GwWA(`xH50qS z{MQ8wTTpAF3abUovP(gK;tH7Us6aS9bT~_JeNq=o{I3sM4y`PWgf^gv9Ix<-hqf2e zldLEVv@K%>vKI9aWg{r_7&m`@8t7%TK^>G!{Xkdn9I3+XZbW=e`xDY~df_!eF#Mq; z;L~!O*1lxoa>l}^dpHMHNeWHllT-7_bM7^Opo_NqH2&DOTj7A-!Ur*7J62*%j7Dw6 zv^lGa54l(somq*Jc?f`_rP|Z(=6q1htj5Y>zrI@Q^iUl9Bx`O{y44t5R(eNc9HNNJ zjFh!B)r>0Zvdj=wEe+Kb*fkVdGzFwTc^E^=%`F>YX=OZrUU}UZ`JAfRwZPQgAzRU| z2y0}T%iG3`D2;U`!@NnxRyiIConkj|T^<};8TAAb@6E=5J%`X2aRc`*s!M!vxy;_ zDRXUGX=T8`g#V7W6|;#j6g}czIBV+2zuja}pN_5}^sSv@g5A(Tm0gpW&|zIY=h>T$ zwlH63y0l5J=hoeiM2eBLsfSxAx~5lsmT{}r`wIXY1e6Y zYDpc8+$QQ1hxG%r8CH{{`#L>Aax}OSrP8z?83vEQ4FDCaTXTf9G^^e5V+*Fwx%^N& zZWO^_j-X>MAp+wz(%On0Enc{@kQUY9Zt0ZRjXby@fA?`#f<@fd!O0gwr5l@``#*wh z8BhZ{iGddq5tXV`;zJ8EYzwX~UBz1Z(}q(lK24*ZEk03;CAnp&*XJ_q`=Z83VqMo6 zs>G?T!T~8Ta^}Y;WT6b4_%IcdDjBF(Za$Z`F$Rm?ub7A)N3EywNTi?49>P%oAw zsqI#q(|4l?-~8p=sgXRh8QC=?B`2sC=2C?rxv69^I0eNf3HNIG(3@B}e=1O6A!{4w zw*U-Y--&Z@vFGu3t#JaMXQ_#eOo}CUMGTfKO|0p?Y~Z@QMW!3MYD`Ne5VuepQ>m0^ z%T9IhWL9O3>v{yF-5|EQ3L{LwmyjD<_kq71R!;w|8_VKghl+}Ek81FNf1M1peLBv} zg^4U$8Z~-i%6Bs`fg>+Ea}cA`mDn^ns{+hiq>xam6oAx^dAeL6pS7k<+~bkvsfQZ( zwXIchdKMC-J#y`2E#8L@gwgGJ{yWcK=eA?l+nq8aEatOJZXgulxfI>i0wkde_r zVUN<&oKL1r&t0~t8a~c{%J$ncc4`}xTAjw0G&O}H0%z}y$pMM_ zA*PnJd`wluW)(D5q(T+v8Wy(LI-M$LIesV+F|5kyk2DyE^)juCILt`*1CA=ei=AyF zm2_&qGnU}u!j>jGIhkZj$WJA+zJ+Q|UFf$;7H-Z&v+xQ-T;6GX;{-O)8GZy7$kRX;^%h5C7dQc&?=jd64n4y!Lf@>k4QUP$pH4c<| z*b=8hV2A0+G}Q8vlm4EDTrqz>ug!vSHz0?|;9Xrd?%MNg^Xzg~D1w1%>3*Vdx#-M+ zKlLI1ccbqNKh6z6#qDK*M3``V_ekbGZ280t|90(8xiQxAHi;T?4JH+FZV%B_^S_UI z^~bEqG%wQL>u`1!T9v=~%$NX?n>p zP*t1;u_4x}9Ugi+UAo0uLXszkuEt~Ij>(3_%(L-y$-up7OIkO34J#a@w|6AaNcC%u zGtCi$g$7lHBRya}Sp%NVK84h9AiyGx2f~HYE$wIzjv6z>*M>R^2_Vlgw27lglc`S- zqPQd4Pg)i)!j>0Y#Fa!?!hJH)ER%()s0Wa2s5kqj=qGbBa&!gB5u2To3ehZvoW_9$BA*}5p##PSy0xYp zR8vKrEi!hfS#J?H4d557^dDE|`bo@LelrJomApNk!ugNQPr7dvrO3+_}$(b15lb!#a4#p}5jFh`uS9{IPXP+*a@vnrg< zVf7Y48R^|+oxgu{YGIq!6{%13B;TVZC2N+SCW{^X0lH`ggTS-Z)qfp8stM7>r9|{zn^79JftTM zwX8m8ZOW<@#n;AI|F%dD6~R_x+#l#HS-Ml&K+D%<;gppmFGpqObo?pj>2$MO_~ph# z9fBsi1Q_YC&Gh@iwK7*AFGU<|j%lo|cx_wv&0f4F?+AB&JmImY@}jG}@Fy47pgA#b zsnt)DS%&~F@WzFzH`}PSx$D)S{J@HG0U7ddS{9grdD+P7qZm75=67z!Vf#9Dy~{Ys zrHjK+KR1$YLvXwn%)C_DNS7L(Z>GHCvyt@c1f=rH4bvx1)GSRWEqe$!1Y*rCmfJ)@ zdt+S*EJ})Z13)7j5sIfJNRUevjiXr-q;%=@R9FfJ=ZWmP3&8Eu8neU}#lHNf1cuD? z$Z|4Ma)Y;rTY=hdg`O7GWE_DvTG6LT-PSuuxUcsmdlEDm19ay zZWe1AhjNb2&et)Tp1)YBGFZvniK?*Uf9iSePg?IGOyDi!=kCcCT`|>|i3UaL)#i4i z%82qfejn$#2o=4_VSAOaHBU%XNo$$;0wyB|xD8mT44+riX7=pHj}T$iob5;+m<`$ zK(6wci0&0b`6P3QiscU~{xrNjd=Yi?0l=X2 zc+8Vulnvj2z_i1~qDn$OBzMFMCa9m|)b!e7K95vCEGG4a_M|Ohi22t&H8f?BE%{6| z1eh%dvqU0Jks=ehSp3C9txosopIvxmXU; z$8T~OJuva_f;)XxQ0~Tzg$8530ds^uK(aQJ@NdH1!>fbLl=Dtj&ahKm ziDU~dZjVbY>eeHYb_TICLO!mtVtq?9{@1@{Ea@-6ylss=h47@MnlUoq?afsXtC%L*4)M(|)-K z4W4LT(m#iEzHACOk1XWHwygH-c7C}Si9lQWy2QVDVWHkfWo(Euw*>pltJXjH@ZWGg z7S?9CQU~HdA7p|6%jao50UjwDZ1ap7xpSB0CQrd!rh_8f=k6XI(`9pVrMTcP+y+u} z`pUOdVotC)njx#Vpjw*y>$d)A(*wO&3S0?2>gInVyY?1}vP5*tviEZk&VIsO`BQe> zed}Uq71#pJy)aN!ckrB~Pn?lqU>Sl@?UZCBUFHUf`ne_Q(AM<{=Y> zbI*|9CiVpNm6w3ir+Nnl^ObJ4RF?P4Y_{c(KFaphB2|bSbwl#X_k^>5v6TD)QWSjf zEBAv)IEKq0`SoC@3SbJQH&Y~Bm(F`JoqctJ`jve2#{^dQS5-~X)1Un`pgmG4eNw|| zGhC?R%5AvbX0Ti*vMtG9wQFUypSl=N^II4zNv5Wkc#&aO!|^A&P}VNDt?rg&mEuG% zzG)o3D3OD_uBz}#ww|W^Q!ySDBn;>}vJZdeg0v&hETyW#j{#`(TxjequjT35e^eEj z_px(HX$kfDX?a`OL%75j>;?0&Em0I05%ExECIk4%Rt$} zlV`s?5(<@57P_PH6v7m@NhF{bH)2#7c8ZnAf6zf6w!R2>6X$LbvXR=Xe_LQ0(Grc7 z9#d&WkKB`4bOCaubUbE^$U!4~*=He<{2sDqx!1_BDY{~|iPJ0PXeT&bBsar* ziWo#a>I_jPJrO)07=@SOJ>23J zNYJJV=UbF-x@fihqt^U-Q{0XwKS$-!Rf@+Ka-q)tvQQ@XtoQdaYI4B=wF)n{iT0O^ zR)i1x^Fq6yRX9OLO-L1cZ}2xCR~IRgM=V)LV}6ueU?9kp?_wvarlL$|nI*ie^Qc`P z^>fJA;~s#|>R$!FpU2<^Vf&}~@4k3A-?}(HGRFR#xcTEhIDMWhqtY^1qb4uC=(&SI zYZO_YFUGPT=(9J>$I(IR9SOlJa`>!r?WsKDizVp9%$dzQnA?uN;nzd%BX(hj`EJsQ z;FV_Jxjkb346r&q&}`2y6@3-FD{!5bc^n0AsUUz3h@Gkb~I|jci zR@LGuXVkKl1o0!?lt2zpUj~1e$-J4&8W$H#{fsa!IdOI{eOMW!=&+wvSJe7@X;)qT z=p~>aI>VXUK|%J7*u+oMl7CDyK2AGiyGL12ivSQjhR}`PE=5#PrVz)1A2aQm1h154 zKJ+Mc=}MkRy{Rgf1Hb!}p#D5nF?Q1S<^xZ31tz2K@lacN4~6lCdZ}0B_=pv7<%%M2 z-wSC!uj4~s+~U-y7MupiO)=OeN~EZV_XN~d<4|>0iqwpybq0SI%FrF-%4WZmN)+%v zJh}@M3Ve4amH}T6xFaaj;pNh;eHF;APRt-3;^j7&LNgxG4l8ieg*iG&7lDcz@ssB1 z4btOpjgliFp8$Quz{Lj5N;U<4ewn-|bLA&hyc>#3T$E%XVe@)hxRB&-3;F-`h6CtA zMt3QRp^QtHB1o=4XSyqZIFbI5@I*8EyAyR{r()IN+-61W1UCm@e8+P_byFsZK%&bf zz06Zym43P`V8zL`#VLea&YQE4+D#j72pO5B!xPUrylcdsfxhhwjYuqG2RR{KgemES z`k)bfyGt)GXwHlF!L6R_r3HWalm+a4?q|-?7x$PqH%6S{L!AUs@O?}E1Z31}&S<{b zSE8&e#)Hox>SJ|1;n6Np!0F(FJbWs|3Yv=)v_P^7?QE#L;!`Pz3fV=h!nplYolM$; zD|6%ww3s)dlq)L08*(=pw$vTL2orHZzCfWWet$(kFeJ5*$7`bw8u&a+M)Q+h^~#eIi}N zfUn_**m`$CR)8WS4noaqs7X&8P(~G@{=_SnfEwtQ$UzeLkhq#>y~^HV4j4201asB( zW=;L(R$M(K3>+b3(~a!AZiF|6p%QR0=9BLQ7L2{_^EX6?gAq&;J%rm?;z8~(+WT)) zLW9w8#ecj9h%cB8zKF*HfYM25rEZd_S074nC*@3^gr8@wkvB1{EE+1lOPt zBzRLqEcy$cvQQ5IPb6FAZFpZYX26glr= zOaCihHpBsvU+;1Pk=^Y>8N>S>3;ax|huWYsArJmAkRL{W%<3B$p5CDVzu5&jksj2Z zDVsjz-V%Zy^q%W8KzJ|%#4cn0!O2pGl~#CaExFtpq%acjZd*z?eMbo$POsX+0M%I7E+Wpc$&y2dvw3-cQNAXngI}d&C*Rc*3CDDFOou)rJ@_LYwj+m&WO=I$21z#pUV^= z>A{vz6aTqLo(=D?bLK1g!MoX{L8i340n^t;f&5Jp-1_O9@fsloIPDgCZ|O(Hzmmp ztFl}SB)@6Co?d#%w8TLDI~$aqfgklW{>{0BCy9$SD!oUPmnbtAmpmASu;KeutLHLN@k%TDr@yhPWy_4K4jHp>oR zZl82Z$X2S+SuDvqe&oO;MT)LERa&Jx_h=o>^^?B^d(6yfm%5RB+`0ce)JhHK*LRa5 zG#KoLcAAYFMSr!Z<6dc*cjI!LNC_W24+Rq3Gi!dMiq6g`y)${}u&~`jJDdLjtBCE) z>4ls!fGf*_LCz`NE;A^itfzP>9H1u zc2sxpPUmME)TOmhhpHFd1F4I!l;hI4oeijq?5Jl?w)En;Gn?wFW9qRwU1^2p(rTU~ z{WFT5*p!9}w-(5KwDW(;x(=u&nyyW6g7iR;5(vF_kS0}1M5=TY=~Y02bOT6HDT0fD zf&r-(nl$NMq$ov@D$5Ca+_~3vtooBljYzUf ze0SWW0O7p1rSMbvnQD3kIpj@-bPeV#R8YTIP27I}y;^TPytNnR=V&Aw{knr0sc#|e zHLHgEjdJ`3^_=T691(M~*-lP%MC|CQ2g&|Fxr5i`)AZ!W4<%VMF)#~i4Pq5koJrQ2 zv_hyvsGV5slo|P;>K!IK){prlRH9yR^vjkTYOo7>LsaSUlsv9fdcS0-EM`m#QBn~y zeU--d)XR4G%Qq*U~gySg+GB%3`5&c1P!lLZ*yqP z!shAWLuw;>S@DSxZd!5|uhyimT>RD~%gvi@QiE2~;&|65e8H*nXa6_x{S4Ui_6~V9 zG6LTC2p@aGPT+_a4dMP|Hqb0fjoO-QY2e=(_Bueq8B&f)5RED_SM;WY@e~*OVrp+L zZxONZhueu6eKOi6X{gUo$oZ~Shc9k9R&3U*K zcn2RJk=Tkf(Nyy0V9Of+$^LLSVI7yLx6fKBPFN=-G=Y**N}Ke*dfa`~HK2Zz{02=#A}b zVjWETl}RfX<*K4d9LRo@HyRX8_?F)aZdIY}v?FC8>1_Q?IrhD>%@mh%mvpRCEJ!=w zOuAFkXA5~LjAt15eT2A1E`{pbHE7Rd#!t#nhu$%`O5OFs+oIl=sNSFM5%p!9ptq}Z zfI1t459Xqk1^XcbHFZkrd24wExn3hi$eJ;SYQ$qtcDiF6p_K<6ULgyXi$5PS!A!#Pgeo z@6)XFZ?@AFN1%K6#IujK%=hyw!I^(hhOiWK2pB<1A9UgS|Aq2~Jz^ksm>y+qG@wiu z)vM|cY6w zWKP_2s=Me^wph2WG&-==J9(oK*M@LMl`4t{Pl2MT3>MoGg_DLmlGVK^Y40)unIilo zFS+_TffgpB92ROeAUHnwS_ow+fyB$s^_ef@Sa~hP_9P~afaCeL^?O6owy)@@tl@dG zp)I-b-K%eVNjT--@jG>OjRod@;e-YE3tREj+z!&jv>{p#kuRmLWjoNqH1Ljubca_3 z!N5tHa5DuzL5R`HMlHf^dfZc{B(`$Vr>!paZd>YP31_Qb4_h@X**P4H-y&o&V(Ps zJO59eNKcX8v3lj9)(IA;K>0k;TiZgB`rFg4m)YNJHWyYcTz?;O-_{}HDSJFcK4V3o zKm#(dLFc7y`9~vPy=?q6)ReBn)9Ya*fT)H|vV?ZvUcAFA-Sp}Qn}O!vI#bAaG@q#M z&wXhg4<`}3Pn$ZY6;tCN5Jwc2_=e?IP=&gdvQ-2fg`Khd`~HPEMEy-(DeCr{su3jW z8d{$h-X9-UurGh|qI|u${EEVFqn3PDQ>Y2Yx9tl~uHWsJZf%kLItA2%Lt7Iwk!ms7 ztfbO4?+lv;f!_oi?}^5z0NW#Jk{-FKf_sKYvCmP{>+#(}vB1=aR2()mwdyg6T)vkd zQ;1UuM-AHRf}-Oww(A#K81P^l+M zur11ataS^{Lx0{%|K?(UXOi1y) zzR@IOOPYVM#Clz%lPATrhk{a5#=Gc^^Q@DdbHo96WF!1AdsL`zEG1bV{!w(OOyiA0d8BvM1+UtRP`d3%SMN7V@ zS?OQCg7TOUt^4`<4Y)ixL9?)~wL_6l6nG#nK&_ahQ-$sc`%(W}<~${5t$YwMu>vQT z)6WGL+1huM2SyKwjtA&6OSwqMJH~=(m>eu-f6OLJ zKkFagHM5BCsqpk`*A36NajCrN_+5WC)g>`KZ5vfyKU%WnW^urYRPS!iIRDnC7%ki< zhIh_gTvNNO+WNA|I^UJ}rJ+#imYS&AkLAgudFDjL6S|e-PY_4!idIbxWNIshmC4_} z6wZJ3ky?o@xLKT1Qm%?X4GWEPt7O^fqJzJGO&jtlBF5W^P>J`HzeJk`x~dEahLk1d zr(ZzviFRZ#K2j%q`LWY{#7WHQ2`NDG8FM`}G=_=H8rf&%x@F^iW-b>;!t7kL zL(t_UQ1dQt>ombJmCHP3)!{$fi=SXzpc#o6^V`Q&w}QUFC!F&IH)v-1k9iRG*8ZVa zMxhfIYu64F9$Q5}jTQ08b{WgbNM0El5&ncK^+mMtWtz|0dt^T%H*E2Oag{4QS0>%O z9K6wM0BLxwAIe-=xWGB85dC$L=$`9r>5}_=^8WWXHT1Q`ns!NFloop!T#VTU$exzz z7LF40RSRmnTy1pgL3})a<03nvF<05zCMold7Rj1pfVh&Twx+qK#hrJFy|iwfP#v8d zRF%=oP5v$i!kC1TITQor=~AIRX+POrr|PfPMZDXp^zxVhnjfaWt{mW@ZW&@Uf*&y5 z?OZrg9g^nWwq?=Ls*=;tnMxEh;!o0=G;tLdnMM z{rRJ`{0*O&CvVyUDXGu;mWUAa+}DDKn@5Ugfv9l-pRh%cX)f832 zgDSF355b&+93l>N-WLb#T!__AxgfOC1cji|9@ct~kJ{fJ7n}IrXEIlhCC) zG}rT!JUV*w2(q+yF0X#S5G@u>+9#^Fvv3`1S zDT>UZ1p2&uO!W;vvhNoZy&Y`fxn01}FZbR2hStgjg%z&yhW@gKq#P zZp~OEOTU>OYTb|#)}vzKp-S;7G#RR;Ch?N#VdR^9>QogkXC|qEghymm9;hu}#uQum zkZX%nXs%2*F=GPeXhG)(BXp{}cFp9j(JeYtVjrQe<8!YnKfgQyZs`?BF%YsJ93W{U zg@>6GY;@>UIj&OG846G!cjZ-cnOR8sdR~o4E|dBTdu--_gXD1_|Ort2jkKJ>{(3OGA)%@5KQDKLpd$_a7|Y2UZxZL{Rd_M~ExmNzT9 zu3{A-d0AUzh@0R$d2)w6s_g0;oFDPjyZ#11S{tjnbIWu*pVc-&l3A4qNpEkH2p4JU{i^slq<%m#PPmDNu@kGwMFiibr7Qt z<)dy5eK&0rBZIZbq|!`tp~ynCeFWe0G-oRL7JjFvJahLtIrvVr5ED z1fOE4YC5o1u(eNt;i7h1oioqyqI;_F9+0D`OUfmNwNh zRk9wgkD_aw!*x{Wycit5PpCJ3pv|nz686xr9 zFW@Swjk&p;{cFmoFbi>utj78_ZxexMYdKP#}Ju7o5L53BLVtp7~GdXdeEjB(op@mh2Wx!DHe%C@{Dn zb6NuhxE2-vVEh+(z*6Sob?|t+=nNj6mrlwEdMGfpbb@02ZUi1N%upcayTX~=c1wFM zjlh@hmS;p&zBUpz_GIMV!=!J!fHnx{04&$ZPlkszl>DFCoUk5CV0xVcC_b&K zTZiL~+kpZ}5U1x11w=N;@Qxh;`3+T2aCZZaH{cA&xyl2gKTmc8o($t(8|N?Nx#Hk> z-gXjkx_#5$-9f|`>EaFs%R7AzPBF5W^LRt9zy{`m;Qu}ze?!fKosWI5Dcw#8z-tWb zjEPv0uKzItJm-Y1-vVqt)1L&smgE%s|AdVHd#%3#mBHZ(I$8hy7jqFodN%we=5$_OH?1pr)xVU}IPI yj0UWUF)R%my@1!S$bUKvYaRfLU@!o{#`z)o2tshY /dev/null && pwd -P ) || exit # Use the maximum available, or set MAX_FD != -1 to use that value. MAX_FD=maximum @@ -133,10 +131,13 @@ location of your Java installation." fi else JAVACMD=java - which java >/dev/null 2>&1 || die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. + if ! command -v java >/dev/null 2>&1 + then + die "ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH. Please set the JAVA_HOME variable in your environment to match the location of your Java installation." + fi fi # Increase the maximum file descriptors if we can. @@ -144,7 +145,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then case $MAX_FD in #( max*) # In POSIX sh, ulimit -H is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 MAX_FD=$( ulimit -H -n ) || warn "Could not query maximum file descriptor limit" esac @@ -152,7 +153,7 @@ if ! "$cygwin" && ! "$darwin" && ! "$nonstop" ; then '' | soft) :;; #( *) # In POSIX sh, ulimit -n is undefined. That's why the result is checked to see if it worked. - # shellcheck disable=SC3045 + # shellcheck disable=SC2039,SC3045 ulimit -n "$MAX_FD" || warn "Could not set maximum file descriptor limit to $MAX_FD" esac @@ -197,11 +198,15 @@ if "$cygwin" || "$msys" ; then done fi -# Collect all arguments for the java command; -# * $DEFAULT_JVM_OPTS, $JAVA_OPTS, and $GRADLE_OPTS can contain fragments of -# shell script including quotes and variable substitutions, so put them in -# double quotes to make sure that they get re-expanded; and -# * put everything else in single quotes, so that it's not re-expanded. + +# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script. +DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"' + +# Collect all arguments for the java command: +# * DEFAULT_JVM_OPTS, JAVA_OPTS, JAVA_OPTS, and optsEnvironmentVar are not allowed to contain shell fragments, +# and any embedded shellness will be escaped. +# * For example: A user cannot expect ${Hostname} to be expanded, as it is an environment variable and will be +# treated as '${Hostname}' itself on the command line. set -- \ "-Dorg.gradle.appname=$APP_BASE_NAME" \ From 9b8035d654cd4e36e79e1b8329f4457e0f3087f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=89amonn=20McManus?= Date: Tue, 31 Oct 2023 12:08:54 -0700 Subject: [PATCH 038/216] Document why `EqualsTester.addEqualityGroup` has a `@Nullable` parameter. RELNOTES=n/a PiperOrigin-RevId: 578260904 --- .../src/com/google/common/testing/EqualsTester.java | 10 ++++++++++ .../src/com/google/common/testing/EqualsTester.java | 10 ++++++++++ 2 files changed, 20 insertions(+) diff --git a/android/guava-testlib/src/com/google/common/testing/EqualsTester.java b/android/guava-testlib/src/com/google/common/testing/EqualsTester.java index d4484702a994..5f02dba84855 100644 --- a/android/guava-testlib/src/com/google/common/testing/EqualsTester.java +++ b/android/guava-testlib/src/com/google/common/testing/EqualsTester.java @@ -95,6 +95,16 @@ public EqualsTester() { /** * Adds {@code equalityGroup} with objects that are supposed to be equal to each other and not * equal to any other equality groups added to this tester. + * + *

The {@code @Nullable} annotations on the {@code equalityGroup} parameter imply that the + * objects, and the array itself, can be null. That is for programmer convenience, when the + * objects come from factory methods that are themselves {@code @Nullable}. In reality neither the + * array nor its contents can be null, but it is not useful to force the use of {@code + * requireNonNull} or the like just to assert that. + * + *

{@code EqualsTester} will always check that every object it is given returns false from + * {@code equals(null)}, so it is neither useful nor allowed to include a null value in any + * equality group. */ @CanIgnoreReturnValue public EqualsTester addEqualityGroup(@Nullable Object @Nullable ... equalityGroup) { diff --git a/guava-testlib/src/com/google/common/testing/EqualsTester.java b/guava-testlib/src/com/google/common/testing/EqualsTester.java index d4484702a994..5f02dba84855 100644 --- a/guava-testlib/src/com/google/common/testing/EqualsTester.java +++ b/guava-testlib/src/com/google/common/testing/EqualsTester.java @@ -95,6 +95,16 @@ public EqualsTester() { /** * Adds {@code equalityGroup} with objects that are supposed to be equal to each other and not * equal to any other equality groups added to this tester. + * + *

The {@code @Nullable} annotations on the {@code equalityGroup} parameter imply that the + * objects, and the array itself, can be null. That is for programmer convenience, when the + * objects come from factory methods that are themselves {@code @Nullable}. In reality neither the + * array nor its contents can be null, but it is not useful to force the use of {@code + * requireNonNull} or the like just to assert that. + * + *

{@code EqualsTester} will always check that every object it is given returns false from + * {@code equals(null)}, so it is neither useful nor allowed to include a null value in any + * equality group. */ @CanIgnoreReturnValue public EqualsTester addEqualityGroup(@Nullable Object @Nullable ... equalityGroup) { From d9d60f821069a9b11c96830d221c33ada5d38fd5 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Sat, 4 Nov 2023 07:13:51 -0700 Subject: [PATCH 039/216] Continuing preparing to make immutable-collection `Collector` APIs available in guava-android (but don't do so yet). This CL is further progress toward https://github.com/google/guava/issues/6567 RELNOTES=n/a PiperOrigin-RevId: 579462040 --- .../src/com/google/common/collect/ImmutableMultiset.java | 3 +++ .../google/common/collect/ImmutableSortedMultiset.java | 8 +++++--- .../src/com/google/common/collect/ImmutableSortedSet.java | 6 +++--- .../src/com/google/common/collect/ImmutableMultiset.java | 2 ++ .../google/common/collect/ImmutableSortedMultiset.java | 2 ++ 5 files changed, 15 insertions(+), 6 deletions(-) diff --git a/android/guava/src/com/google/common/collect/ImmutableMultiset.java b/android/guava/src/com/google/common/collect/ImmutableMultiset.java index ecb8ae45beeb..9a096d286c35 100644 --- a/android/guava/src/com/google/common/collect/ImmutableMultiset.java +++ b/android/guava/src/com/google/common/collect/ImmutableMultiset.java @@ -56,6 +56,7 @@ @ElementTypesAreNonnullByDefault public abstract class ImmutableMultiset extends ImmutableMultisetGwtSerializationDependencies implements Multiset { + /** * Returns the empty immutable multiset. * @@ -636,4 +637,6 @@ public ImmutableMultiset build() { return new RegularImmutableMultiset(contents); } } + + private static final long serialVersionUID = 0xdecaf; } diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java b/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java index fb3e1bcd32c5..fea0f460e1ac 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java @@ -683,9 +683,9 @@ private void readObject(ObjectInputStream stream) throws InvalidObjectException } /** - * Not supported. Use {@link ImmutableSortedMultiset#naturalOrder}, which offers better - * type-safety, instead. This method exists only to hide {@link ImmutableMultiset#builder} from - * consumers of {@code ImmutableSortedMultiset}. + * Not supported. Use {@link #naturalOrder}, which offers better type-safety, instead. This method + * exists only to hide {@link ImmutableMultiset#builder} from consumers of {@code + * ImmutableSortedMultiset}. * * @throws UnsupportedOperationException always * @deprecated Use {@link ImmutableSortedMultiset#naturalOrder}, which offers better type-safety. @@ -804,4 +804,6 @@ public static ImmutableSortedMultiset of( public static ImmutableSortedMultiset copyOf(Z[] elements) { throw new UnsupportedOperationException(); } + + private static final long serialVersionUID = 0xdecaf; } diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java index a9fecc2d69d1..236eb8ee2acb 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -62,6 +62,7 @@ @ElementTypesAreNonnullByDefault public abstract class ImmutableSortedSet extends ImmutableSet implements NavigableSet, SortedIterable { + static RegularImmutableSortedSet emptySet(Comparator comparator) { if (Ordering.natural().equals(comparator)) { return (RegularImmutableSortedSet) RegularImmutableSortedSet.NATURAL_EMPTY_SET; @@ -851,9 +852,8 @@ Object writeReplace() { } /** - * Not supported. Use {@link ImmutableSortedSet#naturalOrder}, which offers better type-safety, - * instead. This method exists only to hide {@link ImmutableSet#builder} from consumers of {@code - * ImmutableSortedSet}. + * Not supported. Use {@link #naturalOrder}, which offers better type-safety, instead. This method + * exists only to hide {@link ImmutableSet#builder} from consumers of {@code ImmutableSortedSet}. * * @throws UnsupportedOperationException always * @deprecated Use {@link ImmutableSortedSet#naturalOrder}, which offers better type-safety. diff --git a/guava/src/com/google/common/collect/ImmutableMultiset.java b/guava/src/com/google/common/collect/ImmutableMultiset.java index cdc9f405a455..76a6eb061f46 100644 --- a/guava/src/com/google/common/collect/ImmutableMultiset.java +++ b/guava/src/com/google/common/collect/ImmutableMultiset.java @@ -660,4 +660,6 @@ Object readResolve() { private static final long serialVersionUID = 0; } + + private static final long serialVersionUID = 0xcafebabe; } diff --git a/guava/src/com/google/common/collect/ImmutableSortedMultiset.java b/guava/src/com/google/common/collect/ImmutableSortedMultiset.java index 0d5753611af0..454a7756924d 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedMultiset.java +++ b/guava/src/com/google/common/collect/ImmutableSortedMultiset.java @@ -762,4 +762,6 @@ public static ImmutableSortedMultiset of( public static ImmutableSortedMultiset copyOf(Z[] elements) { throw new UnsupportedOperationException(); } + + private static final long serialVersionUID = 0xcafebabe; } From b4433e022f5866e68458b8eabd821b43150785a4 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 6 Nov 2023 10:29:19 -0800 Subject: [PATCH 040/216] Link to some discussion of the Android flavor. (somewhat relevant to https://github.com/google/guava/issues/6725 and https://github.com/google/guava/issues/6801, but this CL is about the good things about the Android flavor, not the risks of the JRE flavor) RELNOTES=n/a PiperOrigin-RevId: 579886456 --- README.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 677f1065ab12..5e4863d3c4b9 100644 --- a/README.md +++ b/README.md @@ -17,8 +17,9 @@ other companies as well. Guava comes in two flavors: * The JRE flavor requires JDK 1.8 or higher. -* If you need support for Android, use the Android flavor. You can find the - Android Guava source in the [`android` directory]. +* If you need support for Android, use + [the Android flavor](https://github.com/google/guava/wiki/Android). You can + find the Android Guava source in the [`android` directory]. [`android` directory]: https://github.com/google/guava/tree/master/android From 122873d2ae4ed50a4b8542948abdef68812615f3 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 8 Nov 2023 14:33:46 -0800 Subject: [PATCH 041/216] Document and test how `ImmutableMap.toImmutableMap` behaves when the `mergeFunction` returns `null`. (The test is Google-internal for now because we're in the process of reshuffling our `Collector` tests to make them run under Android as part of https://github.com/google/guava/issues/6567. Also, we skip the test under GWT+J2CL because of a bug in their implementation of `Collectors.toMap`.) This addresses the main part of https://github.com/google/guava/issues/6824, but I'm keeping the bug open as a prompt to recognize our nullness annotations in the future. RELNOTES=n/a PiperOrigin-RevId: 580661189 --- guava/src/com/google/common/collect/ImmutableMap.java | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/guava/src/com/google/common/collect/ImmutableMap.java b/guava/src/com/google/common/collect/ImmutableMap.java index e2e6cd5ae03f..b3a6b1943863 100644 --- a/guava/src/com/google/common/collect/ImmutableMap.java +++ b/guava/src/com/google/common/collect/ImmutableMap.java @@ -96,8 +96,11 @@ public abstract class ImmutableMap implements Map, Serializable { * and values are the result of applying the provided mapping functions to the input elements. * *

If the mapped keys contain duplicates (according to {@link Object#equals(Object)}), the - * values are merged using the specified merging function. Entries will appear in the encounter - * order of the first occurrence of the key. + * values are merged using the specified merging function. If the merging function returns {@code + * null}, then the collector removes the value that has been computed for the key thus far (though + * future occurrences of the key would reinsert it). + * + *

Entries will appear in the encounter order of the first occurrence of the key. * * @since 21.0 */ From b81cf39e1dc6403df892e89981b65aac50db7045 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 8 Nov 2023 14:53:16 -0800 Subject: [PATCH 042/216] Remove stray `public` keyword. I think it's harmless, too, but I have been wrong about such things before (e.g., b/304502608) :) RELNOTES=n/a PiperOrigin-RevId: 580668074 --- .../src/com/google/common/collect/CollectCollectors.java | 9 ++++----- .../src/com/google/common/collect/CollectCollectors.java | 9 ++++----- 2 files changed, 8 insertions(+), 10 deletions(-) diff --git a/android/guava/src/com/google/common/collect/CollectCollectors.java b/android/guava/src/com/google/common/collect/CollectCollectors.java index 5fe4516ccd26..b9ae7cba091a 100644 --- a/android/guava/src/com/google/common/collect/CollectCollectors.java +++ b/android/guava/src/com/google/common/collect/CollectCollectors.java @@ -202,11 +202,10 @@ ImmutableSet toImmutableSet() { ImmutableMap.Builder::buildOrThrow); } - public static - Collector> toImmutableMap( - Function keyFunction, - Function valueFunction, - BinaryOperator mergeFunction) { + static Collector> toImmutableMap( + Function keyFunction, + Function valueFunction, + BinaryOperator mergeFunction) { checkNotNull(keyFunction); checkNotNull(valueFunction); checkNotNull(mergeFunction); diff --git a/guava/src/com/google/common/collect/CollectCollectors.java b/guava/src/com/google/common/collect/CollectCollectors.java index 3879b06f437b..2b23bd25af45 100644 --- a/guava/src/com/google/common/collect/CollectCollectors.java +++ b/guava/src/com/google/common/collect/CollectCollectors.java @@ -198,11 +198,10 @@ ImmutableSet toImmutableSet() { ImmutableMap.Builder::buildOrThrow); } - public static - Collector> toImmutableMap( - Function keyFunction, - Function valueFunction, - BinaryOperator mergeFunction) { + static Collector> toImmutableMap( + Function keyFunction, + Function valueFunction, + BinaryOperator mergeFunction) { checkNotNull(keyFunction); checkNotNull(valueFunction); checkNotNull(mergeFunction); From 15fca2940d56da5abced46c25d5e23e9d17d1b4f Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 9 Nov 2023 11:22:09 -0800 Subject: [PATCH 043/216] Provide default instances of `MutableNetwork`. This fixes some flakiness that results from the proxy implementation that we otherwise autogenerate. PiperOrigin-RevId: 580971223 --- .../test/com/google/common/graph/PackageSanityTests.java | 6 ++++++ .../test/com/google/common/graph/PackageSanityTests.java | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/android/guava-tests/test/com/google/common/graph/PackageSanityTests.java b/android/guava-tests/test/com/google/common/graph/PackageSanityTests.java index f1526c235f1c..4c863020e396 100644 --- a/android/guava-tests/test/com/google/common/graph/PackageSanityTests.java +++ b/android/guava-tests/test/com/google/common/graph/PackageSanityTests.java @@ -51,8 +51,14 @@ public class PackageSanityTests extends AbstractPackageSanityTests { NetworkBuilder.directed().immutable().addNode("B").build(); public PackageSanityTests() { + MutableNetwork mutableNetworkA = NetworkBuilder.directed().build(); + mutableNetworkA.addNode("a"); + MutableNetwork mutableNetworkB = NetworkBuilder.directed().build(); + mutableNetworkB.addNode("b"); + setDistinctValues(AbstractGraphBuilder.class, GRAPH_BUILDER_A, GRAPH_BUILDER_B); setDistinctValues(Graph.class, IMMUTABLE_GRAPH_A, IMMUTABLE_GRAPH_B); + setDistinctValues(MutableNetwork.class, mutableNetworkA, mutableNetworkB); setDistinctValues(NetworkBuilder.class, NETWORK_BUILDER_A, NETWORK_BUILDER_B); setDistinctValues(Network.class, IMMUTABLE_NETWORK_A, IMMUTABLE_NETWORK_B); setDefault(EndpointPair.class, EndpointPair.ordered("A", "B")); diff --git a/guava-tests/test/com/google/common/graph/PackageSanityTests.java b/guava-tests/test/com/google/common/graph/PackageSanityTests.java index f1526c235f1c..4c863020e396 100644 --- a/guava-tests/test/com/google/common/graph/PackageSanityTests.java +++ b/guava-tests/test/com/google/common/graph/PackageSanityTests.java @@ -51,8 +51,14 @@ public class PackageSanityTests extends AbstractPackageSanityTests { NetworkBuilder.directed().immutable().addNode("B").build(); public PackageSanityTests() { + MutableNetwork mutableNetworkA = NetworkBuilder.directed().build(); + mutableNetworkA.addNode("a"); + MutableNetwork mutableNetworkB = NetworkBuilder.directed().build(); + mutableNetworkB.addNode("b"); + setDistinctValues(AbstractGraphBuilder.class, GRAPH_BUILDER_A, GRAPH_BUILDER_B); setDistinctValues(Graph.class, IMMUTABLE_GRAPH_A, IMMUTABLE_GRAPH_B); + setDistinctValues(MutableNetwork.class, mutableNetworkA, mutableNetworkB); setDistinctValues(NetworkBuilder.class, NETWORK_BUILDER_A, NETWORK_BUILDER_B); setDistinctValues(Network.class, IMMUTABLE_NETWORK_A, IMMUTABLE_NETWORK_B); setDefault(EndpointPair.class, EndpointPair.ordered("A", "B")); From ed21dbb15ae0350fa9097b2959a71501a90d2dbe Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 9 Nov 2023 14:47:39 -0800 Subject: [PATCH 044/216] Prepare to expose (all?) remaining collectors as part of `guava-android`. This CL is further progress toward https://github.com/google/guava/issues/6567 RELNOTES=n/a PiperOrigin-RevId: 581031659 --- .../com/google/common/collect/MapsTest.java | 1 + .../google/common/collect/MultimapsTest.java | 1 + .../google/common/collect/MultisetsTest.java | 1 + .../com/google/common/collect/SetsTest.java | 1 + .../google/common/hash/BloomFilterTest.java | 1 + .../com/google/common/math/StatsTesting.java | 9 ++++-- .../src/com/google/common/collect/Sets.java | 1 + .../google/common/collect/TopKSelector.java | 7 +++++ .../com/google/common/hash/BloomFilter.java | 2 ++ .../common/collect/ComparatorsTest.java | 16 ---------- .../com/google/common/collect/MapsTest.java | 1 + .../google/common/collect/MultimapsTest.java | 1 + .../google/common/collect/MultisetsTest.java | 1 + .../com/google/common/collect/SetsTest.java | 1 + .../com/google/common/collect/TablesTest.java | 31 ------------------- .../google/common/hash/BloomFilterTest.java | 17 +--------- .../com/google/common/math/StatsTest.java | 24 -------------- .../com/google/common/math/StatsTesting.java | 18 +++++++---- .../com/google/common/hash/BloomFilter.java | 2 ++ 19 files changed, 41 insertions(+), 95 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/MapsTest.java b/android/guava-tests/test/com/google/common/collect/MapsTest.java index 4a5b2c3b6c22..1294a285d592 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsTest.java @@ -382,6 +382,7 @@ public void testToStringImplWithNullValues() throws Exception { } @GwtIncompatible // NullPointerTester + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointerExceptions() { new NullPointerTester().testAllPublicStaticMethods(Maps.class); } diff --git a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java index 1894c26139c7..33c29db18e82 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -1000,6 +1000,7 @@ public void testFilteredKeysListMultimapGetBadValue() { } @GwtIncompatible // NullPointerTester + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { new NullPointerTester().testAllPublicStaticMethods(Multimaps.class); } diff --git a/android/guava-tests/test/com/google/common/collect/MultisetsTest.java b/android/guava-tests/test/com/google/common/collect/MultisetsTest.java index 32e4408f99c9..3348300bf2b7 100644 --- a/android/guava-tests/test/com/google/common/collect/MultisetsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultisetsTest.java @@ -273,6 +273,7 @@ public void testHighestCountFirst() { } @GwtIncompatible // NullPointerTester + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { new NullPointerTester().testAllPublicStaticMethods(Multisets.class); } diff --git a/android/guava-tests/test/com/google/common/collect/SetsTest.java b/android/guava-tests/test/com/google/common/collect/SetsTest.java index 8a6ea0e04143..c271abe79565 100644 --- a/android/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/android/guava-tests/test/com/google/common/collect/SetsTest.java @@ -637,6 +637,7 @@ public void testComplementOfEmptySetWithoutTypeDoesntWork() { } @GwtIncompatible // NullPointerTester + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointerExceptions() { new NullPointerTester() .setDefault(Enum.class, SomeEnum.A) diff --git a/android/guava-tests/test/com/google/common/hash/BloomFilterTest.java b/android/guava-tests/test/com/google/common/hash/BloomFilterTest.java index 31c37183fd01..dd9a776d2eb6 100644 --- a/android/guava-tests/test/com/google/common/hash/BloomFilterTest.java +++ b/android/guava-tests/test/com/google/common/hash/BloomFilterTest.java @@ -246,6 +246,7 @@ public void testFailureWhenMoreThan255HashFunctionsAreNeeded() { }); } + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { NullPointerTester tester = new NullPointerTester(); tester.testAllPublicInstanceMethods(BloomFilter.create(Funnels.unencodedCharsFunnel(), 100)); diff --git a/android/guava-tests/test/com/google/common/math/StatsTesting.java b/android/guava-tests/test/com/google/common/math/StatsTesting.java index dddf20f9497e..1dc0235f9fbd 100644 --- a/android/guava-tests/test/com/google/common/math/StatsTesting.java +++ b/android/guava-tests/test/com/google/common/math/StatsTesting.java @@ -17,6 +17,7 @@ package com.google.common.math; import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.truth.Truth.assertThat; import static java.lang.Double.NEGATIVE_INFINITY; import static java.lang.Double.NaN; @@ -39,8 +40,8 @@ * @author Pete Gillin */ class StatsTesting { - - static final double ALLOWED_ERROR = 1e-10; + // TODO(cpovirk): Convince myself that this larger error makes sense. + static final double ALLOWED_ERROR = isAndroid() ? .25 : 1e-10; // Inputs and their statistics: @@ -501,5 +502,9 @@ static PairedStatsAccumulator createPartitionedFilledPairedStatsAccumulator( return accumulator; } + private static boolean isAndroid() { + return checkNotNull(System.getProperty("java.runtime.name", "")).contains("Android"); + } + private StatsTesting() {} } diff --git a/android/guava/src/com/google/common/collect/Sets.java b/android/guava/src/com/google/common/collect/Sets.java index 27b87788aa94..a31980559932 100644 --- a/android/guava/src/com/google/common/collect/Sets.java +++ b/android/guava/src/com/google/common/collect/Sets.java @@ -1641,6 +1641,7 @@ protected Set computeNext() { if (bitToFlip == index.size()) { return endOfData(); } + /* * The current set in sorted order looks like * {firstSetBit, firstSetBit + 1, ..., bitToFlip - 1, ...} diff --git a/android/guava/src/com/google/common/collect/TopKSelector.java b/android/guava/src/com/google/common/collect/TopKSelector.java index 9cc916e433e6..24fa85ded80c 100644 --- a/android/guava/src/com/google/common/collect/TopKSelector.java +++ b/android/guava/src/com/google/common/collect/TopKSelector.java @@ -231,6 +231,13 @@ private void swap(int i, int j) { buffer[j] = tmp; } + TopKSelector combine(TopKSelector other) { + for (int i = 0; i < other.bufferSize; i++) { + this.offer(uncheckedCastNullableTToT(other.buffer[i])); + } + return this; + } + /** * Adds each member of {@code elements} as a candidate for the top {@code k} elements. This * operation takes amortized linear time in the length of {@code elements}. diff --git a/android/guava/src/com/google/common/hash/BloomFilter.java b/android/guava/src/com/google/common/hash/BloomFilter.java index d8b0690a76ae..da2134cb466d 100644 --- a/android/guava/src/com/google/common/hash/BloomFilter.java +++ b/android/guava/src/com/google/common/hash/BloomFilter.java @@ -566,4 +566,6 @@ public void writeTo(OutputStream out) throws IOException { throw new IOException(message, e); } } + + private static final long serialVersionUID = 0xdecaf; } diff --git a/guava-tests/test/com/google/common/collect/ComparatorsTest.java b/guava-tests/test/com/google/common/collect/ComparatorsTest.java index 473f1d753955..3e11365166cb 100644 --- a/guava-tests/test/com/google/common/collect/ComparatorsTest.java +++ b/guava-tests/test/com/google/common/collect/ComparatorsTest.java @@ -23,9 +23,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.Helpers; -import com.google.common.testing.CollectorTester; import com.google.common.testing.EqualsTester; -import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.Optional; @@ -79,20 +77,6 @@ public void testIsInStrictOrder() { assertTrue(Comparators.isInStrictOrder(Collections.emptyList(), Ordering.natural())); } - public void testLeastCollector() { - CollectorTester.of(Comparators.least(2, Comparator.naturalOrder())) - .expectCollects(Arrays.asList(1, 2), 1, 2, 3, 4, 5, 6) - .expectCollects(Arrays.asList(1), 1) - .expectCollects(Collections.emptyList()); - } - - public void testGreatestCollector() { - CollectorTester.of(Comparators.greatest(2, Comparator.naturalOrder())) - .expectCollects(Arrays.asList(6, 5), 1, 2, 3, 4, 5, 6) - .expectCollects(Arrays.asList(1), 1) - .expectCollects(Collections.emptyList()); - } - public void testEmptiesFirst() { Optional empty = Optional.empty(); Optional abc = Optional.of("abc"); diff --git a/guava-tests/test/com/google/common/collect/MapsTest.java b/guava-tests/test/com/google/common/collect/MapsTest.java index 5f6380d0552d..f29151e4bb89 100644 --- a/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/guava-tests/test/com/google/common/collect/MapsTest.java @@ -382,6 +382,7 @@ public void testToStringImplWithNullValues() throws Exception { } @GwtIncompatible // NullPointerTester + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointerExceptions() { new NullPointerTester().testAllPublicStaticMethods(Maps.class); } diff --git a/guava-tests/test/com/google/common/collect/MultimapsTest.java b/guava-tests/test/com/google/common/collect/MultimapsTest.java index 288a8a812a6d..eecc158fbed0 100644 --- a/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -1058,6 +1058,7 @@ public void testFilteredKeysListMultimapGetBadValue() { } @GwtIncompatible // NullPointerTester + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { new NullPointerTester().testAllPublicStaticMethods(Multimaps.class); } diff --git a/guava-tests/test/com/google/common/collect/MultisetsTest.java b/guava-tests/test/com/google/common/collect/MultisetsTest.java index 6ba5182dbe73..b6b67aa80615 100644 --- a/guava-tests/test/com/google/common/collect/MultisetsTest.java +++ b/guava-tests/test/com/google/common/collect/MultisetsTest.java @@ -294,6 +294,7 @@ public void testToMultisetCountFunction() { } @GwtIncompatible // NullPointerTester + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { new NullPointerTester().testAllPublicStaticMethods(Multisets.class); } diff --git a/guava-tests/test/com/google/common/collect/SetsTest.java b/guava-tests/test/com/google/common/collect/SetsTest.java index 292b07bcf707..c8cb0e0bb762 100644 --- a/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/guava-tests/test/com/google/common/collect/SetsTest.java @@ -668,6 +668,7 @@ public void testComplementOfEmptySetWithoutTypeDoesntWork() { } @GwtIncompatible // NullPointerTester + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointerExceptions() { new NullPointerTester() .setDefault(Enum.class, SomeEnum.A) diff --git a/guava-tests/test/com/google/common/collect/TablesTest.java b/guava-tests/test/com/google/common/collect/TablesTest.java index dd56614f9b45..6fe3e99be4f0 100644 --- a/guava-tests/test/com/google/common/collect/TablesTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTest.java @@ -19,10 +19,8 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.Table.Cell; -import com.google.common.testing.CollectorTester; import com.google.common.testing.EqualsTester; import com.google.common.testing.SerializableTester; -import java.util.stream.Collector; import junit.framework.TestCase; /** @@ -32,35 +30,6 @@ */ @GwtCompatible(emulated = true) public class TablesTest extends TestCase { - - // The bulk of the toTable tests can be found in TableCollectorsTest. - // This gives minimal coverage to the forwarding functions - public void testToTableSanityTest() { - Collector, ?, Table> collector = - Tables.toTable(Cell::getRowKey, Cell::getColumnKey, Cell::getValue, HashBasedTable::create); - HashBasedTable expected = HashBasedTable.create(); - expected.put("one", "uno", 1); - CollectorTester.of(collector) - .expectCollects(HashBasedTable.create()) - .expectCollects(expected, Tables.immutableCell("one", "uno", 1)); - } - - public void testToTableMergingSanityTest() { - Collector, ?, Table> collector = - Tables.toTable( - Cell::getRowKey, - Cell::getColumnKey, - Cell::getValue, - Integer::sum, - HashBasedTable::create); - HashBasedTable expected = HashBasedTable.create(); - expected.put("one", "uno", 3); - CollectorTester.of(collector) - .expectCollects(HashBasedTable.create()) - .expectCollects( - expected, Tables.immutableCell("one", "uno", 1), Tables.immutableCell("one", "uno", 2)); - } - @GwtIncompatible // SerializableTester public void testImmutableEntrySerialization() { Cell entry = Tables.immutableCell("foo", 1, 'a'); diff --git a/guava-tests/test/com/google/common/hash/BloomFilterTest.java b/guava-tests/test/com/google/common/hash/BloomFilterTest.java index 0e497e05058c..dd9a776d2eb6 100644 --- a/guava-tests/test/com/google/common/hash/BloomFilterTest.java +++ b/guava-tests/test/com/google/common/hash/BloomFilterTest.java @@ -37,7 +37,6 @@ import java.util.List; import java.util.Random; import java.util.concurrent.TimeUnit; -import java.util.stream.Stream; import junit.framework.TestCase; import org.checkerframework.checker.nullness.qual.Nullable; @@ -247,6 +246,7 @@ public void testFailureWhenMoreThan255HashFunctionsAreNeeded() { }); } + @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { NullPointerTester tester = new NullPointerTester(); tester.testAllPublicInstanceMethods(BloomFilter.create(Funnels.unencodedCharsFunnel(), 100)); @@ -370,21 +370,6 @@ public void testEquals_empty() { .testEquals(); } - public void testCollector() { - BloomFilter bf1 = BloomFilter.create(Funnels.unencodedCharsFunnel(), 100); - bf1.put("1"); - bf1.put("2"); - - assertEquals( - bf1, - Stream.of("1", "2") - .collect(BloomFilter.toBloomFilter(Funnels.unencodedCharsFunnel(), 100))); - assertEquals( - bf1, - Stream.of("2", "1") - .collect(BloomFilter.toBloomFilter(Funnels.unencodedCharsFunnel(), 100))); - } - public void testEquals() { BloomFilter bf1 = BloomFilter.create(Funnels.unencodedCharsFunnel(), 100); bf1.put("1"); diff --git a/guava-tests/test/com/google/common/math/StatsTest.java b/guava-tests/test/com/google/common/math/StatsTest.java index 259643dad96e..46640e8a715f 100644 --- a/guava-tests/test/com/google/common/math/StatsTest.java +++ b/guava-tests/test/com/google/common/math/StatsTest.java @@ -16,7 +16,6 @@ package com.google.common.math; -import static com.google.common.math.Stats.toStats; import static com.google.common.math.StatsTesting.ALLOWED_ERROR; import static com.google.common.math.StatsTesting.ALL_MANY_VALUES; import static com.google.common.math.StatsTesting.ALL_STATS; @@ -85,7 +84,6 @@ import com.google.common.primitives.Longs; import com.google.common.testing.EqualsTester; import com.google.common.testing.SerializableTester; -import java.math.BigDecimal; import java.nio.ByteBuffer; import java.nio.ByteOrder; import java.util.DoubleSummaryStatistics; @@ -444,28 +442,6 @@ public void testOfPrimitiveLongStream() { assertThat(stats.max()).isEqualTo(MEGA_STREAM_MAX); } - public void testBoxedDoubleStreamToStats() { - Stats stats = megaPrimitiveDoubleStream().boxed().collect(toStats()); - assertThat(stats.count()).isEqualTo(MEGA_STREAM_COUNT); - assertThat(stats.mean()).isWithin(ALLOWED_ERROR * MEGA_STREAM_COUNT).of(MEGA_STREAM_MEAN); - assertThat(stats.populationVariance()) - .isWithin(ALLOWED_ERROR * MEGA_STREAM_COUNT) - .of(MEGA_STREAM_POPULATION_VARIANCE); - assertThat(stats.min()).isEqualTo(MEGA_STREAM_MIN); - assertThat(stats.max()).isEqualTo(MEGA_STREAM_MAX); - } - - public void testBoxedBigDecimalStreamToStats() { - Stats stats = megaPrimitiveDoubleStream().mapToObj(BigDecimal::valueOf).collect(toStats()); - assertThat(stats.count()).isEqualTo(MEGA_STREAM_COUNT); - assertThat(stats.mean()).isWithin(ALLOWED_ERROR * MEGA_STREAM_COUNT).of(MEGA_STREAM_MEAN); - assertThat(stats.populationVariance()) - .isWithin(ALLOWED_ERROR * MEGA_STREAM_COUNT) - .of(MEGA_STREAM_POPULATION_VARIANCE); - assertThat(stats.min()).isEqualTo(MEGA_STREAM_MIN); - assertThat(stats.max()).isEqualTo(MEGA_STREAM_MAX); - } - public void testEqualsAndHashCode() { new EqualsTester() .addEqualityGroup( diff --git a/guava-tests/test/com/google/common/math/StatsTesting.java b/guava-tests/test/com/google/common/math/StatsTesting.java index 9652a6af3b10..70373d469860 100644 --- a/guava-tests/test/com/google/common/math/StatsTesting.java +++ b/guava-tests/test/com/google/common/math/StatsTesting.java @@ -17,6 +17,7 @@ package com.google.common.math; import static com.google.common.base.Preconditions.checkArgument; +import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.truth.Truth.assertThat; import static java.lang.Double.NEGATIVE_INFINITY; import static java.lang.Double.NaN; @@ -40,8 +41,8 @@ * @author Pete Gillin */ class StatsTesting { - - static final double ALLOWED_ERROR = 1e-10; + // TODO(cpovirk): Convince myself that this larger error makes sense. + static final double ALLOWED_ERROR = isAndroid() ? .25 : 1e-10; // Inputs and their statistics: @@ -234,11 +235,12 @@ static DoubleStream megaPrimitiveDoubleStreamPart2() { return DoubleStream.iterate(999_999.0, x -> x - 2.0).limit(MEGA_STREAM_COUNT / 2).parallel(); } - static final long MEGA_STREAM_COUNT = 1_000_000; - static final double MEGA_STREAM_MEAN = 999_999.0 / 2; - static final double MEGA_STREAM_POPULATION_VARIANCE = 999_999.0 * 1_000_001.0 / 12; + static final long MEGA_STREAM_COUNT = isAndroid() ? 100 : 1_000_000; static final double MEGA_STREAM_MIN = 0.0; - static final double MEGA_STREAM_MAX = 999_999.0; + static final double MEGA_STREAM_MAX = MEGA_STREAM_COUNT - 1; + static final double MEGA_STREAM_MEAN = MEGA_STREAM_MAX / 2; + static final double MEGA_STREAM_POPULATION_VARIANCE = + (MEGA_STREAM_COUNT - 1) * (MEGA_STREAM_COUNT + 1) / 12.0; // Stats instances: @@ -530,5 +532,9 @@ static PairedStatsAccumulator createPartitionedFilledPairedStatsAccumulator( return accumulator; } + private static boolean isAndroid() { + return checkNotNull(System.getProperty("java.runtime.name", "")).contains("Android"); + } + private StatsTesting() {} } diff --git a/guava/src/com/google/common/hash/BloomFilter.java b/guava/src/com/google/common/hash/BloomFilter.java index 3f1079ee8fd4..2a398286499f 100644 --- a/guava/src/com/google/common/hash/BloomFilter.java +++ b/guava/src/com/google/common/hash/BloomFilter.java @@ -633,4 +633,6 @@ public void writeTo(OutputStream out) throws IOException { throw new IOException(message, e); } } + + private static final long serialVersionUID = 0xcafebabe; } From 464bedf09bcfa18d8954b7572e784ebe2e99ee83 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 13 Nov 2023 15:15:24 -0800 Subject: [PATCH 045/216] Withdraw `SequencedCollection` overrides from the public copy of `ImmutableSortedSet`. As far as external users are concerned, this CL is a rollback of cl/575459262. The problem that cl/575459262 was addressing looks like it may be a quirk of Google's internal build setup. We may end up wanting to remove these overrides entirely, so we don't want to commit to them externally by publishing a release with them. Or we may decide to include them both internally and externally. For now, we'll be conservative. RELNOTES=n/a PiperOrigin-RevId: 582099306 --- .../common/collect/ImmutableSortedSet.java | 86 ------------------- .../common/collect/ImmutableSortedSet.java | 86 ------------------- 2 files changed, 172 deletions(-) diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java index 236eb8ee2acb..22660c02c5aa 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -664,22 +664,6 @@ public E last() { return descendingIterator().next(); } - /** - * @since NEXT. Note, however, that Java 21 users can call this method with any version of Guava. - */ - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - public final E getFirst() { - return first(); - } - - /** - * @since NEXT. Note, however, that Java 21 users can call this method with any version of Guava. - */ - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - public final E getLast() { - return last(); - } - /** * Guaranteed to throw an exception and leave the set unmodified. * @@ -714,66 +698,6 @@ public final E pollLast() { throw new UnsupportedOperationException(); } - /** - * Guaranteed to throw an exception and leave the set unmodified. - * - * @since NEXT - * @throws UnsupportedOperationException always - * @deprecated Unsupported operation. - */ - @CanIgnoreReturnValue - @Deprecated - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - @DoNotCall("Always throws UnsupportedOperationException") - public final E removeFirst() { - throw new UnsupportedOperationException(); - } - - /** - * Guaranteed to throw an exception and leave the set unmodified. - * - * @since NEXT - * @throws UnsupportedOperationException always - * @deprecated Unsupported operation. - */ - @CanIgnoreReturnValue - @Deprecated - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - @DoNotCall("Always throws UnsupportedOperationException") - public final E removeLast() { - throw new UnsupportedOperationException(); - } - - /** - * Guaranteed to throw an exception and leave the set unmodified. - * - * @since NEXT - * @throws UnsupportedOperationException always - * @deprecated Unsupported operation. - */ - @Deprecated - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - @DoNotCall("Always throws UnsupportedOperationException") - @CheckForNull - public final void addFirst(E e) { - throw new UnsupportedOperationException(); - } - - /** - * Guaranteed to throw an exception and leave the set unmodified. - * - * @since NEXT - * @throws UnsupportedOperationException always - * @deprecated Unsupported operation. - */ - @Deprecated - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - @DoNotCall("Always throws UnsupportedOperationException") - @CheckForNull - public final void addLast(E e) { - throw new UnsupportedOperationException(); - } - @GwtIncompatible // NavigableSet @LazyInit @CheckForNull @@ -792,16 +716,6 @@ public ImmutableSortedSet descendingSet() { return result; } - /** - * @since NEXT. Note, however, that a variant of this method with return type {@link NavigableSet} - * is available to Java 21 users with any version of Guava. - */ - @GwtIncompatible // NavigableSet - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - public final ImmutableSortedSet reversed() { - return descendingSet(); - } - // Most classes should implement this as new DescendingImmutableSortedSet(this), // but we push down that implementation because ProGuard can't eliminate it even when it's always // overridden. diff --git a/guava/src/com/google/common/collect/ImmutableSortedSet.java b/guava/src/com/google/common/collect/ImmutableSortedSet.java index c96e53d1d14d..dc88e3983d26 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -731,22 +731,6 @@ public E last() { return descendingIterator().next(); } - /** - * @since NEXT. Note, however, that Java 21 users can call this method with any version of Guava. - */ - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - public final E getFirst() { - return first(); - } - - /** - * @since NEXT. Note, however, that Java 21 users can call this method with any version of Guava. - */ - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - public final E getLast() { - return last(); - } - /** * Guaranteed to throw an exception and leave the set unmodified. * @@ -781,66 +765,6 @@ public final E pollLast() { throw new UnsupportedOperationException(); } - /** - * Guaranteed to throw an exception and leave the set unmodified. - * - * @since NEXT - * @throws UnsupportedOperationException always - * @deprecated Unsupported operation. - */ - @CanIgnoreReturnValue - @Deprecated - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - @DoNotCall("Always throws UnsupportedOperationException") - public final E removeFirst() { - throw new UnsupportedOperationException(); - } - - /** - * Guaranteed to throw an exception and leave the set unmodified. - * - * @since NEXT - * @throws UnsupportedOperationException always - * @deprecated Unsupported operation. - */ - @CanIgnoreReturnValue - @Deprecated - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - @DoNotCall("Always throws UnsupportedOperationException") - public final E removeLast() { - throw new UnsupportedOperationException(); - } - - /** - * Guaranteed to throw an exception and leave the set unmodified. - * - * @since NEXT - * @throws UnsupportedOperationException always - * @deprecated Unsupported operation. - */ - @Deprecated - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - @DoNotCall("Always throws UnsupportedOperationException") - @CheckForNull - public final void addFirst(E e) { - throw new UnsupportedOperationException(); - } - - /** - * Guaranteed to throw an exception and leave the set unmodified. - * - * @since NEXT - * @throws UnsupportedOperationException always - * @deprecated Unsupported operation. - */ - @Deprecated - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - @DoNotCall("Always throws UnsupportedOperationException") - @CheckForNull - public final void addLast(E e) { - throw new UnsupportedOperationException(); - } - @GwtIncompatible // NavigableSet @LazyInit @CheckForNull @@ -859,16 +783,6 @@ public ImmutableSortedSet descendingSet() { return result; } - /** - * @since NEXT. Note, however, that a variant of this method with return type {@link NavigableSet} - * is available to Java 21 users with any version of Guava. - */ - @GwtIncompatible // NavigableSet - @SuppressWarnings("MissingOverride") // only an override under JDK 21+ - public final ImmutableSortedSet reversed() { - return descendingSet(); - } - // Most classes should implement this as new DescendingImmutableSortedSet(this), // but we push down that implementation because ProGuard can't eliminate it even when it's always // overridden. From 7feac90308802fae357658b76a4b4be0d5581687 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 14 Nov 2023 08:39:18 -0800 Subject: [PATCH 046/216] Bump github/codeql-action from 2.22.5 to 2.22.6 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.5 to 2.22.6. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/74483a38d39275f33fcff5f35b679b5ca4a26a99...689fdc5193eeb735ecb2e52e819e3382876f93f4) Fixes #6833 RELNOTES=n/a PiperOrigin-RevId: 582333368 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 58a9cabda657..29308c8006a5 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@74483a38d39275f33fcff5f35b679b5ca4a26a99 # v2.22.5 + uses: github/codeql-action/upload-sarif@689fdc5193eeb735ecb2e52e819e3382876f93f4 # v2.22.6 with: sarif_file: results.sarif From 045cd8428fe34ad2e340407de9167dc9adf1801f Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 16 Nov 2023 07:09:11 -0800 Subject: [PATCH 047/216] Make our Android builds work with an Android bootclasspath. Notably: - Remove all usages of `AnnotatedType` from the Android flavor. - Make `NullPointerTester` a no-op in the Android flavor (instead of only in the Android flavor _when running under an Android VM_). - (This requires removing its tests from the Android flavor entirely, rather than merely skipping them during our internal Android-VM test runs.) In both cases, these changes apply only to (a) guava-android and (b) our actual internal _Android_ builds. In contrast, in the internal copy of the backport _that we test under a JRE_, the `AnnotatedType` APIs are still in place, and `NullPointerTester` still runs. RELNOTES=`reflect`: In `guava-android` only, removed `Invokable.getAnnotatedReturnType()` and `Parameter.getAnnotatedType()`. These methods never worked in an Android VM, and to reflect that, they were born `@Deprecated`, `@Beta`, and `@DoNotCall`. They're now preventing us from rolling out some new Android compatibility testing. PiperOrigin-RevId: 583032835 --- .../common/testing/NullPointerTester.java | 37 +- .../common/testing/ClassSanityTesterTest.java | 1328 --------------- .../common/testing/NullPointerTesterTest.java | 1438 ----------------- .../com/google/common/reflect/Invokable.java | 55 +- .../com/google/common/reflect/Parameter.java | 24 +- .../common/testing/NullPointerTester.java | 18 +- .../common/testing/ClassSanityTesterTest.java | 1 - .../common/testing/NullPointerTesterTest.java | 1 - .../com/google/common/reflect/Invokable.java | 22 +- .../com/google/common/reflect/Parameter.java | 21 +- proguard/reflect.pro | 9 - 11 files changed, 27 insertions(+), 2927 deletions(-) delete mode 100644 android/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java delete mode 100644 android/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java delete mode 100644 proguard/reflect.pro diff --git a/android/guava-testlib/src/com/google/common/testing/NullPointerTester.java b/android/guava-testlib/src/com/google/common/testing/NullPointerTester.java index a56a90a84b1e..d0202b47152f 100644 --- a/android/guava-testlib/src/com/google/common/testing/NullPointerTester.java +++ b/android/guava-testlib/src/com/google/common/testing/NullPointerTester.java @@ -35,7 +35,6 @@ import com.google.common.reflect.TypeToken; import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.lang.annotation.Annotation; -import java.lang.reflect.AnnotatedType; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Member; @@ -43,7 +42,6 @@ import java.lang.reflect.Modifier; import java.lang.reflect.ParameterizedType; import java.lang.reflect.Type; -import java.lang.reflect.TypeVariable; import java.util.Arrays; import java.util.List; import java.util.concurrent.ConcurrentMap; @@ -353,9 +351,9 @@ private void testParameter( @Nullable Object instance, Invokable invokable, int paramIndex, Class testedClass) { /* * com.google.common is starting to rely on type-use annotations, which aren't visible under - * Android VMs. So we skip testing there. + * Android VMs and in open-source guava-android. So we skip testing there. */ - if (isAndroid() && Reflection.getPackageName(testedClass).startsWith("com.google.common")) { + if (Reflection.getPackageName(testedClass).startsWith("com.google.common")) { return; } if (isPrimitiveOrNullable(invokable.getParameters().get(paramIndex))) { @@ -612,39 +610,19 @@ private static boolean annotatedTypeExists() { * don't know that anyone uses it there, anyway. */ private enum NullnessAnnotationReader { - // Usages (which are unsafe only for Android) are guarded by the annotatedTypeExists() check. - @SuppressWarnings({"Java7ApiChecker", "AndroidApiChecker", "DoNotCall", "deprecation"}) + @SuppressWarnings("Java7ApiChecker") FROM_DECLARATION_AND_TYPE_USE_ANNOTATIONS { @Override - @IgnoreJRERequirement boolean isNullable(Invokable invokable) { return FROM_DECLARATION_ANNOTATIONS_ONLY.isNullable(invokable) - || containsNullable(invokable.getAnnotatedReturnType().getAnnotations()); + ; // TODO(cpovirk): Should we also check isNullableTypeVariable? } @Override - @IgnoreJRERequirement boolean isNullable(Parameter param) { return FROM_DECLARATION_ANNOTATIONS_ONLY.isNullable(param) - || containsNullable(param.getAnnotatedType().getAnnotations()) - || isNullableTypeVariable(param.getAnnotatedType().getType()); - } - - @IgnoreJRERequirement - boolean isNullableTypeVariable(Type type) { - if (!(type instanceof TypeVariable)) { - return false; - } - TypeVariable typeVar = (TypeVariable) type; - for (AnnotatedType bound : typeVar.getAnnotatedBounds()) { - // Until Java 15, the isNullableTypeVariable case here won't help: - // https://bugs.openjdk.java.net/browse/JDK-8202469 - if (containsNullable(bound.getAnnotations()) || isNullableTypeVariable(bound.getType())) { - return true; - } - } - return false; + ; } }, FROM_DECLARATION_ANNOTATIONS_ONLY { @@ -663,9 +641,4 @@ boolean isNullable(Parameter param) { abstract boolean isNullable(Parameter param); } - - private static boolean isAndroid() { - // Arguably it would make more sense to test "can we see type-use annotations" directly.... - return checkNotNull(System.getProperty("java.runtime.name", "")).contains("Android"); - } } diff --git a/android/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java b/android/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java deleted file mode 100644 index 51be10d71e70..000000000000 --- a/android/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java +++ /dev/null @@ -1,1328 +0,0 @@ -/* - * Copyright (C) 2012 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.common.testing; - -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.assertThrows; - -import com.google.common.base.Functions; -import com.google.common.base.Optional; -import com.google.common.collect.ImmutableList; -import com.google.common.testing.ClassSanityTester.FactoryMethodReturnsNullException; -import com.google.common.testing.ClassSanityTester.ParameterHasNoDistinctValueException; -import com.google.common.testing.ClassSanityTester.ParameterNotInstantiableException; -import com.google.common.testing.NullPointerTester.Visibility; -import java.io.Serializable; -import java.lang.reflect.InvocationTargetException; -import java.util.AbstractList; -import java.util.ArrayList; -import java.util.List; -import java.util.Map; -import java.util.Set; -import java.util.concurrent.TimeUnit; -import junit.framework.AssertionFailedError; -import junit.framework.TestCase; -import org.checkerframework.checker.nullness.qual.Nullable; - -/** - * Unit tests for {@link ClassSanityTester}. - * - * @author Ben Yu - */ -@AndroidIncompatible // NullPointerTester refuses to run for c.g.c under Android -public class ClassSanityTesterTest extends TestCase { - - private final ClassSanityTester tester = new ClassSanityTester(); - - public void testEqualsOnReturnValues_good() throws Exception { - tester.forAllPublicStaticMethods(GoodEqualsFactory.class).testEquals(); - } - - public static class GoodEqualsFactory { - public static Object good( - String a, - int b, - // oneConstantOnly doesn't matter since it's not nullable and can be only 1 value. - @SuppressWarnings("unused") OneConstantEnum oneConstantOnly, - // noConstant doesn't matter since it can only be null - @SuppressWarnings("unused") @Nullable NoConstantEnum noConstant) { - return new GoodEquals(a, b); - } - - // instance method ignored - public Object badIgnored() { - return new BadEquals(); - } - - // primitive ignored - public int returnsInt() { - throw new UnsupportedOperationException(); - } - - // void ignored - public void voidMethod() { - throw new UnsupportedOperationException(); - } - - // non-public method ignored - static Object badButNotPublic() { - return new BadEquals(); - } - } - - public void testForAllPublicStaticMethods_noPublicStaticMethods() throws Exception { - try { - tester.forAllPublicStaticMethods(NoPublicStaticMethods.class).testEquals(); - } catch (AssertionFailedError expected) { - assertThat(expected) - .hasMessageThat() - .isEqualTo( - "No public static methods that return java.lang.Object or subtype are found in " - + NoPublicStaticMethods.class - + "."); - return; - } - fail(); - } - - public void testEqualsOnReturnValues_bad() throws Exception { - try { - tester.forAllPublicStaticMethods(BadEqualsFactory.class).testEquals(); - } catch (AssertionFailedError expected) { - return; - } - fail(); - } - - private static class BadEqualsFactory { - /** oneConstantOnly matters now since it can be either null or the constant. */ - @SuppressWarnings("unused") // Called by reflection - public static Object bad(String a, int b, @Nullable OneConstantEnum oneConstantOnly) { - return new GoodEquals(a, b); - } - } - - public void testNullsOnReturnValues_good() throws Exception { - tester.forAllPublicStaticMethods(GoodNullsFactory.class).testNulls(); - } - - private static class GoodNullsFactory { - @SuppressWarnings("unused") // Called by reflection - public static Object good(String s) { - return new GoodNulls(s); - } - } - - public void testNullsOnReturnValues_bad() throws Exception { - try { - tester.forAllPublicStaticMethods(BadNullsFactory.class).thatReturn(Object.class).testNulls(); - } catch (AssertionFailedError expected) { - return; - } - fail(); - } - - public void testNullsOnReturnValues_returnTypeFiltered() throws Exception { - try { - tester - .forAllPublicStaticMethods(BadNullsFactory.class) - .thatReturn(Iterable.class) - .testNulls(); - } catch (AssertionFailedError expected) { - assertThat(expected) - .hasMessageThat() - .isEqualTo( - "No public static methods that return java.lang.Iterable or subtype are found in " - + BadNullsFactory.class - + "."); - return; - } - fail(); - } - - public static class BadNullsFactory { - public static Object bad(@SuppressWarnings("unused") String a) { - return new BadNulls(); - } - } - - @AndroidIncompatible // TODO(cpovirk): ClassNotFoundException... ClassSanityTesterTest$AnInterface - public void testSerializableOnReturnValues_good() throws Exception { - tester.forAllPublicStaticMethods(GoodSerializableFactory.class).testSerializable(); - } - - public static class GoodSerializableFactory { - public static Object good(Runnable r) { - return r; - } - - public static Object good(AnInterface i) { - return i; - } - } - - public void testSerializableOnReturnValues_bad() throws Exception { - try { - tester.forAllPublicStaticMethods(BadSerializableFactory.class).testSerializable(); - } catch (AssertionFailedError expected) { - return; - } - fail(); - } - - public static class BadSerializableFactory { - public static Object bad() { - return new Serializable() { - @SuppressWarnings("unused") - private final Object notSerializable = new Object(); - }; - } - } - - public void testEqualsAndSerializableOnReturnValues_equalsIsGoodButNotSerializable() - throws Exception { - try { - tester.forAllPublicStaticMethods(GoodEqualsFactory.class).testEqualsAndSerializable(); - } catch (AssertionFailedError expected) { - return; - } - fail("should have failed"); - } - - public void testEqualsAndSerializableOnReturnValues_serializableButNotEquals() throws Exception { - try { - tester.forAllPublicStaticMethods(GoodSerializableFactory.class).testEqualsAndSerializable(); - } catch (AssertionFailedError expected) { - return; - } - fail("should have failed"); - } - - @AndroidIncompatible // TODO(cpovirk): ClassNotFoundException... ClassSanityTesterTest$AnInterface - public void testEqualsAndSerializableOnReturnValues_good() throws Exception { - tester - .forAllPublicStaticMethods(GoodEqualsAndSerializableFactory.class) - .testEqualsAndSerializable(); - } - - public static class GoodEqualsAndSerializableFactory { - public static Object good(AnInterface s) { - return Functions.constant(s); - } - } - - public void testEqualsForReturnValues_factoryReturnsNullButNotAnnotated() throws Exception { - try { - tester.forAllPublicStaticMethods(FactoryThatReturnsNullButNotAnnotated.class).testEquals(); - } catch (AssertionFailedError expected) { - return; - } - fail(); - } - - public void testNullsForReturnValues_factoryReturnsNullButNotAnnotated() throws Exception { - try { - tester.forAllPublicStaticMethods(FactoryThatReturnsNullButNotAnnotated.class).testNulls(); - } catch (AssertionFailedError expected) { - return; - } - fail(); - } - - public void testSerializableForReturnValues_factoryReturnsNullButNotAnnotated() throws Exception { - try { - tester - .forAllPublicStaticMethods(FactoryThatReturnsNullButNotAnnotated.class) - .testSerializable(); - } catch (AssertionFailedError expected) { - return; - } - fail(); - } - - public void testEqualsAndSerializableForReturnValues_factoryReturnsNullButNotAnnotated() - throws Exception { - try { - tester - .forAllPublicStaticMethods(FactoryThatReturnsNullButNotAnnotated.class) - .testEqualsAndSerializable(); - } catch (AssertionFailedError expected) { - return; - } - fail(); - } - - public static class FactoryThatReturnsNullButNotAnnotated { - public static Object bad() { - return null; - } - } - - public void testEqualsForReturnValues_factoryReturnsNullAndAnnotated() throws Exception { - tester.forAllPublicStaticMethods(FactoryThatReturnsNullAndAnnotated.class).testEquals(); - } - - public void testNullsForReturnValues_factoryReturnsNullAndAnnotated() throws Exception { - tester.forAllPublicStaticMethods(FactoryThatReturnsNullAndAnnotated.class).testNulls(); - } - - public void testSerializableForReturnValues_factoryReturnsNullAndAnnotated() throws Exception { - tester.forAllPublicStaticMethods(FactoryThatReturnsNullAndAnnotated.class).testSerializable(); - } - - public void testEqualsAndSerializableForReturnValues_factoryReturnsNullAndAnnotated() - throws Exception { - tester - .forAllPublicStaticMethods(FactoryThatReturnsNullAndAnnotated.class) - .testEqualsAndSerializable(); - } - - public static class FactoryThatReturnsNullAndAnnotated { - public static @Nullable Object bad() { - return null; - } - } - - public void testGoodEquals() throws Exception { - tester.testEquals(GoodEquals.class); - } - - public void testEquals_interface() { - tester.testEquals(AnInterface.class); - } - - public void testEquals_abstractClass() { - tester.testEquals(AnAbstractClass.class); - } - - public void testEquals_enum() { - tester.testEquals(OneConstantEnum.class); - } - - public void testBadEquals() throws Exception { - try { - tester.testEquals(BadEquals.class); - } catch (AssertionFailedError expected) { - assertThat(expected).hasMessageThat().contains("create(null)"); - return; - } - fail("should have failed"); - } - - public void testBadEquals_withParameterizedType() throws Exception { - try { - tester.testEquals(BadEqualsWithParameterizedType.class); - } catch (AssertionFailedError expected) { - assertThat(expected).hasMessageThat().contains("create([[1]])"); - return; - } - fail("should have failed"); - } - - public void testBadEquals_withSingleParameterValue() throws Exception { - assertThrows( - ParameterHasNoDistinctValueException.class, - () -> tester.doTestEquals(ConstructorParameterWithOptionalNotInstantiable.class)); - } - - public void testGoodReferentialEqualityComparison() throws Exception { - tester.testEquals(UsesEnum.class); - tester.testEquals(UsesReferentialEquality.class); - tester.testEquals(SameListInstance.class); - } - - @AndroidIncompatible // problem with equality of Type objects? - public void testEqualsUsingReferentialEquality() throws Exception { - assertBadUseOfReferentialEquality(SameIntegerInstance.class); - assertBadUseOfReferentialEquality(SameLongInstance.class); - assertBadUseOfReferentialEquality(SameFloatInstance.class); - assertBadUseOfReferentialEquality(SameDoubleInstance.class); - assertBadUseOfReferentialEquality(SameShortInstance.class); - assertBadUseOfReferentialEquality(SameByteInstance.class); - assertBadUseOfReferentialEquality(SameCharacterInstance.class); - assertBadUseOfReferentialEquality(SameBooleanInstance.class); - assertBadUseOfReferentialEquality(SameObjectInstance.class); - assertBadUseOfReferentialEquality(SameStringInstance.class); - assertBadUseOfReferentialEquality(SameInterfaceInstance.class); - } - - private void assertBadUseOfReferentialEquality(Class cls) throws Exception { - try { - tester.testEquals(cls); - } catch (AssertionFailedError expected) { - assertThat(expected).hasMessageThat().contains(cls.getSimpleName() + "("); - return; - } - fail("should have failed for " + cls); - } - - public void testParameterNotInstantiableForEqualsTest() throws Exception { - assertThrows( - ParameterNotInstantiableException.class, - () -> tester.doTestEquals(ConstructorParameterNotInstantiable.class)); - } - - public void testNoDistinctValueForEqualsTest() throws Exception { - assertThrows( - ParameterHasNoDistinctValueException.class, - () -> tester.doTestEquals(ConstructorParameterSingleValue.class)); - } - - public void testConstructorThrowsForEqualsTest() throws Exception { - assertThrows( - InvocationTargetException.class, () -> tester.doTestEquals(ConstructorThrows.class)); - } - - public void testFactoryMethodReturnsNullForEqualsTest() throws Exception { - assertThrows( - FactoryMethodReturnsNullException.class, - () -> tester.doTestEquals(FactoryMethodReturnsNullAndAnnotated.class)); - } - - public void testFactoryMethodReturnsNullButNotAnnotatedInEqualsTest() throws Exception { - try { - tester.testEquals(FactoryMethodReturnsNullButNotAnnotated.class); - } catch (AssertionFailedError expected) { - return; - } - fail("should have failed"); - } - - public void testNoEqualsChecksOnEnum() throws Exception { - tester.testEquals(OneConstantEnum.class); - tester.testEquals(NoConstantEnum.class); - tester.testEquals(TimeUnit.class); - } - - public void testNoEqualsChecksOnInterface() throws Exception { - tester.testEquals(Runnable.class); - } - - public void testNoEqualsChecksOnAnnotation() throws Exception { - tester.testEquals(MyAnnotation.class); - } - - public void testGoodNulls() throws Exception { - tester.testNulls(GoodNulls.class); - } - - public void testNoNullCheckNeededDespiteNotInstantiable() throws Exception { - tester.doTestNulls(NoNullCheckNeededDespiteNotInstantiable.class, Visibility.PACKAGE); - } - - public void testNulls_interface() { - tester.testNulls(AnInterface.class); - } - - public void testNulls_abstractClass() { - tester.testNulls(AnAbstractClass.class); - } - - public void testNulls_enum() throws Exception { - tester.testNulls(OneConstantEnum.class); - tester.testNulls(NoConstantEnum.class); - tester.testNulls(TimeUnit.class); - } - - public void testNulls_parameterOptionalNotInstantiable() throws Exception { - tester.testNulls(ConstructorParameterWithOptionalNotInstantiable.class); - } - - public void testEnumFailsToCheckNull() throws Exception { - try { - tester.testNulls(EnumFailsToCheckNull.class); - } catch (AssertionFailedError expected) { - return; - } - fail("should have failed"); - } - - public void testNoNullChecksOnInterface() throws Exception { - tester.testNulls(Runnable.class); - } - - public void testNoNullChecksOnAnnotation() throws Exception { - tester.testNulls(MyAnnotation.class); - } - - public void testBadNulls() throws Exception { - try { - tester.testNulls(BadNulls.class); - } catch (AssertionFailedError expected) { - return; - } - fail("should have failed"); - } - - public void testInstantiate_factoryMethodReturnsNullButNotAnnotated() throws Exception { - try { - FactoryMethodReturnsNullButNotAnnotated unused = - tester.instantiate(FactoryMethodReturnsNullButNotAnnotated.class); - } catch (AssertionFailedError expected) { - assertThat(expected).hasMessageThat().contains("@Nullable"); - return; - } - fail("should have failed"); - } - - public void testInstantiate_factoryMethodReturnsNullAndAnnotated() throws Exception { - assertThrows( - FactoryMethodReturnsNullException.class, - () -> tester.instantiate(FactoryMethodReturnsNullAndAnnotated.class)); - } - - public void testInstantiate_factoryMethodAcceptsNull() throws Exception { - assertNull(tester.instantiate(FactoryMethodAcceptsNull.class).name); - } - - public void testInstantiate_factoryMethodDoesNotAcceptNull() throws Exception { - assertNotNull(tester.instantiate(FactoryMethodDoesNotAcceptNull.class).name); - } - - public void testInstantiate_constructorAcceptsNull() throws Exception { - assertNull(tester.instantiate(ConstructorAcceptsNull.class).name); - } - - public void testInstantiate_constructorDoesNotAcceptNull() throws Exception { - assertNotNull(tester.instantiate(ConstructorDoesNotAcceptNull.class).name); - } - - public void testInstantiate_notInstantiable() throws Exception { - assertNull(tester.instantiate(NotInstantiable.class)); - } - - public void testInstantiate_noConstantEnum() throws Exception { - assertNull(tester.instantiate(NoConstantEnum.class)); - } - - public void testInstantiate_oneConstantEnum() throws Exception { - assertEquals(OneConstantEnum.A, tester.instantiate(OneConstantEnum.class)); - } - - public void testInstantiate_interface() throws Exception { - assertNull(tester.instantiate(Runnable.class)); - } - - public void testInstantiate_abstractClass() throws Exception { - assertNull(tester.instantiate(AbstractList.class)); - } - - public void testInstantiate_annotation() throws Exception { - assertNull(tester.instantiate(MyAnnotation.class)); - } - - public void testInstantiate_setDefault() throws Exception { - NotInstantiable x = new NotInstantiable(); - tester.setDefault(NotInstantiable.class, x); - assertNotNull(tester.instantiate(ConstructorParameterNotInstantiable.class)); - } - - public void testSetDistinctValues_equalInstances() { - assertThrows( - IllegalArgumentException.class, () -> tester.setDistinctValues(String.class, "", "")); - } - - public void testInstantiate_setDistinctValues() throws Exception { - NotInstantiable x = new NotInstantiable(); - NotInstantiable y = new NotInstantiable(); - tester.setDistinctValues(NotInstantiable.class, x, y); - assertNotNull(tester.instantiate(ConstructorParameterNotInstantiable.class)); - tester.testEquals(ConstructorParameterMapOfNotInstantiable.class); - } - - public void testInstantiate_constructorThrows() throws Exception { - assertThrows( - InvocationTargetException.class, () -> tester.instantiate(ConstructorThrows.class)); - } - - public void testInstantiate_factoryMethodThrows() throws Exception { - assertThrows( - InvocationTargetException.class, () -> tester.instantiate(FactoryMethodThrows.class)); - } - - public void testInstantiate_constructorParameterNotInstantiable() throws Exception { - assertThrows( - ParameterNotInstantiableException.class, - () -> tester.instantiate(ConstructorParameterNotInstantiable.class)); - } - - public void testInstantiate_factoryMethodParameterNotInstantiable() throws Exception { - assertThrows( - ParameterNotInstantiableException.class, - () -> tester.instantiate(FactoryMethodParameterNotInstantiable.class)); - } - - public void testInstantiate_instantiableFactoryMethodChosen() throws Exception { - assertEquals("good", tester.instantiate(InstantiableFactoryMethodChosen.class).name); - } - - @AndroidIncompatible // TODO(cpovirk): ClassNotFoundException... ClassSanityTesterTest$AnInterface - public void testInterfaceProxySerializable() throws Exception { - SerializableTester.reserializeAndAssert(tester.instantiate(HasAnInterface.class)); - } - - public void testReturnValuesFromAnotherPackageIgnoredForNullTests() throws Exception { - new ClassSanityTester().forAllPublicStaticMethods(JdkObjectFactory.class).testNulls(); - } - - /** String doesn't check nulls as we expect. But the framework should ignore. */ - private static class JdkObjectFactory { - @SuppressWarnings("unused") // Called by reflection - public static Object create() { - return new ArrayList<>(); - } - } - - static class HasAnInterface implements Serializable { - private final AnInterface i; - - public HasAnInterface(AnInterface i) { - this.i = i; - } - - @Override - public boolean equals(@Nullable Object obj) { - if (obj instanceof HasAnInterface) { - HasAnInterface that = (HasAnInterface) obj; - return i.equals(that.i); - } else { - return false; - } - } - - @Override - public int hashCode() { - return i.hashCode(); - } - } - - static class InstantiableFactoryMethodChosen { - final String name; - - private InstantiableFactoryMethodChosen(String name) { - this.name = name; - } - - public InstantiableFactoryMethodChosen(NotInstantiable x) { - checkNotNull(x); - this.name = "x1"; - } - - public static InstantiableFactoryMethodChosen create(NotInstantiable x) { - return new InstantiableFactoryMethodChosen(x); - } - - public static InstantiableFactoryMethodChosen create(String s) { - checkNotNull(s); - return new InstantiableFactoryMethodChosen("good"); - } - } - - public void testInstantiate_instantiableConstructorChosen() throws Exception { - assertEquals("good", tester.instantiate(InstantiableConstructorChosen.class).name); - } - - public void testEquals_setOfNonInstantiable() throws Exception { - assertThrows( - ParameterNotInstantiableException.class, - () -> new ClassSanityTester().doTestEquals(SetWrapper.class)); - } - - private abstract static class Wrapper { - private final Object wrapped; - - Wrapper(Object wrapped) { - this.wrapped = checkNotNull(wrapped); - } - - @Override - public boolean equals(@Nullable Object obj) { - // In general getClass().isInstance() is bad for equals. - // But here we fully control the subclasses to ensure symmetry. - if (getClass().isInstance(obj)) { - Wrapper that = (Wrapper) obj; - return wrapped.equals(that.wrapped); - } - return false; - } - - @Override - public int hashCode() { - return wrapped.hashCode(); - } - - @Override - public String toString() { - return wrapped.toString(); - } - } - - private static class SetWrapper extends Wrapper { - public SetWrapper(Set wrapped) { - super(wrapped); - } - } - - static class InstantiableConstructorChosen { - final String name; - - public InstantiableConstructorChosen(String name) { - checkNotNull(name); - this.name = "good"; - } - - public InstantiableConstructorChosen(NotInstantiable x) { - checkNotNull(x); - this.name = "x1"; - } - - public static InstantiableFactoryMethodChosen create(NotInstantiable x) { - return new InstantiableFactoryMethodChosen(x); - } - } - - static class GoodEquals { - - private final String a; - private final int b; - - private GoodEquals(String a, int b) { - this.a = checkNotNull(a); - this.b = b; - } - - // ignored by testEquals() - GoodEquals(@SuppressWarnings("unused") NotInstantiable x) { - this.a = "x"; - this.b = -1; - } - - // will keep trying - public GoodEquals(@SuppressWarnings("unused") NotInstantiable x, int b) { - this.a = "x"; - this.b = b; - } - - // keep trying - @SuppressWarnings("unused") - static GoodEquals create(int a, int b) { - throw new RuntimeException(); - } - - // Good! - static GoodEquals create(String a, int b) { - return new GoodEquals(a, b); - } - - // keep trying - @SuppressWarnings("unused") - public static @Nullable GoodEquals createMayReturnNull(int a, int b) { - return null; - } - - @Override - public boolean equals(@Nullable Object obj) { - if (obj instanceof GoodEquals) { - GoodEquals that = (GoodEquals) obj; - return a.equals(that.a) && b == that.b; - } else { - return false; - } - } - - @Override - public int hashCode() { - return 0; - } - } - - static class BadEquals { - - public BadEquals() {} // ignored by testEquals() since it has less parameters. - - public static BadEquals create(@SuppressWarnings("unused") @Nullable String s) { - return new BadEquals(); - } - - @Override - public boolean equals(@Nullable Object obj) { - return obj instanceof BadEquals; - } - - @Override - public int hashCode() { - return 0; - } - } - - static class SameIntegerInstance { - private final Integer i; - - public SameIntegerInstance(Integer i) { - this.i = checkNotNull(i); - } - - @Override - public int hashCode() { - return i.hashCode(); - } - - @Override - @SuppressWarnings({"BoxedPrimitiveEquality", "NumericEquality"}) - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameIntegerInstance) { - SameIntegerInstance that = (SameIntegerInstance) obj; - return i == that.i; - } - return false; - } - } - - static class SameLongInstance { - private final Long i; - - public SameLongInstance(Long i) { - this.i = checkNotNull(i); - } - - @Override - public int hashCode() { - return i.hashCode(); - } - - @Override - @SuppressWarnings({"BoxedPrimitiveEquality", "NumericEquality"}) - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameLongInstance) { - SameLongInstance that = (SameLongInstance) obj; - return i == that.i; - } - return false; - } - } - - static class SameFloatInstance { - private final Float i; - - public SameFloatInstance(Float i) { - this.i = checkNotNull(i); - } - - @Override - public int hashCode() { - return i.hashCode(); - } - - @Override - @SuppressWarnings({"BoxedPrimitiveEquality", "NumericEquality"}) - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameFloatInstance) { - SameFloatInstance that = (SameFloatInstance) obj; - return i == that.i; - } - return false; - } - } - - static class SameDoubleInstance { - private final Double i; - - public SameDoubleInstance(Double i) { - this.i = checkNotNull(i); - } - - @Override - public int hashCode() { - return i.hashCode(); - } - - @Override - @SuppressWarnings({"BoxedPrimitiveEquality", "NumericEquality"}) - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameDoubleInstance) { - SameDoubleInstance that = (SameDoubleInstance) obj; - return i == that.i; - } - return false; - } - } - - static class SameShortInstance { - private final Short i; - - public SameShortInstance(Short i) { - this.i = checkNotNull(i); - } - - @Override - public int hashCode() { - return i.hashCode(); - } - - @Override - @SuppressWarnings({"BoxedPrimitiveEquality", "NumericEquality"}) - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameShortInstance) { - SameShortInstance that = (SameShortInstance) obj; - return i == that.i; - } - return false; - } - } - - static class SameByteInstance { - private final Byte i; - - public SameByteInstance(Byte i) { - this.i = checkNotNull(i); - } - - @Override - public int hashCode() { - return i.hashCode(); - } - - @Override - @SuppressWarnings({"BoxedPrimitiveEquality", "NumericEquality"}) - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameByteInstance) { - SameByteInstance that = (SameByteInstance) obj; - return i == that.i; - } - return false; - } - } - - static class SameCharacterInstance { - private final Character i; - - public SameCharacterInstance(Character i) { - this.i = checkNotNull(i); - } - - @Override - public int hashCode() { - return i.hashCode(); - } - - @Override - @SuppressWarnings("BoxedPrimitiveEquality") - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameCharacterInstance) { - SameCharacterInstance that = (SameCharacterInstance) obj; - return i == that.i; - } - return false; - } - } - - static class SameBooleanInstance { - private final Boolean i; - - public SameBooleanInstance(Boolean i) { - this.i = checkNotNull(i); - } - - @Override - public int hashCode() { - return i.hashCode(); - } - - @Override - @SuppressWarnings("BoxedPrimitiveEquality") - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameBooleanInstance) { - SameBooleanInstance that = (SameBooleanInstance) obj; - return i == that.i; - } - return false; - } - } - - static class SameStringInstance { - private final String s; - - public SameStringInstance(String s) { - this.s = checkNotNull(s); - } - - @Override - public int hashCode() { - return s.hashCode(); - } - - @Override - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameStringInstance) { - SameStringInstance that = (SameStringInstance) obj; - return s == that.s; - } - return false; - } - } - - static class SameObjectInstance { - private final Object s; - - public SameObjectInstance(Object s) { - this.s = checkNotNull(s); - } - - @Override - public int hashCode() { - return s.hashCode(); - } - - @Override - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameObjectInstance) { - SameObjectInstance that = (SameObjectInstance) obj; - return s == that.s; - } - return false; - } - } - - static class SameInterfaceInstance { - private final Runnable s; - - public SameInterfaceInstance(Runnable s) { - this.s = checkNotNull(s); - } - - @Override - public int hashCode() { - return s.hashCode(); - } - - @Override - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameInterfaceInstance) { - SameInterfaceInstance that = (SameInterfaceInstance) obj; - return s == that.s; - } - return false; - } - } - - static class SameListInstance { - private final List s; - - public SameListInstance(List s) { - this.s = checkNotNull(s); - } - - @Override - public int hashCode() { - return System.identityHashCode(s); - } - - @Override - public boolean equals(@Nullable Object obj) { - if (obj instanceof SameListInstance) { - SameListInstance that = (SameListInstance) obj; - return s == that.s; - } - return false; - } - } - - static class UsesReferentialEquality { - private final ReferentialEquality s; - - public UsesReferentialEquality(ReferentialEquality s) { - this.s = checkNotNull(s); - } - - @Override - public int hashCode() { - return s.hashCode(); - } - - @Override - public boolean equals(@Nullable Object obj) { - if (obj instanceof UsesReferentialEquality) { - UsesReferentialEquality that = (UsesReferentialEquality) obj; - return s == that.s; - } - return false; - } - } - - static class UsesEnum { - private final TimeUnit s; - - public UsesEnum(TimeUnit s) { - this.s = checkNotNull(s); - } - - @Override - public int hashCode() { - return s.hashCode(); - } - - @Override - public boolean equals(@Nullable Object obj) { - if (obj instanceof UsesEnum) { - UsesEnum that = (UsesEnum) obj; - return s == that.s; - } - return false; - } - } - - public static class ReferentialEquality { - public ReferentialEquality() {} - } - - static class BadEqualsWithParameterizedType { - - // ignored by testEquals() since it has less parameters. - public BadEqualsWithParameterizedType() {} - - public static BadEqualsWithParameterizedType create( - @SuppressWarnings("unused") ImmutableList> s) { - return new BadEqualsWithParameterizedType(); - } - - @Override - public boolean equals(@Nullable Object obj) { - return obj instanceof BadEqualsWithParameterizedType; - } - - @Override - public int hashCode() { - return 0; - } - } - - static class GoodNulls { - public GoodNulls(String s) { - checkNotNull(s); - } - - public void rejectNull(String s) { - checkNotNull(s); - } - } - - public static class BadNulls { - public void failsToRejectNull(@SuppressWarnings("unused") String s) {} - } - - public static class NoNullCheckNeededDespiteNotInstantiable { - - public NoNullCheckNeededDespiteNotInstantiable(NotInstantiable x) { - checkNotNull(x); - } - - @SuppressWarnings("unused") // reflected - void primitiveOnly(int i) {} - - @SuppressWarnings("unused") // reflected - void nullableOnly(@Nullable String s) {} - - public void noParameter() {} - - @SuppressWarnings("unused") // reflected - void primitiveAndNullable(@Nullable String s, int i) {} - } - - static class FactoryMethodReturnsNullButNotAnnotated { - private FactoryMethodReturnsNullButNotAnnotated() {} - - static FactoryMethodReturnsNullButNotAnnotated returnsNull() { - return null; - } - } - - static class FactoryMethodReturnsNullAndAnnotated { - private FactoryMethodReturnsNullAndAnnotated() {} - - public static @Nullable FactoryMethodReturnsNullAndAnnotated returnsNull() { - return null; - } - } - - static class FactoryMethodAcceptsNull { - - final String name; - - private FactoryMethodAcceptsNull(String name) { - this.name = name; - } - - static FactoryMethodAcceptsNull create(@Nullable String name) { - return new FactoryMethodAcceptsNull(name); - } - } - - static class FactoryMethodDoesNotAcceptNull { - - final String name; - - private FactoryMethodDoesNotAcceptNull(String name) { - this.name = checkNotNull(name); - } - - public static FactoryMethodDoesNotAcceptNull create(String name) { - return new FactoryMethodDoesNotAcceptNull(name); - } - } - - static class ConstructorAcceptsNull { - - final String name; - - public ConstructorAcceptsNull(@Nullable String name) { - this.name = name; - } - } - - static class ConstructorDoesNotAcceptNull { - - final String name; - - ConstructorDoesNotAcceptNull(String name) { - this.name = checkNotNull(name); - } - } - - static class ConstructorParameterNotInstantiable { - public ConstructorParameterNotInstantiable(@SuppressWarnings("unused") NotInstantiable x) {} - } - - static class ConstructorParameterMapOfNotInstantiable { - private final Map m; - - public ConstructorParameterMapOfNotInstantiable(Map m) { - this.m = checkNotNull(m); - } - - @Override - public boolean equals(@Nullable Object obj) { - if (obj instanceof ConstructorParameterMapOfNotInstantiable) { - return m.equals(((ConstructorParameterMapOfNotInstantiable) obj).m); - } else { - return false; - } - } - - @Override - public int hashCode() { - return m.hashCode(); - } - } - - // Test that we should get a distinct parameter error when doing equals test. - static class ConstructorParameterWithOptionalNotInstantiable { - public ConstructorParameterWithOptionalNotInstantiable(Optional x) { - checkNotNull(x); - } - - @Override - public boolean equals(@Nullable Object obj) { - throw new UnsupportedOperationException(); - } - - @Override - public int hashCode() { - throw new UnsupportedOperationException(); - } - } - - static class ConstructorParameterSingleValue { - public ConstructorParameterSingleValue(@SuppressWarnings("unused") Singleton s) {} - - @Override - public boolean equals(@Nullable Object obj) { - return obj instanceof ConstructorParameterSingleValue; - } - - @Override - public int hashCode() { - return 1; - } - - public static class Singleton { - public static final Singleton INSTANCE = new Singleton(); - - private Singleton() {} - } - } - - static class FactoryMethodParameterNotInstantiable { - - private FactoryMethodParameterNotInstantiable() {} - - static FactoryMethodParameterNotInstantiable create( - @SuppressWarnings("unused") NotInstantiable x) { - return new FactoryMethodParameterNotInstantiable(); - } - } - - static class ConstructorThrows { - public ConstructorThrows() { - throw new RuntimeException(); - } - } - - static class FactoryMethodThrows { - private FactoryMethodThrows() {} - - public static FactoryMethodThrows create() { - throw new RuntimeException(); - } - } - - static class NotInstantiable { - private NotInstantiable() {} - } - - private enum NoConstantEnum {} - - private enum OneConstantEnum { - A - } - - private enum EnumFailsToCheckNull { - A; - - @SuppressWarnings("unused") - public void failToCheckNull(String s) {} - } - - private interface AnInterface {} - - private abstract static class AnAbstractClass { - @SuppressWarnings("unused") - public AnAbstractClass(String s) {} - - @SuppressWarnings("unused") - public void failsToCheckNull(String s) {} - } - - private static class NoPublicStaticMethods { - @SuppressWarnings("unused") // To test non-public factory isn't used. - static String notPublic() { - return ""; - } - } - - @interface MyAnnotation {} -} diff --git a/android/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java b/android/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java deleted file mode 100644 index c4b2abe54849..000000000000 --- a/android/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java +++ /dev/null @@ -1,1438 +0,0 @@ -/* - * Copyright (C) 2005 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package com.google.common.testing; - -import static com.google.common.base.Preconditions.checkArgument; -import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.truth.Truth.assertThat; -import static org.junit.Assert.assertThrows; - -import com.google.common.base.Converter; -import com.google.common.base.Function; -import com.google.common.base.Supplier; -import com.google.common.collect.ImmutableList; -import com.google.common.collect.ImmutableMap; -import com.google.common.collect.ImmutableMultimap; -import com.google.common.collect.ImmutableMultiset; -import com.google.common.collect.ImmutableSet; -import com.google.common.collect.ImmutableSortedSet; -import com.google.common.collect.ImmutableTable; -import com.google.common.collect.Maps; -import com.google.common.collect.Multimap; -import com.google.common.collect.Multiset; -import com.google.common.collect.Table; -import com.google.common.reflect.TypeToken; -import com.google.common.testing.NullPointerTester.Visibility; -import com.google.common.testing.anotherpackage.SomeClassThatDoesNotUseNullable; -import com.google.errorprone.annotations.CanIgnoreReturnValue; -import java.lang.reflect.Constructor; -import java.lang.reflect.Method; -import java.util.List; -import java.util.Locale; -import java.util.Map; -import java.util.Set; -import java.util.SortedSet; -import junit.framework.AssertionFailedError; -import junit.framework.TestCase; -import org.checkerframework.checker.nullness.qual.Nullable; - -/** - * Unit test for {@link NullPointerTester}. - * - * @author Kevin Bourrillion - * @author Mick Killianey - */ -@SuppressWarnings("CheckReturnValue") -@AndroidIncompatible // NullPointerTester refuses to run for c.g.c under Android -public class NullPointerTesterTest extends TestCase { - - /** Non-NPE RuntimeException. */ - public static class FooException extends RuntimeException { - private static final long serialVersionUID = 1L; - } - - /** - * Class for testing all permutations of static/non-static one-argument methods using - * methodParameter(). - */ - @SuppressWarnings("unused") // used by reflection - public static class OneArg { - - public static void staticOneArgCorrectlyThrowsNpe(String s) { - checkNotNull(s); // expect NPE here on null - } - - public static void staticOneArgThrowsOtherThanNpe(String s) { - throw new FooException(); // should catch as failure - } - - public static void staticOneArgShouldThrowNpeButDoesnt(String s) { - // should catch as failure - } - - public static void staticOneArgCheckForNullCorrectlyDoesNotThrowNPE( - @javax.annotation.CheckForNull String s) { - // null? no problem - } - - public static void staticOneArgJsr305NullableCorrectlyDoesNotThrowNPE( - @javax.annotation.Nullable String s) { - // null? no problem - } - - public static void staticOneArgNullableCorrectlyDoesNotThrowNPE(@Nullable String s) { - // null? no problem - } - - public static void staticOneArgCheckForNullCorrectlyThrowsOtherThanNPE( - @javax.annotation.CheckForNull String s) { - throw new FooException(); // ok, as long as it's not NullPointerException - } - - public static void staticOneArgNullableCorrectlyThrowsOtherThanNPE(@Nullable String s) { - throw new FooException(); // ok, as long as it's not NullPointerException - } - - public static void staticOneArgCheckForNullThrowsNPE(@javax.annotation.CheckForNull String s) { - checkNotNull(s); // doesn't check if you said you'd accept null, but you don't - } - - public static void staticOneArgNullableThrowsNPE(@Nullable String s) { - checkNotNull(s); // doesn't check if you said you'd accept null, but you don't - } - - public void oneArgCorrectlyThrowsNpe(String s) { - checkNotNull(s); // expect NPE here on null - } - - public void oneArgThrowsOtherThanNpe(String s) { - throw new FooException(); // should catch as failure - } - - public void oneArgShouldThrowNpeButDoesnt(String s) { - // should catch as failure - } - - public void oneArgCheckForNullCorrectlyDoesNotThrowNPE( - @javax.annotation.CheckForNull String s) { - // null? no problem - } - - public void oneArgNullableCorrectlyDoesNotThrowNPE(@Nullable String s) { - // null? no problem - } - - public void oneArgCheckForNullCorrectlyThrowsOtherThanNPE( - @javax.annotation.CheckForNull String s) { - throw new FooException(); // ok, as long as it's not NullPointerException - } - - public void oneArgNullableCorrectlyThrowsOtherThanNPE(@Nullable String s) { - throw new FooException(); // ok, as long as it's not NullPointerException - } - - public void oneArgCheckForNullThrowsNPE(@javax.annotation.CheckForNull String s) { - checkNotNull(s); // doesn't check if you said you'd accept null, but you don't - } - - public void oneArgNullableThrowsNPE(@Nullable String s) { - checkNotNull(s); // doesn't check if you said you'd accept null, but you don't - } - } - - private static final String[] STATIC_ONE_ARG_METHODS_SHOULD_PASS = { - "staticOneArgCorrectlyThrowsNpe", - "staticOneArgCheckForNullCorrectlyDoesNotThrowNPE", - "staticOneArgCheckForNullCorrectlyThrowsOtherThanNPE", - "staticOneArgCheckForNullThrowsNPE", - "staticOneArgNullableCorrectlyDoesNotThrowNPE", - "staticOneArgNullableCorrectlyThrowsOtherThanNPE", - "staticOneArgNullableThrowsNPE", - }; - private static final String[] STATIC_ONE_ARG_METHODS_SHOULD_FAIL = { - "staticOneArgThrowsOtherThanNpe", "staticOneArgShouldThrowNpeButDoesnt", - }; - private static final String[] NONSTATIC_ONE_ARG_METHODS_SHOULD_PASS = { - "oneArgCorrectlyThrowsNpe", - "oneArgCheckForNullCorrectlyDoesNotThrowNPE", - "oneArgCheckForNullCorrectlyThrowsOtherThanNPE", - "oneArgCheckForNullThrowsNPE", - "oneArgNullableCorrectlyDoesNotThrowNPE", - "oneArgNullableCorrectlyThrowsOtherThanNPE", - "oneArgNullableThrowsNPE", - }; - private static final String[] NONSTATIC_ONE_ARG_METHODS_SHOULD_FAIL = { - "oneArgThrowsOtherThanNpe", "oneArgShouldThrowNpeButDoesnt", - }; - - private static class ThrowsIae { - public static void christenPoodle(String name) { - checkArgument(name != null); - } - } - - private static class ThrowsNpe { - public static void christenPoodle(String name) { - checkNotNull(name); - } - } - - private static class ThrowsUoe { - public static void christenPoodle(String name) { - throw new UnsupportedOperationException(); - } - } - - private static class ThrowsSomethingElse { - public static void christenPoodle(String name) { - throw new RuntimeException(); - } - } - - public void testDontAcceptIae() { - NullPointerTester tester = new NullPointerTester(); - tester.testAllPublicStaticMethods(ThrowsNpe.class); - tester.testAllPublicStaticMethods(ThrowsUoe.class); - try { - tester.testAllPublicStaticMethods(ThrowsIae.class); - } catch (AssertionFailedError expected) { - return; - } - fail(); - } - - public void testStaticOneArgMethodsThatShouldPass() throws Exception { - for (String methodName : STATIC_ONE_ARG_METHODS_SHOULD_PASS) { - Method method = OneArg.class.getMethod(methodName, String.class); - try { - new NullPointerTester().testMethodParameter(new OneArg(), method, 0); - } catch (AssertionFailedError unexpected) { - fail("Should not have flagged method " + methodName); - } - } - } - - public void testStaticOneArgMethodsThatShouldFail() throws Exception { - for (String methodName : STATIC_ONE_ARG_METHODS_SHOULD_FAIL) { - Method method = OneArg.class.getMethod(methodName, String.class); - boolean foundProblem = false; - try { - new NullPointerTester().testMethodParameter(new OneArg(), method, 0); - } catch (AssertionFailedError expected) { - foundProblem = true; - } - assertTrue("Should report error in method " + methodName, foundProblem); - } - } - - public void testNonStaticOneArgMethodsThatShouldPass() throws Exception { - OneArg foo = new OneArg(); - for (String methodName : NONSTATIC_ONE_ARG_METHODS_SHOULD_PASS) { - Method method = OneArg.class.getMethod(methodName, String.class); - try { - new NullPointerTester().testMethodParameter(foo, method, 0); - } catch (AssertionFailedError unexpected) { - fail("Should not have flagged method " + methodName); - } - } - } - - public void testNonStaticOneArgMethodsThatShouldFail() throws Exception { - OneArg foo = new OneArg(); - for (String methodName : NONSTATIC_ONE_ARG_METHODS_SHOULD_FAIL) { - Method method = OneArg.class.getMethod(methodName, String.class); - boolean foundProblem = false; - try { - new NullPointerTester().testMethodParameter(foo, method, 0); - } catch (AssertionFailedError expected) { - foundProblem = true; - } - assertTrue("Should report error in method " + methodName, foundProblem); - } - } - - public void testMessageOtherException() throws Exception { - Method method = OneArg.class.getMethod("staticOneArgThrowsOtherThanNpe", String.class); - boolean foundProblem = false; - try { - new NullPointerTester().testMethodParameter(new OneArg(), method, 0); - } catch (AssertionFailedError expected) { - assertThat(expected.getMessage()).contains("index 0"); - assertThat(expected.getMessage()).contains("[null]"); - foundProblem = true; - } - assertTrue("Should report error when different exception is thrown", foundProblem); - } - - public void testMessageNoException() throws Exception { - Method method = OneArg.class.getMethod("staticOneArgShouldThrowNpeButDoesnt", String.class); - boolean foundProblem = false; - try { - new NullPointerTester().testMethodParameter(new OneArg(), method, 0); - } catch (AssertionFailedError expected) { - assertThat(expected.getMessage()).contains("index 0"); - assertThat(expected.getMessage()).contains("[null]"); - foundProblem = true; - } - assertTrue("Should report error when no exception is thrown", foundProblem); - } - - /** - * Class for testing all permutations of nullable/non-nullable two-argument methods using - * testMethod(). - * - *

    - *
  • normalNormal: two params, neither is Nullable - *
  • nullableNormal: only first param is Nullable - *
  • normalNullable: only second param is Nullable - *
  • nullableNullable: both params are Nullable - *
- */ - public static class TwoArg { - /** Action to take on a null param. */ - public enum Action { - THROW_A_NPE { - @Override - public void act() { - throw new NullPointerException(); - } - }, - THROW_OTHER { - @Override - public void act() { - throw new FooException(); - } - }, - JUST_RETURN { - @Override - public void act() {} - }; - - public abstract void act(); - } - - Action actionWhenFirstParamIsNull; - Action actionWhenSecondParamIsNull; - - public TwoArg(Action actionWhenFirstParamIsNull, Action actionWhenSecondParamIsNull) { - this.actionWhenFirstParamIsNull = actionWhenFirstParamIsNull; - this.actionWhenSecondParamIsNull = actionWhenSecondParamIsNull; - } - - /** Method that decides how to react to parameters. */ - public void reactToNullParameters(@Nullable Object first, @Nullable Object second) { - if (first == null) { - actionWhenFirstParamIsNull.act(); - } - if (second == null) { - actionWhenSecondParamIsNull.act(); - } - } - - /** Two-arg method with no Nullable params. */ - @SuppressWarnings("GoodTime") // false positive; b/122617528 - public void normalNormal(String first, Integer second) { - reactToNullParameters(first, second); - } - - /** Two-arg method with the second param Nullable. */ - @SuppressWarnings("GoodTime") // false positive; b/122617528 - public void normalNullable(String first, @Nullable Integer second) { - reactToNullParameters(first, second); - } - - /** Two-arg method with the first param Nullable. */ - @SuppressWarnings("GoodTime") // false positive; b/122617528 - public void nullableNormal(@Nullable String first, Integer second) { - reactToNullParameters(first, second); - } - - /** Two-arg method with the both params Nullable. */ - @SuppressWarnings("GoodTime") // false positive; b/122617528 - public void nullableNullable(@Nullable String first, @Nullable Integer second) { - reactToNullParameters(first, second); - } - - /** To provide sanity during debugging. */ - @Override - public String toString() { - return rootLocaleFormat( - "Bar(%s, %s)", actionWhenFirstParamIsNull, actionWhenSecondParamIsNull); - } - } - - public void verifyBarPass(Method method, TwoArg bar) { - try { - new NullPointerTester().testMethod(bar, method); - } catch (AssertionFailedError incorrectError) { - String errorMessage = - rootLocaleFormat("Should not have flagged method %s for %s", method.getName(), bar); - assertNull(errorMessage, incorrectError); - } - } - - public void verifyBarFail(Method method, TwoArg bar) { - try { - new NullPointerTester().testMethod(bar, method); - } catch (AssertionFailedError expected) { - return; // good...we wanted a failure - } - String errorMessage = - rootLocaleFormat("Should have flagged method %s for %s", method.getName(), bar); - fail(errorMessage); - } - - public void testTwoArgNormalNormal() throws Exception { - Method method = TwoArg.class.getMethod("normalNormal", String.class, Integer.class); - for (TwoArg.Action first : TwoArg.Action.values()) { - for (TwoArg.Action second : TwoArg.Action.values()) { - TwoArg bar = new TwoArg(first, second); - if (first.equals(TwoArg.Action.THROW_A_NPE) && second.equals(TwoArg.Action.THROW_A_NPE)) { - verifyBarPass(method, bar); // require both params to throw NPE - } else { - verifyBarFail(method, bar); - } - } - } - } - - public void testTwoArgNormalNullable() throws Exception { - Method method = TwoArg.class.getMethod("normalNullable", String.class, Integer.class); - for (TwoArg.Action first : TwoArg.Action.values()) { - for (TwoArg.Action second : TwoArg.Action.values()) { - TwoArg bar = new TwoArg(first, second); - if (first.equals(TwoArg.Action.THROW_A_NPE)) { - verifyBarPass(method, bar); // only pass if 1st param throws NPE - } else { - verifyBarFail(method, bar); - } - } - } - } - - public void testTwoArgNullableNormal() throws Exception { - Method method = TwoArg.class.getMethod("nullableNormal", String.class, Integer.class); - for (TwoArg.Action first : TwoArg.Action.values()) { - for (TwoArg.Action second : TwoArg.Action.values()) { - TwoArg bar = new TwoArg(first, second); - if (second.equals(TwoArg.Action.THROW_A_NPE)) { - verifyBarPass(method, bar); // only pass if 2nd param throws NPE - } else { - verifyBarFail(method, bar); - } - } - } - } - - public void testTwoArgNullableNullable() throws Exception { - Method method = TwoArg.class.getMethod("nullableNullable", String.class, Integer.class); - for (TwoArg.Action first : TwoArg.Action.values()) { - for (TwoArg.Action second : TwoArg.Action.values()) { - TwoArg bar = new TwoArg(first, second); - verifyBarPass(method, bar); // All args nullable: anything goes! - } - } - } - - /* - * This next part consists of several sample classes that provide - * demonstrations of conditions that cause NullPointerTester - * to succeed/fail. - */ - - /** Lots of well-behaved methods. */ - @SuppressWarnings("unused") // used by reflection - private static class PassObject extends SomeClassThatDoesNotUseNullable { - public static void doThrow(Object arg) { - if (arg == null) { - throw new FooException(); - } - } - - public void noArg() {} - - public void oneArg(String s) { - checkNotNull(s); - } - - void packagePrivateOneArg(String s) { - checkNotNull(s); - } - - protected void protectedOneArg(String s) { - checkNotNull(s); - } - - public void oneNullableArg(@Nullable String s) {} - - public void oneNullableArgThrows(@Nullable String s) { - doThrow(s); - } - - public void twoArg(String s, Integer i) { - checkNotNull(s); - i.intValue(); - } - - public void twoMixedArgs(String s, @Nullable Integer i) { - checkNotNull(s); - } - - public void twoMixedArgs(@Nullable Integer i, String s) { - checkNotNull(s); - } - - public void twoMixedArgsThrows(String s, @Nullable Integer i) { - checkNotNull(s); - doThrow(i); - } - - public void twoMixedArgsThrows(@Nullable Integer i, String s) { - checkNotNull(s); - doThrow(i); - } - - public void twoNullableArgs(@Nullable String s, @javax.annotation.Nullable Integer i) {} - - public void twoNullableArgsThrowsFirstArg(@Nullable String s, @Nullable Integer i) { - doThrow(s); - } - - public void twoNullableArgsThrowsSecondArg(@Nullable String s, @Nullable Integer i) { - doThrow(i); - } - - public static void staticOneArg(String s) { - checkNotNull(s); - } - - public static void staticOneNullableArg(@Nullable String s) {} - - public static void staticOneNullableArgThrows(@Nullable String s) { - doThrow(s); - } - } - - public void testGoodClass() { - shouldPass(new PassObject()); - } - - private static class FailOneArgDoesntThrowNPE extends PassObject { - @Override - public void oneArg(String s) { - // Fail: missing NPE for s - } - } - - public void testFailOneArgDoesntThrowNpe() { - shouldFail(new FailOneArgDoesntThrowNPE()); - } - - private static class FailOneArgThrowsWrongType extends PassObject { - @Override - public void oneArg(String s) { - doThrow(s); // Fail: throwing non-NPE exception for null s - } - } - - public void testFailOneArgThrowsWrongType() { - shouldFail(new FailOneArgThrowsWrongType()); - } - - private static class PassOneNullableArgThrowsNPE extends PassObject { - @Override - public void oneNullableArg(@Nullable String s) { - checkNotNull(s); // ok to throw NPE - } - } - - public void testPassOneNullableArgThrowsNPE() { - shouldPass(new PassOneNullableArgThrowsNPE()); - } - - private static class FailTwoArgsFirstArgDoesntThrowNPE extends PassObject { - @Override - public void twoArg(String s, Integer i) { - // Fail: missing NPE for s - i.intValue(); - } - } - - public void testFailTwoArgsFirstArgDoesntThrowNPE() { - shouldFail(new FailTwoArgsFirstArgDoesntThrowNPE()); - } - - private static class FailTwoArgsFirstArgThrowsWrongType extends PassObject { - @Override - public void twoArg(String s, Integer i) { - doThrow(s); // Fail: throwing non-NPE exception for null s - i.intValue(); - } - } - - public void testFailTwoArgsFirstArgThrowsWrongType() { - shouldFail(new FailTwoArgsFirstArgThrowsWrongType()); - } - - private static class FailTwoArgsSecondArgDoesntThrowNPE extends PassObject { - @Override - public void twoArg(String s, Integer i) { - checkNotNull(s); - // Fail: missing NPE for i - } - } - - public void testFailTwoArgsSecondArgDoesntThrowNPE() { - shouldFail(new FailTwoArgsSecondArgDoesntThrowNPE()); - } - - private static class FailTwoArgsSecondArgThrowsWrongType extends PassObject { - @Override - public void twoArg(String s, Integer i) { - checkNotNull(s); - doThrow(i); // Fail: throwing non-NPE exception for null i - } - } - - public void testFailTwoArgsSecondArgThrowsWrongType() { - shouldFail(new FailTwoArgsSecondArgThrowsWrongType()); - } - - private static class FailTwoMixedArgsFirstArgDoesntThrowNPE extends PassObject { - @Override - public void twoMixedArgs(String s, @Nullable Integer i) { - // Fail: missing NPE for s - } - } - - public void testFailTwoMixedArgsFirstArgDoesntThrowNPE() { - shouldFail(new FailTwoMixedArgsFirstArgDoesntThrowNPE()); - } - - private static class FailTwoMixedArgsFirstArgThrowsWrongType extends PassObject { - @Override - public void twoMixedArgs(String s, @Nullable Integer i) { - doThrow(s); // Fail: throwing non-NPE exception for null s - } - } - - public void testFailTwoMixedArgsFirstArgThrowsWrongType() { - shouldFail(new FailTwoMixedArgsFirstArgThrowsWrongType()); - } - - private static class PassTwoMixedArgsNullableArgThrowsNPE extends PassObject { - @Override - public void twoMixedArgs(String s, @Nullable Integer i) { - checkNotNull(s); - i.intValue(); // ok to throw NPE? - } - } - - public void testPassTwoMixedArgsNullableArgThrowsNPE() { - shouldPass(new PassTwoMixedArgsNullableArgThrowsNPE()); - } - - private static class PassTwoMixedArgSecondNullableArgThrowsOther extends PassObject { - @Override - public void twoMixedArgs(String s, @Nullable Integer i) { - checkNotNull(s); - doThrow(i); // ok to throw non-NPE exception for null i - } - } - - public void testPassTwoMixedArgSecondNullableArgThrowsOther() { - shouldPass(new PassTwoMixedArgSecondNullableArgThrowsOther()); - } - - private static class FailTwoMixedArgsSecondArgDoesntThrowNPE extends PassObject { - @Override - public void twoMixedArgs(@Nullable Integer i, String s) { - // Fail: missing NPE for null s - } - } - - public void testFailTwoMixedArgsSecondArgDoesntThrowNPE() { - shouldFail(new FailTwoMixedArgsSecondArgDoesntThrowNPE()); - } - - private static class FailTwoMixedArgsSecondArgThrowsWrongType extends PassObject { - @Override - public void twoMixedArgs(@Nullable Integer i, String s) { - doThrow(s); // Fail: throwing non-NPE exception for null s - } - } - - public void testFailTwoMixedArgsSecondArgThrowsWrongType() { - shouldFail(new FailTwoMixedArgsSecondArgThrowsWrongType()); - } - - private static class PassTwoNullableArgsFirstThrowsNPE extends PassObject { - @Override - public void twoNullableArgs(@Nullable String s, @Nullable Integer i) { - checkNotNull(s); // ok to throw NPE? - } - } - - public void testPassTwoNullableArgsFirstThrowsNPE() { - shouldPass(new PassTwoNullableArgsFirstThrowsNPE()); - } - - private static class PassTwoNullableArgsFirstThrowsOther extends PassObject { - @Override - public void twoNullableArgs(@Nullable String s, @Nullable Integer i) { - doThrow(s); // ok to throw non-NPE exception for null s - } - } - - public void testPassTwoNullableArgsFirstThrowsOther() { - shouldPass(new PassTwoNullableArgsFirstThrowsOther()); - } - - private static class PassTwoNullableArgsSecondThrowsNPE extends PassObject { - @Override - public void twoNullableArgs(@Nullable String s, @Nullable Integer i) { - i.intValue(); // ok to throw NPE? - } - } - - public void testPassTwoNullableArgsSecondThrowsNPE() { - shouldPass(new PassTwoNullableArgsSecondThrowsNPE()); - } - - private static class PassTwoNullableArgsSecondThrowsOther extends PassObject { - @Override - public void twoNullableArgs(@Nullable String s, @Nullable Integer i) { - doThrow(i); // ok to throw non-NPE exception for null i - } - } - - public void testPassTwoNullableArgsSecondThrowsOther() { - shouldPass(new PassTwoNullableArgsSecondThrowsOther()); - } - - private static class PassTwoNullableArgsNeitherThrowsAnything extends PassObject { - @Override - public void twoNullableArgs(@Nullable String s, @Nullable Integer i) { - // ok to do nothing - } - } - - public void testPassTwoNullableArgsNeitherThrowsAnything() { - shouldPass(new PassTwoNullableArgsNeitherThrowsAnything()); - } - - @SuppressWarnings("unused") // for NullPointerTester - private abstract static class BaseClassThatFailsToThrow { - public void oneArg(String s) {} - } - - private static class SubclassWithBadSuperclass extends BaseClassThatFailsToThrow {} - - public void testSubclassWithBadSuperclass() { - shouldFail(new SubclassWithBadSuperclass()); - } - - @SuppressWarnings("unused") // for NullPointerTester - private abstract static class BaseClassThatFailsToThrowForPackagePrivate { - void packagePrivateOneArg(String s) {} - } - - private static class SubclassWithBadSuperclassForPackagePrivate - extends BaseClassThatFailsToThrowForPackagePrivate {} - - public void testSubclassWithBadSuperclassForPackagePrivateMethod() { - shouldFail(new SubclassWithBadSuperclassForPackagePrivate(), Visibility.PACKAGE); - } - - @SuppressWarnings("unused") // for NullPointerTester - private abstract static class BaseClassThatFailsToThrowForProtected { - protected void protectedOneArg(String s) {} - } - - private static class SubclassWithBadSuperclassForProtected - extends BaseClassThatFailsToThrowForProtected {} - - public void testSubclassWithBadSuperclassForPackageProtectedMethod() { - shouldFail(new SubclassWithBadSuperclassForProtected(), Visibility.PROTECTED); - } - - private static class SubclassThatOverridesBadSuperclassMethod extends BaseClassThatFailsToThrow { - @Override - public void oneArg(@Nullable String s) {} - } - - public void testSubclassThatOverridesBadSuperclassMethod() { - shouldPass(new SubclassThatOverridesBadSuperclassMethod()); - } - - @SuppressWarnings("unused") // for NullPointerTester - private static class SubclassOverridesTheWrongMethod extends BaseClassThatFailsToThrow { - public void oneArg(@Nullable CharSequence s) {} - } - - public void testSubclassOverridesTheWrongMethod() { - shouldFail(new SubclassOverridesTheWrongMethod()); - } - - @SuppressWarnings("unused") // for NullPointerTester - private static class ClassThatFailsToThrowForStatic { - static void staticOneArg(String s) {} - } - - public void testClassThatFailsToThrowForStatic() { - shouldFail(ClassThatFailsToThrowForStatic.class); - } - - private static class SubclassThatFailsToThrowForStatic extends ClassThatFailsToThrowForStatic {} - - public void testSubclassThatFailsToThrowForStatic() { - shouldFail(SubclassThatFailsToThrowForStatic.class); - } - - private static class SubclassThatTriesToOverrideBadStaticMethod - extends ClassThatFailsToThrowForStatic { - static void staticOneArg(@Nullable String s) {} - } - - public void testSubclassThatTriesToOverrideBadStaticMethod() { - shouldFail(SubclassThatTriesToOverrideBadStaticMethod.class); - } - - private static final class HardToCreate { - private HardToCreate(HardToCreate x) {} - } - - @SuppressWarnings("unused") // used by reflection - private static class CanCreateDefault { - public void foo(@Nullable HardToCreate ignored, String required) { - checkNotNull(required); - } - } - - public void testCanCreateDefault() { - shouldPass(new CanCreateDefault()); - } - - @SuppressWarnings("unused") // used by reflection - private static class CannotCreateDefault { - public void foo(HardToCreate ignored, String required) { - checkNotNull(ignored); - checkNotNull(required); - } - } - - public void testCannotCreateDefault() { - shouldFail(new CannotCreateDefault()); - } - - private static void shouldPass(Object instance, Visibility visibility) { - new NullPointerTester().testInstanceMethods(instance, visibility); - } - - private static void shouldPass(Object instance) { - shouldPass(instance, Visibility.PACKAGE); - shouldPass(instance, Visibility.PROTECTED); - shouldPass(instance, Visibility.PUBLIC); - } - - // TODO(cpovirk): eliminate surprising Object/Class overloading of shouldFail - - private static void shouldFail(Object instance, Visibility visibility) { - try { - new NullPointerTester().testInstanceMethods(instance, visibility); - } catch (AssertionFailedError expected) { - return; - } - fail("Should detect problem in " + instance.getClass().getSimpleName()); - } - - private static void shouldFail(Object instance) { - shouldFail(instance, Visibility.PACKAGE); - shouldFail(instance, Visibility.PROTECTED); - shouldFail(instance, Visibility.PUBLIC); - } - - private static void shouldFail(Class cls, Visibility visibility) { - try { - new NullPointerTester().testStaticMethods(cls, visibility); - } catch (AssertionFailedError expected) { - return; - } - fail("Should detect problem in " + cls.getSimpleName()); - } - - private static void shouldFail(Class cls) { - shouldFail(cls, Visibility.PACKAGE); - } - - @SuppressWarnings("unused") // used by reflection - private static class PrivateClassWithPrivateConstructor { - private PrivateClassWithPrivateConstructor(@Nullable Integer argument) {} - } - - public void testPrivateClass() { - NullPointerTester tester = new NullPointerTester(); - for (Constructor constructor : - PrivateClassWithPrivateConstructor.class.getDeclaredConstructors()) { - tester.testConstructor(constructor); - } - } - - private interface Foo { - void doSomething(T bar, Integer baz); - } - - private static class StringFoo implements Foo { - - @Override - public void doSomething(String bar, Integer baz) { - checkNotNull(bar); - checkNotNull(baz); - } - } - - public void testBridgeMethodIgnored() { - new NullPointerTester().testAllPublicInstanceMethods(new StringFoo()); - } - - private abstract static class DefaultValueChecker { - - private final Map arguments = Maps.newHashMap(); - - @CanIgnoreReturnValue - final DefaultValueChecker runTester() { - new NullPointerTester().testInstanceMethods(this, Visibility.PACKAGE); - return this; - } - - final void assertNonNullValues(Object... expectedValues) { - assertEquals(expectedValues.length, arguments.size()); - for (int i = 0; i < expectedValues.length; i++) { - assertEquals("Default value for parameter #" + i, expectedValues[i], arguments.get(i)); - } - } - - final Object getDefaultParameterValue(int position) { - return arguments.get(position); - } - - final void calledWith(Object... args) { - for (int i = 0; i < args.length; i++) { - if (args[i] != null) { - arguments.put(i, args[i]); - } - } - for (Object arg : args) { - checkNotNull(arg); // to fulfill null check - } - } - } - - private enum Gender { - MALE, - FEMALE - } - - private static class AllDefaultValuesChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkDefaultValuesForTheseTypes( - Gender gender, - Integer integer, - int i, - String string, - CharSequence charSequence, - List list, - ImmutableList immutableList, - Map map, - ImmutableMap immutableMap, - Set set, - ImmutableSet immutableSet, - SortedSet sortedSet, - ImmutableSortedSet immutableSortedSet, - Multiset multiset, - ImmutableMultiset immutableMultiset, - Multimap multimap, - ImmutableMultimap immutableMultimap, - Table table, - ImmutableTable immutableTable) { - calledWith( - gender, - integer, - i, - string, - charSequence, - list, - immutableList, - map, - immutableMap, - set, - immutableSet, - sortedSet, - immutableSortedSet, - multiset, - immutableMultiset, - multimap, - immutableMultimap, - table, - immutableTable); - } - - final void check() { - runTester() - .assertNonNullValues( - Gender.MALE, - Integer.valueOf(0), - 0, - "", - "", - ImmutableList.of(), - ImmutableList.of(), - ImmutableMap.of(), - ImmutableMap.of(), - ImmutableSet.of(), - ImmutableSet.of(), - ImmutableSortedSet.of(), - ImmutableSortedSet.of(), - ImmutableMultiset.of(), - ImmutableMultiset.of(), - ImmutableMultimap.of(), - ImmutableMultimap.of(), - ImmutableTable.of(), - ImmutableTable.of()); - } - } - - public void testDefaultValues() { - new AllDefaultValuesChecker().check(); - } - - private static class ObjectArrayDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(Object[] array, String s) { - calledWith(array, s); - } - - void check() { - runTester(); - Object[] defaultArray = (Object[]) getDefaultParameterValue(0); - assertThat(defaultArray).isEmpty(); - } - } - - public void testObjectArrayDefaultValue() { - new ObjectArrayDefaultValueChecker().check(); - } - - private static class StringArrayDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(String[] array, String s) { - calledWith(array, s); - } - - void check() { - runTester(); - String[] defaultArray = (String[]) getDefaultParameterValue(0); - assertThat(defaultArray).isEmpty(); - } - } - - public void testStringArrayDefaultValue() { - new StringArrayDefaultValueChecker().check(); - } - - private static class IntArrayDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(int[] array, String s) { - calledWith(array, s); - } - - void check() { - runTester(); - int[] defaultArray = (int[]) getDefaultParameterValue(0); - assertEquals(0, defaultArray.length); - } - } - - public void testIntArrayDefaultValue() { - new IntArrayDefaultValueChecker().check(); - } - - private enum EmptyEnum {} - - private static class EmptyEnumDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(EmptyEnum object, String s) { - calledWith(object, s); - } - - void check() { - try { - runTester(); - } catch (AssertionFailedError expected) { - return; - } - fail("Should have failed because enum has no constant"); - } - } - - public void testEmptyEnumDefaultValue() { - new EmptyEnumDefaultValueChecker().check(); - } - - private static class GenericClassTypeDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(Class> cls, String s) { - calledWith(cls, s); - } - - void check() { - runTester(); - Class defaultClass = (Class) getDefaultParameterValue(0); - assertEquals(List.class, defaultClass); - } - } - - public void testGenericClassDefaultValue() { - new GenericClassTypeDefaultValueChecker().check(); - } - - private static class NonGenericClassTypeDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(@SuppressWarnings("rawtypes") Class cls, String s) { - calledWith(cls, s); - } - - void check() { - runTester(); - Class defaultClass = (Class) getDefaultParameterValue(0); - assertEquals(Object.class, defaultClass); - } - } - - public void testNonGenericClassDefaultValue() { - new NonGenericClassTypeDefaultValueChecker().check(); - } - - private static class GenericTypeTokenDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(TypeToken> type, String s) { - calledWith(type, s); - } - - void check() { - runTester(); - TypeToken defaultType = (TypeToken) getDefaultParameterValue(0); - assertTrue(new TypeToken>() {}.isSupertypeOf(defaultType)); - } - } - - public void testGenericTypeTokenDefaultValue() { - new GenericTypeTokenDefaultValueChecker().check(); - } - - private static class NonGenericTypeTokenDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(@SuppressWarnings("rawtypes") TypeToken type, String s) { - calledWith(type, s); - } - - void check() { - runTester(); - TypeToken defaultType = (TypeToken) getDefaultParameterValue(0); - assertEquals(new TypeToken() {}, defaultType); - } - } - - public void testNonGenericTypeTokenDefaultValue() { - new NonGenericTypeTokenDefaultValueChecker().check(); - } - - private interface FromTo extends Function {} - - private static class GenericInterfaceDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(FromTo f, String s) { - calledWith(f, s); - } - - void check() { - runTester(); - FromTo defaultFunction = (FromTo) getDefaultParameterValue(0); - assertEquals(0, defaultFunction.apply(null)); - } - } - - public void testGenericInterfaceDefaultValue() { - new GenericInterfaceDefaultValueChecker().check(); - } - - private interface NullRejectingFromTo extends Function { - @Override - public abstract T apply(F from); - } - - private static class NullRejectingInterfaceDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(NullRejectingFromTo f, String s) { - calledWith(f, s); - } - - void check() { - runTester(); - NullRejectingFromTo defaultFunction = - (NullRejectingFromTo) getDefaultParameterValue(0); - assertNotNull(defaultFunction); - try { - defaultFunction.apply(null); - fail("Proxy Should have rejected null"); - } catch (NullPointerException expected) { - } - } - } - - public void testNullRejectingInterfaceDefaultValue() { - new NullRejectingInterfaceDefaultValueChecker().check(); - } - - private static class MultipleInterfacesDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public & Supplier> void checkArray(T f, String s) { - calledWith(f, s); - } - - void check() { - runTester(); - FromTo defaultFunction = (FromTo) getDefaultParameterValue(0); - assertEquals(0, defaultFunction.apply(null)); - Supplier defaultSupplier = (Supplier) defaultFunction; - assertEquals(Long.valueOf(0), defaultSupplier.get()); - } - } - - public void testMultipleInterfacesDefaultValue() { - new MultipleInterfacesDefaultValueChecker().check(); - } - - private static class GenericInterface2DefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(FromTo> f, String s) { - calledWith(f, s); - } - - void check() { - runTester(); - FromTo defaultFunction = (FromTo) getDefaultParameterValue(0); - FromTo returnValue = (FromTo) defaultFunction.apply(null); - assertEquals("", returnValue.apply(null)); - } - } - - public void testGenericInterfaceReturnedByGenericMethod() { - new GenericInterface2DefaultValueChecker().check(); - } - - private abstract static class AbstractGenericDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkGeneric(T value, String s) { - calledWith(value, s); - } - } - - private static class GenericDefaultValueResolvedToStringChecker - extends AbstractGenericDefaultValueChecker { - void check() { - runTester(); - assertEquals("", getDefaultParameterValue(0)); - } - } - - public void testGenericTypeResolvedForDefaultValue() { - new GenericDefaultValueResolvedToStringChecker().check(); - } - - private abstract static class AbstractGenericDefaultValueForPackagePrivateMethodChecker - extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - void checkGeneric(T value, String s) { - calledWith(value, s); - } - } - - private static class DefaultValueForPackagePrivateMethodResolvedToStringChecker - extends AbstractGenericDefaultValueForPackagePrivateMethodChecker { - void check() { - runTester(); - assertEquals("", getDefaultParameterValue(0)); - } - } - - public void testDefaultValueResolvedForPackagePrivateMethod() { - new DefaultValueForPackagePrivateMethodResolvedToStringChecker().check(); - } - - private static class ConverterDefaultValueChecker extends DefaultValueChecker { - - @SuppressWarnings("unused") // called by NullPointerTester - public void checkArray(Converter c, String s) { - calledWith(c, s); - } - - void check() { - runTester(); - @SuppressWarnings("unchecked") // We are checking it anyway - Converter defaultConverter = - (Converter) getDefaultParameterValue(0); - assertEquals(Integer.valueOf(0), defaultConverter.convert("anything")); - assertEquals("", defaultConverter.reverse().convert(123)); - assertNull(defaultConverter.convert(null)); - assertNull(defaultConverter.reverse().convert(null)); - } - } - - public void testConverterDefaultValue() { - new ConverterDefaultValueChecker().check(); - } - - private static class VisibilityMethods { - - @SuppressWarnings("unused") // Called by reflection - private void privateMethod() {} - - @SuppressWarnings("unused") // Called by reflection - void packagePrivateMethod() {} - - @SuppressWarnings("unused") // Called by reflection - protected void protectedMethod() {} - - @SuppressWarnings("unused") // Called by reflection - public void publicMethod() {} - } - - public void testVisibility_public() throws Exception { - assertFalse( - Visibility.PUBLIC.isVisible(VisibilityMethods.class.getDeclaredMethod("privateMethod"))); - assertFalse( - Visibility.PUBLIC.isVisible( - VisibilityMethods.class.getDeclaredMethod("packagePrivateMethod"))); - assertFalse( - Visibility.PUBLIC.isVisible(VisibilityMethods.class.getDeclaredMethod("protectedMethod"))); - assertTrue( - Visibility.PUBLIC.isVisible(VisibilityMethods.class.getDeclaredMethod("publicMethod"))); - } - - public void testVisibility_protected() throws Exception { - assertFalse( - Visibility.PROTECTED.isVisible(VisibilityMethods.class.getDeclaredMethod("privateMethod"))); - assertFalse( - Visibility.PROTECTED.isVisible( - VisibilityMethods.class.getDeclaredMethod("packagePrivateMethod"))); - assertTrue( - Visibility.PROTECTED.isVisible( - VisibilityMethods.class.getDeclaredMethod("protectedMethod"))); - assertTrue( - Visibility.PROTECTED.isVisible(VisibilityMethods.class.getDeclaredMethod("publicMethod"))); - } - - public void testVisibility_package() throws Exception { - assertFalse( - Visibility.PACKAGE.isVisible(VisibilityMethods.class.getDeclaredMethod("privateMethod"))); - assertTrue( - Visibility.PACKAGE.isVisible( - VisibilityMethods.class.getDeclaredMethod("packagePrivateMethod"))); - assertTrue( - Visibility.PACKAGE.isVisible(VisibilityMethods.class.getDeclaredMethod("protectedMethod"))); - assertTrue( - Visibility.PACKAGE.isVisible(VisibilityMethods.class.getDeclaredMethod("publicMethod"))); - } - - private class Inner { - public Inner(String s) { - checkNotNull(s); - } - } - - public void testNonStaticInnerClass() { - IllegalArgumentException expected = - assertThrows( - IllegalArgumentException.class, - () -> new NullPointerTester().testAllPublicConstructors(Inner.class)); - assertThat(expected.getMessage()).contains("inner class"); - } - - private static String rootLocaleFormat(String format, Object... args) { - return String.format(Locale.ROOT, format, args); - } - - static class OverridesEquals { - @SuppressWarnings("EqualsHashCode") - @Override - public boolean equals(@Nullable Object o) { - return true; - } - } - - static class DoesNotOverrideEquals { - public boolean equals(Object a, Object b) { - return true; - } - } - - public void testEqualsMethod() { - shouldPass(new OverridesEquals()); - shouldFail(new DoesNotOverrideEquals()); - } - - private static final class FailOnOneOfTwoConstructors { - @SuppressWarnings("unused") // Called by reflection - public FailOnOneOfTwoConstructors(String s) {} - - @SuppressWarnings("unused") // Called by reflection - public FailOnOneOfTwoConstructors(Object o) { - checkNotNull(o); - } - } - - public void testConstructor_Ignored_ShouldPass() throws Exception { - new NullPointerTester() - .ignore(FailOnOneOfTwoConstructors.class.getDeclaredConstructor(String.class)) - .testAllPublicConstructors(FailOnOneOfTwoConstructors.class); - } - - public void testConstructor_ShouldFail() throws Exception { - try { - new NullPointerTester().testAllPublicConstructors(FailOnOneOfTwoConstructors.class); - } catch (AssertionFailedError expected) { - return; - } - fail("Should detect problem in " + FailOnOneOfTwoConstructors.class.getSimpleName()); - } -} diff --git a/android/guava/src/com/google/common/reflect/Invokable.java b/android/guava/src/com/google/common/reflect/Invokable.java index 236c29627441..2e3d1a8a7433 100644 --- a/android/guava/src/com/google/common/reflect/Invokable.java +++ b/android/guava/src/com/google/common/reflect/Invokable.java @@ -16,14 +16,11 @@ import static com.google.common.base.Preconditions.checkNotNull; -import com.google.common.annotations.Beta; import com.google.common.collect.ImmutableList; import com.google.errorprone.annotations.CanIgnoreReturnValue; -import com.google.errorprone.annotations.DoNotCall; import java.lang.annotation.Annotation; import java.lang.reflect.AccessibleObject; import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.AnnotatedType; import java.lang.reflect.Constructor; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Member; @@ -278,7 +275,7 @@ public final ImmutableList getParameters() { Type[] parameterTypes = getGenericParameterTypes(); Annotation[][] annotations = getParameterAnnotations(); @Nullable Object[] annotatedTypes = - ANNOTATED_TYPE_EXISTS ? getAnnotatedParameterTypes() : new Object[parameterTypes.length]; + new Object[parameterTypes.length]; ImmutableList.Builder builder = ImmutableList.builder(); for (int i = 0; i < parameterTypes.length; i++) { builder.add( @@ -343,10 +340,6 @@ abstract Object invokeInternal(@CheckForNull Object receiver, @Nullable Object[] abstract Type[] getGenericParameterTypes(); - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker"}) - @IgnoreJRERequirement - abstract AnnotatedType[] getAnnotatedParameterTypes(); - /** This should never return a type that's not a subtype of Throwable. */ abstract Type[] getGenericExceptionTypes(); @@ -354,22 +347,6 @@ abstract Object invokeInternal(@CheckForNull Object receiver, @Nullable Object[] abstract Type getGenericReturnType(); - /** - * Returns the {@link AnnotatedType} for the return type. - * - *

This method will fail if run under an Android VM. - * - * @since NEXT for guava-android (available since 14.0 in guava-jre) - * @deprecated This method does not work under Android VMs. It is safe to use from guava-jre, but - * this copy in guava-android is not safe to use. - */ - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker"}) - @DoNotCall("fails under Android VMs; do not use from guava-android") - @Deprecated - @IgnoreJRERequirement - @Beta - public abstract AnnotatedType getAnnotatedReturnType(); - static class MethodInvokable extends Invokable { final Method method; @@ -396,21 +373,6 @@ Type[] getGenericParameterTypes() { return method.getGenericParameterTypes(); } - @Override - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker"}) - @IgnoreJRERequirement - AnnotatedType[] getAnnotatedParameterTypes() { - return method.getAnnotatedParameterTypes(); - } - - @Override - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker", "DoNotCall"}) - @DoNotCall - @IgnoreJRERequirement - public AnnotatedType getAnnotatedReturnType() { - return method.getAnnotatedReturnType(); - } - @Override Type[] getGenericExceptionTypes() { return method.getGenericExceptionTypes(); @@ -488,21 +450,6 @@ Type[] getGenericParameterTypes() { return types; } - @Override - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker"}) - @IgnoreJRERequirement - AnnotatedType[] getAnnotatedParameterTypes() { - return constructor.getAnnotatedParameterTypes(); - } - - @Override - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker", "DoNotCall"}) - @DoNotCall - @IgnoreJRERequirement - public AnnotatedType getAnnotatedReturnType() { - return constructor.getAnnotatedReturnType(); - } - @Override Type[] getGenericExceptionTypes() { return constructor.getGenericExceptionTypes(); diff --git a/android/guava/src/com/google/common/reflect/Parameter.java b/android/guava/src/com/google/common/reflect/Parameter.java index c69ae734ce68..a0c6d7b1bbee 100644 --- a/android/guava/src/com/google/common/reflect/Parameter.java +++ b/android/guava/src/com/google/common/reflect/Parameter.java @@ -15,15 +15,11 @@ package com.google.common.reflect; import static com.google.common.base.Preconditions.checkNotNull; -import static java.util.Objects.requireNonNull; -import com.google.common.annotations.Beta; import com.google.common.collect.FluentIterable; import com.google.common.collect.ImmutableList; -import com.google.errorprone.annotations.DoNotCall; import java.lang.annotation.Annotation; import java.lang.reflect.AnnotatedElement; -import java.lang.reflect.AnnotatedType; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -42,7 +38,7 @@ public final class Parameter implements AnnotatedElement { private final ImmutableList annotations; /** - * An {@link AnnotatedType} instance, or {@code null} under Android VMs (possible only when using + * An {@code AnnotatedType} instance, or {@code null} under Android VMs (possible only when using * the Android flavor of Guava). The field is declared with a type of {@code Object} to avoid * compatibility problems on Android VMs. The corresponding accessor method, however, can have the * more specific return type as long as users are careful to guard calls to it with version checks @@ -131,24 +127,6 @@ public A[] getDeclaredAnnotationsByType(Class annotati return cast; } - /** - * Returns the {@link AnnotatedType} of the parameter. - * - *

This method will fail if run under an Android VM. - * - * @since NEXT for guava-android (available since 25.1 in guava-jre) - * @deprecated This method does not work under Android VMs. It is safe to use from guava-jre, but - * this copy in guava-android is not safe to use. - */ - @Beta - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker"}) - @Deprecated - @DoNotCall("fails under Android VMs; do not use from guava-android") - @IgnoreJRERequirement - public AnnotatedType getAnnotatedType() { - return requireNonNull((AnnotatedType) annotatedType); - } - @Override public boolean equals(@CheckForNull Object obj) { if (obj instanceof Parameter) { diff --git a/guava-testlib/src/com/google/common/testing/NullPointerTester.java b/guava-testlib/src/com/google/common/testing/NullPointerTester.java index 8e6673e7f4c4..32e29d43e25d 100644 --- a/guava-testlib/src/com/google/common/testing/NullPointerTester.java +++ b/guava-testlib/src/com/google/common/testing/NullPointerTester.java @@ -352,13 +352,6 @@ public int hashCode() { */ private void testParameter( @Nullable Object instance, Invokable invokable, int paramIndex, Class testedClass) { - /* - * com.google.common is starting to rely on type-use annotations, which aren't visible under - * Android VMs. So we skip testing there. - */ - if (isAndroid() && Reflection.getPackageName(testedClass).startsWith("com.google.common")) { - return; - } if (isPrimitiveOrNullable(invokable.getParameters().get(paramIndex))) { return; // there's nothing to test } @@ -613,11 +606,9 @@ private static boolean annotatedTypeExists() { * don't know that anyone uses it there, anyway. */ private enum NullnessAnnotationReader { - // Usages (which are unsafe only for Android) are guarded by the annotatedTypeExists() check. - @SuppressWarnings({"Java7ApiChecker", "AndroidApiChecker", "DoNotCall", "deprecation"}) + @SuppressWarnings("Java7ApiChecker") FROM_DECLARATION_AND_TYPE_USE_ANNOTATIONS { @Override - @IgnoreJRERequirement boolean isNullable(Invokable invokable) { return FROM_DECLARATION_ANNOTATIONS_ONLY.isNullable(invokable) || containsNullable(invokable.getAnnotatedReturnType().getAnnotations()); @@ -625,14 +616,12 @@ boolean isNullable(Invokable invokable) { } @Override - @IgnoreJRERequirement boolean isNullable(Parameter param) { return FROM_DECLARATION_ANNOTATIONS_ONLY.isNullable(param) || containsNullable(param.getAnnotatedType().getAnnotations()) || isNullableTypeVariable(param.getAnnotatedType().getType()); } - @IgnoreJRERequirement boolean isNullableTypeVariable(Type type) { if (!(type instanceof TypeVariable)) { return false; @@ -664,9 +653,4 @@ boolean isNullable(Parameter param) { abstract boolean isNullable(Parameter param); } - - private static boolean isAndroid() { - // Arguably it would make more sense to test "can we see type-use annotations" directly.... - return checkNotNull(System.getProperty("java.runtime.name", "")).contains("Android"); - } } diff --git a/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java b/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java index 8166323e1a71..a6378bea4a1f 100644 --- a/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java +++ b/guava-testlib/test/com/google/common/testing/ClassSanityTesterTest.java @@ -46,7 +46,6 @@ * * @author Ben Yu */ -@AndroidIncompatible // NullPointerTester refuses to run for c.g.c under Android public class ClassSanityTesterTest extends TestCase { private final ClassSanityTester tester = new ClassSanityTester(); diff --git a/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java b/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java index c975ef0001b7..c224d8a5469a 100644 --- a/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java +++ b/guava-testlib/test/com/google/common/testing/NullPointerTesterTest.java @@ -57,7 +57,6 @@ * @author Mick Killianey */ @SuppressWarnings("CheckReturnValue") -@AndroidIncompatible // NullPointerTester refuses to run for c.g.c under Android public class NullPointerTesterTest extends TestCase { /** Non-NPE RuntimeException. */ diff --git a/guava/src/com/google/common/reflect/Invokable.java b/guava/src/com/google/common/reflect/Invokable.java index 29f4a4ed985b..0b2b41679c7c 100644 --- a/guava/src/com/google/common/reflect/Invokable.java +++ b/guava/src/com/google/common/reflect/Invokable.java @@ -341,8 +341,7 @@ abstract Object invokeInternal(@CheckForNull Object receiver, @Nullable Object[] abstract Type[] getGenericParameterTypes(); - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker"}) - @IgnoreJRERequirement + @SuppressWarnings("Java7ApiChecker") abstract AnnotatedType[] getAnnotatedParameterTypes(); /** This should never return a type that's not a subtype of Throwable. */ @@ -355,12 +354,9 @@ abstract Object invokeInternal(@CheckForNull Object receiver, @Nullable Object[] /** * Returns the {@link AnnotatedType} for the return type. * - *

This method will fail if run under an Android VM. - * - * @since 14.0 for guava-jre (available since 32.0.0 in guava-android) + * @since 14.0 */ - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker"}) - @IgnoreJRERequirement + @SuppressWarnings("Java7ApiChecker") public abstract AnnotatedType getAnnotatedReturnType(); static class MethodInvokable extends Invokable { @@ -390,15 +386,13 @@ Type[] getGenericParameterTypes() { } @Override - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker"}) - @IgnoreJRERequirement + @SuppressWarnings("Java7ApiChecker") AnnotatedType[] getAnnotatedParameterTypes() { return method.getAnnotatedParameterTypes(); } @Override - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker", "DoNotCall"}) - @IgnoreJRERequirement + @SuppressWarnings("Java7ApiChecker") public AnnotatedType getAnnotatedReturnType() { return method.getAnnotatedReturnType(); } @@ -481,15 +475,13 @@ Type[] getGenericParameterTypes() { } @Override - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker"}) - @IgnoreJRERequirement + @SuppressWarnings("Java7ApiChecker") AnnotatedType[] getAnnotatedParameterTypes() { return constructor.getAnnotatedParameterTypes(); } @Override - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker", "DoNotCall"}) - @IgnoreJRERequirement + @SuppressWarnings("Java7ApiChecker") public AnnotatedType getAnnotatedReturnType() { return constructor.getAnnotatedReturnType(); } diff --git a/guava/src/com/google/common/reflect/Parameter.java b/guava/src/com/google/common/reflect/Parameter.java index c80d18571f73..e0e244b05ca2 100644 --- a/guava/src/com/google/common/reflect/Parameter.java +++ b/guava/src/com/google/common/reflect/Parameter.java @@ -40,7 +40,7 @@ public final class Parameter implements AnnotatedElement { private final ImmutableList annotations; /** - * An {@link AnnotatedType} instance, or {@code null} under Android VMs (possible only when using + * An {@code AnnotatedType} instance, or {@code null} under Android VMs (possible only when using * the Android flavor of Guava). The field is declared with a type of {@code Object} to avoid * compatibility problems on Android VMs. The corresponding accessor method, however, can have the * more specific return type as long as users are careful to guard calls to it with version checks @@ -93,7 +93,9 @@ public Annotation[] getAnnotations() { return getDeclaredAnnotations(); } - /** @since 18.0 */ + /** + * @since 18.0 + */ @Override public A[] getAnnotationsByType(Class annotationType) { return getDeclaredAnnotationsByType(annotationType); @@ -105,7 +107,9 @@ public Annotation[] getDeclaredAnnotations() { return annotations.toArray(new Annotation[0]); } - /** @since 18.0 */ + /** + * @since 18.0 + */ @Override @CheckForNull public A getDeclaredAnnotation(Class annotationType) { @@ -113,7 +117,9 @@ public A getDeclaredAnnotation(Class annotationType) { return FluentIterable.from(annotations).filter(annotationType).first().orNull(); } - /** @since 18.0 */ + /** + * @since 18.0 + */ @Override public A[] getDeclaredAnnotationsByType(Class annotationType) { @Nullable @@ -126,12 +132,9 @@ public A[] getDeclaredAnnotationsByType(Class annotati /** * Returns the {@link AnnotatedType} of the parameter. * - *

This method will fail if run under an Android VM. - * - * @since 25.1 for guava-jre (available since 32.0.0 in guava-android) + * @since 25.1 for guava-jre */ - @SuppressWarnings({"Java7ApiChecker", "AndroidJdkLibsChecker"}) - @IgnoreJRERequirement + @SuppressWarnings("Java7ApiChecker") public AnnotatedType getAnnotatedType() { return requireNonNull((AnnotatedType) annotatedType); } diff --git a/proguard/reflect.pro b/proguard/reflect.pro deleted file mode 100644 index 620cbd3145dc..000000000000 --- a/proguard/reflect.pro +++ /dev/null @@ -1,9 +0,0 @@ -# Warning: common.reflect (like reflection in general) is typically slow and -# unreliable under Android. We do not recommend using it. This Proguard config -# exists only to avoid breaking the builds of users who already have -# common.reflect in their transitive dependencies. -# --dontwarn com.google.common.reflect.Invokable --dontwarn com.google.common.reflect.Invokable$ConstructorInvokable --dontwarn com.google.common.reflect.Invokable$MethodInvokable --dontwarn com.google.common.reflect.Parameter From 2982e9de13ec3722ac9144492e4cda75ed677bcc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 16 Nov 2023 08:32:27 -0800 Subject: [PATCH 048/216] Bump github/codeql-action from 2.22.6 to 2.22.7 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.6 to 2.22.7. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/689fdc5193eeb735ecb2e52e819e3382876f93f4...66b90a5db151a8042fa97405c6cf843bbe433f7b) Fixes #6837 RELNOTES=n/a PiperOrigin-RevId: 583054642 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 29308c8006a5..f862515ac480 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@689fdc5193eeb735ecb2e52e819e3382876f93f4 # v2.22.6 + uses: github/codeql-action/upload-sarif@66b90a5db151a8042fa97405c6cf843bbe433f7b # v2.22.7 with: sarif_file: results.sarif From fe5011811dbf4cb4030ac316761c406d65472eee Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Fri, 17 Nov 2023 08:01:45 -0800 Subject: [PATCH 049/216] Update Public Suffix data. RELNOTES=n/a PiperOrigin-RevId: 583388879 --- .../publicsuffix/PublicSuffixPatterns.java | 16 ++++++++-------- .../publicsuffix/PublicSuffixPatterns.java | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java b/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java index 278795cb99d0..fd176780e1f4 100644 --- a/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java +++ b/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java @@ -42,13 +42,13 @@ private PublicSuffixPatterns() {} /** If a hostname is contained as a key in this map, it is a public suffix. */ public static final ImmutableMap EXACT = TrieParser.parseTrie( - "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva?s??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&l&buperananab?ohtac??n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?citsalej.piv,drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?i&rp?twohs??orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.xlh,?rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??vd7ckaabgm--nx?w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&g&olb,ro??ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.", - "&cb,su,tne,ue,??pib,ten?vog?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&eci&ffoemoh,vres,?ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???uleiw?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,tadtsudgniht,v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsohecapsppa,?i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&htuos-pa,lartnec-&ac,ue,?ts&ae&-&as,su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aehtron-pa,ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,ttadym,?p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-rettalp,anis:piv,,esaberif,k1,lortnocduolc,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&ht&ron-ue.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??uos-&em.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??fa.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,??ue.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,????la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,????ts&ae&-&as&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,??pa.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??su:-etisbew-3s,.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,yawetag-scitylana,?,?ht&ron-pa&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,????ew-&su&-&3s,etisbew-3s,?.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,???ue&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,yawetag-scitylana,??vog-su-&3s,spif-3s,????2-ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,??uos-pa&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,????ew-&su&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??yawetag-scitylana,??ue&-3s,.&3s,9duo", - "lc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,????3&-ts&aehtron-pa.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,???s,??yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.swanozama.&1-htron-nc.3s,be.1-&htron-nc,tsewhtron-nc,????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?gawsklov?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tednalyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?lov?narts?uas??f&1-&l--nx?s--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vs", - "yt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??snduolc,t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ihsayah??r&abi?ukawaihsin??wi&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&a", - "sim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara?ihcat???y&agates?ubihs???e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,n&aecolatigidno,ur:.a,,?poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?dnik?e&b?n&igne?oip??rac??gni&arg?rheob??h&cor?sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?odtnorf?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??c?oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema?", - "??xnal??iws??t&a&e&b?ytic??ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a?e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l!asite??mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&eiamaka,irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?iamaka,k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,?t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-&ilrof?ìlrof??ilrof?ìlrof???g&amor&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,lecrev,o&ned,tpyrctfihs,?ppa-rettalp,s&egap,rekrow,?vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab", - "?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van!dlo??xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&ا&راما?لاصتا??را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); + "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva?s??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&l&buperananab?ohtac??n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?citsalej.piv,drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?irp?orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.xlh,?rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??vd7ckaabgm--nx?w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&g&olb,ro??ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.&cb,su,t", + "ne,ue,??pib,ten?vog?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&eci&ffoemoh,vres,?ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???u&leiw?rot,?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,tadtsudgniht,v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsohecapsppa,?i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&ht&ron-ue,uos-&em,fa,pa,ue,??lartnec-&ac,li,ue,?ts&ae&-&as,pa,su,vog-su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aeht&ron-pa,uos-pa,?ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,t&ingocnozama.&1-&ht&ron-ue.htua,uos-&em.htua,fa.htua,pa.htua,ue.htua,??lartnec-&ac.htua,li.htua,ue.htua,?ts&ae&-&as.htua,su.&htua,spif-htua,??ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,vog-su.spif-htua,???2-ts&ae&-su.&htua,spif-htua,?ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,??3-ts&aeht&ron-pa.htua,uos-pa.htua,?ew-ue.htua,??tadym,??p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-rettalp,anis:piv,,esaberif,k1,lortnocduolc,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&3s,ht&ron-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??uos-&em&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??fa.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3", + "s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??em.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?li.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ts&ae&-&as&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??su:-etisbew-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,?,vog-su&-&3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,???ht&ron-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??ue&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??vog-su&-&3s,etisbew-3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?????2-&htuos-&pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??lartnec-ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?????3&-ts&aeht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??uos-pa.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???s,?4-tsaehtuos-pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?labolg-3s.tniopssecca.parm,?yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.&rekamegas.1-&htron-nc.&koobeton,oiduts,?tsewhtron-nc.&koobeton,oiduts,??swanozama.&1-&htron-nc.&3s,adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?tsewhtron-nc.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??be.1-&htron-nc,tsewhtron-nc,?????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?gawsklov?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tednalyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?l", + "ov?narts?uas??f&1-&l--nx?s--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vsyt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??snduolc,t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ih", + "sayah??r&abi?ukawaihsin??wi&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&asim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara", + "?ihcat???y&agates?ubihs???e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,n&aecolatigidno,ur:.a,,?poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?e&b?n&igne?oip??rac??gni&arg?rheob??h&sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema???xnal??iws??t&a&eb?ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a!.rekamegas.&1-&ht&ron-ue.&koobeton,oiduts,?uos-&em.&koobeton,oiduts,?fa.&koobeton,oiduts,?pa.&koobeton,oiduts,?ue.&koobeton,oiduts,???lartnec-&ac.&koobeton,oiduts,?em.&koobeton,oiduts,?li.&koobeton,oiduts,?ue.&koobeton,oiduts,??ts&ae&-&as.&koobeton,oiduts,?pa.&koobeton,oiduts,?su.&koobeton,oiduts,spif-koobeton,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,???ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,?ue.&koobeton,oiduts,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,?????2-&htuos-&pa.koobeton,ue.koobeton,?lartnec-ue.koobeton,ts&ae&-su.&koobeton,oiduts,spif-koobeton,?ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,spif-koobeton,?ue.&koobeton,oiduts,????3-ts&aeht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,??ew-ue.&koobeton,oiduts,??4-tsaehtuos-pa.koobeton,??e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l!asite??mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&eiamaka,irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?iamaka,k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,4,5,6,7,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,?t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-", + "&ilrof?ìlrof??ilrof?ìlrof???g&amor&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,lecrev,o&ned,tpyrctfihs,?ppa-rettalp,s&egap,rekrow,?vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van!dlo??xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&ا&راما?لاصتا??را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); /** * If a hostname is not a key in the EXCLUDE map, and if removing its leftmost component results @@ -56,7 +56,7 @@ private PublicSuffixPatterns() {} */ public static final ImmutableMap UNDER = TrieParser.parseTrie( - "ac.vedwa,d&b?i.ym.ssr,uolc.&etiso&isnes,tnegam,?iaznab,rehcnar-no,scitats,??e&b.lrusnart,d.&ecapsrebu,yksurf,?noz.notirt,t&atse.etupmoc,is.&areduolc,hsmroftalp,tst,???g&oog.tnetnocresu,p??h&c.tenerif:.cvs,,k?trae.sppad:.zzb,,?k&c?f?nil.bewd,rowten.secla,u.hcs??ln.lrusnart,m&f.resu,j?m?oc.&duolcmeaeboda.ved,edo&c.redliub:->s,ved,?,nil.recnalabedon,?ico-remotsuc:.&ico,pco,sco,?,lrihwyap,mme0,osseccandcved,s&ecapsnaecolatigid,t&cejbo&edonil,rtluv,?nemelepiuq,?wanozama.&1-etupmoc,ble,etupmoc,??t&neyoj.snc,opsppa.r,???n&c.moc.swanozama.&ble,etupmoc,?ur.&dliub,e&doc,sabatad,?noitargim,??o&c.pato,i.&duolciaznab.sdraykcab,elacsnoom,nroca-no,oir-no,reniatnoceruza,s&3k-no,olots,?xcq.sys,y5s,??p&j.&a&mahokoy?yogan??ebok?i&adnes?kasawak??oroppas?uhsuykatik??n?pa.&knalfhtron,repoleved,tegeb,??r&b.mon?e??s&edoc.owo,noitulos.rehid,w.rosivda,?t&a.&ofnistro.&nednuk,xe,?smcerutuf:.&ni,xe,?,?en.&cimonotpyrc,hvo.&gnitsoh,saapbew,???u&e.lrusnart,r.onijym.&gni&dnal,tsoh,?murtceps,spv,??ved.&e&gats>s,lcl,?rahbew,?gts,lcl,treclacol.resu,yawetag,?z&c.murtnecatem.duolc,yx.tibelet,??"); + "ac.vedwa,d&b?i.ym.ssr,uolc.&etiso&isnes,tnegam,?iaznab,rehcnar-no,scitats,??e&b.lrusnart,d.&ecapsrebu,yksurf,?noz.notirt,t&atse.etupmoc,is.&areduolc,hsmroftalp,tst,???g&oog.tnetnocresu,p??h&c.tenerif:.cvs,,k?trae.sppad:.zzb,,?k&c?f?nil.bewd,rowten.secla,u.hcs??ln.lrusnart,m&f.resu,j?m?oc.&duolcmeaeboda.ved,edo&c.redliub:->s,ved,?,nil.recnalabedon,?ico-remotsuc:.&ico,pco,sco,?,lrihwyap,mme0,osseccandcved,ppayfilpma,rennurppaswa,s&ecapsnaecolatigid,t&cejbo&edonil,rtluv,?nemelepiuq,?wanozama.&1-etupmoc,ble,etupmoc,wolfria.&1-&ht&ron-ue,uos-pa,?lartnec-&ac,ue,?ts&ae&-&as,su,?ht&ron-pa,uos-pa,??ew-ue,??2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-tsew-ue,???t&neyoj.snc,opsppa.r,???n&c.moc.swanozama.&ble,etupmoc,wolfria.1-&htron-nc,tsewhtron-nc,??ur.&dliub,e&doc,sabatad,?noitargim,??o&c.pato,i.&duolciaznab.sdraykcab,elacsnoom,nroca-no,oir-no,reniatnoceruza,s&3k-no,olots,?xcq.sys,y5s,??p&j.&a&mahokoy?yogan??ebok?i&adnes?kasawak??oroppas?uhsuykatik??n?pa.&knalfhtron,repoleved,tegeb,??r&b.mon?e??s&edoc.owo,noitulos.rehid,w.rosivda,?t&a.&ofnistro.&nednuk,xe,?smcerutuf:.&ni,xe,?,?en.&cimonotpyrc,hvo.&gnitsoh,saapbew,???u&e.lrusnart,r.onijym.&gni&dnal,tsoh,?murtceps,spv,??ved.&e&gats>s,lcl,?rahbew,?gts,lcl,treclacol.resu,yawetag,?z&c.murtnecatem.duolc,yx.tibelet,??"); /** * The elements in this map would pass the UNDER test, but are known not to be public suffixes and diff --git a/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java b/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java index 278795cb99d0..fd176780e1f4 100644 --- a/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java +++ b/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java @@ -42,13 +42,13 @@ private PublicSuffixPatterns() {} /** If a hostname is contained as a key in this map, it is a public suffix. */ public static final ImmutableMap EXACT = TrieParser.parseTrie( - "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva?s??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&l&buperananab?ohtac??n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?citsalej.piv,drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?i&rp?twohs??orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.xlh,?rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??vd7ckaabgm--nx?w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&g&olb,ro??ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.", - "&cb,su,tne,ue,??pib,ten?vog?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&eci&ffoemoh,vres,?ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???uleiw?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,tadtsudgniht,v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsohecapsppa,?i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&htuos-pa,lartnec-&ac,ue,?ts&ae&-&as,su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aehtron-pa,ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,ttadym,?p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-rettalp,anis:piv,,esaberif,k1,lortnocduolc,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&ht&ron-ue.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??uos-&em.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??fa.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,??ue.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,????la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,????ts&ae&-&as&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,??pa.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??su:-etisbew-3s,.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,yawetag-scitylana,?,?ht&ron-pa&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,????ew-&su&-&3s,etisbew-3s,?.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,???ue&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,yawetag-scitylana,??vog-su-&3s,spif-3s,????2-ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,??uos-pa&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??kcatslaud.3s,????ew-&su&-&3s,etisbew-3s,?.&9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??yawetag-scitylana,??ue&-3s,.&3s,9duo", - "lc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,????3&-ts&aehtron-pa.9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??etisbew-3s,kcatslaud.3s,???s,??yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.swanozama.&1-htron-nc.3s,be.1-&htron-nc,tsewhtron-nc,????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?gawsklov?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tednalyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?lov?narts?uas??f&1-&l--nx?s--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vs", - "yt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??snduolc,t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ihsayah??r&abi?ukawaihsin??wi&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&a", - "sim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara?ihcat???y&agates?ubihs???e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,n&aecolatigidno,ur:.a,,?poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?dnik?e&b?n&igne?oip??rac??gni&arg?rheob??h&cor?sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?odtnorf?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??c?oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema?", - "??xnal??iws??t&a&e&b?ytic??ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a?e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l!asite??mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&eiamaka,irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?iamaka,k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,?t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-&ilrof?ìlrof??ilrof?ìlrof???g&amor&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,lecrev,o&ned,tpyrctfihs,?ppa-rettalp,s&egap,rekrow,?vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab", - "?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van!dlo??xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&ا&راما?لاصتا??را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); + "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva?s??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&l&buperananab?ohtac??n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?citsalej.piv,drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?irp?orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.xlh,?rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??vd7ckaabgm--nx?w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&g&olb,ro??ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.&cb,su,t", + "ne,ue,??pib,ten?vog?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&eci&ffoemoh,vres,?ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???u&leiw?rot,?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,tadtsudgniht,v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsohecapsppa,?i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&ht&ron-ue,uos-&em,fa,pa,ue,??lartnec-&ac,li,ue,?ts&ae&-&as,pa,su,vog-su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aeht&ron-pa,uos-pa,?ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,t&ingocnozama.&1-&ht&ron-ue.htua,uos-&em.htua,fa.htua,pa.htua,ue.htua,??lartnec-&ac.htua,li.htua,ue.htua,?ts&ae&-&as.htua,su.&htua,spif-htua,??ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,vog-su.spif-htua,???2-ts&ae&-su.&htua,spif-htua,?ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,??3-ts&aeht&ron-pa.htua,uos-pa.htua,?ew-ue.htua,??tadym,??p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-rettalp,anis:piv,,esaberif,k1,lortnocduolc,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&3s,ht&ron-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??uos-&em&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??fa.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3", + "s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??em.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?li.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ts&ae&-&as&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??su:-etisbew-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,?,vog-su&-&3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,???ht&ron-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??ue&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??vog-su&-&3s,etisbew-3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?????2-&htuos-&pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??lartnec-ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?????3&-ts&aeht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??uos-pa.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???s,?4-tsaehtuos-pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?labolg-3s.tniopssecca.parm,?yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.&rekamegas.1-&htron-nc.&koobeton,oiduts,?tsewhtron-nc.&koobeton,oiduts,??swanozama.&1-&htron-nc.&3s,adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?tsewhtron-nc.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??be.1-&htron-nc,tsewhtron-nc,?????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?gawsklov?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tednalyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?l", + "ov?narts?uas??f&1-&l--nx?s--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vsyt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??snduolc,t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ih", + "sayah??r&abi?ukawaihsin??wi&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&asim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara", + "?ihcat???y&agates?ubihs???e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,n&aecolatigidno,ur:.a,,?poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?e&b?n&igne?oip??rac??gni&arg?rheob??h&sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema???xnal??iws??t&a&eb?ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a!.rekamegas.&1-&ht&ron-ue.&koobeton,oiduts,?uos-&em.&koobeton,oiduts,?fa.&koobeton,oiduts,?pa.&koobeton,oiduts,?ue.&koobeton,oiduts,???lartnec-&ac.&koobeton,oiduts,?em.&koobeton,oiduts,?li.&koobeton,oiduts,?ue.&koobeton,oiduts,??ts&ae&-&as.&koobeton,oiduts,?pa.&koobeton,oiduts,?su.&koobeton,oiduts,spif-koobeton,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,???ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,?ue.&koobeton,oiduts,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,?????2-&htuos-&pa.koobeton,ue.koobeton,?lartnec-ue.koobeton,ts&ae&-su.&koobeton,oiduts,spif-koobeton,?ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,spif-koobeton,?ue.&koobeton,oiduts,????3-ts&aeht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,??ew-ue.&koobeton,oiduts,??4-tsaehtuos-pa.koobeton,??e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l!asite??mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&eiamaka,irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?iamaka,k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,4,5,6,7,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,?t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-", + "&ilrof?ìlrof??ilrof?ìlrof???g&amor&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,lecrev,o&ned,tpyrctfihs,?ppa-rettalp,s&egap,rekrow,?vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van!dlo??xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&ا&راما?لاصتا??را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); /** * If a hostname is not a key in the EXCLUDE map, and if removing its leftmost component results @@ -56,7 +56,7 @@ private PublicSuffixPatterns() {} */ public static final ImmutableMap UNDER = TrieParser.parseTrie( - "ac.vedwa,d&b?i.ym.ssr,uolc.&etiso&isnes,tnegam,?iaznab,rehcnar-no,scitats,??e&b.lrusnart,d.&ecapsrebu,yksurf,?noz.notirt,t&atse.etupmoc,is.&areduolc,hsmroftalp,tst,???g&oog.tnetnocresu,p??h&c.tenerif:.cvs,,k?trae.sppad:.zzb,,?k&c?f?nil.bewd,rowten.secla,u.hcs??ln.lrusnart,m&f.resu,j?m?oc.&duolcmeaeboda.ved,edo&c.redliub:->s,ved,?,nil.recnalabedon,?ico-remotsuc:.&ico,pco,sco,?,lrihwyap,mme0,osseccandcved,s&ecapsnaecolatigid,t&cejbo&edonil,rtluv,?nemelepiuq,?wanozama.&1-etupmoc,ble,etupmoc,??t&neyoj.snc,opsppa.r,???n&c.moc.swanozama.&ble,etupmoc,?ur.&dliub,e&doc,sabatad,?noitargim,??o&c.pato,i.&duolciaznab.sdraykcab,elacsnoom,nroca-no,oir-no,reniatnoceruza,s&3k-no,olots,?xcq.sys,y5s,??p&j.&a&mahokoy?yogan??ebok?i&adnes?kasawak??oroppas?uhsuykatik??n?pa.&knalfhtron,repoleved,tegeb,??r&b.mon?e??s&edoc.owo,noitulos.rehid,w.rosivda,?t&a.&ofnistro.&nednuk,xe,?smcerutuf:.&ni,xe,?,?en.&cimonotpyrc,hvo.&gnitsoh,saapbew,???u&e.lrusnart,r.onijym.&gni&dnal,tsoh,?murtceps,spv,??ved.&e&gats>s,lcl,?rahbew,?gts,lcl,treclacol.resu,yawetag,?z&c.murtnecatem.duolc,yx.tibelet,??"); + "ac.vedwa,d&b?i.ym.ssr,uolc.&etiso&isnes,tnegam,?iaznab,rehcnar-no,scitats,??e&b.lrusnart,d.&ecapsrebu,yksurf,?noz.notirt,t&atse.etupmoc,is.&areduolc,hsmroftalp,tst,???g&oog.tnetnocresu,p??h&c.tenerif:.cvs,,k?trae.sppad:.zzb,,?k&c?f?nil.bewd,rowten.secla,u.hcs??ln.lrusnart,m&f.resu,j?m?oc.&duolcmeaeboda.ved,edo&c.redliub:->s,ved,?,nil.recnalabedon,?ico-remotsuc:.&ico,pco,sco,?,lrihwyap,mme0,osseccandcved,ppayfilpma,rennurppaswa,s&ecapsnaecolatigid,t&cejbo&edonil,rtluv,?nemelepiuq,?wanozama.&1-etupmoc,ble,etupmoc,wolfria.&1-&ht&ron-ue,uos-pa,?lartnec-&ac,ue,?ts&ae&-&as,su,?ht&ron-pa,uos-pa,??ew-ue,??2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-tsew-ue,???t&neyoj.snc,opsppa.r,???n&c.moc.swanozama.&ble,etupmoc,wolfria.1-&htron-nc,tsewhtron-nc,??ur.&dliub,e&doc,sabatad,?noitargim,??o&c.pato,i.&duolciaznab.sdraykcab,elacsnoom,nroca-no,oir-no,reniatnoceruza,s&3k-no,olots,?xcq.sys,y5s,??p&j.&a&mahokoy?yogan??ebok?i&adnes?kasawak??oroppas?uhsuykatik??n?pa.&knalfhtron,repoleved,tegeb,??r&b.mon?e??s&edoc.owo,noitulos.rehid,w.rosivda,?t&a.&ofnistro.&nednuk,xe,?smcerutuf:.&ni,xe,?,?en.&cimonotpyrc,hvo.&gnitsoh,saapbew,???u&e.lrusnart,r.onijym.&gni&dnal,tsoh,?murtceps,spv,??ved.&e&gats>s,lcl,?rahbew,?gts,lcl,treclacol.resu,yawetag,?z&c.murtnecatem.duolc,yx.tibelet,??"); /** * The elements in this map would pass the UNDER test, but are known not to be public suffixes and From 4f12c5891a7adedbaa1d99fc9f77d8cc4e9da206 Mon Sep 17 00:00:00 2001 From: Chaoren Lin Date: Fri, 17 Nov 2023 10:44:50 -0800 Subject: [PATCH 050/216] Update http:// links to https:// if available. Also update some links that have been migrated. Context: #6839. RELNOTES=n/a PiperOrigin-RevId: 583431708 --- .github/ISSUE_TEMPLATE/feature_addition_request.yaml | 4 ++-- .github/ISSUE_TEMPLATE/feature_enhancement_request.yaml | 4 ++-- CONTRIBUTING.md | 4 ++-- README.md | 6 +++--- guava-testlib/README.md | 8 ++++---- 5 files changed, 13 insertions(+), 13 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/feature_addition_request.yaml b/.github/ISSUE_TEMPLATE/feature_addition_request.yaml index bf717c3c48c4..d86c4ca535dc 100644 --- a/.github/ISSUE_TEMPLATE/feature_addition_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_addition_request.yaml @@ -9,8 +9,8 @@ body: Be aware, though: most feature requests are not accepted, even if they're suggested by - a full-time Guava team member. [Feedback](http://stackoverflow.com/a/4543114/869736) from - our users indicates that they really appreciate Guava's high power-to-weight ratio. It's + a full-time Guava team member. [Feedback](https://stackoverflow.com/a/4543114) from our + users indicates that they really appreciate Guava's high power-to-weight ratio. It's important to us to keep Guava as easy to use and understand as we can. That means boiling features down to compact but powerful abstractions, and controlling feature bloat carefully. diff --git a/.github/ISSUE_TEMPLATE/feature_enhancement_request.yaml b/.github/ISSUE_TEMPLATE/feature_enhancement_request.yaml index 5599972aa4fe..93be4411227a 100644 --- a/.github/ISSUE_TEMPLATE/feature_enhancement_request.yaml +++ b/.github/ISSUE_TEMPLATE/feature_enhancement_request.yaml @@ -9,8 +9,8 @@ body: Be aware, though: most feature requests are not accepted, even if they're suggested by - a full-time Guava team member. [Feedback](http://stackoverflow.com/a/4543114/869736) from - our users indicates that they really appreciate Guava's high power-to-weight ratio. It's + a full-time Guava team member. [Feedback](https://stackoverflow.com/a/4543114) from our + users indicates that they really appreciate Guava's high power-to-weight ratio. It's important to us to keep Guava as easy to use and understand as we can. That means boiling features down to compact but powerful abstractions, and controlling feature bloat carefully. diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index b9f53630f6cf..1c1bd8fba349 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -21,7 +21,7 @@ for it. If the feature has merit, it will go through a thorough process of API design and review. Any code should come after this. -[APIs]: http://en.wikipedia.org/wiki/Application_programming_interface +[APIs]: https://en.wikipedia.org/wiki/Application_programming_interface [issue]: https://github.com/google/guava/issues Pull requests @@ -53,7 +53,7 @@ Guidelines for any code contributions: [well-formed commit message][] for the change. [Java style guide]: https://google.github.io/styleguide/javaguide.html -[well-formed commit message]: http://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html +[well-formed commit message]: https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html #### Merging pull requests #### diff --git a/README.md b/README.md index 5e4863d3c4b9..577323ba27bc 100644 --- a/README.md +++ b/README.md @@ -80,7 +80,7 @@ flavor. ## Learn about Guava - Our users' guide, [Guava Explained] -- [A nice collection](http://www.tfnico.com/presentations/google-guava) of +- [A nice collection](https://www.tfnico.com/presentations/google-guava) of other helpful links ## Links @@ -88,8 +88,8 @@ flavor. - [GitHub project](https://github.com/google/guava) - [Issue tracker: Report a defect or feature request](https://github.com/google/guava/issues/new) - [StackOverflow: Ask "how-to" and "why-didn't-it-work" questions](https://stackoverflow.com/questions/ask?tags=guava+java) -- [guava-announce: Announcements of releases and upcoming significant changes](http://groups.google.com/group/guava-announce) -- [guava-discuss: For open-ended questions and discussion](http://groups.google.com/group/guava-discuss) +- [guava-announce: Announcements of releases and upcoming significant changes](https://groups.google.com/group/guava-announce) +- [guava-discuss: For open-ended questions and discussion](https://groups.google.com/group/guava-discuss) ## IMPORTANT WARNINGS diff --git a/guava-testlib/README.md b/guava-testlib/README.md index e4172b3c17bb..6e9efc028c5e 100644 --- a/guava-testlib/README.md +++ b/guava-testlib/README.md @@ -28,10 +28,10 @@ dependencies { ## Links -- [GitHub project](https://github.com/google/guava) -- [Issue tracker: Report a defect or feature request](https://github.com/google/guava/issues/new) -- [StackOverflow: Ask "how-to" and "why-didn't-it-work" questions](https://stackoverflow.com/questions/ask?tags=guava+java) -- [guava-discuss: For open-ended questions and discussion](http://groups.google.com/group/guava-discuss) +- [GitHub project](https://github.com/google/guava) +- [Issue tracker: Report a defect or feature request](https://github.com/google/guava/issues/new) +- [StackOverflow: Ask "how-to" and "why-didn't-it-work" questions](https://stackoverflow.com/questions/ask?tags=guava+java) +- [guava-discuss: For open-ended questions and discussion](https://groups.google.com/group/guava-discuss) ## IMPORTANT WARNINGS From 67e0984187b300c69cf0711dcdd4379c53d8fb3d Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 21 Nov 2023 09:37:33 -0800 Subject: [PATCH 051/216] Check compatibility against the Android SDK (including [always-desugared APIs](https://github.com/open-toast/gummy-bears#android) but still not opt-in library desugaring) instead of the JDK. Fixes https://github.com/google/guava/issues/4005 RELNOTES=n/a PiperOrigin-RevId: 584349750 --- android/pom.xml | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index 7f875246c804..b73fe52399b4 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -180,15 +180,14 @@ com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement true - org.codehaus.mojo.signature - java16-sun - 1.10 + com.toasttab.android + gummy-bears-api-19 + 0.6.1 + - - java.util.Objects - + sun.misc.Unsafe From 3856cacfa59fdd2fe2bf47c787e7407e6e81479b Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Tue, 21 Nov 2023 13:33:03 -0800 Subject: [PATCH 052/216] Defer logger construction in AbstractFuture. The uses are somewhat exceptional (i.e. SEVERE logs), but the initialization of the logger itself is relatively costly. RELNOTES=Defer logger construction in AbstractFuture. PiperOrigin-RevId: 584415298 --- .../google/common/util/concurrent/AbstractFuture.java | 11 +++++++---- .../google/common/util/concurrent/AbstractFuture.java | 11 +++++++---- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java b/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java index 6dc7a6b395d8..b060e74bca73 100644 --- a/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java +++ b/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java @@ -142,7 +142,10 @@ public final boolean cancel(boolean mayInterruptIfRunning) { } // Logger to log exceptions caught when running listeners. - private static final Logger log = Logger.getLogger(AbstractFuture.class.getName()); + // Holder class to delay initialization, for performance reasons. + private static final class LoggerHolder { + static final Logger log = Logger.getLogger(AbstractFuture.class.getName()); + } // A heuristic for timed gets. If the remaining timeout is less than this, spin instead of // blocking. This value is what AbstractQueuedSynchronizer uses. @@ -189,8 +192,8 @@ public final boolean cancel(boolean mayInterruptIfRunning) { // Log after all static init is finished; if an installed logger uses any Futures methods, it // shouldn't break in cases where reflection is missing/broken. if (thrownAtomicReferenceFieldUpdaterFailure != null) { - log.log(Level.SEVERE, "UnsafeAtomicHelper is broken!", thrownUnsafeFailure); - log.log( + LoggerHolder.log.log(Level.SEVERE, "UnsafeAtomicHelper is broken!", thrownUnsafeFailure); + LoggerHolder.log.log( Level.SEVERE, "SafeAtomicHelper is broken!", thrownAtomicReferenceFieldUpdaterFailure); } } @@ -1288,7 +1291,7 @@ private static void executeListener(Runnable runnable, Executor executor) { // Log it and keep going -- bad runnable and/or executor. Don't punish the other runnables if // we're given a bad one. We only catch RuntimeException because we want Errors to propagate // up. - log.log( + LoggerHolder.log.log( Level.SEVERE, "RuntimeException while executing runnable " + runnable + " with executor " + executor, e); diff --git a/guava/src/com/google/common/util/concurrent/AbstractFuture.java b/guava/src/com/google/common/util/concurrent/AbstractFuture.java index 42ec5264cea9..444b16cd8ea0 100644 --- a/guava/src/com/google/common/util/concurrent/AbstractFuture.java +++ b/guava/src/com/google/common/util/concurrent/AbstractFuture.java @@ -142,7 +142,10 @@ public final boolean cancel(boolean mayInterruptIfRunning) { } // Logger to log exceptions caught when running listeners. - private static final Logger log = Logger.getLogger(AbstractFuture.class.getName()); + // Holder class to delay initialization, for performance reasons. + private static final class LoggerHolder { + static final Logger log = Logger.getLogger(AbstractFuture.class.getName()); + } // A heuristic for timed gets. If the remaining timeout is less than this, spin instead of // blocking. This value is what AbstractQueuedSynchronizer uses. @@ -189,8 +192,8 @@ public final boolean cancel(boolean mayInterruptIfRunning) { // Log after all static init is finished; if an installed logger uses any Futures methods, it // shouldn't break in cases where reflection is missing/broken. if (thrownAtomicReferenceFieldUpdaterFailure != null) { - log.log(Level.SEVERE, "UnsafeAtomicHelper is broken!", thrownUnsafeFailure); - log.log( + LoggerHolder.log.log(Level.SEVERE, "UnsafeAtomicHelper is broken!", thrownUnsafeFailure); + LoggerHolder.log.log( Level.SEVERE, "SafeAtomicHelper is broken!", thrownAtomicReferenceFieldUpdaterFailure); } } @@ -1288,7 +1291,7 @@ private static void executeListener(Runnable runnable, Executor executor) { // Log it and keep going -- bad runnable and/or executor. Don't punish the other runnables if // we're given a bad one. We only catch RuntimeException because we want Errors to propagate // up. - log.log( + LoggerHolder.log.log( Level.SEVERE, "RuntimeException while executing runnable " + runnable + " with executor " + executor, e); From e5cc39c9e0bcca1347a937cb090321fb96de0e5c Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 21 Nov 2023 13:41:09 -0800 Subject: [PATCH 053/216] Work around or suppress forthcoming nullness errors. This CL also provides a little more progress toward https://github.com/google/guava/issues/3679: One of the workarounds involves removing a call to the long-obsolete `Iterators.cast`, and I went ahead and removed the method itself, too. RELNOTES=n/a PiperOrigin-RevId: 584417248 --- android/guava/src/com/google/common/collect/Iterators.java | 6 ------ .../src/com/google/common/collect/TableCollectors.java | 2 +- .../com/google/common/collect/TransformedListIterator.java | 2 +- .../src/com/google/common/testing/CollectorTester.java | 1 + guava/src/com/google/common/collect/Iterators.java | 6 ------ guava/src/com/google/common/collect/Multimaps.java | 5 +++-- guava/src/com/google/common/collect/TableCollectors.java | 2 +- guava/src/com/google/common/collect/Tables.java | 5 +++-- .../com/google/common/collect/TransformedListIterator.java | 2 +- 9 files changed, 11 insertions(+), 20 deletions(-) diff --git a/android/guava/src/com/google/common/collect/Iterators.java b/android/guava/src/com/google/common/collect/Iterators.java index 0699202fefbd..61aece3f27d3 100644 --- a/android/guava/src/com/google/common/collect/Iterators.java +++ b/android/guava/src/com/google/common/collect/Iterators.java @@ -42,7 +42,6 @@ import java.util.Enumeration; import java.util.Iterator; import java.util.List; -import java.util.ListIterator; import java.util.NoSuchElementException; import java.util.PriorityQueue; import java.util.Queue; @@ -1444,9 +1443,4 @@ public void remove() { toRemove = null; } } - - /** Used to avoid http://bugs.sun.com/view_bug.do?bug_id=6558557 */ - static ListIterator cast(Iterator iterator) { - return (ListIterator) iterator; - } } diff --git a/android/guava/src/com/google/common/collect/TableCollectors.java b/android/guava/src/com/google/common/collect/TableCollectors.java index 9e71d80abd87..64ee1d587e3c 100644 --- a/android/guava/src/com/google/common/collect/TableCollectors.java +++ b/android/guava/src/com/google/common/collect/TableCollectors.java @@ -93,7 +93,7 @@ final class TableCollectors { java.util.function.Function columnFunction, java.util.function.Function valueFunction, java.util.function.Supplier tableSupplier) { - return toTable( + return TableCollectors.toTable( rowFunction, columnFunction, valueFunction, diff --git a/android/guava/src/com/google/common/collect/TransformedListIterator.java b/android/guava/src/com/google/common/collect/TransformedListIterator.java index 66b42e4c6048..22b4b7c42db2 100644 --- a/android/guava/src/com/google/common/collect/TransformedListIterator.java +++ b/android/guava/src/com/google/common/collect/TransformedListIterator.java @@ -36,7 +36,7 @@ abstract class TransformedListIterator backingIterator() { - return Iterators.cast(backingIterator); + return (ListIterator) backingIterator; } @Override diff --git a/guava-testlib/src/com/google/common/testing/CollectorTester.java b/guava-testlib/src/com/google/common/testing/CollectorTester.java index 656edbd419e8..2e154c1750e3 100644 --- a/guava-testlib/src/com/google/common/testing/CollectorTester.java +++ b/guava-testlib/src/com/google/common/testing/CollectorTester.java @@ -147,6 +147,7 @@ A result(Collector collector, Iterable inputs) { */ @SafeVarargs @CanIgnoreReturnValue + @SuppressWarnings("nullness") // TODO(cpovirk): Remove after we fix whatever the bug is. public final CollectorTester expectCollects(R expectedResult, T... inputs) { List list = Arrays.asList(inputs); doExpectCollects(expectedResult, list); diff --git a/guava/src/com/google/common/collect/Iterators.java b/guava/src/com/google/common/collect/Iterators.java index 0699202fefbd..61aece3f27d3 100644 --- a/guava/src/com/google/common/collect/Iterators.java +++ b/guava/src/com/google/common/collect/Iterators.java @@ -42,7 +42,6 @@ import java.util.Enumeration; import java.util.Iterator; import java.util.List; -import java.util.ListIterator; import java.util.NoSuchElementException; import java.util.PriorityQueue; import java.util.Queue; @@ -1444,9 +1443,4 @@ public void remove() { toRemove = null; } } - - /** Used to avoid http://bugs.sun.com/view_bug.do?bug_id=6558557 */ - static ListIterator cast(Iterator iterator) { - return (ListIterator) iterator; - } } diff --git a/guava/src/com/google/common/collect/Multimaps.java b/guava/src/com/google/common/collect/Multimaps.java index 90401fb25281..c158c6519aa8 100644 --- a/guava/src/com/google/common/collect/Multimaps.java +++ b/guava/src/com/google/common/collect/Multimaps.java @@ -122,7 +122,7 @@ private Multimaps() {} java.util.function.Function keyFunction, java.util.function.Function valueFunction, java.util.function.Supplier multimapSupplier) { - return CollectCollectors.toMultimap(keyFunction, valueFunction, multimapSupplier); + return CollectCollectors.toMultimap(keyFunction, valueFunction, multimapSupplier); } /** @@ -167,7 +167,8 @@ private Multimaps() {} java.util.function.Function keyFunction, java.util.function.Function> valueFunction, java.util.function.Supplier multimapSupplier) { - return CollectCollectors.flatteningToMultimap(keyFunction, valueFunction, multimapSupplier); + return CollectCollectors.flatteningToMultimap( + keyFunction, valueFunction, multimapSupplier); } /** diff --git a/guava/src/com/google/common/collect/TableCollectors.java b/guava/src/com/google/common/collect/TableCollectors.java index 16fcb166969a..0257954ee802 100644 --- a/guava/src/com/google/common/collect/TableCollectors.java +++ b/guava/src/com/google/common/collect/TableCollectors.java @@ -90,7 +90,7 @@ final class TableCollectors { java.util.function.Function columnFunction, java.util.function.Function valueFunction, java.util.function.Supplier tableSupplier) { - return toTable( + return TableCollectors.toTable( rowFunction, columnFunction, valueFunction, diff --git a/guava/src/com/google/common/collect/Tables.java b/guava/src/com/google/common/collect/Tables.java index 887eafff939d..a9d0bb6548d0 100644 --- a/guava/src/com/google/common/collect/Tables.java +++ b/guava/src/com/google/common/collect/Tables.java @@ -77,7 +77,8 @@ private Tables() {} java.util.function.Function columnFunction, java.util.function.Function valueFunction, java.util.function.Supplier tableSupplier) { - return TableCollectors.toTable(rowFunction, columnFunction, valueFunction, tableSupplier); + return TableCollectors.toTable( + rowFunction, columnFunction, valueFunction, tableSupplier); } /** @@ -106,7 +107,7 @@ private Tables() {} java.util.function.Function valueFunction, BinaryOperator mergeFunction, java.util.function.Supplier tableSupplier) { - return TableCollectors.toTable( + return TableCollectors.toTable( rowFunction, columnFunction, valueFunction, mergeFunction, tableSupplier); } diff --git a/guava/src/com/google/common/collect/TransformedListIterator.java b/guava/src/com/google/common/collect/TransformedListIterator.java index 66b42e4c6048..22b4b7c42db2 100644 --- a/guava/src/com/google/common/collect/TransformedListIterator.java +++ b/guava/src/com/google/common/collect/TransformedListIterator.java @@ -36,7 +36,7 @@ abstract class TransformedListIterator backingIterator() { - return Iterators.cast(backingIterator); + return (ListIterator) backingIterator; } @Override From e6f062cf1ba73fa8cf61c74f6269a4a96a12ebbe Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 24 Nov 2023 07:27:07 -0800 Subject: [PATCH 054/216] Bump github/codeql-action from 2.22.7 to 2.22.8 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.7 to 2.22.8. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/66b90a5db151a8042fa97405c6cf843bbe433f7b...407ffafae6a767df3e0230c3df91b6443ae8df75) Fixes #6849 RELNOTES=n/a PiperOrigin-RevId: 585091604 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index f862515ac480..5a782b8d4f4c 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@66b90a5db151a8042fa97405c6cf843bbe433f7b # v2.22.7 + uses: github/codeql-action/upload-sarif@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8 with: sarif_file: results.sarif From c4477c0a0e3c22a78c7757739b6a9cdd63a00500 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 27 Nov 2023 11:24:46 -0800 Subject: [PATCH 055/216] Reenable some tests externally. The GWT bug that caused trouble for them was fixed long ago. PiperOrigin-RevId: 585709530 --- .../google/common/collect/StreamsTest.java | 60 +++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/guava-tests/test/com/google/common/collect/StreamsTest.java b/guava-tests/test/com/google/common/collect/StreamsTest.java index 94c24003e4f4..2da73a974240 100644 --- a/guava-tests/test/com/google/common/collect/StreamsTest.java +++ b/guava-tests/test/com/google/common/collect/StreamsTest.java @@ -14,6 +14,7 @@ package com.google.common.collect; +import static com.google.common.collect.Streams.findLast; import static com.google.common.collect.Streams.stream; import com.google.common.annotations.GwtCompatible; @@ -22,16 +23,19 @@ import com.google.common.primitives.Doubles; import com.google.common.truth.IterableSubject; import com.google.common.truth.Truth; +import com.google.common.truth.Truth8; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.LinkedHashSet; +import java.util.LinkedList; import java.util.List; import java.util.OptionalDouble; import java.util.OptionalInt; import java.util.OptionalLong; import java.util.concurrent.atomic.AtomicInteger; import java.util.function.Function; +import java.util.stream.Collectors; import java.util.stream.DoubleStream; import java.util.stream.IntStream; import java.util.stream.LongStream; @@ -75,6 +79,62 @@ public void testStream_javaOptional() { assertThat(stream(java.util.Optional.of("a"))).containsExactly("a"); } + public void testFindLast_refStream() { + Truth8.assertThat(findLast(Stream.of())).isEmpty(); + Truth8.assertThat(findLast(Stream.of("a", "b", "c", "d"))).hasValue("d"); + + // test with a large, not-subsized Spliterator + List list = + IntStream.rangeClosed(0, 10000).boxed().collect(Collectors.toCollection(LinkedList::new)); + Truth8.assertThat(findLast(list.stream())).hasValue(10000); + + // no way to find out the stream is empty without walking its spliterator + Truth8.assertThat(findLast(list.stream().filter(i -> i < 0))).isEmpty(); + } + + public void testFindLast_intStream() { + Truth.assertThat(findLast(IntStream.of())).isEqualTo(OptionalInt.empty()); + Truth.assertThat(findLast(IntStream.of(1, 2, 3, 4, 5))).isEqualTo(OptionalInt.of(5)); + + // test with a large, not-subsized Spliterator + List list = + IntStream.rangeClosed(0, 10000).boxed().collect(Collectors.toCollection(LinkedList::new)); + Truth.assertThat(findLast(list.stream().mapToInt(i -> i))).isEqualTo(OptionalInt.of(10000)); + + // no way to find out the stream is empty without walking its spliterator + Truth.assertThat(findLast(list.stream().mapToInt(i -> i).filter(i -> i < 0))) + .isEqualTo(OptionalInt.empty()); + } + + public void testFindLast_longStream() { + Truth.assertThat(findLast(LongStream.of())).isEqualTo(OptionalLong.empty()); + Truth.assertThat(findLast(LongStream.of(1, 2, 3, 4, 5))).isEqualTo(OptionalLong.of(5)); + + // test with a large, not-subsized Spliterator + List list = + LongStream.rangeClosed(0, 10000).boxed().collect(Collectors.toCollection(LinkedList::new)); + Truth.assertThat(findLast(list.stream().mapToLong(i -> i))).isEqualTo(OptionalLong.of(10000)); + + // no way to find out the stream is empty without walking its spliterator + Truth.assertThat(findLast(list.stream().mapToLong(i -> i).filter(i -> i < 0))) + .isEqualTo(OptionalLong.empty()); + } + + public void testFindLast_doubleStream() { + Truth.assertThat(findLast(DoubleStream.of())).isEqualTo(OptionalDouble.empty()); + Truth.assertThat(findLast(DoubleStream.of(1, 2, 3, 4, 5))).isEqualTo(OptionalDouble.of(5)); + + // test with a large, not-subsized Spliterator + List list = + LongStream.rangeClosed(0, 10000).boxed().collect(Collectors.toCollection(LinkedList::new)); + Truth.assertThat(findLast(list.stream().mapToDouble(i -> i))) + .isEqualTo(OptionalDouble.of(10000)); + + // no way to find out the stream is empty without walking its spliterator + Truth.assertThat(findLast(list.stream().mapToDouble(i -> i).filter(i -> i < 0))) + .isEqualTo(OptionalDouble.empty()); + } + public void testConcat_refStream() { assertThat(Streams.concat(Stream.of("a"), Stream.of("b"), Stream.empty(), Stream.of("c", "d"))) .containsExactly("a", "b", "c", "d") From 5b851dbb6745f836a2ce5857fc1550a29c88f96c Mon Sep 17 00:00:00 2001 From: lowasser Date: Mon, 27 Nov 2023 15:41:23 -0800 Subject: [PATCH 056/216] Correct Javadoc for CacheBuilder.weigher. RELNOTES=n/a PiperOrigin-RevId: 585780506 --- android/guava/src/com/google/common/cache/CacheBuilder.java | 4 ++-- guava/src/com/google/common/cache/CacheBuilder.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/guava/src/com/google/common/cache/CacheBuilder.java b/android/guava/src/com/google/common/cache/CacheBuilder.java index 5d21c5b1833f..7e7ea25bb5df 100644 --- a/android/guava/src/com/google/common/cache/CacheBuilder.java +++ b/android/guava/src/com/google/common/cache/CacheBuilder.java @@ -568,8 +568,8 @@ public CacheBuilder maximumWeight(long maximumWeight) { * * @param weigher the weigher to use in calculating the weight of cache entries * @return this {@code CacheBuilder} instance (for chaining) - * @throws IllegalArgumentException if {@code size} is negative - * @throws IllegalStateException if a maximum size was already set + * @throws IllegalStateException if a weigher was already set or {@link #maximumSize(long)} was + * previously called * @since 11.0 */ @GwtIncompatible // To be supported diff --git a/guava/src/com/google/common/cache/CacheBuilder.java b/guava/src/com/google/common/cache/CacheBuilder.java index bbb2b185b5f5..6a964a29017d 100644 --- a/guava/src/com/google/common/cache/CacheBuilder.java +++ b/guava/src/com/google/common/cache/CacheBuilder.java @@ -569,8 +569,8 @@ public CacheBuilder maximumWeight(long maximumWeight) { * * @param weigher the weigher to use in calculating the weight of cache entries * @return this {@code CacheBuilder} instance (for chaining) - * @throws IllegalArgumentException if {@code size} is negative - * @throws IllegalStateException if a maximum size was already set + * @throws IllegalStateException if a weigher was already set or {@link #maximumSize} was + * previously called * @since 11.0 */ @GwtIncompatible // To be supported From b252447ec28e076362358782d390cb0b7871a5ab Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 30 Nov 2023 13:08:47 -0800 Subject: [PATCH 057/216] Bump actions/setup-java from 3.13.0 to 4.0.0 Bumps [actions/setup-java](https://github.com/actions/setup-java) from 3.13.0 to 4.0.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/0ab4596768b603586c0de567f2430c30f5b0d2b0...387ac29b308b003ca37ba93a6cab5eb57c8f5f93) Fixes #6854 RELNOTES=n/a PiperOrigin-RevId: 586764572 --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6d889836f328..7e4508d0862c 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: - name: 'Check out repository' uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: 'Set up JDK ${{ matrix.java }}' - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 + uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 with: java-version: ${{ matrix.java }} @@ -69,7 +69,7 @@ jobs: - name: 'Check out repository' uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: 'Set up JDK 11' - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 + uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 with: java-version: 11 @@ -95,7 +95,7 @@ jobs: - name: 'Check out repository' uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: 'Set up JDK 11' - uses: actions/setup-java@0ab4596768b603586c0de567f2430c30f5b0d2b0 + uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 with: java-version: 11 From f4c1264c9f8ee1e72af39c4fa3776b86b8519ed1 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 30 Nov 2023 13:51:24 -0800 Subject: [PATCH 058/216] Declare "redundant" overrides of all our package-private `writeReplace` methods. If users request for an optimizer to keep one of our classes in `com.google.common.collect` but permit it to move supertypes or subtypes of that class into other packages, then those `writeReplace` methods are no longer treated as overrides, and serialization breaks. Normally, optimizers are smart enough not to break overrides. However, in the case of serialization, `writeReplace` is invoked reflectively inside the serialization system, which also performs its own access checks. This means that some optimizers don't know that `writeReplace` is called. So, even if they are instructed to keep all methods of that name, they don't know to preserve their override-ness. In the particular case we were seeing, `ImmutableCollection` and `RegularImmutableList` were ending up in the default package, while `ImmutableList` was staying in `common.collect`. That might sound like it should still work: Serializing an `RegularImmutableList` instance should invoke the package-private `ImmutableCollection.writeReplace` method. However, if I'm understanding correctly, Java serialization is buggy (or at least surprising relative to normal inheritance): `ObjectStreamClass.getInheritableMethod`, upon finding the package-private `ImmutableList.writeReplace` method (which is _not_ relevant to `RegularImmutableList` anymore because it now appears in a different package), [gives up on looking for `writeReplace`](https://github.com/openjdk/jdk/blob/570dffb104fc37f053fcdf38a24aa2cabdc921c0/src/java.base/share/classes/java/io/ObjectStreamClass.java#L1518) instead of continuing to scan for `writeReplace` in any grandparent+ types that live in the same package. RELNOTES=n/a PiperOrigin-RevId: 586777576 --- .../collect/WriteReplaceOverridesTest.java | 118 ++++++++++++++++++ .../google/common/collect/CartesianList.java | 11 ++ .../google/common/collect/ContiguousSet.java | 10 ++ .../common/collect/DenseImmutableTable.java | 51 +++++++- .../DescendingImmutableSortedMultiset.java | 9 ++ .../collect/DescendingImmutableSortedSet.java | 9 ++ .../common/collect/ImmutableCollection.java | 2 + .../google/common/collect/ImmutableList.java | 20 +++ .../google/common/collect/ImmutableMap.java | 28 +++++ .../common/collect/ImmutableMapEntrySet.java | 9 ++ .../common/collect/ImmutableMapKeySet.java | 3 +- .../common/collect/ImmutableMapValues.java | 9 ++ .../common/collect/ImmutableMultimap.java | 18 +++ .../common/collect/ImmutableRangeMap.java | 16 +++ .../common/collect/ImmutableRangeSet.java | 17 +++ .../common/collect/ImmutableSetMultimap.java | 9 ++ .../common/collect/ImmutableSortedMap.java | 19 +++ .../google/common/collect/ImmutableTable.java | 9 +- .../common/collect/IndexedImmutableSet.java | 19 +++ .../src/com/google/common/collect/Lists.java | 9 ++ .../common/collect/RegularContiguousSet.java | 9 ++ .../collect/RegularImmutableAsList.java | 10 ++ .../common/collect/RegularImmutableBiMap.java | 11 ++ .../common/collect/RegularImmutableList.java | 11 ++ .../common/collect/RegularImmutableMap.java | 43 +++++++ .../collect/RegularImmutableMultiset.java | 13 +- .../common/collect/RegularImmutableSet.java | 11 ++ .../RegularImmutableSortedMultiset.java | 9 ++ .../collect/RegularImmutableSortedSet.java | 10 ++ .../common/collect/RegularImmutableTable.java | 26 ++++ .../src/com/google/common/collect/Sets.java | 9 ++ .../common/collect/SingletonImmutableSet.java | 11 ++ .../collect/SingletonImmutableTable.java | 6 +- .../common/collect/SparseImmutableTable.java | 6 +- .../collect/WriteReplaceOverridesTest.java | 118 ++++++++++++++++++ .../google/common/collect/CartesianList.java | 11 ++ .../google/common/collect/ContiguousSet.java | 10 ++ .../common/collect/DenseImmutableTable.java | 51 +++++++- .../DescendingImmutableSortedMultiset.java | 9 ++ .../collect/DescendingImmutableSortedSet.java | 9 ++ .../common/collect/ImmutableCollection.java | 2 + .../google/common/collect/ImmutableList.java | 20 +++ .../google/common/collect/ImmutableMap.java | 28 +++++ .../common/collect/ImmutableMapEntrySet.java | 9 ++ .../common/collect/ImmutableMapKeySet.java | 9 ++ .../common/collect/ImmutableMapValues.java | 18 +++ .../common/collect/ImmutableMultimap.java | 18 +++ .../common/collect/ImmutableMultiset.java | 9 ++ .../common/collect/ImmutableRangeMap.java | 16 +++ .../common/collect/ImmutableRangeSet.java | 17 +++ .../google/common/collect/ImmutableSet.java | 28 +++++ .../common/collect/ImmutableSetMultimap.java | 9 ++ .../common/collect/ImmutableSortedAsList.java | 10 ++ .../common/collect/ImmutableSortedMap.java | 19 +++ .../google/common/collect/ImmutableTable.java | 9 +- .../common/collect/IndexedImmutableSet.java | 19 +++ .../collect/JdkBackedImmutableBiMap.java | 20 +++ .../common/collect/JdkBackedImmutableMap.java | 11 ++ .../collect/JdkBackedImmutableMultiset.java | 11 ++ .../common/collect/JdkBackedImmutableSet.java | 11 ++ .../src/com/google/common/collect/Lists.java | 9 ++ .../common/collect/RegularContiguousSet.java | 9 ++ .../collect/RegularImmutableAsList.java | 10 ++ .../common/collect/RegularImmutableBiMap.java | 29 +++++ .../common/collect/RegularImmutableList.java | 11 ++ .../common/collect/RegularImmutableMap.java | 27 ++++ .../collect/RegularImmutableMultiset.java | 11 ++ .../common/collect/RegularImmutableSet.java | 11 ++ .../RegularImmutableSortedMultiset.java | 9 ++ .../collect/RegularImmutableSortedSet.java | 10 ++ .../common/collect/RegularImmutableTable.java | 26 ++++ guava/src/com/google/common/collect/Sets.java | 9 ++ .../collect/SingletonImmutableBiMap.java | 11 ++ .../collect/SingletonImmutableList.java | 11 ++ .../common/collect/SingletonImmutableSet.java | 11 ++ .../collect/SingletonImmutableTable.java | 6 +- .../common/collect/SparseImmutableTable.java | 6 +- 77 files changed, 1277 insertions(+), 20 deletions(-) create mode 100644 android/guava-tests/test/com/google/common/collect/WriteReplaceOverridesTest.java create mode 100644 guava-tests/test/com/google/common/collect/WriteReplaceOverridesTest.java diff --git a/android/guava-tests/test/com/google/common/collect/WriteReplaceOverridesTest.java b/android/guava-tests/test/com/google/common/collect/WriteReplaceOverridesTest.java new file mode 100644 index 000000000000..bf10f5f75d14 --- /dev/null +++ b/android/guava-tests/test/com/google/common/collect/WriteReplaceOverridesTest.java @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2023 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.common.collect; + +import static com.google.common.truth.Truth.assertWithMessage; +import static java.lang.reflect.Modifier.PRIVATE; +import static java.lang.reflect.Modifier.PROTECTED; +import static java.lang.reflect.Modifier.PUBLIC; +import static java.util.Arrays.asList; + +import com.google.common.base.Optional; +import com.google.common.reflect.ClassPath; +import com.google.common.reflect.ClassPath.ClassInfo; +import com.google.common.reflect.TypeToken; +import java.lang.reflect.Method; +import junit.framework.TestCase; + +/** + * Tests that all package-private {@code writeReplace} methods are overridden in any existing + * subclasses. Without such overrides, optimizers might put a {@code writeReplace}-containing class + * and its subclass in different packages, causing the serialization system to fail to invoke {@code + * writeReplace} when serializing an instance of the subclass. For an example of this problem, see + * b/310253115. + */ +public class WriteReplaceOverridesTest extends TestCase { + private static final ImmutableSet GUAVA_PACKAGES = + FluentIterable.of( + "base", + "cache", + "collect", + "escape", + "eventbus", + "graph", + "hash", + "html", + "io", + "math", + "net", + "primitives", + "reflect", + "util.concurrent", + "xml") + .transform("com.google.common."::concat) + .toSet(); + + public void testClassesHaveOverrides() throws Exception { + for (ClassInfo info : ClassPath.from(getClass().getClassLoader()).getAllClasses()) { + if (!GUAVA_PACKAGES.contains(info.getPackageName())) { + continue; + } + if (info.getName().endsWith("GwtSerializationDependencies")) { + continue; // These classes exist only for the GWT compiler, not to be used. + } + if ( + /* + * At least one of the classes nested inside TypeResolverTest triggers a bug under older JDKs: + * https://bugs.openjdk.org/browse/JDK-8215328 -> https://bugs.openjdk.org/browse/JDK-8215470 + * https://github.com/google/guava/blob/4f12c5891a7adedbaa1d99fc9f77d8cc4e9da206/guava-tests/test/com/google/common/reflect/TypeResolverTest.java#L201 + */ + info.getName().contains("TypeResolverTest") + /* + * And at least one of the classes inside TypeTokenTest ends up with a null value in + * TypeMappingIntrospector.mappings. That happens only under older JDKs, too, so it may + * well be a JDK bug. + */ + || info.getName().contains("TypeTokenTest") + /* + * Luckily, we don't care about analyzing tests at all. We'd skip them all if we could do so + * trivially, but it's enough to skip these ones. + */ + ) { + continue; + } + Class clazz = info.load(); + try { + Method unused = clazz.getDeclaredMethod("writeReplace"); + continue; // It overrides writeReplace, so it's safe. + } catch (NoSuchMethodException e) { + // This is a class whose supertypes we want to examine. We'll do that below. + } + Optional> supersWithPackagePrivateWriteReplace = + FluentIterable.from(TypeToken.of(clazz).getTypes()) + .transform(TypeToken::getRawType) + .transformAndConcat(c -> asList(c.getDeclaredMethods())) + .firstMatch( + m -> + m.getName().equals("writeReplace") + && m.getParameterTypes().length == 0 + // Only package-private methods are a problem. + && (m.getModifiers() & (PUBLIC | PROTECTED | PRIVATE)) == 0) + .transform(Method::getDeclaringClass); + if (!supersWithPackagePrivateWriteReplace.isPresent()) { + continue; + } + assertWithMessage( + "To help optimizers, any class that inherits a package-private writeReplace() method" + + " should override that method.\n" + + "(An override that delegates to the supermethod is fine.)\n" + + "%s has no such override despite inheriting writeReplace() from %s", + clazz.getName(), supersWithPackagePrivateWriteReplace.get().getName()) + .fail(); + } + } +} diff --git a/android/guava/src/com/google/common/collect/CartesianList.java b/android/guava/src/com/google/common/collect/CartesianList.java index 4c31b12998e5..a93fb032fec6 100644 --- a/android/guava/src/com/google/common/collect/CartesianList.java +++ b/android/guava/src/com/google/common/collect/CartesianList.java @@ -17,6 +17,8 @@ import static com.google.common.base.Preconditions.checkElementIndex; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.math.IntMath; import java.util.AbstractList; import java.util.List; @@ -132,6 +134,15 @@ public E get(int axis) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @J2ktIncompatible // serialization + @Override + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } diff --git a/android/guava/src/com/google/common/collect/ContiguousSet.java b/android/guava/src/com/google/common/collect/ContiguousSet.java index d0792054ea4f..539c67383a21 100644 --- a/android/guava/src/com/google/common/collect/ContiguousSet.java +++ b/android/guava/src/com/google/common/collect/ContiguousSet.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.DoNotCall; import java.util.Collections; import java.util.NoSuchElementException; @@ -259,4 +260,13 @@ public String toString() { public static ImmutableSortedSet.Builder builder() { throw new UnsupportedOperationException(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @J2ktIncompatible // serialization + @Override + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/android/guava/src/com/google/common/collect/DenseImmutableTable.java b/android/guava/src/com/google/common/collect/DenseImmutableTable.java index 9de77c57f213..a8e96e382662 100644 --- a/android/guava/src/com/google/common/collect/DenseImmutableTable.java +++ b/android/guava/src/com/google/common/collect/DenseImmutableTable.java @@ -17,6 +17,8 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableMap.IteratorBasedImmutableMap; import com.google.errorprone.annotations.Immutable; import com.google.j2objc.annotations.WeakOuter; @@ -144,6 +146,15 @@ protected Entry computeNext() { } }; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @J2ktIncompatible // serialization + @Override + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } private final class Row extends ImmutableArrayMap { @@ -169,6 +180,15 @@ V getValue(int keyIndex) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } private final class Column extends ImmutableArrayMap { @@ -194,6 +214,15 @@ V getValue(int keyIndex) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @WeakOuter @@ -216,6 +245,15 @@ ImmutableMap getValue(int keyIndex) { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @WeakOuter @@ -238,6 +276,15 @@ ImmutableMap getValue(int keyIndex) { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override @@ -285,7 +332,9 @@ V getValue(int index) { } @Override - SerializedForm createSerializedForm() { + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { return SerializedForm.create(this, cellRowIndices, cellColumnIndices); } } diff --git a/android/guava/src/com/google/common/collect/DescendingImmutableSortedMultiset.java b/android/guava/src/com/google/common/collect/DescendingImmutableSortedMultiset.java index 181731cc4896..931c3e72c70a 100644 --- a/android/guava/src/com/google/common/collect/DescendingImmutableSortedMultiset.java +++ b/android/guava/src/com/google/common/collect/DescendingImmutableSortedMultiset.java @@ -15,6 +15,7 @@ package com.google.common.collect; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import javax.annotation.CheckForNull; /** @@ -83,4 +84,12 @@ public ImmutableSortedMultiset tailMultiset(E lowerBound, BoundType boundType boolean isPartialView() { return forward.isPartialView(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/android/guava/src/com/google/common/collect/DescendingImmutableSortedSet.java b/android/guava/src/com/google/common/collect/DescendingImmutableSortedSet.java index 88c7d6b5cca0..10b3fa8666b2 100644 --- a/android/guava/src/com/google/common/collect/DescendingImmutableSortedSet.java +++ b/android/guava/src/com/google/common/collect/DescendingImmutableSortedSet.java @@ -17,6 +17,7 @@ package com.google.common.collect; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import javax.annotation.CheckForNull; /** @@ -121,4 +122,12 @@ int indexOf(@CheckForNull Object target) { boolean isPartialView() { return forward.isPartialView(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/android/guava/src/com/google/common/collect/ImmutableCollection.java b/android/guava/src/com/google/common/collect/ImmutableCollection.java index 1a41d55ef9c2..c8167e8f61cc 100644 --- a/android/guava/src/com/google/common/collect/ImmutableCollection.java +++ b/android/guava/src/com/google/common/collect/ImmutableCollection.java @@ -21,6 +21,7 @@ import static com.google.common.collect.ObjectArrays.checkElementsNotNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.google.errorprone.annotations.DoNotCall; @@ -381,6 +382,7 @@ int copyIntoArray(@Nullable Object[] dst, int offset) { } @J2ktIncompatible // serialization + @GwtIncompatible // serialization Object writeReplace() { // We serialize by default to ImmutableList, the simplest thing that works. return new ImmutableList.SerializedForm(toArray()); diff --git a/android/guava/src/com/google/common/collect/ImmutableList.java b/android/guava/src/com/google/common/collect/ImmutableList.java index d28c051c4ab9..9bf354580c1c 100644 --- a/android/guava/src/com/google/common/collect/ImmutableList.java +++ b/android/guava/src/com/google/common/collect/ImmutableList.java @@ -26,6 +26,7 @@ import static com.google.common.collect.RegularImmutableList.EMPTY; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.google.errorprone.annotations.DoNotCall; @@ -489,6 +490,15 @@ public ImmutableList subList(int fromIndex, int toIndex) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } /** @@ -638,6 +648,15 @@ public int size() { boolean isPartialView() { return forwardList.isPartialView(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override @@ -684,6 +703,7 @@ private void readObject(ObjectInputStream stream) throws InvalidObjectException @Override @J2ktIncompatible // serialization + @GwtIncompatible // serialization Object writeReplace() { return new SerializedForm(toArray()); } diff --git a/android/guava/src/com/google/common/collect/ImmutableMap.java b/android/guava/src/com/google/common/collect/ImmutableMap.java index 59742c601e6e..4ec2f834ef33 100644 --- a/android/guava/src/com/google/common/collect/ImmutableMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableMap.java @@ -23,6 +23,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.google.errorprone.annotations.DoNotCall; @@ -727,6 +728,15 @@ ImmutableMap map() { public UnmodifiableIterator> iterator() { return entryIterator(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } return new EntrySetImpl(); } @@ -735,6 +745,15 @@ public UnmodifiableIterator> iterator() { ImmutableCollection createValues() { return new ImmutableMapValues<>(this); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } ImmutableMap() {} @@ -1016,6 +1035,15 @@ public ImmutableSet getValue() { } }; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override diff --git a/android/guava/src/com/google/common/collect/ImmutableMapEntrySet.java b/android/guava/src/com/google/common/collect/ImmutableMapEntrySet.java index 3732e2dfebc5..27a4c2c3367c 100644 --- a/android/guava/src/com/google/common/collect/ImmutableMapEntrySet.java +++ b/android/guava/src/com/google/common/collect/ImmutableMapEntrySet.java @@ -68,6 +68,15 @@ public UnmodifiableIterator> iterator() { ImmutableList> createAsList() { return entries; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } ImmutableMapEntrySet() {} diff --git a/android/guava/src/com/google/common/collect/ImmutableMapKeySet.java b/android/guava/src/com/google/common/collect/ImmutableMapKeySet.java index 056a35141805..cd9f4accf328 100644 --- a/android/guava/src/com/google/common/collect/ImmutableMapKeySet.java +++ b/android/guava/src/com/google/common/collect/ImmutableMapKeySet.java @@ -62,8 +62,9 @@ boolean isPartialView() { return true; } - @GwtIncompatible // serialization @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization Object writeReplace() { return new KeySetSerializedForm(map); } diff --git a/android/guava/src/com/google/common/collect/ImmutableMapValues.java b/android/guava/src/com/google/common/collect/ImmutableMapValues.java index ba868d1b9eea..0ddf84ffe759 100644 --- a/android/guava/src/com/google/common/collect/ImmutableMapValues.java +++ b/android/guava/src/com/google/common/collect/ImmutableMapValues.java @@ -88,6 +88,15 @@ boolean isPartialView() { public int size() { return entryList.size(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } diff --git a/android/guava/src/com/google/common/collect/ImmutableMultimap.java b/android/guava/src/com/google/common/collect/ImmutableMultimap.java index e4ad391f5079..597d0be27d57 100644 --- a/android/guava/src/com/google/common/collect/ImmutableMultimap.java +++ b/android/guava/src/com/google/common/collect/ImmutableMultimap.java @@ -576,6 +576,15 @@ public boolean contains(@CheckForNull Object object) { return false; } + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } + private static final long serialVersionUID = 0; } @@ -757,6 +766,15 @@ boolean isPartialView() { return true; } + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } + @J2ktIncompatible // serialization private static final long serialVersionUID = 0; } diff --git a/android/guava/src/com/google/common/collect/ImmutableRangeMap.java b/android/guava/src/com/google/common/collect/ImmutableRangeMap.java index 710c8916ec8c..532631617116 100644 --- a/android/guava/src/com/google/common/collect/ImmutableRangeMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableRangeMap.java @@ -339,6 +339,14 @@ public Range get(int index) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; final ImmutableRangeMap outer = this; return new ImmutableRangeMap(subRanges, values.subList(lowerIndex, upperIndex)) { @@ -350,6 +358,14 @@ public ImmutableRangeMap subRangeMap(Range subRange) { return ImmutableRangeMap.of(); } } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } diff --git a/android/guava/src/com/google/common/collect/ImmutableRangeSet.java b/android/guava/src/com/google/common/collect/ImmutableRangeSet.java index 844c1c1dc4d1..d1f05bc98729 100644 --- a/android/guava/src/com/google/common/collect/ImmutableRangeSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableRangeSet.java @@ -355,6 +355,14 @@ public Range get(int index) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override @@ -474,6 +482,15 @@ public Range get(int index) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } } diff --git a/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java b/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java index b0039636a1b7..b2d80af4fac6 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java +++ b/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java @@ -468,6 +468,15 @@ public UnmodifiableIterator> iterator() { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } private static ImmutableSet valueSet( diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java index 60e673669a42..2bebbe59f1f4 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -23,6 +23,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.google.errorprone.annotations.DoNotCall; @@ -823,6 +824,15 @@ boolean isPartialView() { public int size() { return ImmutableSortedMap.this.size(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } @@ -830,6 +840,15 @@ public int size() { ImmutableMap map() { return ImmutableSortedMap.this; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } return isEmpty() ? ImmutableSet.>of() : new EntrySet(); } diff --git a/android/guava/src/com/google/common/collect/ImmutableTable.java b/android/guava/src/com/google/common/collect/ImmutableTable.java index 9c45e361fed5..6c8f26dfe0f0 100644 --- a/android/guava/src/com/google/common/collect/ImmutableTable.java +++ b/android/guava/src/com/google/common/collect/ImmutableTable.java @@ -396,9 +396,6 @@ public final V remove(@CheckForNull Object rowKey, @CheckForNull Object columnKe throw new UnsupportedOperationException(); } - /** Creates the common serialized form for this table. */ - abstract SerializedForm createSerializedForm(); - /** * Serialized type for all ImmutableTable instances. It captures the logical contents and * preserves iteration order of all views. @@ -454,9 +451,9 @@ Object readResolve() { private static final long serialVersionUID = 0; } - final Object writeReplace() { - return createSerializedForm(); - } + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + abstract Object writeReplace(); @GwtIncompatible // serialization @J2ktIncompatible diff --git a/android/guava/src/com/google/common/collect/IndexedImmutableSet.java b/android/guava/src/com/google/common/collect/IndexedImmutableSet.java index 25aae94e8b96..805f15becca5 100644 --- a/android/guava/src/com/google/common/collect/IndexedImmutableSet.java +++ b/android/guava/src/com/google/common/collect/IndexedImmutableSet.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import org.checkerframework.checker.nullness.qual.Nullable; @GwtCompatible(emulated = true) @@ -53,6 +54,24 @@ boolean isPartialView() { public int size() { return IndexedImmutableSet.this.size(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/android/guava/src/com/google/common/collect/Lists.java b/android/guava/src/com/google/common/collect/Lists.java index 047575b57d8f..e59f60aae4e1 100644 --- a/android/guava/src/com/google/common/collect/Lists.java +++ b/android/guava/src/com/google/common/collect/Lists.java @@ -766,6 +766,15 @@ public Character get(int index) { public int size() { return string.length(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } private static final class CharSequenceAsList extends AbstractList { diff --git a/android/guava/src/com/google/common/collect/RegularContiguousSet.java b/android/guava/src/com/google/common/collect/RegularContiguousSet.java index 9c2e5a26f1d3..8159d107ba49 100644 --- a/android/guava/src/com/google/common/collect/RegularContiguousSet.java +++ b/android/guava/src/com/google/common/collect/RegularContiguousSet.java @@ -143,6 +143,15 @@ public C get(int i) { checkElementIndex(i, size()); return domain.offset(first(), i); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } else { return super.createAsList(); diff --git a/android/guava/src/com/google/common/collect/RegularImmutableAsList.java b/android/guava/src/com/google/common/collect/RegularImmutableAsList.java index e344db1eab17..928506e4462c 100644 --- a/android/guava/src/com/google/common/collect/RegularImmutableAsList.java +++ b/android/guava/src/com/google/common/collect/RegularImmutableAsList.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -89,4 +90,13 @@ int internalArrayEnd() { public E get(int index) { return delegateList.get(index); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/android/guava/src/com/google/common/collect/RegularImmutableBiMap.java b/android/guava/src/com/google/common/collect/RegularImmutableBiMap.java index 2ee752cebab4..0188e6367269 100644 --- a/android/guava/src/com/google/common/collect/RegularImmutableBiMap.java +++ b/android/guava/src/com/google/common/collect/RegularImmutableBiMap.java @@ -17,6 +17,8 @@ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -120,4 +122,13 @@ ImmutableSet createKeySet() { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/android/guava/src/com/google/common/collect/RegularImmutableList.java b/android/guava/src/com/google/common/collect/RegularImmutableList.java index baf1d66ed804..e7aedc972915 100644 --- a/android/guava/src/com/google/common/collect/RegularImmutableList.java +++ b/android/guava/src/com/google/common/collect/RegularImmutableList.java @@ -20,6 +20,8 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import org.checkerframework.checker.nullness.qual.Nullable; @@ -85,4 +87,13 @@ public E get(int index) { } // TODO(lowasser): benchmark optimizations for equals() and see if they're worthwhile + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/android/guava/src/com/google/common/collect/RegularImmutableMap.java b/android/guava/src/com/google/common/collect/RegularImmutableMap.java index d6d214b65f88..100e06129d18 100644 --- a/android/guava/src/com/google/common/collect/RegularImmutableMap.java +++ b/android/guava/src/com/google/common/collect/RegularImmutableMap.java @@ -22,6 +22,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.util.AbstractMap; @@ -435,6 +436,14 @@ public int size() { public boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } @@ -458,6 +467,15 @@ boolean isPartialView() { public int size() { return size; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override @@ -495,6 +513,13 @@ boolean isPartialView() { public int size() { return size; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + Object writeReplace() { + return super.writeReplace(); + } } static final class KeySet extends ImmutableSet { @@ -535,6 +560,15 @@ boolean isPartialView() { public int size() { return map.size(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @SuppressWarnings("unchecked") @@ -548,6 +582,15 @@ boolean isPartialView() { return false; } + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } + // This class is never actually serialized directly, but we have to make the // warning go away (and suppressing would suppress for all nested classes too) @J2ktIncompatible // serialization diff --git a/android/guava/src/com/google/common/collect/RegularImmutableMultiset.java b/android/guava/src/com/google/common/collect/RegularImmutableMultiset.java index 6fbc099c8708..0e59465ad1b6 100644 --- a/android/guava/src/com/google/common/collect/RegularImmutableMultiset.java +++ b/android/guava/src/com/google/common/collect/RegularImmutableMultiset.java @@ -16,6 +16,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.Multiset.Entry; import com.google.common.primitives.Ints; import com.google.errorprone.annotations.concurrent.LazyInit; @@ -93,6 +94,15 @@ boolean isPartialView() { public int size() { return contents.size(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override @@ -130,8 +140,9 @@ Object readResolve() { private static final long serialVersionUID = 0; } - @GwtIncompatible @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization Object writeReplace() { return new SerializedForm(this); } diff --git a/android/guava/src/com/google/common/collect/RegularImmutableSet.java b/android/guava/src/com/google/common/collect/RegularImmutableSet.java index 2382ef62e798..790aa64533c3 100644 --- a/android/guava/src/com/google/common/collect/RegularImmutableSet.java +++ b/android/guava/src/com/google/common/collect/RegularImmutableSet.java @@ -17,6 +17,8 @@ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -120,4 +122,13 @@ public int hashCode() { boolean isHashCodeFast() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/android/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java b/android/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java index 3b6d79c44c34..1ece0a0a9657 100644 --- a/android/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java +++ b/android/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java @@ -19,6 +19,7 @@ import static com.google.common.collect.BoundType.CLOSED; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.primitives.Ints; import java.util.Comparator; @@ -124,4 +125,12 @@ ImmutableSortedMultiset getSubMultiset(int from, int to) { boolean isPartialView() { return offset > 0 || length < cumulativeCounts.length - 1; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/android/guava/src/com/google/common/collect/RegularImmutableSortedSet.java b/android/guava/src/com/google/common/collect/RegularImmutableSortedSet.java index ef0fbb37857e..d31572cf76f5 100644 --- a/android/guava/src/com/google/common/collect/RegularImmutableSortedSet.java +++ b/android/guava/src/com/google/common/collect/RegularImmutableSortedSet.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.util.Collection; import java.util.Collections; @@ -319,4 +320,13 @@ ImmutableSortedSet createDescendingSet() { ? emptySet(reversedOrder) : new RegularImmutableSortedSet(elements.reverse(), reversedOrder); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/android/guava/src/com/google/common/collect/RegularImmutableTable.java b/android/guava/src/com/google/common/collect/RegularImmutableTable.java index 337f123b698d..03def2cbc82e 100644 --- a/android/guava/src/com/google/common/collect/RegularImmutableTable.java +++ b/android/guava/src/com/google/common/collect/RegularImmutableTable.java @@ -18,6 +18,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.j2objc.annotations.WeakOuter; import java.util.Collections; import java.util.Comparator; @@ -69,6 +71,15 @@ public boolean contains(@CheckForNull Object object) { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } abstract V getValue(int iterationIndex); @@ -94,6 +105,15 @@ public V get(int index) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } static RegularImmutableTable forCells( @@ -181,4 +201,10 @@ final void checkNoDuplicate(R rowKey, C columnKey, @CheckForNull V existingValue newValue, existingValue); } + + // redeclare to satisfy our test for b/310253115 + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + abstract Object writeReplace(); } diff --git a/android/guava/src/com/google/common/collect/Sets.java b/android/guava/src/com/google/common/collect/Sets.java index a31980559932..cbea9ca3298d 100644 --- a/android/guava/src/com/google/common/collect/Sets.java +++ b/android/guava/src/com/google/common/collect/Sets.java @@ -1374,6 +1374,15 @@ public List get(int index) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; return new CartesianSet(axes, new CartesianList(listAxes)); } diff --git a/android/guava/src/com/google/common/collect/SingletonImmutableSet.java b/android/guava/src/com/google/common/collect/SingletonImmutableSet.java index 088cb802f27f..15db1c5e56fb 100644 --- a/android/guava/src/com/google/common/collect/SingletonImmutableSet.java +++ b/android/guava/src/com/google/common/collect/SingletonImmutableSet.java @@ -17,6 +17,8 @@ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Preconditions; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -80,4 +82,13 @@ public final int hashCode() { public String toString() { return '[' + element.toString() + ']'; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/android/guava/src/com/google/common/collect/SingletonImmutableTable.java b/android/guava/src/com/google/common/collect/SingletonImmutableTable.java index cfaeadb41df7..6f839ceb4ca1 100644 --- a/android/guava/src/com/google/common/collect/SingletonImmutableTable.java +++ b/android/guava/src/com/google/common/collect/SingletonImmutableTable.java @@ -19,6 +19,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.Map; /** @@ -77,7 +79,9 @@ ImmutableCollection createValues() { } @Override - SerializedForm createSerializedForm() { + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { return SerializedForm.create(this, new int[] {0}, new int[] {0}); } } diff --git a/android/guava/src/com/google/common/collect/SparseImmutableTable.java b/android/guava/src/com/google/common/collect/SparseImmutableTable.java index 44881fde7f73..f7222b120e00 100644 --- a/android/guava/src/com/google/common/collect/SparseImmutableTable.java +++ b/android/guava/src/com/google/common/collect/SparseImmutableTable.java @@ -17,6 +17,8 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.Immutable; import java.util.LinkedHashMap; import java.util.Map; @@ -130,7 +132,9 @@ V getValue(int index) { } @Override - SerializedForm createSerializedForm() { + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { Map columnKeyToIndex = Maps.indexMap(columnKeySet()); int[] cellColumnIndices = new int[cellSet().size()]; int i = 0; diff --git a/guava-tests/test/com/google/common/collect/WriteReplaceOverridesTest.java b/guava-tests/test/com/google/common/collect/WriteReplaceOverridesTest.java new file mode 100644 index 000000000000..bf10f5f75d14 --- /dev/null +++ b/guava-tests/test/com/google/common/collect/WriteReplaceOverridesTest.java @@ -0,0 +1,118 @@ +/* + * Copyright (C) 2023 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.common.collect; + +import static com.google.common.truth.Truth.assertWithMessage; +import static java.lang.reflect.Modifier.PRIVATE; +import static java.lang.reflect.Modifier.PROTECTED; +import static java.lang.reflect.Modifier.PUBLIC; +import static java.util.Arrays.asList; + +import com.google.common.base.Optional; +import com.google.common.reflect.ClassPath; +import com.google.common.reflect.ClassPath.ClassInfo; +import com.google.common.reflect.TypeToken; +import java.lang.reflect.Method; +import junit.framework.TestCase; + +/** + * Tests that all package-private {@code writeReplace} methods are overridden in any existing + * subclasses. Without such overrides, optimizers might put a {@code writeReplace}-containing class + * and its subclass in different packages, causing the serialization system to fail to invoke {@code + * writeReplace} when serializing an instance of the subclass. For an example of this problem, see + * b/310253115. + */ +public class WriteReplaceOverridesTest extends TestCase { + private static final ImmutableSet GUAVA_PACKAGES = + FluentIterable.of( + "base", + "cache", + "collect", + "escape", + "eventbus", + "graph", + "hash", + "html", + "io", + "math", + "net", + "primitives", + "reflect", + "util.concurrent", + "xml") + .transform("com.google.common."::concat) + .toSet(); + + public void testClassesHaveOverrides() throws Exception { + for (ClassInfo info : ClassPath.from(getClass().getClassLoader()).getAllClasses()) { + if (!GUAVA_PACKAGES.contains(info.getPackageName())) { + continue; + } + if (info.getName().endsWith("GwtSerializationDependencies")) { + continue; // These classes exist only for the GWT compiler, not to be used. + } + if ( + /* + * At least one of the classes nested inside TypeResolverTest triggers a bug under older JDKs: + * https://bugs.openjdk.org/browse/JDK-8215328 -> https://bugs.openjdk.org/browse/JDK-8215470 + * https://github.com/google/guava/blob/4f12c5891a7adedbaa1d99fc9f77d8cc4e9da206/guava-tests/test/com/google/common/reflect/TypeResolverTest.java#L201 + */ + info.getName().contains("TypeResolverTest") + /* + * And at least one of the classes inside TypeTokenTest ends up with a null value in + * TypeMappingIntrospector.mappings. That happens only under older JDKs, too, so it may + * well be a JDK bug. + */ + || info.getName().contains("TypeTokenTest") + /* + * Luckily, we don't care about analyzing tests at all. We'd skip them all if we could do so + * trivially, but it's enough to skip these ones. + */ + ) { + continue; + } + Class clazz = info.load(); + try { + Method unused = clazz.getDeclaredMethod("writeReplace"); + continue; // It overrides writeReplace, so it's safe. + } catch (NoSuchMethodException e) { + // This is a class whose supertypes we want to examine. We'll do that below. + } + Optional> supersWithPackagePrivateWriteReplace = + FluentIterable.from(TypeToken.of(clazz).getTypes()) + .transform(TypeToken::getRawType) + .transformAndConcat(c -> asList(c.getDeclaredMethods())) + .firstMatch( + m -> + m.getName().equals("writeReplace") + && m.getParameterTypes().length == 0 + // Only package-private methods are a problem. + && (m.getModifiers() & (PUBLIC | PROTECTED | PRIVATE)) == 0) + .transform(Method::getDeclaringClass); + if (!supersWithPackagePrivateWriteReplace.isPresent()) { + continue; + } + assertWithMessage( + "To help optimizers, any class that inherits a package-private writeReplace() method" + + " should override that method.\n" + + "(An override that delegates to the supermethod is fine.)\n" + + "%s has no such override despite inheriting writeReplace() from %s", + clazz.getName(), supersWithPackagePrivateWriteReplace.get().getName()) + .fail(); + } + } +} diff --git a/guava/src/com/google/common/collect/CartesianList.java b/guava/src/com/google/common/collect/CartesianList.java index 4c31b12998e5..a93fb032fec6 100644 --- a/guava/src/com/google/common/collect/CartesianList.java +++ b/guava/src/com/google/common/collect/CartesianList.java @@ -17,6 +17,8 @@ import static com.google.common.base.Preconditions.checkElementIndex; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.math.IntMath; import java.util.AbstractList; import java.util.List; @@ -132,6 +134,15 @@ public E get(int axis) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @J2ktIncompatible // serialization + @Override + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } diff --git a/guava/src/com/google/common/collect/ContiguousSet.java b/guava/src/com/google/common/collect/ContiguousSet.java index d0792054ea4f..539c67383a21 100644 --- a/guava/src/com/google/common/collect/ContiguousSet.java +++ b/guava/src/com/google/common/collect/ContiguousSet.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.DoNotCall; import java.util.Collections; import java.util.NoSuchElementException; @@ -259,4 +260,13 @@ public String toString() { public static ImmutableSortedSet.Builder builder() { throw new UnsupportedOperationException(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @J2ktIncompatible // serialization + @Override + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/DenseImmutableTable.java b/guava/src/com/google/common/collect/DenseImmutableTable.java index 9de77c57f213..a8e96e382662 100644 --- a/guava/src/com/google/common/collect/DenseImmutableTable.java +++ b/guava/src/com/google/common/collect/DenseImmutableTable.java @@ -17,6 +17,8 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableMap.IteratorBasedImmutableMap; import com.google.errorprone.annotations.Immutable; import com.google.j2objc.annotations.WeakOuter; @@ -144,6 +146,15 @@ protected Entry computeNext() { } }; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @J2ktIncompatible // serialization + @Override + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } private final class Row extends ImmutableArrayMap { @@ -169,6 +180,15 @@ V getValue(int keyIndex) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } private final class Column extends ImmutableArrayMap { @@ -194,6 +214,15 @@ V getValue(int keyIndex) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @WeakOuter @@ -216,6 +245,15 @@ ImmutableMap getValue(int keyIndex) { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @WeakOuter @@ -238,6 +276,15 @@ ImmutableMap getValue(int keyIndex) { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override @@ -285,7 +332,9 @@ V getValue(int index) { } @Override - SerializedForm createSerializedForm() { + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { return SerializedForm.create(this, cellRowIndices, cellColumnIndices); } } diff --git a/guava/src/com/google/common/collect/DescendingImmutableSortedMultiset.java b/guava/src/com/google/common/collect/DescendingImmutableSortedMultiset.java index 181731cc4896..931c3e72c70a 100644 --- a/guava/src/com/google/common/collect/DescendingImmutableSortedMultiset.java +++ b/guava/src/com/google/common/collect/DescendingImmutableSortedMultiset.java @@ -15,6 +15,7 @@ package com.google.common.collect; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import javax.annotation.CheckForNull; /** @@ -83,4 +84,12 @@ public ImmutableSortedMultiset tailMultiset(E lowerBound, BoundType boundType boolean isPartialView() { return forward.isPartialView(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/DescendingImmutableSortedSet.java b/guava/src/com/google/common/collect/DescendingImmutableSortedSet.java index 88c7d6b5cca0..10b3fa8666b2 100644 --- a/guava/src/com/google/common/collect/DescendingImmutableSortedSet.java +++ b/guava/src/com/google/common/collect/DescendingImmutableSortedSet.java @@ -17,6 +17,7 @@ package com.google.common.collect; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import javax.annotation.CheckForNull; /** @@ -121,4 +122,12 @@ int indexOf(@CheckForNull Object target) { boolean isPartialView() { return forward.isPartialView(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/ImmutableCollection.java b/guava/src/com/google/common/collect/ImmutableCollection.java index 25b62864b0b5..ee18f0d9cac4 100644 --- a/guava/src/com/google/common/collect/ImmutableCollection.java +++ b/guava/src/com/google/common/collect/ImmutableCollection.java @@ -19,6 +19,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.google.errorprone.annotations.DoNotCall; @@ -392,6 +393,7 @@ int copyIntoArray(@Nullable Object[] dst, int offset) { } @J2ktIncompatible // serialization + @GwtIncompatible // serialization Object writeReplace() { // We serialize by default to ImmutableList, the simplest thing that works. return new ImmutableList.SerializedForm(toArray()); diff --git a/guava/src/com/google/common/collect/ImmutableList.java b/guava/src/com/google/common/collect/ImmutableList.java index 5caa3186a034..7c7801dbcf88 100644 --- a/guava/src/com/google/common/collect/ImmutableList.java +++ b/guava/src/com/google/common/collect/ImmutableList.java @@ -26,6 +26,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.errorprone.annotations.CanIgnoreReturnValue; @@ -504,6 +505,15 @@ public ImmutableList subList(int fromIndex, int toIndex) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } /** @@ -684,6 +694,15 @@ public int size() { boolean isPartialView() { return forwardList.isPartialView(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override @@ -730,6 +749,7 @@ private void readObject(ObjectInputStream stream) throws InvalidObjectException @Override @J2ktIncompatible // serialization + @GwtIncompatible // serialization Object writeReplace() { return new SerializedForm(toArray()); } diff --git a/guava/src/com/google/common/collect/ImmutableMap.java b/guava/src/com/google/common/collect/ImmutableMap.java index b3a6b1943863..7a185b5d3b67 100644 --- a/guava/src/com/google/common/collect/ImmutableMap.java +++ b/guava/src/com/google/common/collect/ImmutableMap.java @@ -23,6 +23,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.errorprone.annotations.CanIgnoreReturnValue; @@ -757,6 +758,15 @@ ImmutableMap map() { public UnmodifiableIterator> iterator() { return entryIterator(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } return new EntrySetImpl(); } @@ -765,6 +775,15 @@ public UnmodifiableIterator> iterator() { ImmutableCollection createValues() { return new ImmutableMapValues<>(this); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } ImmutableMap() {} @@ -1170,6 +1189,15 @@ public ImmutableSet getValue() { } }; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override diff --git a/guava/src/com/google/common/collect/ImmutableMapEntrySet.java b/guava/src/com/google/common/collect/ImmutableMapEntrySet.java index 46df158b069f..19f75cbbb99d 100644 --- a/guava/src/com/google/common/collect/ImmutableMapEntrySet.java +++ b/guava/src/com/google/common/collect/ImmutableMapEntrySet.java @@ -80,6 +80,15 @@ public void forEach(Consumer> action) { ImmutableList> createAsList() { return new RegularImmutableAsList<>(this, entries); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } ImmutableMapEntrySet() {} diff --git a/guava/src/com/google/common/collect/ImmutableMapKeySet.java b/guava/src/com/google/common/collect/ImmutableMapKeySet.java index 6d1b51671d60..fb2661f478fb 100644 --- a/guava/src/com/google/common/collect/ImmutableMapKeySet.java +++ b/guava/src/com/google/common/collect/ImmutableMapKeySet.java @@ -77,6 +77,15 @@ boolean isPartialView() { return true; } + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } + // No longer used for new writes, but kept so that old data can still be read. @GwtIncompatible // serialization @J2ktIncompatible diff --git a/guava/src/com/google/common/collect/ImmutableMapValues.java b/guava/src/com/google/common/collect/ImmutableMapValues.java index 8884c1af6363..83136459943d 100644 --- a/guava/src/com/google/common/collect/ImmutableMapValues.java +++ b/guava/src/com/google/common/collect/ImmutableMapValues.java @@ -92,6 +92,15 @@ public V get(int index) { ImmutableCollection delegateCollection() { return ImmutableMapValues.this; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } @@ -102,6 +111,15 @@ public void forEach(Consumer action) { map.forEach((k, v) -> action.accept(v)); } + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } + // No longer used for new writes, but kept so that old data can still be read. @GwtIncompatible // serialization @J2ktIncompatible diff --git a/guava/src/com/google/common/collect/ImmutableMultimap.java b/guava/src/com/google/common/collect/ImmutableMultimap.java index f1f654645297..02dbd5e67341 100644 --- a/guava/src/com/google/common/collect/ImmutableMultimap.java +++ b/guava/src/com/google/common/collect/ImmutableMultimap.java @@ -578,6 +578,15 @@ public boolean contains(@CheckForNull Object object) { return false; } + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } + private static final long serialVersionUID = 0; } @@ -781,6 +790,15 @@ boolean isPartialView() { return true; } + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } + @J2ktIncompatible // serialization private static final long serialVersionUID = 0; } diff --git a/guava/src/com/google/common/collect/ImmutableMultiset.java b/guava/src/com/google/common/collect/ImmutableMultiset.java index 76a6eb061f46..f0197433fe76 100644 --- a/guava/src/com/google/common/collect/ImmutableMultiset.java +++ b/guava/src/com/google/common/collect/ImmutableMultiset.java @@ -630,6 +630,15 @@ boolean isPartialView() { public int size() { return entries.size(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @J2ktIncompatible diff --git a/guava/src/com/google/common/collect/ImmutableRangeMap.java b/guava/src/com/google/common/collect/ImmutableRangeMap.java index 72444245f848..88ad7d889b71 100644 --- a/guava/src/com/google/common/collect/ImmutableRangeMap.java +++ b/guava/src/com/google/common/collect/ImmutableRangeMap.java @@ -372,6 +372,14 @@ public Range get(int index) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; final ImmutableRangeMap outer = this; return new ImmutableRangeMap(subRanges, values.subList(lowerIndex, upperIndex)) { @@ -383,6 +391,14 @@ public ImmutableRangeMap subRangeMap(Range subRange) { return ImmutableRangeMap.of(); } } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } diff --git a/guava/src/com/google/common/collect/ImmutableRangeSet.java b/guava/src/com/google/common/collect/ImmutableRangeSet.java index afd421cd7878..165b6e6520fb 100644 --- a/guava/src/com/google/common/collect/ImmutableRangeSet.java +++ b/guava/src/com/google/common/collect/ImmutableRangeSet.java @@ -368,6 +368,14 @@ public Range get(int index) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override @@ -487,6 +495,15 @@ public Range get(int index) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } } diff --git a/guava/src/com/google/common/collect/ImmutableSet.java b/guava/src/com/google/common/collect/ImmutableSet.java index 6f2e1a15fe8f..eeed833bf5c2 100644 --- a/guava/src/com/google/common/collect/ImmutableSet.java +++ b/guava/src/com/google/common/collect/ImmutableSet.java @@ -22,6 +22,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.math.IntMath; @@ -354,6 +355,15 @@ public ImmutableList asList() { ImmutableList createAsList() { return new RegularImmutableAsList(this, toArray()); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } abstract static class Indexed extends CachingAsList { @@ -395,8 +405,26 @@ public E get(int index) { Indexed delegateCollection() { return Indexed.this; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } /* diff --git a/guava/src/com/google/common/collect/ImmutableSetMultimap.java b/guava/src/com/google/common/collect/ImmutableSetMultimap.java index 603580a50610..b1f8438cd0c4 100644 --- a/guava/src/com/google/common/collect/ImmutableSetMultimap.java +++ b/guava/src/com/google/common/collect/ImmutableSetMultimap.java @@ -553,6 +553,15 @@ public UnmodifiableIterator> iterator() { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } private static ImmutableSet valueSet( diff --git a/guava/src/com/google/common/collect/ImmutableSortedAsList.java b/guava/src/com/google/common/collect/ImmutableSortedAsList.java index 30f19a02e344..1736f2b8e1eb 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedAsList.java +++ b/guava/src/com/google/common/collect/ImmutableSortedAsList.java @@ -16,6 +16,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.Comparator; import java.util.Spliterator; import javax.annotation.CheckForNull; @@ -93,4 +94,13 @@ public Spliterator spliterator() { delegateList()::get, comparator()); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/ImmutableSortedMap.java b/guava/src/com/google/common/collect/ImmutableSortedMap.java index 55a10c2919e4..ba0b91c9561f 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -23,6 +23,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.CanIgnoreReturnValue; import com.google.errorprone.annotations.DoNotCall; @@ -844,6 +845,15 @@ public Spliterator> spliterator() { ImmutableCollection> delegateCollection() { return EntrySet.this; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } @@ -851,6 +861,15 @@ ImmutableCollection> delegateCollection() { ImmutableMap map() { return ImmutableSortedMap.this; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } return isEmpty() ? ImmutableSet.>of() : new EntrySet(); } diff --git a/guava/src/com/google/common/collect/ImmutableTable.java b/guava/src/com/google/common/collect/ImmutableTable.java index 62cae079f26b..e1db67c93b29 100644 --- a/guava/src/com/google/common/collect/ImmutableTable.java +++ b/guava/src/com/google/common/collect/ImmutableTable.java @@ -445,9 +445,6 @@ public final V remove(@CheckForNull Object rowKey, @CheckForNull Object columnKe throw new UnsupportedOperationException(); } - /** Creates the common serialized form for this table. */ - abstract SerializedForm createSerializedForm(); - /** * Serialized type for all ImmutableTable instances. It captures the logical contents and * preserves iteration order of all views. @@ -503,9 +500,9 @@ Object readResolve() { private static final long serialVersionUID = 0; } - final Object writeReplace() { - return createSerializedForm(); - } + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + abstract Object writeReplace(); @GwtIncompatible // serialization @J2ktIncompatible diff --git a/guava/src/com/google/common/collect/IndexedImmutableSet.java b/guava/src/com/google/common/collect/IndexedImmutableSet.java index 20dfacbab86a..396ce6b0fcf6 100644 --- a/guava/src/com/google/common/collect/IndexedImmutableSet.java +++ b/guava/src/com/google/common/collect/IndexedImmutableSet.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.Spliterator; import java.util.function.Consumer; import org.checkerframework.checker.nullness.qual.Nullable; @@ -76,6 +77,24 @@ public int size() { ImmutableCollection delegateCollection() { return IndexedImmutableSet.this; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/JdkBackedImmutableBiMap.java b/guava/src/com/google/common/collect/JdkBackedImmutableBiMap.java index f126fdea3baf..bf45138f778b 100644 --- a/guava/src/com/google/common/collect/JdkBackedImmutableBiMap.java +++ b/guava/src/com/google/common/collect/JdkBackedImmutableBiMap.java @@ -18,6 +18,8 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.errorprone.annotations.concurrent.LazyInit; import com.google.j2objc.annotations.RetainedWith; @@ -102,6 +104,15 @@ boolean isPartialView() { public int size() { return entries.size(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override @@ -124,4 +135,13 @@ ImmutableSet createKeySet() { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/JdkBackedImmutableMap.java b/guava/src/com/google/common/collect/JdkBackedImmutableMap.java index 222c4deb8ae5..0dd791923c88 100644 --- a/guava/src/com/google/common/collect/JdkBackedImmutableMap.java +++ b/guava/src/com/google/common/collect/JdkBackedImmutableMap.java @@ -21,6 +21,8 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.HashMap; import java.util.Map; import java.util.function.BiConsumer; @@ -130,4 +132,13 @@ ImmutableCollection createValues() { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/JdkBackedImmutableMultiset.java b/guava/src/com/google/common/collect/JdkBackedImmutableMultiset.java index 41d95f045d04..8c116b35129c 100644 --- a/guava/src/com/google/common/collect/JdkBackedImmutableMultiset.java +++ b/guava/src/com/google/common/collect/JdkBackedImmutableMultiset.java @@ -17,6 +17,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.primitives.Ints; import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.Collection; @@ -89,4 +91,13 @@ boolean isPartialView() { public int size() { return Ints.saturatedCast(size); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/JdkBackedImmutableSet.java b/guava/src/com/google/common/collect/JdkBackedImmutableSet.java index c00167713cc9..bee7076fab23 100644 --- a/guava/src/com/google/common/collect/JdkBackedImmutableSet.java +++ b/guava/src/com/google/common/collect/JdkBackedImmutableSet.java @@ -15,6 +15,8 @@ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.Set; import javax.annotation.CheckForNull; @@ -55,4 +57,13 @@ boolean isPartialView() { public int size() { return delegateList.size(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/Lists.java b/guava/src/com/google/common/collect/Lists.java index 0816b754a89b..a9c99e27afb9 100644 --- a/guava/src/com/google/common/collect/Lists.java +++ b/guava/src/com/google/common/collect/Lists.java @@ -780,6 +780,15 @@ public Character get(int index) { public int size() { return string.length(); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } private static final class CharSequenceAsList extends AbstractList { diff --git a/guava/src/com/google/common/collect/RegularContiguousSet.java b/guava/src/com/google/common/collect/RegularContiguousSet.java index 9c2e5a26f1d3..8159d107ba49 100644 --- a/guava/src/com/google/common/collect/RegularContiguousSet.java +++ b/guava/src/com/google/common/collect/RegularContiguousSet.java @@ -143,6 +143,15 @@ public C get(int i) { checkElementIndex(i, size()); return domain.offset(first(), i); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } else { return super.createAsList(); diff --git a/guava/src/com/google/common/collect/RegularImmutableAsList.java b/guava/src/com/google/common/collect/RegularImmutableAsList.java index 0e3fe4ec8f49..bc4d8ae5d36e 100644 --- a/guava/src/com/google/common/collect/RegularImmutableAsList.java +++ b/guava/src/com/google/common/collect/RegularImmutableAsList.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.function.Consumer; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -91,4 +92,13 @@ int internalArrayEnd() { public E get(int index) { return delegateList.get(index); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/RegularImmutableBiMap.java b/guava/src/com/google/common/collect/RegularImmutableBiMap.java index 333b801777af..e97a8693437c 100644 --- a/guava/src/com/google/common/collect/RegularImmutableBiMap.java +++ b/guava/src/com/google/common/collect/RegularImmutableBiMap.java @@ -25,6 +25,7 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMapEntry.NonTerminalImmutableBiMapEntry; @@ -285,8 +286,26 @@ public Entry get(int index) { ImmutableCollection> delegateCollection() { return InverseEntrySet.this; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } @Override @@ -296,6 +315,7 @@ boolean isPartialView() { @Override @J2ktIncompatible // serialization + @GwtIncompatible // serialization Object writeReplace() { return new InverseSerializedForm<>(RegularImmutableBiMap.this); } @@ -320,4 +340,13 @@ Object readResolve() { private static final long serialVersionUID = 1; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/RegularImmutableList.java b/guava/src/com/google/common/collect/RegularImmutableList.java index 397147d70da2..e491617f4fd4 100644 --- a/guava/src/com/google/common/collect/RegularImmutableList.java +++ b/guava/src/com/google/common/collect/RegularImmutableList.java @@ -17,6 +17,8 @@ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.util.Spliterator; import java.util.Spliterators; @@ -91,4 +93,13 @@ public Spliterator spliterator() { } // TODO(lowasser): benchmark optimizations for equals() and see if they're worthwhile + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/RegularImmutableMap.java b/guava/src/com/google/common/collect/RegularImmutableMap.java index 42649109a826..32aa2507a32f 100644 --- a/guava/src/com/google/common/collect/RegularImmutableMap.java +++ b/guava/src/com/google/common/collect/RegularImmutableMap.java @@ -346,6 +346,15 @@ public int size() { return map.size(); } + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } + // No longer used for new writes, but kept so that old data can still be read. @GwtIncompatible // serialization @J2ktIncompatible @@ -394,6 +403,15 @@ boolean isPartialView() { return true; } + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } + // No longer used for new writes, but kept so that old data can still be read. @GwtIncompatible // serialization @J2ktIncompatible @@ -414,6 +432,15 @@ Object readResolve() { } } + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } + // This class is never actually serialized directly, but we have to make the // warning go away (and suppressing would suppress for all nested classes too) @J2ktIncompatible // serialization diff --git a/guava/src/com/google/common/collect/RegularImmutableMultiset.java b/guava/src/com/google/common/collect/RegularImmutableMultiset.java index 026919e0d5cf..8b50345b3217 100644 --- a/guava/src/com/google/common/collect/RegularImmutableMultiset.java +++ b/guava/src/com/google/common/collect/RegularImmutableMultiset.java @@ -17,6 +17,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Objects; import com.google.common.collect.Multisets.ImmutableEntry; @@ -194,4 +196,13 @@ Entry getEntry(int index) { public int hashCode() { return hashCode; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/RegularImmutableSet.java b/guava/src/com/google/common/collect/RegularImmutableSet.java index 211c89304ced..0db235d69580 100644 --- a/guava/src/com/google/common/collect/RegularImmutableSet.java +++ b/guava/src/com/google/common/collect/RegularImmutableSet.java @@ -17,6 +17,8 @@ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.util.Spliterator; import java.util.Spliterators; @@ -124,4 +126,13 @@ public int hashCode() { boolean isHashCodeFast() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java b/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java index 4b7ba87427ac..258f7aa09055 100644 --- a/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java +++ b/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java @@ -19,6 +19,7 @@ import static com.google.common.collect.BoundType.CLOSED; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.primitives.Ints; import java.util.Comparator; @@ -133,4 +134,12 @@ ImmutableSortedMultiset getSubMultiset(int from, int to) { boolean isPartialView() { return offset > 0 || length < cumulativeCounts.length - 1; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/RegularImmutableSortedSet.java b/guava/src/com/google/common/collect/RegularImmutableSortedSet.java index 572e0acbf51f..970e85112a6f 100644 --- a/guava/src/com/google/common/collect/RegularImmutableSortedSet.java +++ b/guava/src/com/google/common/collect/RegularImmutableSortedSet.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.Collection; import java.util.Collections; import java.util.Comparator; @@ -329,4 +330,13 @@ ImmutableSortedSet createDescendingSet() { ? emptySet(reversedOrder) : new RegularImmutableSortedSet(elements.reverse(), reversedOrder); } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/RegularImmutableTable.java b/guava/src/com/google/common/collect/RegularImmutableTable.java index 337f123b698d..03def2cbc82e 100644 --- a/guava/src/com/google/common/collect/RegularImmutableTable.java +++ b/guava/src/com/google/common/collect/RegularImmutableTable.java @@ -18,6 +18,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.j2objc.annotations.WeakOuter; import java.util.Collections; import java.util.Comparator; @@ -69,6 +71,15 @@ public boolean contains(@CheckForNull Object object) { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } abstract V getValue(int iterationIndex); @@ -94,6 +105,15 @@ public V get(int index) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } static RegularImmutableTable forCells( @@ -181,4 +201,10 @@ final void checkNoDuplicate(R rowKey, C columnKey, @CheckForNull V existingValue newValue, existingValue); } + + // redeclare to satisfy our test for b/310253115 + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + abstract Object writeReplace(); } diff --git a/guava/src/com/google/common/collect/Sets.java b/guava/src/com/google/common/collect/Sets.java index 86663d58a01a..c38181001991 100644 --- a/guava/src/com/google/common/collect/Sets.java +++ b/guava/src/com/google/common/collect/Sets.java @@ -1432,6 +1432,15 @@ public List get(int index) { boolean isPartialView() { return true; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } }; return new CartesianSet(axes, new CartesianList(listAxes)); } diff --git a/guava/src/com/google/common/collect/SingletonImmutableBiMap.java b/guava/src/com/google/common/collect/SingletonImmutableBiMap.java index c5fb2b29892a..c2f4ae137652 100644 --- a/guava/src/com/google/common/collect/SingletonImmutableBiMap.java +++ b/guava/src/com/google/common/collect/SingletonImmutableBiMap.java @@ -20,6 +20,8 @@ import static com.google.common.collect.CollectPreconditions.checkEntryNotNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.concurrent.LazyInit; import com.google.j2objc.annotations.RetainedWith; import java.util.function.BiConsumer; @@ -110,4 +112,13 @@ public ImmutableBiMap inverse() { } } } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/SingletonImmutableList.java b/guava/src/com/google/common/collect/SingletonImmutableList.java index a7ac8b30e21f..ba1b1a713cbe 100644 --- a/guava/src/com/google/common/collect/SingletonImmutableList.java +++ b/guava/src/com/google/common/collect/SingletonImmutableList.java @@ -19,6 +19,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Preconditions; import java.util.Collections; import java.util.Spliterator; @@ -75,4 +77,13 @@ public String toString() { boolean isPartialView() { return false; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/SingletonImmutableSet.java b/guava/src/com/google/common/collect/SingletonImmutableSet.java index 088cb802f27f..15db1c5e56fb 100644 --- a/guava/src/com/google/common/collect/SingletonImmutableSet.java +++ b/guava/src/com/google/common/collect/SingletonImmutableSet.java @@ -17,6 +17,8 @@ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Preconditions; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -80,4 +82,13 @@ public final int hashCode() { public String toString() { return '[' + element.toString() + ']'; } + + // redeclare to help optimizers with b/310253115 + @SuppressWarnings("RedundantOverride") + @Override + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { + return super.writeReplace(); + } } diff --git a/guava/src/com/google/common/collect/SingletonImmutableTable.java b/guava/src/com/google/common/collect/SingletonImmutableTable.java index cfaeadb41df7..6f839ceb4ca1 100644 --- a/guava/src/com/google/common/collect/SingletonImmutableTable.java +++ b/guava/src/com/google/common/collect/SingletonImmutableTable.java @@ -19,6 +19,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.Map; /** @@ -77,7 +79,9 @@ ImmutableCollection createValues() { } @Override - SerializedForm createSerializedForm() { + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { return SerializedForm.create(this, new int[] {0}, new int[] {0}); } } diff --git a/guava/src/com/google/common/collect/SparseImmutableTable.java b/guava/src/com/google/common/collect/SparseImmutableTable.java index 44881fde7f73..f7222b120e00 100644 --- a/guava/src/com/google/common/collect/SparseImmutableTable.java +++ b/guava/src/com/google/common/collect/SparseImmutableTable.java @@ -17,6 +17,8 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.Immutable; import java.util.LinkedHashMap; import java.util.Map; @@ -130,7 +132,9 @@ V getValue(int index) { } @Override - SerializedForm createSerializedForm() { + @J2ktIncompatible // serialization + @GwtIncompatible // serialization + Object writeReplace() { Map columnKeyToIndex = Maps.indexMap(columnKeySet()); int[] cellColumnIndices = new int[cellSet().size()]; int i = 0; From c294c23760464b87ec193fc9b995e06f3d5e907f Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 4 Dec 2023 06:43:28 -0800 Subject: [PATCH 059/216] Make various classes catch `Exception` instead of `RuntimeException` even when only `RuntimeException` is theoretically possible. In fact, because checked exceptions are a Java-source-language feature (rather than a JVM feature), it's possible to throw them when you're not "supposed to," either through tricky Java code or more naturally through other languages, such as Kotlin. We have seen this happening a few times in tests. This causes exceptions to slip past the `catch` blocks that are meant to handle them. This could cause operations to hang, such as when one listener of a `ListenableFuture` throws an exception, preventing subsequent listeners (such as a listener that powers `Futures.transform`) from running. I didn't cover _every_ `catch (RuntimeException ...)` block in our codebase, but I tried to get the ones that looked most likely to be affected. RELNOTES=Changed various classes to catch `Exception` instead of `RuntimeException` even when only `RuntimeException` is theoretically possible. PiperOrigin-RevId: 587701612 --- .../util/concurrent/AbstractFutureTest.java | 20 +++++++++++++++++++ .../util/concurrent/AbstractFuture.java | 20 ++++++++++++++----- .../concurrent/AbstractScheduledService.java | 4 +++- .../common/util/concurrent/ExecutionList.java | 3 ++- .../common/util/concurrent/Futures.java | 6 ++++-- .../util/concurrent/ImmediateFuture.java | 3 ++- .../util/concurrent/ListenerCallQueue.java | 6 ++++-- .../common/util/concurrent/Monitor.java | 3 ++- .../common/util/concurrent/MoreExecutors.java | 3 ++- .../util/concurrent/SequentialExecutor.java | 6 ++++-- .../util/concurrent/AbstractFutureTest.java | 20 +++++++++++++++++++ .../util/concurrent/AbstractFuture.java | 20 ++++++++++++++----- .../concurrent/AbstractScheduledService.java | 4 +++- .../common/util/concurrent/ExecutionList.java | 3 ++- .../common/util/concurrent/Futures.java | 6 ++++-- .../util/concurrent/ImmediateFuture.java | 3 ++- .../util/concurrent/ListenerCallQueue.java | 6 ++++-- .../common/util/concurrent/Monitor.java | 3 ++- .../common/util/concurrent/MoreExecutors.java | 3 ++- .../util/concurrent/SequentialExecutor.java | 6 ++++-- 20 files changed, 116 insertions(+), 32 deletions(-) diff --git a/android/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java b/android/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java index 9385acf5a9f8..6bf4c99d1b32 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java @@ -20,6 +20,7 @@ import static com.google.common.base.StandardSystemProperty.OS_NAME; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; +import static com.google.common.util.concurrent.MoreExecutors.directExecutor; import static org.junit.Assert.assertThrows; import com.google.common.annotations.GwtIncompatible; @@ -1056,6 +1057,25 @@ public void run() { t.join(); } + public void testCatchesUndeclaredThrowableFromListener() { + AbstractFuture f = new AbstractFuture() {}; + f.set("foo"); + f.addListener(() -> sneakyThrow(new SomeCheckedException()), directExecutor()); + } + + private static final class SomeCheckedException extends Exception {} + + /** Throws an undeclared checked exception. */ + private static void sneakyThrow(Throwable t) { + class SneakyThrower { + @SuppressWarnings("unchecked") // intentionally unsafe for test + void throwIt(Throwable t) throws T { + throw (T) t; + } + } + new SneakyThrower().throwIt(t); + } + public void testTrustedGetFailure_Completed() { SettableFuture future = SettableFuture.create(); future.set("261"); diff --git a/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java b/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java index b060e74bca73..e2232c272331 100644 --- a/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java +++ b/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java @@ -867,7 +867,9 @@ protected boolean setFuture(ListenableFuture future) { // since all we are doing is unpacking a completed future which should be fast. try { future.addListener(valueToSet, DirectExecutor.INSTANCE); - } catch (RuntimeException | Error t) { + } catch (Throwable t) { + // Any Exception is either a RuntimeException or sneaky checked exception. + // // addListener has thrown an exception! SetFuture.run can't throw any exceptions so this // must have been caused by addListener itself. The most likely explanation is a // misconfigured mock. Try to switch to Failure. @@ -1193,6 +1195,7 @@ protected String pendingToString() { return null; } + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private void addPendingString(StringBuilder builder) { // Capture current builder length so it can be truncated if this future ends up completing while // the toString is being calculated @@ -1209,7 +1212,9 @@ private void addPendingString(StringBuilder builder) { String pendingDescription; try { pendingDescription = Strings.emptyToNull(pendingToString()); - } catch (RuntimeException | StackOverflowError e) { + } catch (Exception | StackOverflowError e) { + // Any Exception is either a RuntimeException or sneaky checked exception. + // // Don't call getMessage or toString() on the exception, in case the exception thrown by the // subclass is implemented with bugs similar to the subclass. pendingDescription = "Exception thrown from implementation: " + e.getClass(); @@ -1228,6 +1233,7 @@ private void addPendingString(StringBuilder builder) { } } + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private void addDoneString(StringBuilder builder) { try { V value = getUninterruptibly(this); @@ -1238,7 +1244,7 @@ private void addDoneString(StringBuilder builder) { builder.append("FAILURE, cause=[").append(e.getCause()).append("]"); } catch (CancellationException e) { builder.append("CANCELLED"); // shouldn't be reachable - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception builder.append("UNKNOWN, cause=[").append(e.getClass()).append(" thrown from get()]"); } } @@ -1262,6 +1268,7 @@ private void appendResultObject(StringBuilder builder, @CheckForNull Object o) { } /** Helper for printing user supplied objects into our toString method. */ + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private void appendUserObject(StringBuilder builder, @CheckForNull Object o) { // This is some basic recursion detection for when people create cycles via set/setFuture or // when deep chains of futures exist resulting in a StackOverflowException. We could detect @@ -1273,7 +1280,9 @@ private void appendUserObject(StringBuilder builder, @CheckForNull Object o) { } else { builder.append(o); } - } catch (RuntimeException | StackOverflowError e) { + } catch (Exception | StackOverflowError e) { + // Any Exception is either a RuntimeException or sneaky checked exception. + // // Don't call getMessage or toString() on the exception, in case the exception thrown by the // user object is implemented with bugs similar to the user object. builder.append("Exception thrown from implementation: ").append(e.getClass()); @@ -1284,10 +1293,11 @@ private void appendUserObject(StringBuilder builder, @CheckForNull Object o) { * Submits the given runnable to the given {@link Executor} catching and logging all {@linkplain * RuntimeException runtime exceptions} thrown by the executor. */ + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private static void executeListener(Runnable runnable, Executor executor) { try { executor.execute(runnable); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception // Log it and keep going -- bad runnable and/or executor. Don't punish the other runnables if // we're given a bad one. We only catch RuntimeException because we want Errors to propagate // up. diff --git a/android/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java b/android/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java index 0b7d34e6ba4d..826374bad133 100644 --- a/android/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java +++ b/android/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java @@ -564,7 +564,9 @@ public Cancellable reschedule() { lock.lock(); try { toReturn = initializeOrUpdateCancellationDelegate(schedule); - } catch (RuntimeException | Error e) { + } catch (Throwable e) { + // Any Exception is either a RuntimeException or sneaky checked exception. + // // If an exception is thrown by the subclass then we need to make sure that the service // notices and transitions to the FAILED state. We do it by calling notifyFailed directly // because the service does not monitor the state of the future so if the exception is not diff --git a/android/guava/src/com/google/common/util/concurrent/ExecutionList.java b/android/guava/src/com/google/common/util/concurrent/ExecutionList.java index 645817c4af36..5f9dfc28ac21 100644 --- a/android/guava/src/com/google/common/util/concurrent/ExecutionList.java +++ b/android/guava/src/com/google/common/util/concurrent/ExecutionList.java @@ -140,10 +140,11 @@ public void execute() { * Submits the given runnable to the given {@link Executor} catching and logging all {@linkplain * RuntimeException runtime exceptions} thrown by the executor. */ + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private static void executeListener(Runnable runnable, Executor executor) { try { executor.execute(runnable); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception // Log it and keep going -- bad runnable and/or executor. Don't punish the other runnables if // we're given a bad one. We only catch RuntimeException because we want Errors to propagate // up. diff --git a/android/guava/src/com/google/common/util/concurrent/Futures.java b/android/guava/src/com/google/common/util/concurrent/Futures.java index e36ff391809c..5715f0a9f0e8 100644 --- a/android/guava/src/com/google/common/util/concurrent/Futures.java +++ b/android/guava/src/com/google/common/util/concurrent/Futures.java @@ -510,7 +510,8 @@ public O get(long timeout, TimeUnit unit) private O applyTransformation(I input) throws ExecutionException { try { return function.apply(input); - } catch (RuntimeException | Error t) { + } catch (Throwable t) { + // Any Exception is either a RuntimeException or sneaky checked exception. throw new ExecutionException(t); } } @@ -1091,7 +1092,8 @@ public void run() { } catch (ExecutionException e) { callback.onFailure(e.getCause()); return; - } catch (RuntimeException | Error e) { + } catch (Throwable e) { + // Any Exception is either a RuntimeException or sneaky checked exception. callback.onFailure(e); return; } diff --git a/android/guava/src/com/google/common/util/concurrent/ImmediateFuture.java b/android/guava/src/com/google/common/util/concurrent/ImmediateFuture.java index f09816c4e3cb..0a6e2303b877 100644 --- a/android/guava/src/com/google/common/util/concurrent/ImmediateFuture.java +++ b/android/guava/src/com/google/common/util/concurrent/ImmediateFuture.java @@ -42,12 +42,13 @@ class ImmediateFuture implements ListenableFuture } @Override + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception public void addListener(Runnable listener, Executor executor) { checkNotNull(listener, "Runnable was null."); checkNotNull(executor, "Executor was null."); try { executor.execute(listener); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception // ListenableFuture's contract is that it will not throw unchecked exceptions, so log the bad // runnable and/or executor and swallow it. log.log( diff --git a/android/guava/src/com/google/common/util/concurrent/ListenerCallQueue.java b/android/guava/src/com/google/common/util/concurrent/ListenerCallQueue.java index 4ef7ed36c056..897c95d5e187 100644 --- a/android/guava/src/com/google/common/util/concurrent/ListenerCallQueue.java +++ b/android/guava/src/com/google/common/util/concurrent/ListenerCallQueue.java @@ -159,6 +159,7 @@ synchronized void add(ListenerCallQueue.Event event, Object label) { * Dispatches all listeners {@linkplain #enqueue enqueued} prior to this call, serially and in * order. */ + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception void dispatch() { boolean scheduleEventRunner = false; synchronized (this) { @@ -170,7 +171,7 @@ void dispatch() { if (scheduleEventRunner) { try { executor.execute(this); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception // reset state in case of an error so that later dispatch calls will actually do something synchronized (this) { isThreadScheduled = false; @@ -186,6 +187,7 @@ void dispatch() { } @Override + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception public void run() { boolean stillRunning = true; try { @@ -206,7 +208,7 @@ public void run() { // Always run while _not_ holding the lock, to avoid deadlocks. try { nextToRun.call(listener); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception // Log it and keep going. logger.log( Level.SEVERE, diff --git a/android/guava/src/com/google/common/util/concurrent/Monitor.java b/android/guava/src/com/google/common/util/concurrent/Monitor.java index 5542b0bd5522..8ba45d49f315 100644 --- a/android/guava/src/com/google/common/util/concurrent/Monitor.java +++ b/android/guava/src/com/google/common/util/concurrent/Monitor.java @@ -1013,7 +1013,8 @@ private void signalNextWaiter() { private boolean isSatisfied(Guard guard) { try { return guard.isSatisfied(); - } catch (RuntimeException | Error throwable) { + } catch (Throwable throwable) { + // Any Exception is either a RuntimeException or sneaky checked exception. signalAllWaiters(); throw throwable; } diff --git a/android/guava/src/com/google/common/util/concurrent/MoreExecutors.java b/android/guava/src/com/google/common/util/concurrent/MoreExecutors.java index dba374014806..4c9bd2bd23e9 100644 --- a/android/guava/src/com/google/common/util/concurrent/MoreExecutors.java +++ b/android/guava/src/com/google/common/util/concurrent/MoreExecutors.java @@ -678,7 +678,8 @@ public NeverSuccessfulListenableFutureTask(Runnable delegate) { public void run() { try { delegate.run(); - } catch (RuntimeException | Error t) { + } catch (Throwable t) { + // Any Exception is either a RuntimeException or sneaky checked exception. setException(t); throw t; } diff --git a/android/guava/src/com/google/common/util/concurrent/SequentialExecutor.java b/android/guava/src/com/google/common/util/concurrent/SequentialExecutor.java index c842d7e07d56..224bd1f120cb 100644 --- a/android/guava/src/com/google/common/util/concurrent/SequentialExecutor.java +++ b/android/guava/src/com/google/common/util/concurrent/SequentialExecutor.java @@ -136,7 +136,8 @@ public String toString() { try { executor.execute(worker); - } catch (RuntimeException | Error t) { + } catch (Throwable t) { + // Any Exception is either a RuntimeException or sneaky checked exception. synchronized (queue) { boolean removed = (workerRunningState == IDLE || workerRunningState == QUEUING) @@ -202,6 +203,7 @@ public void run() { * will still be present. If the composed Executor is an ExecutorService, it can respond to * shutdown() by returning tasks queued on that Thread after {@link #worker} drains the queue. */ + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private void workOnQueue() { boolean interruptedDuringTask = false; boolean hasSetRunning = false; @@ -235,7 +237,7 @@ private void workOnQueue() { interruptedDuringTask |= Thread.interrupted(); try { task.run(); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception log.log(Level.SEVERE, "Exception while executing runnable " + task, e); } finally { task = null; diff --git a/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java b/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java index 9385acf5a9f8..6bf4c99d1b32 100644 --- a/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java @@ -20,6 +20,7 @@ import static com.google.common.base.StandardSystemProperty.OS_NAME; import static com.google.common.truth.Truth.assertThat; import static com.google.common.truth.Truth.assertWithMessage; +import static com.google.common.util.concurrent.MoreExecutors.directExecutor; import static org.junit.Assert.assertThrows; import com.google.common.annotations.GwtIncompatible; @@ -1056,6 +1057,25 @@ public void run() { t.join(); } + public void testCatchesUndeclaredThrowableFromListener() { + AbstractFuture f = new AbstractFuture() {}; + f.set("foo"); + f.addListener(() -> sneakyThrow(new SomeCheckedException()), directExecutor()); + } + + private static final class SomeCheckedException extends Exception {} + + /** Throws an undeclared checked exception. */ + private static void sneakyThrow(Throwable t) { + class SneakyThrower { + @SuppressWarnings("unchecked") // intentionally unsafe for test + void throwIt(Throwable t) throws T { + throw (T) t; + } + } + new SneakyThrower().throwIt(t); + } + public void testTrustedGetFailure_Completed() { SettableFuture future = SettableFuture.create(); future.set("261"); diff --git a/guava/src/com/google/common/util/concurrent/AbstractFuture.java b/guava/src/com/google/common/util/concurrent/AbstractFuture.java index 444b16cd8ea0..a044b39ae885 100644 --- a/guava/src/com/google/common/util/concurrent/AbstractFuture.java +++ b/guava/src/com/google/common/util/concurrent/AbstractFuture.java @@ -867,7 +867,9 @@ protected boolean setFuture(ListenableFuture future) { // since all we are doing is unpacking a completed future which should be fast. try { future.addListener(valueToSet, DirectExecutor.INSTANCE); - } catch (RuntimeException | Error t) { + } catch (Throwable t) { + // Any Exception is either a RuntimeException or sneaky checked exception. + // // addListener has thrown an exception! SetFuture.run can't throw any exceptions so this // must have been caused by addListener itself. The most likely explanation is a // misconfigured mock. Try to switch to Failure. @@ -1193,6 +1195,7 @@ protected String pendingToString() { return null; } + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private void addPendingString(StringBuilder builder) { // Capture current builder length so it can be truncated if this future ends up completing while // the toString is being calculated @@ -1209,7 +1212,9 @@ private void addPendingString(StringBuilder builder) { String pendingDescription; try { pendingDescription = Strings.emptyToNull(pendingToString()); - } catch (RuntimeException | StackOverflowError e) { + } catch (Exception | StackOverflowError e) { + // Any Exception is either a RuntimeException or sneaky checked exception. + // // Don't call getMessage or toString() on the exception, in case the exception thrown by the // subclass is implemented with bugs similar to the subclass. pendingDescription = "Exception thrown from implementation: " + e.getClass(); @@ -1228,6 +1233,7 @@ private void addPendingString(StringBuilder builder) { } } + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private void addDoneString(StringBuilder builder) { try { V value = getUninterruptibly(this); @@ -1238,7 +1244,7 @@ private void addDoneString(StringBuilder builder) { builder.append("FAILURE, cause=[").append(e.getCause()).append("]"); } catch (CancellationException e) { builder.append("CANCELLED"); // shouldn't be reachable - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception builder.append("UNKNOWN, cause=[").append(e.getClass()).append(" thrown from get()]"); } } @@ -1262,6 +1268,7 @@ private void appendResultObject(StringBuilder builder, @CheckForNull Object o) { } /** Helper for printing user supplied objects into our toString method. */ + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private void appendUserObject(StringBuilder builder, @CheckForNull Object o) { // This is some basic recursion detection for when people create cycles via set/setFuture or // when deep chains of futures exist resulting in a StackOverflowException. We could detect @@ -1273,7 +1280,9 @@ private void appendUserObject(StringBuilder builder, @CheckForNull Object o) { } else { builder.append(o); } - } catch (RuntimeException | StackOverflowError e) { + } catch (Exception | StackOverflowError e) { + // Any Exception is either a RuntimeException or sneaky checked exception. + // // Don't call getMessage or toString() on the exception, in case the exception thrown by the // user object is implemented with bugs similar to the user object. builder.append("Exception thrown from implementation: ").append(e.getClass()); @@ -1284,10 +1293,11 @@ private void appendUserObject(StringBuilder builder, @CheckForNull Object o) { * Submits the given runnable to the given {@link Executor} catching and logging all {@linkplain * RuntimeException runtime exceptions} thrown by the executor. */ + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private static void executeListener(Runnable runnable, Executor executor) { try { executor.execute(runnable); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception // Log it and keep going -- bad runnable and/or executor. Don't punish the other runnables if // we're given a bad one. We only catch RuntimeException because we want Errors to propagate // up. diff --git a/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java b/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java index 164a6dbb435d..d6865f0a8c4a 100644 --- a/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java +++ b/guava/src/com/google/common/util/concurrent/AbstractScheduledService.java @@ -606,7 +606,9 @@ public Cancellable reschedule() { lock.lock(); try { toReturn = initializeOrUpdateCancellationDelegate(schedule); - } catch (RuntimeException | Error e) { + } catch (Throwable e) { + // Any Exception is either a RuntimeException or sneaky checked exception. + // // If an exception is thrown by the subclass then we need to make sure that the service // notices and transitions to the FAILED state. We do it by calling notifyFailed directly // because the service does not monitor the state of the future so if the exception is not diff --git a/guava/src/com/google/common/util/concurrent/ExecutionList.java b/guava/src/com/google/common/util/concurrent/ExecutionList.java index 645817c4af36..5f9dfc28ac21 100644 --- a/guava/src/com/google/common/util/concurrent/ExecutionList.java +++ b/guava/src/com/google/common/util/concurrent/ExecutionList.java @@ -140,10 +140,11 @@ public void execute() { * Submits the given runnable to the given {@link Executor} catching and logging all {@linkplain * RuntimeException runtime exceptions} thrown by the executor. */ + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private static void executeListener(Runnable runnable, Executor executor) { try { executor.execute(runnable); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception // Log it and keep going -- bad runnable and/or executor. Don't punish the other runnables if // we're given a bad one. We only catch RuntimeException because we want Errors to propagate // up. diff --git a/guava/src/com/google/common/util/concurrent/Futures.java b/guava/src/com/google/common/util/concurrent/Futures.java index c073d1d20b09..6e8d20193eb5 100644 --- a/guava/src/com/google/common/util/concurrent/Futures.java +++ b/guava/src/com/google/common/util/concurrent/Futures.java @@ -545,7 +545,8 @@ public O get(long timeout, TimeUnit unit) private O applyTransformation(I input) throws ExecutionException { try { return function.apply(input); - } catch (RuntimeException | Error t) { + } catch (Throwable t) { + // Any Exception is either a RuntimeException or sneaky checked exception. throw new ExecutionException(t); } } @@ -1126,7 +1127,8 @@ public void run() { } catch (ExecutionException e) { callback.onFailure(e.getCause()); return; - } catch (RuntimeException | Error e) { + } catch (Throwable e) { + // Any Exception is either a RuntimeException or sneaky checked exception. callback.onFailure(e); return; } diff --git a/guava/src/com/google/common/util/concurrent/ImmediateFuture.java b/guava/src/com/google/common/util/concurrent/ImmediateFuture.java index f09816c4e3cb..0a6e2303b877 100644 --- a/guava/src/com/google/common/util/concurrent/ImmediateFuture.java +++ b/guava/src/com/google/common/util/concurrent/ImmediateFuture.java @@ -42,12 +42,13 @@ class ImmediateFuture implements ListenableFuture } @Override + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception public void addListener(Runnable listener, Executor executor) { checkNotNull(listener, "Runnable was null."); checkNotNull(executor, "Executor was null."); try { executor.execute(listener); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception // ListenableFuture's contract is that it will not throw unchecked exceptions, so log the bad // runnable and/or executor and swallow it. log.log( diff --git a/guava/src/com/google/common/util/concurrent/ListenerCallQueue.java b/guava/src/com/google/common/util/concurrent/ListenerCallQueue.java index 4ef7ed36c056..897c95d5e187 100644 --- a/guava/src/com/google/common/util/concurrent/ListenerCallQueue.java +++ b/guava/src/com/google/common/util/concurrent/ListenerCallQueue.java @@ -159,6 +159,7 @@ synchronized void add(ListenerCallQueue.Event event, Object label) { * Dispatches all listeners {@linkplain #enqueue enqueued} prior to this call, serially and in * order. */ + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception void dispatch() { boolean scheduleEventRunner = false; synchronized (this) { @@ -170,7 +171,7 @@ void dispatch() { if (scheduleEventRunner) { try { executor.execute(this); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception // reset state in case of an error so that later dispatch calls will actually do something synchronized (this) { isThreadScheduled = false; @@ -186,6 +187,7 @@ void dispatch() { } @Override + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception public void run() { boolean stillRunning = true; try { @@ -206,7 +208,7 @@ public void run() { // Always run while _not_ holding the lock, to avoid deadlocks. try { nextToRun.call(listener); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception // Log it and keep going. logger.log( Level.SEVERE, diff --git a/guava/src/com/google/common/util/concurrent/Monitor.java b/guava/src/com/google/common/util/concurrent/Monitor.java index 2ed31eda4ecc..1abbc6405319 100644 --- a/guava/src/com/google/common/util/concurrent/Monitor.java +++ b/guava/src/com/google/common/util/concurrent/Monitor.java @@ -1123,7 +1123,8 @@ private void signalNextWaiter() { private boolean isSatisfied(Guard guard) { try { return guard.isSatisfied(); - } catch (RuntimeException | Error throwable) { + } catch (Throwable throwable) { + // Any Exception is either a RuntimeException or sneaky checked exception. signalAllWaiters(); throw throwable; } diff --git a/guava/src/com/google/common/util/concurrent/MoreExecutors.java b/guava/src/com/google/common/util/concurrent/MoreExecutors.java index ea3536957038..824c2001538e 100644 --- a/guava/src/com/google/common/util/concurrent/MoreExecutors.java +++ b/guava/src/com/google/common/util/concurrent/MoreExecutors.java @@ -739,7 +739,8 @@ public NeverSuccessfulListenableFutureTask(Runnable delegate) { public void run() { try { delegate.run(); - } catch (RuntimeException | Error t) { + } catch (Throwable t) { + // Any Exception is either a RuntimeException or sneaky checked exception. setException(t); throw t; } diff --git a/guava/src/com/google/common/util/concurrent/SequentialExecutor.java b/guava/src/com/google/common/util/concurrent/SequentialExecutor.java index c842d7e07d56..224bd1f120cb 100644 --- a/guava/src/com/google/common/util/concurrent/SequentialExecutor.java +++ b/guava/src/com/google/common/util/concurrent/SequentialExecutor.java @@ -136,7 +136,8 @@ public String toString() { try { executor.execute(worker); - } catch (RuntimeException | Error t) { + } catch (Throwable t) { + // Any Exception is either a RuntimeException or sneaky checked exception. synchronized (queue) { boolean removed = (workerRunningState == IDLE || workerRunningState == QUEUING) @@ -202,6 +203,7 @@ public void run() { * will still be present. If the composed Executor is an ExecutorService, it can respond to * shutdown() by returning tasks queued on that Thread after {@link #worker} drains the queue. */ + @SuppressWarnings("CatchingUnchecked") // sneaky checked exception private void workOnQueue() { boolean interruptedDuringTask = false; boolean hasSetRunning = false; @@ -235,7 +237,7 @@ private void workOnQueue() { interruptedDuringTask |= Thread.interrupted(); try { task.run(); - } catch (RuntimeException e) { + } catch (Exception e) { // sneaky checked exception log.log(Level.SEVERE, "Exception while executing runnable " + task, e); } finally { task = null; From 8bdd307934b5e8147238b79f016ac040b102bd59 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 5 Dec 2023 13:21:42 -0800 Subject: [PATCH 060/216] Internal change. RELNOTES=n/a PiperOrigin-RevId: 588169800 --- .../guava/src/com/google/common/base/PatternCompiler.java | 7 +++++++ guava/src/com/google/common/base/PatternCompiler.java | 7 +++++++ 2 files changed, 14 insertions(+) diff --git a/android/guava/src/com/google/common/base/PatternCompiler.java b/android/guava/src/com/google/common/base/PatternCompiler.java index 6a7b620b2569..32505217fbc7 100644 --- a/android/guava/src/com/google/common/base/PatternCompiler.java +++ b/android/guava/src/com/google/common/base/PatternCompiler.java @@ -16,6 +16,7 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; +import com.google.errorprone.annotations.RestrictedApi; /** * Pluggable interface for compiling a regex pattern. By default this package uses the {@code @@ -31,11 +32,17 @@ interface PatternCompiler { * * @throws IllegalArgumentException if the pattern is invalid */ + @RestrictedApi( + explanation = "PatternCompiler is an implementation detail of com.google.common.base", + allowedOnPath = ".*/com/google/common/base/.*") CommonPattern compile(String pattern); /** * Returns {@code true} if the regex implementation behaves like Perl -- notably, by supporting * possessive quantifiers but also being susceptible to catastrophic backtracking. */ + @RestrictedApi( + explanation = "PatternCompiler is an implementation detail of com.google.common.base", + allowedOnPath = ".*/com/google/common/base/.*") boolean isPcreLike(); } diff --git a/guava/src/com/google/common/base/PatternCompiler.java b/guava/src/com/google/common/base/PatternCompiler.java index 6a7b620b2569..32505217fbc7 100644 --- a/guava/src/com/google/common/base/PatternCompiler.java +++ b/guava/src/com/google/common/base/PatternCompiler.java @@ -16,6 +16,7 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; +import com.google.errorprone.annotations.RestrictedApi; /** * Pluggable interface for compiling a regex pattern. By default this package uses the {@code @@ -31,11 +32,17 @@ interface PatternCompiler { * * @throws IllegalArgumentException if the pattern is invalid */ + @RestrictedApi( + explanation = "PatternCompiler is an implementation detail of com.google.common.base", + allowedOnPath = ".*/com/google/common/base/.*") CommonPattern compile(String pattern); /** * Returns {@code true} if the regex implementation behaves like Perl -- notably, by supporting * possessive quantifiers but also being susceptible to catastrophic backtracking. */ + @RestrictedApi( + explanation = "PatternCompiler is an implementation detail of com.google.common.base", + allowedOnPath = ".*/com/google/common/base/.*") boolean isPcreLike(); } From d5108721bf4b848b6473178e195d655d8801228f Mon Sep 17 00:00:00 2001 From: Julien Dramaix Date: Wed, 6 Dec 2023 17:35:58 -0800 Subject: [PATCH 061/216] Make the J2CL version of `ExtraObjectsMethodsForWeb` public. RELNOTES=n/a PiperOrigin-RevId: 588595558 --- .../super/com/google/common/base/ExtraObjectsMethodsForWeb.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/ExtraObjectsMethodsForWeb.java b/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/ExtraObjectsMethodsForWeb.java index 9e3c89e2b079..5cb5febc392e 100644 --- a/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/ExtraObjectsMethodsForWeb.java +++ b/guava-gwt/src-super/com/google/common/base/super/com/google/common/base/ExtraObjectsMethodsForWeb.java @@ -17,7 +17,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; /** Holder for extra methods of {@code Objects} only in web. */ -abstract class ExtraObjectsMethodsForWeb { +public abstract class ExtraObjectsMethodsForWeb { public static boolean equal(@Nullable String a, @Nullable String b) { return a == b; } From 1512730820a99e329a475b7143b7295775ef26ba Mon Sep 17 00:00:00 2001 From: Christian Ortlepp Date: Thu, 7 Dec 2023 06:57:27 -0800 Subject: [PATCH 062/216] Make `LocalCache` not use `synchronized` to detect recursive loads. Fixes #6851 Fixes #6845 RELNOTES=n/a PiperOrigin-RevId: 588778069 --- .../google/common/cache/LocalCacheTest.java | 79 +++++++++++++++++++ .../com/google/common/cache/LocalCache.java | 31 ++++++-- .../google/common/cache/LocalCacheTest.java | 79 +++++++++++++++++++ .../com/google/common/cache/LocalCache.java | 31 ++++++-- 4 files changed, 206 insertions(+), 14 deletions(-) diff --git a/android/guava-tests/test/com/google/common/cache/LocalCacheTest.java b/android/guava-tests/test/com/google/common/cache/LocalCacheTest.java index 431c962f4792..cd1d340d5ce1 100644 --- a/android/guava-tests/test/com/google/common/cache/LocalCacheTest.java +++ b/android/guava-tests/test/com/google/common/cache/LocalCacheTest.java @@ -58,6 +58,7 @@ import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; import com.google.common.testing.TestLogHandler; +import com.google.common.util.concurrent.UncheckedExecutionException; import java.io.Serializable; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; @@ -2639,8 +2640,86 @@ public void testSerializationProxyManual() { assertEquals(localCacheTwo.ticker, localCacheThree.ticker); } + public void testLoadDifferentKeyInLoader() throws ExecutionException, InterruptedException { + LocalCache cache = makeLocalCache(createCacheBuilder()); + String key1 = "key1"; + String key2 = "key2"; + + assertEquals( + key2, + cache.get( + key1, + new CacheLoader() { + @Override + public String load(String key) throws Exception { + return cache.get(key2, identityLoader()); // loads a different key, should work + } + })); + } + + public void testRecursiveLoad() throws InterruptedException { + LocalCache cache = makeLocalCache(createCacheBuilder()); + String key = "key"; + CacheLoader loader = + new CacheLoader() { + @Override + public String load(String key) throws Exception { + return cache.get(key, identityLoader()); // recursive load, this should fail + } + }; + testLoadThrows(key, cache, loader); + } + + public void testRecursiveLoadWithProxy() throws InterruptedException { + String key = "key"; + String otherKey = "otherKey"; + LocalCache cache = makeLocalCache(createCacheBuilder()); + CacheLoader loader = + new CacheLoader() { + @Override + public String load(String key) throws Exception { + return cache.get( + key, + identityLoader()); // recursive load (same as the initial one), this should fail + } + }; + CacheLoader proxyLoader = + new CacheLoader() { + @Override + public String load(String key) throws Exception { + return cache.get(otherKey, loader); // loads another key, is ok + } + }; + testLoadThrows(key, cache, proxyLoader); + } + // utility methods + private void testLoadThrows( + String key, LocalCache cache, CacheLoader loader) + throws InterruptedException { + CountDownLatch doneSignal = new CountDownLatch(1); + Thread thread = + new Thread( + () -> { + try { + cache.get(key, loader); + } catch (UncheckedExecutionException | ExecutionException e) { + doneSignal.countDown(); + } + }); + thread.start(); + + boolean done = doneSignal.await(1, TimeUnit.SECONDS); + if (!done) { + StringBuilder builder = new StringBuilder(); + for (StackTraceElement trace : thread.getStackTrace()) { + builder.append("\tat ").append(trace).append('\n'); + } + fail(builder.toString()); + } + } + /** * Returns an iterable containing all combinations of maximumSize, expireAfterAccess/Write, * weakKeys and weak/softValues. diff --git a/android/guava/src/com/google/common/cache/LocalCache.java b/android/guava/src/com/google/common/cache/LocalCache.java index f0a7699e0700..6fb3945df7ee 100644 --- a/android/guava/src/com/google/common/cache/LocalCache.java +++ b/android/guava/src/com/google/common/cache/LocalCache.java @@ -2180,12 +2180,7 @@ V lockedGetOrLoad(K key, int hash, CacheLoader loader) throws Exec if (createNewEntry) { try { - // Synchronizes on the entry to allow failing fast when a recursive load is - // detected. This may be circumvented when an entry is copied, but will fail fast most - // of the time. - synchronized (e) { - return loadSync(key, hash, loadingValueReference, loader); - } + return loadSync(key, hash, loadingValueReference, loader); } finally { statsCounter.recordMisses(1); } @@ -2201,7 +2196,22 @@ V waitForLoadingValue(ReferenceEntry e, K key, ValueReference valueR throw new AssertionError(); } - checkState(!Thread.holdsLock(e), "Recursive load of: %s", key); + // As of this writing, the only prod ValueReference implementation for which isLoading() is + // true is LoadingValueReference. (Note, however, that not all LoadingValueReference instances + // have isLoading()==true: LoadingValueReference has a subclass, ComputingValueReference, for + // which isLoading() is false!) However, that might change, and we already have a *test* + // implementation for which it doesn't hold. So we check instanceof to be safe. + if (valueReference instanceof LoadingValueReference) { + // We check whether the thread that is loading the entry is our current thread, which would + // mean that we are both loading and waiting for the entry. In this case, we fail fast + // instead of deadlocking. + checkState( + ((LoadingValueReference) valueReference).getLoadingThread() + != Thread.currentThread(), + "Recursive load of: %s", + key); + } + // don't consider expiration as we're concurrent with loading try { V value = valueReference.waitForValue(); @@ -3427,6 +3437,8 @@ static class LoadingValueReference implements ValueReference { final SettableFuture futureValue = SettableFuture.create(); final Stopwatch stopwatch = Stopwatch.createUnstarted(); + final Thread loadingThread; + public LoadingValueReference() { this(LocalCache.unset()); } @@ -3438,6 +3450,7 @@ public LoadingValueReference() { */ public LoadingValueReference(ValueReference oldValue) { this.oldValue = oldValue; + this.loadingThread = Thread.currentThread(); } @Override @@ -3541,6 +3554,10 @@ public ValueReference copyFor( ReferenceQueue queue, @CheckForNull V value, ReferenceEntry entry) { return this; } + + Thread getLoadingThread() { + return this.loadingThread; + } } // Queues diff --git a/guava-tests/test/com/google/common/cache/LocalCacheTest.java b/guava-tests/test/com/google/common/cache/LocalCacheTest.java index 7cc67e840dc2..a16c0ab37039 100644 --- a/guava-tests/test/com/google/common/cache/LocalCacheTest.java +++ b/guava-tests/test/com/google/common/cache/LocalCacheTest.java @@ -58,6 +58,7 @@ import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; import com.google.common.testing.TestLogHandler; +import com.google.common.util.concurrent.UncheckedExecutionException; import java.io.Serializable; import java.lang.ref.Reference; import java.lang.ref.ReferenceQueue; @@ -2688,8 +2689,86 @@ public void testSerializationProxyManual() { assertEquals(localCacheTwo.ticker, localCacheThree.ticker); } + public void testLoadDifferentKeyInLoader() throws ExecutionException, InterruptedException { + LocalCache cache = makeLocalCache(createCacheBuilder()); + String key1 = "key1"; + String key2 = "key2"; + + assertEquals( + key2, + cache.get( + key1, + new CacheLoader() { + @Override + public String load(String key) throws Exception { + return cache.get(key2, identityLoader()); // loads a different key, should work + } + })); + } + + public void testRecursiveLoad() throws InterruptedException { + LocalCache cache = makeLocalCache(createCacheBuilder()); + String key = "key"; + CacheLoader loader = + new CacheLoader() { + @Override + public String load(String key) throws Exception { + return cache.get(key, identityLoader()); // recursive load, this should fail + } + }; + testLoadThrows(key, cache, loader); + } + + public void testRecursiveLoadWithProxy() throws InterruptedException { + String key = "key"; + String otherKey = "otherKey"; + LocalCache cache = makeLocalCache(createCacheBuilder()); + CacheLoader loader = + new CacheLoader() { + @Override + public String load(String key) throws Exception { + return cache.get( + key, + identityLoader()); // recursive load (same as the initial one), this should fail + } + }; + CacheLoader proxyLoader = + new CacheLoader() { + @Override + public String load(String key) throws Exception { + return cache.get(otherKey, loader); // loads another key, is ok + } + }; + testLoadThrows(key, cache, proxyLoader); + } + // utility methods + private void testLoadThrows( + String key, LocalCache cache, CacheLoader loader) + throws InterruptedException { + CountDownLatch doneSignal = new CountDownLatch(1); + Thread thread = + new Thread( + () -> { + try { + cache.get(key, loader); + } catch (UncheckedExecutionException | ExecutionException e) { + doneSignal.countDown(); + } + }); + thread.start(); + + boolean done = doneSignal.await(1, TimeUnit.SECONDS); + if (!done) { + StringBuilder builder = new StringBuilder(); + for (StackTraceElement trace : thread.getStackTrace()) { + builder.append("\tat ").append(trace).append('\n'); + } + fail(builder.toString()); + } + } + /** * Returns an iterable containing all combinations of maximumSize, expireAfterAccess/Write, * weakKeys and weak/softValues. diff --git a/guava/src/com/google/common/cache/LocalCache.java b/guava/src/com/google/common/cache/LocalCache.java index a38543dbb7b6..dd3590357ed0 100644 --- a/guava/src/com/google/common/cache/LocalCache.java +++ b/guava/src/com/google/common/cache/LocalCache.java @@ -2184,12 +2184,7 @@ V lockedGetOrLoad(K key, int hash, CacheLoader loader) throws Exec if (createNewEntry) { try { - // Synchronizes on the entry to allow failing fast when a recursive load is - // detected. This may be circumvented when an entry is copied, but will fail fast most - // of the time. - synchronized (e) { - return loadSync(key, hash, loadingValueReference, loader); - } + return loadSync(key, hash, loadingValueReference, loader); } finally { statsCounter.recordMisses(1); } @@ -2205,7 +2200,22 @@ V waitForLoadingValue(ReferenceEntry e, K key, ValueReference valueR throw new AssertionError(); } - checkState(!Thread.holdsLock(e), "Recursive load of: %s", key); + // As of this writing, the only prod ValueReference implementation for which isLoading() is + // true is LoadingValueReference. (Note, however, that not all LoadingValueReference instances + // have isLoading()==true: LoadingValueReference has a subclass, ComputingValueReference, for + // which isLoading() is false!) However, that might change, and we already have a *test* + // implementation for which it doesn't hold. So we check instanceof to be safe. + if (valueReference instanceof LoadingValueReference) { + // We check whether the thread that is loading the entry is our current thread, which would + // mean that we are both loading and waiting for the entry. In this case, we fail fast + // instead of deadlocking. + checkState( + ((LoadingValueReference) valueReference).getLoadingThread() + != Thread.currentThread(), + "Recursive load of: %s", + key); + } + // don't consider expiration as we're concurrent with loading try { V value = valueReference.waitForValue(); @@ -3517,12 +3527,15 @@ static class LoadingValueReference implements ValueReference { final SettableFuture futureValue = SettableFuture.create(); final Stopwatch stopwatch = Stopwatch.createUnstarted(); + final Thread loadingThread; + public LoadingValueReference() { this(null); } public LoadingValueReference(@CheckForNull ValueReference oldValue) { this.oldValue = (oldValue == null) ? LocalCache.unset() : oldValue; + this.loadingThread = Thread.currentThread(); } @Override @@ -3647,6 +3660,10 @@ public ValueReference copyFor( ReferenceQueue queue, @CheckForNull V value, ReferenceEntry entry) { return this; } + + Thread getLoadingThread() { + return this.loadingThread; + } } static class ComputingValueReference extends LoadingValueReference { From 64a84357b29cfb8569dcf7a658a12b5bc2360678 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 7 Dec 2023 08:15:22 -0800 Subject: [PATCH 063/216] Bump github/codeql-action from 2.22.8 to 2.22.9 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 2.22.8 to 2.22.9. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/407ffafae6a767df3e0230c3df91b6443ae8df75...c0d1daa7f7e14667747d73a7dbbe8c074bc8bfe2) Fixes #6863 RELNOTES=n/a PiperOrigin-RevId: 588797860 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 5a782b8d4f4c..9e5ab2fa289c 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@407ffafae6a767df3e0230c3df91b6443ae8df75 # v2.22.8 + uses: github/codeql-action/upload-sarif@c0d1daa7f7e14667747d73a7dbbe8c074bc8bfe2 # v2.22.9 with: sarif_file: results.sarif From 73dbf7ef26db8db2593056339be38bd00daf9584 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Fri, 8 Dec 2023 10:56:32 -0800 Subject: [PATCH 064/216] Include our `Collector` APIs as package-private in our open-source Android codebase. This is a test before exposing them as `public`. We have successfully used them inside Google, but we want to test as much as we can before adding them to our open-source project, since we don't want to have to remove them later. Package-private APIs are of course of no use to users. However, there mere existence may be enough to cause problems for build tools or for Android apps that perform runtime reflection on the Guava classes (which incidentally we do not recommend, for this and other reasons). Our hope is that such problems are rare to nonexistent or, failing that, that they can be solved by enabling [library desugaring](https://developer.android.com/studio/write/java8-support#library-desugaring) for any affected apps. Please do report any problems that this change causes. The next step before exposing the APIs as `public` will likely be to expose an override of `spliterator()`. Since that API will be an override, it is more likely to be preserved by optimizers, which might remove the unused `Collector` APIs. (Sadly, we can't prevent that by inserting a usage of the `Collector` APIs in "real code" because that would require all our users to enable library desugaring.) (Originally, I'd planned to expose `spliterator()` immediately, as discussed in cl/576629272. In fact, that CL _did_ expose the method. However, we never released it. (And even if we had, I think we could remove it, since either it's an override (in which case calls to it will continue to work after it's removed) or it's not (in which case Java 8 APIs aren't available, so calls to it would never have worked.) But I think the approach of this current CL is more conservative.) If all goes well, we'll then expose the APIs as `public`. We might considering using `@Beta` for a time, but we'd be unlikely to remove them, so again, please report any problems that this change or any future Java-8-API change causes you. (This CL requires lots of `@IgnoreJRERequirement` annotations. In an ideal world, we'd run Animal Sniffer twice: one run that allows APIs that require library desugaring and one that doesn't, with our classes' using a separate `@IgnoreJRERequirement`-style annotation for APIs like these.) This change is further progress toward https://github.com/google/guava/issues/6567. RELNOTES=This version of `guava-android` contains some package-private methods whose signature includes the Java 8 `Collector` API. This is a test to identify any problems before we expose those methods publicly to users. Please report any problems that you encounter. PiperOrigin-RevId: 589183735 --- .../google/common/collect/Comparators.java | 62 +++++++ .../google/common/collect/ImmutableBiMap.java | 59 ++++++ .../common/collect/ImmutableCollection.java | 15 -- .../google/common/collect/ImmutableList.java | 11 ++ .../common/collect/ImmutableListMultimap.java | 76 ++++++++ .../google/common/collect/ImmutableMap.java | 42 +++++ .../common/collect/ImmutableMultiset.java | 30 +++ .../common/collect/ImmutableRangeMap.java | 16 ++ .../common/collect/ImmutableRangeSet.java | 13 ++ .../google/common/collect/ImmutableSet.java | 17 +- .../common/collect/ImmutableSetMultimap.java | 85 +++++++++ .../common/collect/ImmutableSortedMap.java | 81 ++++++++ .../collect/ImmutableSortedMultiset.java | 98 ++++++++++ .../common/collect/ImmutableSortedSet.java | 29 +++ .../google/common/collect/ImmutableTable.java | 43 +++++ .../src/com/google/common/collect/Maps.java | 44 +++++ .../google/common/collect/MoreCollectors.java | 175 ++++++++++++++++++ .../com/google/common/collect/Multimaps.java | 96 ++++++++++ .../com/google/common/collect/Multisets.java | 29 +++ .../src/com/google/common/collect/Sets.java | 12 ++ .../src/com/google/common/collect/Tables.java | 59 ++++++ 21 files changed, 1072 insertions(+), 20 deletions(-) create mode 100644 android/guava/src/com/google/common/collect/MoreCollectors.java diff --git a/android/guava/src/com/google/common/collect/Comparators.java b/android/guava/src/com/google/common/collect/Comparators.java index 0c79a8c29b34..7ada5e538105 100644 --- a/android/guava/src/com/google/common/collect/Comparators.java +++ b/android/guava/src/com/google/common/collect/Comparators.java @@ -17,10 +17,13 @@ package com.google.common.collect; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.collect.CollectPreconditions.checkNonnegative; import com.google.common.annotations.GwtCompatible; import java.util.Comparator; import java.util.Iterator; +import java.util.List; +import java.util.stream.Collector; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -106,6 +109,65 @@ private Comparators() {} return true; } + /** + * Returns a {@code Collector} that returns the {@code k} smallest (relative to the specified + * {@code Comparator}) input elements, in ascending order, as an unmodifiable {@code List}. Ties + * are broken arbitrarily. + * + *

For example: + * + *

{@code
+   * Stream.of("foo", "quux", "banana", "elephant")
+   *     .collect(least(2, comparingInt(String::length)))
+   * // returns {"foo", "quux"}
+   * }
+ * + *

This {@code Collector} uses O(k) memory and takes expected time O(n) (worst-case O(n log + * k)), as opposed to e.g. {@code Stream.sorted(comparator).limit(k)}, which currently takes O(n + * log n) time and O(n) space. + * + * @throws IllegalArgumentException if {@code k < 0} + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> least( + int k, Comparator comparator) { + checkNonnegative(k, "k"); + checkNotNull(comparator); + return Collector.of( + () -> TopKSelector.least(k, comparator), + TopKSelector::offer, + TopKSelector::combine, + TopKSelector::topK, + Collector.Characteristics.UNORDERED); + } + + /** + * Returns a {@code Collector} that returns the {@code k} greatest (relative to the specified + * {@code Comparator}) input elements, in descending order, as an unmodifiable {@code List}. Ties + * are broken arbitrarily. + * + *

For example: + * + *

{@code
+   * Stream.of("foo", "quux", "banana", "elephant")
+   *     .collect(greatest(2, comparingInt(String::length)))
+   * // returns {"elephant", "banana"}
+   * }
+ * + *

This {@code Collector} uses O(k) memory and takes expected time O(n) (worst-case O(n log + * k)), as opposed to e.g. {@code Stream.sorted(comparator.reversed()).limit(k)}, which currently + * takes O(n log n) time and O(n) space. + * + * @throws IllegalArgumentException if {@code k < 0} + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> greatest( + int k, Comparator comparator) { + return least(k, comparator.reversed()); + } + /** * Returns the minimum of the two values. If the values compare as 0, the first is returned. * diff --git a/android/guava/src/com/google/common/collect/ImmutableBiMap.java b/android/guava/src/com/google/common/collect/ImmutableBiMap.java index b40df1b5eb61..d18d5b6f1ff0 100644 --- a/android/guava/src/com/google/common/collect/ImmutableBiMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableBiMap.java @@ -29,7 +29,12 @@ import java.util.Collection; import java.util.Comparator; import java.util.Map; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Collectors; import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A {@link BiMap} whose contents will never change, with many other important properties detailed @@ -42,6 +47,24 @@ @ElementTypesAreNonnullByDefault public abstract class ImmutableBiMap extends ImmutableMap implements BiMap { + /** + * Returns a {@link Collector} that accumulates elements into an {@code ImmutableBiMap} whose keys + * and values are the result of applying the provided mapping functions to the input elements. + * Entries appear in the result {@code ImmutableBiMap} in encounter order. + * + *

If the mapped keys or values contain duplicates (according to {@link + * Object#equals(Object)}), an {@code IllegalArgumentException} is thrown when the collection + * operation is performed. (This differs from the {@code Collector} returned by {@link + * Collectors#toMap(Function, Function)}, which throws an {@code IllegalStateException}.) + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableBiMap( + Function keyFunction, + Function valueFunction) { + return CollectCollectors.toImmutableBiMap(keyFunction, valueFunction); + } + /** * Returns the empty bimap. * @@ -592,5 +615,41 @@ private void readObject(ObjectInputStream stream) throws InvalidObjectException throw new InvalidObjectException("Use SerializedForm"); } + /** + * Not supported. Use {@link #toImmutableBiMap} instead. This method exists only to hide {@link + * ImmutableMap#toImmutableMap(Function, Function)} from consumers of {@code ImmutableBiMap}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableBiMap#toImmutableBiMap}. + */ + @Deprecated + @DoNotCall("Use toImmutableBiMap") + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableMap( + Function keyFunction, + Function valueFunction) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. This method does not make sense for {@code BiMap}. This method exists only to + * hide {@link ImmutableMap#toImmutableMap(Function, Function, BinaryOperator)} from consumers of + * {@code ImmutableBiMap}. + * + * @throws UnsupportedOperationException always + * @deprecated + */ + @Deprecated + @DoNotCall("Use toImmutableBiMap") + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableMap( + Function keyFunction, + Function valueFunction, + BinaryOperator mergeFunction) { + throw new UnsupportedOperationException(); + } + private static final long serialVersionUID = 0xdecaf; } diff --git a/android/guava/src/com/google/common/collect/ImmutableCollection.java b/android/guava/src/com/google/common/collect/ImmutableCollection.java index c8167e8f61cc..1da069a2f19b 100644 --- a/android/guava/src/com/google/common/collect/ImmutableCollection.java +++ b/android/guava/src/com/google/common/collect/ImmutableCollection.java @@ -36,8 +36,6 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; -import java.util.Spliterator; -import java.util.Spliterators; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -178,11 +176,6 @@ public abstract class ImmutableCollection extends AbstractCollection imple * These are properties of the collection as a whole; SIZED and SUBSIZED are more properties of * the spliterator implementation. */ - @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) - // @IgnoreJRERequirement is not necessary because this compiles down to a constant. - // (which is fortunate because Animal Sniffer doesn't look for @IgnoreJRERequirement on fields) - static final int SPLITERATOR_CHARACTERISTICS = - Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.ORDERED; ImmutableCollection() {} @@ -190,14 +183,6 @@ public abstract class ImmutableCollection extends AbstractCollection imple @Override public abstract UnmodifiableIterator iterator(); - @Override - @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) - @IgnoreJRERequirement // used only from APIs with Java 8 types in them - // (not used within guava-android as of this writing, but we include it in the jar as a test) - public Spliterator spliterator() { - return Spliterators.spliterator(this, SPLITERATOR_CHARACTERISTICS); - } - private static final Object[] EMPTY_ARRAY = {}; @Override diff --git a/android/guava/src/com/google/common/collect/ImmutableList.java b/android/guava/src/com/google/common/collect/ImmutableList.java index 9bf354580c1c..940bf96c2967 100644 --- a/android/guava/src/com/google/common/collect/ImmutableList.java +++ b/android/guava/src/com/google/common/collect/ImmutableList.java @@ -41,6 +41,7 @@ import java.util.Iterator; import java.util.List; import java.util.RandomAccess; +import java.util.stream.Collector; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -62,6 +63,16 @@ public abstract class ImmutableList extends ImmutableCollection implements List, RandomAccess { + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code + * ImmutableList}, in encounter order. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableList() { + return CollectCollectors.toImmutableList(); + } + /** * Returns the empty immutable list. This list behaves and performs comparably to {@link * Collections#emptyList}, and is preferable mainly for consistency and maintainability of your diff --git a/android/guava/src/com/google/common/collect/ImmutableListMultimap.java b/android/guava/src/com/google/common/collect/ImmutableListMultimap.java index f0d107aa8e04..deab19d8a178 100644 --- a/android/guava/src/com/google/common/collect/ImmutableListMultimap.java +++ b/android/guava/src/com/google/common/collect/ImmutableListMultimap.java @@ -33,7 +33,11 @@ import java.util.Comparator; import java.util.Map; import java.util.Map.Entry; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Stream; import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A {@link ListMultimap} whose contents will never change, with many other important properties @@ -49,6 +53,78 @@ @ElementTypesAreNonnullByDefault public class ImmutableListMultimap extends ImmutableMultimap implements ListMultimap { + /** + * Returns a {@link Collector} that accumulates elements into an {@code ImmutableListMultimap} + * whose keys and values are the result of applying the provided mapping functions to the input + * elements. + * + *

For streams with defined encounter order (as defined in the Ordering section of the {@link + * java.util.stream} Javadoc), that order is preserved, but entries are grouped by key. + * + *

Example: + * + *

{@code
+   * static final Multimap FIRST_LETTER_MULTIMAP =
+   *     Stream.of("banana", "apple", "carrot", "asparagus", "cherry")
+   *         .collect(toImmutableListMultimap(str -> str.charAt(0), str -> str.substring(1)));
+   *
+   * // is equivalent to
+   *
+   * static final Multimap FIRST_LETTER_MULTIMAP =
+   *     new ImmutableListMultimap.Builder()
+   *         .put('b', "anana")
+   *         .putAll('a', "pple", "sparagus")
+   *         .putAll('c', "arrot", "herry")
+   *         .build();
+   * }
+ */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static + Collector> toImmutableListMultimap( + Function keyFunction, + Function valueFunction) { + return CollectCollectors.toImmutableListMultimap(keyFunction, valueFunction); + } + + /** + * Returns a {@code Collector} accumulating entries into an {@code ImmutableListMultimap}. Each + * input element is mapped to a key and a stream of values, each of which are put into the + * resulting {@code Multimap}, in the encounter order of the stream and the encounter order of the + * streams of values. + * + *

Example: + * + *

{@code
+   * static final ImmutableListMultimap FIRST_LETTER_MULTIMAP =
+   *     Stream.of("banana", "apple", "carrot", "asparagus", "cherry")
+   *         .collect(
+   *             flatteningToImmutableListMultimap(
+   *                  str -> str.charAt(0),
+   *                  str -> str.substring(1).chars().mapToObj(c -> (char) c));
+   *
+   * // is equivalent to
+   *
+   * static final ImmutableListMultimap FIRST_LETTER_MULTIMAP =
+   *     ImmutableListMultimap.builder()
+   *         .putAll('b', Arrays.asList('a', 'n', 'a', 'n', 'a'))
+   *         .putAll('a', Arrays.asList('p', 'p', 'l', 'e'))
+   *         .putAll('c', Arrays.asList('a', 'r', 'r', 'o', 't'))
+   *         .putAll('a', Arrays.asList('s', 'p', 'a', 'r', 'a', 'g', 'u', 's'))
+   *         .putAll('c', Arrays.asList('h', 'e', 'r', 'r', 'y'))
+   *         .build();
+   * }
+   * }
+ */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static + Collector> flatteningToImmutableListMultimap( + Function keyFunction, + Function> valuesFunction) { + return CollectCollectors.flatteningToImmutableListMultimap(keyFunction, valuesFunction); + } /** * Returns the empty multimap. diff --git a/android/guava/src/com/google/common/collect/ImmutableMap.java b/android/guava/src/com/google/common/collect/ImmutableMap.java index 4ec2f834ef33..79b39b7ade7f 100644 --- a/android/guava/src/com/google/common/collect/ImmutableMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableMap.java @@ -46,6 +46,10 @@ import java.util.Map.Entry; import java.util.Set; import java.util.SortedMap; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Collectors; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -66,6 +70,44 @@ @ElementTypesAreNonnullByDefault public abstract class ImmutableMap implements Map, Serializable { + /** + * Returns a {@link Collector} that accumulates elements into an {@code ImmutableMap} whose keys + * and values are the result of applying the provided mapping functions to the input elements. + * Entries appear in the result {@code ImmutableMap} in encounter order. + * + *

If the mapped keys contain duplicates (according to {@link Object#equals(Object)}, an {@code + * IllegalArgumentException} is thrown when the collection operation is performed. (This differs + * from the {@code Collector} returned by {@link Collectors#toMap(Function, Function)}, which + * throws an {@code IllegalStateException}.) + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableMap( + Function keyFunction, + Function valueFunction) { + return CollectCollectors.toImmutableMap(keyFunction, valueFunction); + } + + /** + * Returns a {@link Collector} that accumulates elements into an {@code ImmutableMap} whose keys + * and values are the result of applying the provided mapping functions to the input elements. + * + *

If the mapped keys contain duplicates (according to {@link Object#equals(Object)}), the + * values are merged using the specified merging function. If the merging function returns {@code + * null}, then the collector removes the value that has been computed for the key thus far (though + * future occurrences of the key would reinsert it). + * + *

Entries will appear in the encounter order of the first occurrence of the key. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableMap( + Function keyFunction, + Function valueFunction, + BinaryOperator mergeFunction) { + return CollectCollectors.toImmutableMap(keyFunction, valueFunction, mergeFunction); + } + /** * Returns the empty map. This map behaves and performs comparably to {@link * Collections#emptyMap}, and is preferable mainly for consistency and maintainability of your diff --git a/android/guava/src/com/google/common/collect/ImmutableMultiset.java b/android/guava/src/com/google/common/collect/ImmutableMultiset.java index 9a096d286c35..b5e2e347e1ee 100644 --- a/android/guava/src/com/google/common/collect/ImmutableMultiset.java +++ b/android/guava/src/com/google/common/collect/ImmutableMultiset.java @@ -33,6 +33,9 @@ import java.util.Collection; import java.util.Iterator; import java.util.Set; +import java.util.function.Function; +import java.util.function.ToIntFunction; +import java.util.stream.Collector; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -57,6 +60,33 @@ public abstract class ImmutableMultiset extends ImmutableMultisetGwtSerializationDependencies implements Multiset { + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code + * ImmutableMultiset}. Elements iterate in order by the first appearance of that element in + * encounter order. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableMultiset() { + return CollectCollectors.toImmutableMultiset(Function.identity(), e -> 1); + } + + /** + * Returns a {@code Collector} that accumulates elements into an {@code ImmutableMultiset} whose + * elements are the result of applying {@code elementFunction} to the inputs, with counts equal to + * the result of applying {@code countFunction} to the inputs. + * + *

If the mapped elements contain duplicates (according to {@link Object#equals}), the first + * occurrence in encounter order appears in the resulting multiset, with count equal to the sum of + * the outputs of {@code countFunction.applyAsInt(t)} for each {@code t} mapped to that element. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableMultiset( + Function elementFunction, ToIntFunction countFunction) { + return CollectCollectors.toImmutableMultiset(elementFunction, countFunction); + } + /** * Returns the empty immutable multiset. * diff --git a/android/guava/src/com/google/common/collect/ImmutableRangeMap.java b/android/guava/src/com/google/common/collect/ImmutableRangeMap.java index 532631617116..72c70b1ae9b5 100644 --- a/android/guava/src/com/google/common/collect/ImmutableRangeMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableRangeMap.java @@ -33,7 +33,10 @@ import java.util.Map; import java.util.Map.Entry; import java.util.NoSuchElementException; +import java.util.function.Function; +import java.util.stream.Collector; import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A {@link RangeMap} whose contents will never change, with many other important properties @@ -49,6 +52,19 @@ public class ImmutableRangeMap, V> implements RangeMap, Object> EMPTY = new ImmutableRangeMap<>(ImmutableList.>>of(), ImmutableList.of()); + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code + * ImmutableRangeMap}. As in {@link Builder}, overlapping ranges are not permitted. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static , V> + Collector> toImmutableRangeMap( + Function> keyFunction, + Function valueFunction) { + return CollectCollectors.toImmutableRangeMap(keyFunction, valueFunction); + } + /** * Returns an empty immutable range map. * diff --git a/android/guava/src/com/google/common/collect/ImmutableRangeSet.java b/android/guava/src/com/google/common/collect/ImmutableRangeSet.java index d1f05bc98729..7d08c89e3d39 100644 --- a/android/guava/src/com/google/common/collect/ImmutableRangeSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableRangeSet.java @@ -38,6 +38,7 @@ import java.util.List; import java.util.NoSuchElementException; import java.util.Set; +import java.util.stream.Collector; import javax.annotation.CheckForNull; /** @@ -58,6 +59,18 @@ public final class ImmutableRangeSet extends AbstractRange private static final ImmutableRangeSet> ALL = new ImmutableRangeSet<>(ImmutableList.of(Range.>all())); + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code + * ImmutableRangeSet}. As in {@link Builder}, overlapping ranges are not permitted and adjacent + * ranges will be merged. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static > + Collector, ?, ImmutableRangeSet> toImmutableRangeSet() { + return CollectCollectors.toImmutableRangeSet(); + } + /** * Returns an empty immutable range set. * diff --git a/android/guava/src/com/google/common/collect/ImmutableSet.java b/android/guava/src/com/google/common/collect/ImmutableSet.java index 2fd833f230c2..c4631804d6cc 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableSet.java @@ -38,7 +38,7 @@ import java.util.Iterator; import java.util.Set; import java.util.SortedSet; -import java.util.Spliterator; +import java.util.stream.Collector; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -52,11 +52,18 @@ @SuppressWarnings("serial") // we're overriding default serialization @ElementTypesAreNonnullByDefault public abstract class ImmutableSet extends ImmutableCollection implements Set { + + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code + * ImmutableSet}. Elements appear in the resulting set in the encounter order of the stream; if + * the stream contains duplicates (according to {@link Object#equals(Object)}), only the first + * duplicate in encounter order will appear in the result. + */ @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) - // @IgnoreJRERequirement is not necessary because this compiles down to a constant. - // (which is fortunate because Animal Sniffer doesn't look for @IgnoreJRERequirement on fields) - static final int SPLITERATOR_CHARACTERISTICS = - ImmutableCollection.SPLITERATOR_CHARACTERISTICS | Spliterator.DISTINCT; + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableSet() { + return CollectCollectors.toImmutableSet(); + } /** * Returns the empty immutable set. Preferred over {@link Collections#emptySet} for code diff --git a/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java b/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java index b2d80af4fac6..022a3d40910e 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java +++ b/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java @@ -37,7 +37,11 @@ import java.util.Comparator; import java.util.Map; import java.util.Map.Entry; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Stream; import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A {@link SetMultimap} whose contents will never change, with many other important properties @@ -57,6 +61,87 @@ @ElementTypesAreNonnullByDefault public class ImmutableSetMultimap extends ImmutableMultimap implements SetMultimap { + /** + * Returns a {@link Collector} that accumulates elements into an {@code ImmutableSetMultimap} + * whose keys and values are the result of applying the provided mapping functions to the input + * elements. + * + *

For streams with defined encounter order (as defined in the Ordering section of the {@link + * java.util.stream} Javadoc), that order is preserved, but entries are grouped by key. + * + *

Example: + * + *

{@code
+   * static final Multimap FIRST_LETTER_MULTIMAP =
+   *     Stream.of("banana", "apple", "carrot", "asparagus", "cherry")
+   *         .collect(toImmutableSetMultimap(str -> str.charAt(0), str -> str.substring(1)));
+   *
+   * // is equivalent to
+   *
+   * static final Multimap FIRST_LETTER_MULTIMAP =
+   *     new ImmutableSetMultimap.Builder()
+   *         .put('b', "anana")
+   *         .putAll('a', "pple", "sparagus")
+   *         .putAll('c', "arrot", "herry")
+   *         .build();
+   * }
+ */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static + Collector> toImmutableSetMultimap( + Function keyFunction, + Function valueFunction) { + return CollectCollectors.toImmutableSetMultimap(keyFunction, valueFunction); + } + + /** + * Returns a {@code Collector} accumulating entries into an {@code ImmutableSetMultimap}. Each + * input element is mapped to a key and a stream of values, each of which are put into the + * resulting {@code Multimap}, in the encounter order of the stream and the encounter order of the + * streams of values. + * + *

Example: + * + *

{@code
+   * static final ImmutableSetMultimap FIRST_LETTER_MULTIMAP =
+   *     Stream.of("banana", "apple", "carrot", "asparagus", "cherry")
+   *         .collect(
+   *             flatteningToImmutableSetMultimap(
+   *                  str -> str.charAt(0),
+   *                  str -> str.substring(1).chars().mapToObj(c -> (char) c));
+   *
+   * // is equivalent to
+   *
+   * static final ImmutableSetMultimap FIRST_LETTER_MULTIMAP =
+   *     ImmutableSetMultimap.builder()
+   *         .putAll('b', Arrays.asList('a', 'n', 'a', 'n', 'a'))
+   *         .putAll('a', Arrays.asList('p', 'p', 'l', 'e'))
+   *         .putAll('c', Arrays.asList('a', 'r', 'r', 'o', 't'))
+   *         .putAll('a', Arrays.asList('s', 'p', 'a', 'r', 'a', 'g', 'u', 's'))
+   *         .putAll('c', Arrays.asList('h', 'e', 'r', 'r', 'y'))
+   *         .build();
+   *
+   * // after deduplication, the resulting multimap is equivalent to
+   *
+   * static final ImmutableSetMultimap FIRST_LETTER_MULTIMAP =
+   *     ImmutableSetMultimap.builder()
+   *         .putAll('b', Arrays.asList('a', 'n'))
+   *         .putAll('a', Arrays.asList('p', 'l', 'e', 's', 'a', 'r', 'g', 'u'))
+   *         .putAll('c', Arrays.asList('a', 'r', 'o', 't', 'h', 'e', 'y'))
+   *         .build();
+   * }
+   * }
+ */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static + Collector> flatteningToImmutableSetMultimap( + Function keyFunction, + Function> valuesFunction) { + return CollectCollectors.flatteningToImmutableSetMultimap(keyFunction, valuesFunction); + } /** * Returns the empty multimap. diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java index 2bebbe59f1f4..985624968122 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -36,6 +36,10 @@ import java.util.NavigableMap; import java.util.SortedMap; import java.util.TreeMap; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.stream.Collector; +import java.util.stream.Collectors; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -60,6 +64,46 @@ @ElementTypesAreNonnullByDefault public final class ImmutableSortedMap extends ImmutableMap implements NavigableMap { + /** + * Returns a {@link Collector} that accumulates elements into an {@code ImmutableSortedMap} whose + * keys and values are the result of applying the provided mapping functions to the input + * elements. The generated map is sorted by the specified comparator. + * + *

If the mapped keys contain duplicates (according to the specified comparator), an {@code + * IllegalArgumentException} is thrown when the collection operation is performed. (This differs + * from the {@code Collector} returned by {@link Collectors#toMap(Function, Function)}, which + * throws an {@code IllegalStateException}.) + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static + Collector> toImmutableSortedMap( + Comparator comparator, + Function keyFunction, + Function valueFunction) { + return CollectCollectors.toImmutableSortedMap(comparator, keyFunction, valueFunction); + } + + /** + * Returns a {@link Collector} that accumulates elements into an {@code ImmutableSortedMap} whose + * keys and values are the result of applying the provided mapping functions to the input + * elements. + * + *

If the mapped keys contain duplicates (according to the comparator), the values are merged + * using the specified merging function. Entries will appear in the encounter order of the first + * occurrence of the key. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static + Collector> toImmutableSortedMap( + Comparator comparator, + Function keyFunction, + Function valueFunction, + BinaryOperator mergeFunction) { + return CollectCollectors.toImmutableSortedMap( + comparator, keyFunction, valueFunction, mergeFunction); + } /* * TODO(kevinb): Confirm that ImmutableSortedMap is faster to construct and @@ -1166,6 +1210,43 @@ private void readObject(ObjectInputStream stream) throws InvalidObjectException // warning go away (and suppressing would suppress for all nested classes too) private static final long serialVersionUID = 0; + /** + * Not supported. Use {@link #toImmutableSortedMap}, which offers better type-safety, instead. + * This method exists only to hide {@link ImmutableMap#toImmutableMap} from consumers of {@code + * ImmutableSortedMap}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMap#toImmutableSortedMap}. + */ + @DoNotCall("Use toImmutableSortedMap") + @Deprecated + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableMap( + Function keyFunction, + Function valueFunction) { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Use {@link #toImmutableSortedMap}, which offers better type-safety, instead. + * This method exists only to hide {@link ImmutableMap#toImmutableMap} from consumers of {@code + * ImmutableSortedMap}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMap#toImmutableSortedMap}. + */ + @DoNotCall("Use toImmutableSortedMap") + @Deprecated + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableMap( + Function keyFunction, + Function valueFunction, + BinaryOperator mergeFunction) { + throw new UnsupportedOperationException(); + } + /** * Not supported. Use {@link #naturalOrder}, which offers better type-safety, instead. This method * exists only to hide {@link ImmutableMap#builder} from consumers of {@code ImmutableSortedMap}. diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java b/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java index fea0f460e1ac..3660ca596111 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java @@ -33,7 +33,11 @@ import java.util.Comparator; import java.util.Iterator; import java.util.List; +import java.util.function.Function; +import java.util.function.ToIntFunction; +import java.util.stream.Collector; import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A {@link SortedMultiset} whose contents will never change, with many other important properties @@ -57,6 +61,67 @@ public abstract class ImmutableSortedMultiset extends ImmutableMultiset implements SortedMultiset { // TODO(lowasser): GWT compatibility + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code + * ImmutableMultiset}. Elements are sorted by the specified comparator. + * + *

Warning: {@code comparator} should be consistent with {@code equals} as + * explained in the {@link Comparator} documentation. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableSortedMultiset( + Comparator comparator) { + return toImmutableSortedMultiset(comparator, Function.identity(), e -> 1); + } + + /** + * Returns a {@code Collector} that accumulates elements into an {@code ImmutableSortedMultiset} + * whose elements are the result of applying {@code elementFunction} to the inputs, with counts + * equal to the result of applying {@code countFunction} to the inputs. + * + *

If the mapped elements contain duplicates (according to {@code comparator}), the first + * occurrence in encounter order appears in the resulting multiset, with count equal to the sum of + * the outputs of {@code countFunction.applyAsInt(t)} for each {@code t} mapped to that element. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static + Collector> toImmutableSortedMultiset( + Comparator comparator, + Function elementFunction, + ToIntFunction countFunction) { + checkNotNull(comparator); + checkNotNull(elementFunction); + checkNotNull(countFunction); + return Collector.of( + () -> TreeMultiset.create(comparator), + (multiset, t) -> mapAndAdd(t, multiset, elementFunction, countFunction), + (multiset1, multiset2) -> { + multiset1.addAll(multiset2); + return multiset1; + }, + (Multiset multiset) -> copyOfSortedEntries(comparator, multiset.entrySet())); + } + + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // helper for toImmutableSortedMultiset + /* + * If we make these calls inline inside toImmutableSortedMultiset, we get an Animal Sniffer error, + * despite the @IgnoreJRERequirement annotation there. My assumption is that, because javac + * generates a synthetic method for the body of the lambda, the actual method calls that Animal + * Sniffer is flagging don't appear inside toImmutableSortedMultiset but rather inside that + * synthetic method. By moving those calls to a named method, we're able to apply + * @IgnoreJRERequirement somewhere that it will help. + */ + private static void mapAndAdd( + T t, + Multiset multiset, + Function elementFunction, + ToIntFunction countFunction) { + multiset.add(checkNotNull(elementFunction.apply(t)), countFunction.applyAsInt(t)); + } + /** * Returns the empty immutable sorted multiset. * @@ -682,6 +747,39 @@ private void readObject(ObjectInputStream stream) throws InvalidObjectException throw new InvalidObjectException("Use SerializedForm"); } + /** + * Not supported. Use {@link #toImmutableSortedMultiset} instead. This method exists only to hide + * {@link ImmutableMultiset#toImmutableMultiset} from consumers of {@code + * ImmutableSortedMultiset}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMultiset#toImmutableSortedMultiset}. + */ + @DoNotCall("Use toImmutableSortedMultiset.") + @Deprecated + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableMultiset() { + throw new UnsupportedOperationException(); + } + + /** + * Not supported. Use {@link #toImmutableSortedMultiset} instead. This method exists only to hide + * {@link ImmutableMultiset#toImmutableMultiset} from consumers of {@code + * ImmutableSortedMultiset}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedMultiset#toImmutableSortedMultiset}. + */ + @DoNotCall("Use toImmutableSortedMultiset.") + @Deprecated + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableMultiset( + Function elementFunction, ToIntFunction countFunction) { + throw new UnsupportedOperationException(); + } + /** * Not supported. Use {@link #naturalOrder}, which offers better type-safety, instead. This method * exists only to hide {@link ImmutableMultiset#builder} from consumers of {@code diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java index 22660c02c5aa..c6a57824f139 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -36,6 +36,7 @@ import java.util.Iterator; import java.util.NavigableSet; import java.util.SortedSet; +import java.util.stream.Collector; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -62,6 +63,19 @@ @ElementTypesAreNonnullByDefault public abstract class ImmutableSortedSet extends ImmutableSet implements NavigableSet, SortedIterable { + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code + * ImmutableSortedSet}, ordered by the specified comparator. + * + *

If the elements contain duplicates (according to the comparator), only the first duplicate + * in encounter order will appear in the result. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableSortedSet( + Comparator comparator) { + return CollectCollectors.toImmutableSortedSet(comparator); + } static RegularImmutableSortedSet emptySet(Comparator comparator) { if (Ordering.natural().equals(comparator)) { @@ -765,6 +779,21 @@ Object writeReplace() { return new SerializedForm(comparator, toArray()); } + /** + * Not supported. Use {@link #toImmutableSortedSet} instead. This method exists only to hide + * {@link ImmutableSet#toImmutableSet} from consumers of {@code ImmutableSortedSet}. + * + * @throws UnsupportedOperationException always + * @deprecated Use {@link ImmutableSortedSet#toImmutableSortedSet}. + */ + @DoNotCall("Use toImmutableSortedSet") + @Deprecated + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static Collector> toImmutableSet() { + throw new UnsupportedOperationException(); + } + /** * Not supported. Use {@link #naturalOrder}, which offers better type-safety, instead. This method * exists only to hide {@link ImmutableSet#builder} from consumers of {@code ImmutableSortedSet}. diff --git a/android/guava/src/com/google/common/collect/ImmutableTable.java b/android/guava/src/com/google/common/collect/ImmutableTable.java index 6c8f26dfe0f0..91c9f71a633e 100644 --- a/android/guava/src/com/google/common/collect/ImmutableTable.java +++ b/android/guava/src/com/google/common/collect/ImmutableTable.java @@ -32,7 +32,11 @@ import java.util.Iterator; import java.util.List; import java.util.Map; +import java.util.function.BinaryOperator; +import java.util.function.Function; +import java.util.stream.Collector; import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A {@link Table} whose contents will never change, with many other important properties detailed @@ -49,6 +53,45 @@ public abstract class ImmutableTable extends AbstractTable implements Serializable { + /** + * Returns a {@code Collector} that accumulates elements into an {@code ImmutableTable}. Each + * input element is mapped to one cell in the returned table, with the rows, columns, and values + * generated by applying the specified functions. + * + *

The returned {@code Collector} will throw a {@code NullPointerException} at collection time + * if the row, column, or value functions return null on any input. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static + Collector> toImmutableTable( + Function rowFunction, + Function columnFunction, + Function valueFunction) { + return TableCollectors.toImmutableTable(rowFunction, columnFunction, valueFunction); + } + + /** + * Returns a {@code Collector} that accumulates elements into an {@code ImmutableTable}. Each + * input element is mapped to one cell in the returned table, with the rows, columns, and values + * generated by applying the specified functions. If multiple inputs are mapped to the same row + * and column pair, they will be combined with the specified merging function in encounter order. + * + *

The returned {@code Collector} will throw a {@code NullPointerException} at collection time + * if the row, column, value, or merging functions return null on any input. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static + Collector> toImmutableTable( + Function rowFunction, + Function columnFunction, + Function valueFunction, + BinaryOperator mergeFunction) { + return TableCollectors.toImmutableTable( + rowFunction, columnFunction, valueFunction, mergeFunction); + } + /** * Returns an empty immutable table. * diff --git a/android/guava/src/com/google/common/collect/Maps.java b/android/guava/src/com/google/common/collect/Maps.java index 9a385204730a..0664f5dabfb3 100644 --- a/android/guava/src/com/google/common/collect/Maps.java +++ b/android/guava/src/com/google/common/collect/Maps.java @@ -65,6 +65,8 @@ import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; +import java.util.function.BinaryOperator; +import java.util.stream.Collector; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -177,6 +179,48 @@ public static , V> ImmutableMap immutableEnumMap( return ImmutableEnumMap.asImmutable(enumMap); } + /** + * Returns a {@link Collector} that accumulates elements into an {@code ImmutableMap} whose keys + * and values are the result of applying the provided mapping functions to the input elements. The + * resulting implementation is specialized for enum key types. The returned map and its views will + * iterate over keys in their enum definition order, not encounter order. + * + *

If the mapped keys contain duplicates, an {@code IllegalArgumentException} is thrown when + * the collection operation is performed. (This differs from the {@code Collector} returned by + * {@link java.util.stream.Collectors#toMap(java.util.function.Function, + * java.util.function.Function) Collectors.toMap(Function, Function)}, which throws an {@code + * IllegalStateException}.) + */ + @J2ktIncompatible + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static , V> + Collector> toImmutableEnumMap( + java.util.function.Function keyFunction, + java.util.function.Function valueFunction) { + return CollectCollectors.toImmutableEnumMap(keyFunction, valueFunction); + } + + /** + * Returns a {@link Collector} that accumulates elements into an {@code ImmutableMap} whose keys + * and values are the result of applying the provided mapping functions to the input elements. The + * resulting implementation is specialized for enum key types. The returned map and its views will + * iterate over keys in their enum definition order, not encounter order. + * + *

If the mapped keys contain duplicates, the values are merged using the specified merging + * function. + */ + @J2ktIncompatible + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static , V> + Collector> toImmutableEnumMap( + java.util.function.Function keyFunction, + java.util.function.Function valueFunction, + BinaryOperator mergeFunction) { + return CollectCollectors.toImmutableEnumMap(keyFunction, valueFunction, mergeFunction); + } + /** * Creates a mutable, empty {@code HashMap} instance. * diff --git a/android/guava/src/com/google/common/collect/MoreCollectors.java b/android/guava/src/com/google/common/collect/MoreCollectors.java new file mode 100644 index 000000000000..02b254d2d54c --- /dev/null +++ b/android/guava/src/com/google/common/collect/MoreCollectors.java @@ -0,0 +1,175 @@ +/* + * Copyright (C) 2016 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.common.collect; + +import static com.google.common.base.Preconditions.checkNotNull; +import static java.util.Collections.emptyList; + +import com.google.common.annotations.GwtCompatible; +import java.util.ArrayList; +import java.util.List; +import java.util.NoSuchElementException; +import java.util.Optional; +import java.util.stream.Collector; +import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; + +/** + * Collectors not present in {@code java.util.stream.Collectors} that are not otherwise associated + * with a {@code com.google.common} type. + * + * @author Louis Wasserman + */ +@GwtCompatible +@ElementTypesAreNonnullByDefault +@SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) +@IgnoreJRERequirement // Users will use this only if they're already using streams. +final class MoreCollectors { + + /* + * TODO(lowasser): figure out if we can convert this to a concurrent AtomicReference-based + * collector without breaking j2cl? + */ + private static final Collector> TO_OPTIONAL = + Collector.of( + ToOptionalState::new, + ToOptionalState::add, + ToOptionalState::combine, + ToOptionalState::getOptional, + Collector.Characteristics.UNORDERED); + + /** + * A collector that converts a stream of zero or one elements to an {@code Optional}. + * + * @throws IllegalArgumentException if the stream consists of two or more elements. + * @throws NullPointerException if any element in the stream is {@code null}. + * @return {@code Optional.of(onlyElement)} if the stream has exactly one element (must not be + * {@code null}) and returns {@code Optional.empty()} if it has none. + */ + @SuppressWarnings("unchecked") + public static Collector> toOptional() { + return (Collector) TO_OPTIONAL; + } + + private static final Object NULL_PLACEHOLDER = new Object(); + + private static final Collector<@Nullable Object, ?, @Nullable Object> ONLY_ELEMENT = + Collector.<@Nullable Object, ToOptionalState, @Nullable Object>of( + ToOptionalState::new, + (state, o) -> state.add((o == null) ? NULL_PLACEHOLDER : o), + ToOptionalState::combine, + state -> { + Object result = state.getElement(); + return (result == NULL_PLACEHOLDER) ? null : result; + }, + Collector.Characteristics.UNORDERED); + + /** + * A collector that takes a stream containing exactly one element and returns that element. The + * returned collector throws an {@code IllegalArgumentException} if the stream consists of two or + * more elements, and a {@code NoSuchElementException} if the stream is empty. + */ + @SuppressWarnings("unchecked") + public static Collector onlyElement() { + return (Collector) ONLY_ELEMENT; + } + + /** + * This atrocity is here to let us report several of the elements in the stream if there were more + * than one, not just two. + */ + private static final class ToOptionalState { + static final int MAX_EXTRAS = 4; + + @CheckForNull Object element; + List extras; + + ToOptionalState() { + element = null; + extras = emptyList(); + } + + IllegalArgumentException multiples(boolean overflow) { + StringBuilder sb = + new StringBuilder().append("expected one element but was: <").append(element); + for (Object o : extras) { + sb.append(", ").append(o); + } + if (overflow) { + sb.append(", ..."); + } + sb.append('>'); + throw new IllegalArgumentException(sb.toString()); + } + + void add(Object o) { + checkNotNull(o); + if (element == null) { + this.element = o; + } else if (extras.isEmpty()) { + // Replace immutable empty list with mutable list. + extras = new ArrayList<>(MAX_EXTRAS); + extras.add(o); + } else if (extras.size() < MAX_EXTRAS) { + extras.add(o); + } else { + throw multiples(true); + } + } + + ToOptionalState combine(ToOptionalState other) { + if (element == null) { + return other; + } else if (other.element == null) { + return this; + } else { + if (extras.isEmpty()) { + // Replace immutable empty list with mutable list. + extras = new ArrayList<>(); + } + extras.add(other.element); + extras.addAll(other.extras); + if (extras.size() > MAX_EXTRAS) { + extras.subList(MAX_EXTRAS, extras.size()).clear(); + throw multiples(true); + } + return this; + } + } + + @IgnoreJRERequirement // see enclosing class (whose annotation Animal Sniffer ignores here...) + Optional getOptional() { + if (extras.isEmpty()) { + return Optional.ofNullable(element); + } else { + throw multiples(false); + } + } + + Object getElement() { + if (element == null) { + throw new NoSuchElementException(); + } else if (extras.isEmpty()) { + return element; + } else { + throw multiples(false); + } + } + } + + private MoreCollectors() {} +} diff --git a/android/guava/src/com/google/common/collect/Multimaps.java b/android/guava/src/com/google/common/collect/Multimaps.java index a1ca78d5ba03..34d56b077c64 100644 --- a/android/guava/src/com/google/common/collect/Multimaps.java +++ b/android/guava/src/com/google/common/collect/Multimaps.java @@ -51,6 +51,8 @@ import java.util.NoSuchElementException; import java.util.Set; import java.util.SortedSet; +import java.util.stream.Collector; +import java.util.stream.Stream; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -72,6 +74,100 @@ public final class Multimaps { private Multimaps() {} + /** + * Returns a {@code Collector} accumulating entries into a {@code Multimap} generated from the + * specified supplier. The keys and values of the entries are the result of applying the provided + * mapping functions to the input elements, accumulated in the encounter order of the stream. + * + *

Example: + * + *

{@code
+   * static final ListMultimap FIRST_LETTER_MULTIMAP =
+   *     Stream.of("banana", "apple", "carrot", "asparagus", "cherry")
+   *         .collect(
+   *             toMultimap(
+   *                  str -> str.charAt(0),
+   *                  str -> str.substring(1),
+   *                  MultimapBuilder.treeKeys().arrayListValues()::build));
+   *
+   * // is equivalent to
+   *
+   * static final ListMultimap FIRST_LETTER_MULTIMAP;
+   *
+   * static {
+   *     FIRST_LETTER_MULTIMAP = MultimapBuilder.treeKeys().arrayListValues().build();
+   *     FIRST_LETTER_MULTIMAP.put('b', "anana");
+   *     FIRST_LETTER_MULTIMAP.put('a', "pple");
+   *     FIRST_LETTER_MULTIMAP.put('a', "sparagus");
+   *     FIRST_LETTER_MULTIMAP.put('c', "arrot");
+   *     FIRST_LETTER_MULTIMAP.put('c', "herry");
+   * }
+   * }
+ * + *

To collect to an {@link ImmutableMultimap}, use either {@link + * ImmutableSetMultimap#toImmutableSetMultimap} or {@link + * ImmutableListMultimap#toImmutableListMultimap}. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static < + T extends @Nullable Object, + K extends @Nullable Object, + V extends @Nullable Object, + M extends Multimap> + Collector toMultimap( + java.util.function.Function keyFunction, + java.util.function.Function valueFunction, + java.util.function.Supplier multimapSupplier) { + return CollectCollectors.toMultimap(keyFunction, valueFunction, multimapSupplier); + } + + /** + * Returns a {@code Collector} accumulating entries into a {@code Multimap} generated from the + * specified supplier. Each input element is mapped to a key and a stream of values, each of which + * are put into the resulting {@code Multimap}, in the encounter order of the stream and the + * encounter order of the streams of values. + * + *

Example: + * + *

{@code
+   * static final ListMultimap FIRST_LETTER_MULTIMAP =
+   *     Stream.of("banana", "apple", "carrot", "asparagus", "cherry")
+   *         .collect(
+   *             flatteningToMultimap(
+   *                  str -> str.charAt(0),
+   *                  str -> str.substring(1).chars().mapToObj(c -> (char) c),
+   *                  MultimapBuilder.linkedHashKeys().arrayListValues()::build));
+   *
+   * // is equivalent to
+   *
+   * static final ListMultimap FIRST_LETTER_MULTIMAP;
+   *
+   * static {
+   *     FIRST_LETTER_MULTIMAP = MultimapBuilder.linkedHashKeys().arrayListValues().build();
+   *     FIRST_LETTER_MULTIMAP.putAll('b', Arrays.asList('a', 'n', 'a', 'n', 'a'));
+   *     FIRST_LETTER_MULTIMAP.putAll('a', Arrays.asList('p', 'p', 'l', 'e'));
+   *     FIRST_LETTER_MULTIMAP.putAll('c', Arrays.asList('a', 'r', 'r', 'o', 't'));
+   *     FIRST_LETTER_MULTIMAP.putAll('a', Arrays.asList('s', 'p', 'a', 'r', 'a', 'g', 'u', 's'));
+   *     FIRST_LETTER_MULTIMAP.putAll('c', Arrays.asList('h', 'e', 'r', 'r', 'y'));
+   * }
+   * }
+ */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static < + T extends @Nullable Object, + K extends @Nullable Object, + V extends @Nullable Object, + M extends Multimap> + Collector flatteningToMultimap( + java.util.function.Function keyFunction, + java.util.function.Function> valueFunction, + java.util.function.Supplier multimapSupplier) { + return CollectCollectors.flatteningToMultimap( + keyFunction, valueFunction, multimapSupplier); + } + /** * Creates a new {@code Multimap} backed by {@code map}, whose internal value collections are * generated by {@code factory}. diff --git a/android/guava/src/com/google/common/collect/Multisets.java b/android/guava/src/com/google/common/collect/Multisets.java index 2611df0277ac..9cebe58f4995 100644 --- a/android/guava/src/com/google/common/collect/Multisets.java +++ b/android/guava/src/com/google/common/collect/Multisets.java @@ -39,6 +39,10 @@ import java.util.Iterator; import java.util.NoSuchElementException; import java.util.Set; +import java.util.function.Function; +import java.util.function.Supplier; +import java.util.function.ToIntFunction; +import java.util.stream.Collector; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -59,6 +63,31 @@ public final class Multisets { private Multisets() {} + /** + * Returns a {@code Collector} that accumulates elements into a multiset created via the specified + * {@code Supplier}, whose elements are the result of applying {@code elementFunction} to the + * inputs, with counts equal to the result of applying {@code countFunction} to the inputs. + * Elements are added in encounter order. + * + *

If the mapped elements contain duplicates (according to {@link Object#equals}), the element + * will be added more than once, with the count summed over all appearances of the element. + * + *

Note that {@code stream.collect(toMultiset(function, e -> 1, supplier))} is equivalent to + * {@code stream.map(function).collect(Collectors.toCollection(supplier))}. + * + *

To collect to an {@link ImmutableMultiset}, use {@link + * ImmutableMultiset#toImmutableMultiset}. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static > + Collector toMultiset( + Function elementFunction, + ToIntFunction countFunction, + Supplier multisetSupplier) { + return CollectCollectors.toMultiset(elementFunction, countFunction, multisetSupplier); + } + /** * Returns an unmodifiable view of the specified multiset. Query operations on the returned * multiset "read through" to the specified multiset, and attempts to modify the returned multiset diff --git a/android/guava/src/com/google/common/collect/Sets.java b/android/guava/src/com/google/common/collect/Sets.java index cbea9ca3298d..60578e6d03f5 100644 --- a/android/guava/src/com/google/common/collect/Sets.java +++ b/android/guava/src/com/google/common/collect/Sets.java @@ -50,6 +50,7 @@ import java.util.TreeSet; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.CopyOnWriteArraySet; +import java.util.stream.Collector; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -139,6 +140,17 @@ public static > ImmutableSet immutableEnumSet(Iterable e } } + /** + * Returns a {@code Collector} that accumulates the input elements into a new {@code ImmutableSet} + * with an implementation specialized for enums. Unlike {@link ImmutableSet#toImmutableSet}, the + * resulting set will iterate over elements in their enum definition order, not encounter order. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static > Collector> toImmutableEnumSet() { + return CollectCollectors.toImmutableEnumSet(); + } + /** * Returns a new, mutable {@code EnumSet} instance containing the given elements in their * natural order. This method behaves identically to {@link EnumSet#copyOf(Collection)}, but also diff --git a/android/guava/src/com/google/common/collect/Tables.java b/android/guava/src/com/google/common/collect/Tables.java index 710b118f0262..cca3d0c3a051 100644 --- a/android/guava/src/com/google/common/collect/Tables.java +++ b/android/guava/src/com/google/common/collect/Tables.java @@ -33,6 +33,8 @@ import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; +import java.util.function.BinaryOperator; +import java.util.stream.Collector; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -51,6 +53,63 @@ public final class Tables { private Tables() {} + /** + * Returns a {@link Collector} that accumulates elements into a {@code Table} created using the + * specified supplier, whose cells are generated by applying the provided mapping functions to the + * input elements. Cells are inserted into the generated {@code Table} in encounter order. + * + *

If multiple input elements map to the same row and column, an {@code IllegalStateException} + * is thrown when the collection operation is performed. + * + *

To collect to an {@link ImmutableTable}, use {@link ImmutableTable#toImmutableTable}. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static < + T extends @Nullable Object, + R extends @Nullable Object, + C extends @Nullable Object, + V extends @Nullable Object, + I extends Table> + Collector toTable( + java.util.function.Function rowFunction, + java.util.function.Function columnFunction, + java.util.function.Function valueFunction, + java.util.function.Supplier tableSupplier) { + return TableCollectors.toTable( + rowFunction, columnFunction, valueFunction, tableSupplier); + } + + /** + * Returns a {@link Collector} that accumulates elements into a {@code Table} created using the + * specified supplier, whose cells are generated by applying the provided mapping functions to the + * input elements. Cells are inserted into the generated {@code Table} in encounter order. + * + *

If multiple input elements map to the same row and column, the specified merging function is + * used to combine the values. Like {@link + * java.util.stream.Collectors#toMap(java.util.function.Function, java.util.function.Function, + * BinaryOperator, java.util.function.Supplier)}, this Collector throws a {@code + * NullPointerException} on null values returned from {@code valueFunction}, and treats nulls + * returned from {@code mergeFunction} as removals of that row/column pair. + */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // Users will use this only if they're already using streams. + static < + T extends @Nullable Object, + R extends @Nullable Object, + C extends @Nullable Object, + V extends @Nullable Object, + I extends Table> + Collector toTable( + java.util.function.Function rowFunction, + java.util.function.Function columnFunction, + java.util.function.Function valueFunction, + BinaryOperator mergeFunction, + java.util.function.Supplier tableSupplier) { + return TableCollectors.toTable( + rowFunction, columnFunction, valueFunction, mergeFunction, tableSupplier); + } + /** * Returns an immutable cell with the specified row key, column key, and value. * From 5b8681e458534848221547d1158cbe5d63b3e7a4 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 11 Dec 2023 08:24:28 -0800 Subject: [PATCH 065/216] Automatically bump deps, and manually bump `error_prone_core`. Then I had to update the version numbers in `build.gradle.kts`. In the future, we could consider the approaches that I outlined in cl/554548816. RELNOTES=n/a PiperOrigin-RevId: 589831642 --- android/pom.xml | 6 +++--- guava-gwt/pom.xml | 4 ++-- integration-tests/gradle/build.gradle.kts | 8 ++++---- pom.xml | 6 +++--- 4 files changed, 12 insertions(+), 12 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index b73fe52399b4..28fc24d47011 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -16,8 +16,8 @@ %regex[.*.class] 1.1.3 3.0.2 - 3.37.0 - 2.21.1 + 3.41.0 + 2.23.0 2.8 9+181-r4173-1 @@ -144,7 +144,7 @@ com.google.errorprone error_prone_core - 2.16 + 2.23.0 @@ -145,7 +145,7 @@ com.google.errorprone error_prone_core - 2.16 + 2.23.0 - 32.1.3-android + 33.0.0-android ``` @@ -51,16 +51,16 @@ dependencies { // Pick one: // 1. Use Guava in your implementation only: - implementation("com.google.guava:guava:32.1.3-jre") + implementation("com.google.guava:guava:33.0.0-jre") // 2. Use Guava types in your public API: - api("com.google.guava:guava:32.1.3-jre") + api("com.google.guava:guava:33.0.0-jre") // 3. Android - Use Guava in your implementation only: - implementation("com.google.guava:guava:32.1.3-android") + implementation("com.google.guava:guava:33.0.0-android") // 4. Android - Use Guava types in your public API: - api("com.google.guava:guava:32.1.3-android") + api("com.google.guava:guava:33.0.0-android") } ``` diff --git a/android/guava/src/com/google/common/net/HttpHeaders.java b/android/guava/src/com/google/common/net/HttpHeaders.java index ca3b75374af6..714cb313c17c 100644 --- a/android/guava/src/com/google/common/net/HttpHeaders.java +++ b/android/guava/src/com/google/common/net/HttpHeaders.java @@ -861,7 +861,7 @@ private ReferrerPolicyValues() {} * href="https://wicg.github.io/turtledove/#handling-direct-from-seller-signals">{@code * Sec-Ad-Auction-Fetch} header field name. * - * @since NEXT + * @since 33.0.0 */ public static final String SEC_AD_AUCTION_FETCH = "Sec-Ad-Auction-Fetch"; @@ -870,7 +870,7 @@ private ReferrerPolicyValues() {} * href="https://wicg.github.io/turtledove/#handling-direct-from-seller-signals">{@code * Ad-Auction-Signals} header field name. * - * @since NEXT + * @since 33.0.0 */ public static final String AD_AUCTION_SIGNALS = "Ad-Auction-Signals"; diff --git a/guava-testlib/README.md b/guava-testlib/README.md index 6e9efc028c5e..636c5be593d3 100644 --- a/guava-testlib/README.md +++ b/guava-testlib/README.md @@ -13,7 +13,7 @@ To add a dependency on Guava testlib using Maven, use the following: com.google.guava guava-testlib - 32.1.3-jre + 33.0.0-jre test ``` @@ -22,7 +22,7 @@ To add a dependency using Gradle: ```gradle dependencies { - test 'com.google.guava:guava-testlib:32.1.3-jre' + test 'com.google.guava:guava-testlib:33.0.0-jre' } ``` diff --git a/guava/src/com/google/common/net/HttpHeaders.java b/guava/src/com/google/common/net/HttpHeaders.java index ca3b75374af6..714cb313c17c 100644 --- a/guava/src/com/google/common/net/HttpHeaders.java +++ b/guava/src/com/google/common/net/HttpHeaders.java @@ -861,7 +861,7 @@ private ReferrerPolicyValues() {} * href="https://wicg.github.io/turtledove/#handling-direct-from-seller-signals">{@code * Sec-Ad-Auction-Fetch} header field name. * - * @since NEXT + * @since 33.0.0 */ public static final String SEC_AD_AUCTION_FETCH = "Sec-Ad-Auction-Fetch"; @@ -870,7 +870,7 @@ private ReferrerPolicyValues() {} * href="https://wicg.github.io/turtledove/#handling-direct-from-seller-signals">{@code * Ad-Auction-Signals} header field name. * - * @since NEXT + * @since 33.0.0 */ public static final String AD_AUCTION_SIGNALS = "Ad-Auction-Signals"; From 5c4f5b205a3965b02626d0445f05accfa95e1b07 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 18 Dec 2023 19:33:04 -0800 Subject: [PATCH 081/216] Make a few small optimizations to JRE `ImmutableSet` construction for this "new" world in which we never reuse the array passed to `construct`. (We entered that world almost 6 years ago in cl/185156965.) A more significant optimization may be coming in cl/590212390, but it can hurt performance in some cases, so we may or may not ultimately want it. (Even for this CL, I could imagine bad performance for users who call `ImmutableSet.copyOf(Collections.filter(...))`. If that's an issue in practice, then maybe we should insert a special case for it inside `copyOf`. I at least made sure to call `size()` only once.) As further testing (which would become even more important with cl/590212390), I've enhanced `testCopyOf_threadSafe` (and enabled it for `Immutable`*`Sorted`*`Set` while I was there). The benchmarks and original idea are taken from jylee's cl/589183494 and b/315526394. Note that some of the changes to `ImmutableSetAllocationTest` pass even before this CL. We must have let its numbers get out of date at some point. RELNOTES=n/a PiperOrigin-RevId: 592077874 --- .../collect/AbstractImmutableSetTest.java | 98 ++++++++++--- .../common/collect/ImmutableSetTest.java | 5 - .../collect/AbstractImmutableSetTest.java | 98 ++++++++++--- .../common/collect/ImmutableSetTest.java | 5 - .../google/common/collect/ImmutableSet.java | 129 +++++++----------- 5 files changed, 215 insertions(+), 120 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index 705b15a48082..b70e6dcfe9c1 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -18,11 +18,12 @@ import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE; import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; import static java.util.Arrays.asList; import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.testing.Helpers; +import com.google.common.base.Strings; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.MinimalIterable; @@ -472,24 +473,89 @@ public void testBuilderAddAllHandlesNullsCorrectly() { /** * Verify thread safety by using a collection whose size() may be inconsistent with the actual - * number of elements. Tests using this method might fail in GWT because the GWT emulations might - * count on size() during copy. It is safe to do so in GWT because javascript is single-threaded. + * number of elements and whose elements may change over time. + * + *

This test might fail in GWT because the GWT emulations might count on the input collection + * not to change during the copy. It is safe to do so in GWT because javascript is + * single-threaded. */ - // TODO(benyu): turn this into a test once all copyOf(Collection) are - // thread-safe @GwtIncompatible // GWT is single threaded - void verifyThreadSafe() { - List sample = Lists.newArrayList("a", "b", "c"); - for (int delta : new int[] {-1, 0, 1}) { - for (int i = 0; i < sample.size(); i++) { - Collection misleading = Helpers.misleadingSizeCollection(delta); - List expected = sample.subList(0, i); - misleading.addAll(expected); - assertEquals( - "delta: " + delta + " sample size: " + i, - Sets.newHashSet(expected), - copyOf(misleading)); + public void testCopyOf_threadSafe() { + /* + * The actual collections that we pass as inputs will be wrappers around these, so + * ImmutableSet.copyOf won't short-circuit because it won't see an ImmutableSet input. + */ + ImmutableList> distinctCandidatesByAscendingSize = + ImmutableList.of( + ImmutableSet.of(), + ImmutableSet.of("a"), + ImmutableSet.of("b", "a"), + ImmutableSet.of("c", "b", "a"), + ImmutableSet.of("d", "c", "b", "a")); + for (boolean byAscendingSize : new boolean[] {true, false}) { + Iterable> infiniteSets = + Iterables.cycle( + byAscendingSize + ? distinctCandidatesByAscendingSize + : Lists.reverse(distinctCandidatesByAscendingSize)); + for (int startIndex = 0; + startIndex < distinctCandidatesByAscendingSize.size(); + startIndex++) { + Iterable> infiniteSetsFromStartIndex = + Iterables.skip(infiniteSets, startIndex); + for (boolean inputIsSet : new boolean[] {true, false}) { + Collection input = + inputIsSet + ? new MutatedOnQuerySet<>(infiniteSetsFromStartIndex) + : new MutatedOnQueryList<>( + Iterables.transform(infiniteSetsFromStartIndex, ImmutableList::copyOf)); + Set immutableCopy; + try { + immutableCopy = copyOf(input); + } catch (RuntimeException e) { + throw new RuntimeException( + Strings.lenientFormat( + "byAscendingSize %s, startIndex %s, inputIsSet %s", + byAscendingSize, startIndex, inputIsSet), + e); + } + /* + * TODO(cpovirk): Check that the values match one of candidates that + * MutatedOnQuery*.delegate() actually returned during this test? + */ + assertWithMessage( + "byAscendingSize %s, startIndex %s, inputIsSet %s", + byAscendingSize, startIndex, inputIsSet) + .that(immutableCopy) + .isIn(distinctCandidatesByAscendingSize); + } } } } + + private static final class MutatedOnQuerySet extends ForwardingSet { + final Iterator> infiniteCandidates; + + MutatedOnQuerySet(Iterable> infiniteCandidates) { + this.infiniteCandidates = infiniteCandidates.iterator(); + } + + @Override + protected Set delegate() { + return infiniteCandidates.next(); + } + } + + private static final class MutatedOnQueryList extends ForwardingList { + final Iterator> infiniteCandidates; + + MutatedOnQueryList(Iterable> infiniteCandidates) { + this.infiniteCandidates = infiniteCandidates.iterator(); + } + + @Override + protected List delegate() { + return infiniteCandidates.next(); + } + } } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java index 3c3139925179..681fdcd826ad 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java @@ -326,11 +326,6 @@ public void testToImmutableSet_java7() { assertThat(set).containsExactly("a", "b", "c", "d").inOrder(); } - @GwtIncompatible // GWT is single threaded - public void testCopyOf_threadSafe() { - verifyThreadSafe(); - } - @Override > Builder builder() { return ImmutableSet.builder(); diff --git a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index 705b15a48082..b70e6dcfe9c1 100644 --- a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -18,11 +18,12 @@ import static com.google.common.collect.testing.IteratorFeature.UNMODIFIABLE; import static com.google.common.truth.Truth.assertThat; +import static com.google.common.truth.Truth.assertWithMessage; import static java.util.Arrays.asList; import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.collect.testing.Helpers; +import com.google.common.base.Strings; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.MinimalIterable; @@ -472,24 +473,89 @@ public void testBuilderAddAllHandlesNullsCorrectly() { /** * Verify thread safety by using a collection whose size() may be inconsistent with the actual - * number of elements. Tests using this method might fail in GWT because the GWT emulations might - * count on size() during copy. It is safe to do so in GWT because javascript is single-threaded. + * number of elements and whose elements may change over time. + * + *

This test might fail in GWT because the GWT emulations might count on the input collection + * not to change during the copy. It is safe to do so in GWT because javascript is + * single-threaded. */ - // TODO(benyu): turn this into a test once all copyOf(Collection) are - // thread-safe @GwtIncompatible // GWT is single threaded - void verifyThreadSafe() { - List sample = Lists.newArrayList("a", "b", "c"); - for (int delta : new int[] {-1, 0, 1}) { - for (int i = 0; i < sample.size(); i++) { - Collection misleading = Helpers.misleadingSizeCollection(delta); - List expected = sample.subList(0, i); - misleading.addAll(expected); - assertEquals( - "delta: " + delta + " sample size: " + i, - Sets.newHashSet(expected), - copyOf(misleading)); + public void testCopyOf_threadSafe() { + /* + * The actual collections that we pass as inputs will be wrappers around these, so + * ImmutableSet.copyOf won't short-circuit because it won't see an ImmutableSet input. + */ + ImmutableList> distinctCandidatesByAscendingSize = + ImmutableList.of( + ImmutableSet.of(), + ImmutableSet.of("a"), + ImmutableSet.of("b", "a"), + ImmutableSet.of("c", "b", "a"), + ImmutableSet.of("d", "c", "b", "a")); + for (boolean byAscendingSize : new boolean[] {true, false}) { + Iterable> infiniteSets = + Iterables.cycle( + byAscendingSize + ? distinctCandidatesByAscendingSize + : Lists.reverse(distinctCandidatesByAscendingSize)); + for (int startIndex = 0; + startIndex < distinctCandidatesByAscendingSize.size(); + startIndex++) { + Iterable> infiniteSetsFromStartIndex = + Iterables.skip(infiniteSets, startIndex); + for (boolean inputIsSet : new boolean[] {true, false}) { + Collection input = + inputIsSet + ? new MutatedOnQuerySet<>(infiniteSetsFromStartIndex) + : new MutatedOnQueryList<>( + Iterables.transform(infiniteSetsFromStartIndex, ImmutableList::copyOf)); + Set immutableCopy; + try { + immutableCopy = copyOf(input); + } catch (RuntimeException e) { + throw new RuntimeException( + Strings.lenientFormat( + "byAscendingSize %s, startIndex %s, inputIsSet %s", + byAscendingSize, startIndex, inputIsSet), + e); + } + /* + * TODO(cpovirk): Check that the values match one of candidates that + * MutatedOnQuery*.delegate() actually returned during this test? + */ + assertWithMessage( + "byAscendingSize %s, startIndex %s, inputIsSet %s", + byAscendingSize, startIndex, inputIsSet) + .that(immutableCopy) + .isIn(distinctCandidatesByAscendingSize); + } } } } + + private static final class MutatedOnQuerySet extends ForwardingSet { + final Iterator> infiniteCandidates; + + MutatedOnQuerySet(Iterable> infiniteCandidates) { + this.infiniteCandidates = infiniteCandidates.iterator(); + } + + @Override + protected Set delegate() { + return infiniteCandidates.next(); + } + } + + private static final class MutatedOnQueryList extends ForwardingList { + final Iterator> infiniteCandidates; + + MutatedOnQueryList(Iterable> infiniteCandidates) { + this.infiniteCandidates = infiniteCandidates.iterator(); + } + + @Override + protected List delegate() { + return infiniteCandidates.next(); + } + } } diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetTest.java index e5fb0ecb2a6f..027e6a2035be 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSetTest.java @@ -350,11 +350,6 @@ public boolean fullEquals(@Nullable TypeWithDuplicates other) { .expectCollects(ImmutableSet.of(a, b1, c), a, b1, c, b2); } - @GwtIncompatible // GWT is single threaded - public void testCopyOf_threadSafe() { - verifyThreadSafe(); - } - @Override > Builder builder() { return ImmutableSet.builder(); diff --git a/guava/src/com/google/common/collect/ImmutableSet.java b/guava/src/com/google/common/collect/ImmutableSet.java index eeed833bf5c2..31147bb0a657 100644 --- a/guava/src/com/google/common/collect/ImmutableSet.java +++ b/guava/src/com/google/common/collect/ImmutableSet.java @@ -92,13 +92,20 @@ public static ImmutableSet of(E element) { return new SingletonImmutableSet(element); } + /* + * TODO: b/315526394 - Skip the Builder entirely for the of(...) methods, since we don't need to + * worry that we might trigger the fallback to the JDK-backed implementation? (The varargs one + * _could_, so we could keep it as it is. Or we could convince ourselves that hash flooding is + * unlikely in practice there, too.) + */ + /** * Returns an immutable set containing the given elements, minus duplicates, in the order each was * first specified. That is, if multiple elements are {@linkplain Object#equals equal}, all except * the first are ignored. */ public static ImmutableSet of(E e1, E e2) { - return construct(2, 2, e1, e2); + return new RegularSetBuilderImpl(2).add(e1).add(e2).review().build(); } /** @@ -107,7 +114,7 @@ public static ImmutableSet of(E e1, E e2) { * the first are ignored. */ public static ImmutableSet of(E e1, E e2, E e3) { - return construct(3, 3, e1, e2, e3); + return new RegularSetBuilderImpl(3).add(e1).add(e2).add(e3).review().build(); } /** @@ -116,7 +123,7 @@ public static ImmutableSet of(E e1, E e2, E e3) { * the first are ignored. */ public static ImmutableSet of(E e1, E e2, E e3, E e4) { - return construct(4, 4, e1, e2, e3, e4); + return new RegularSetBuilderImpl(4).add(e1).add(e2).add(e3).add(e4).review().build(); } /** @@ -125,7 +132,7 @@ public static ImmutableSet of(E e1, E e2, E e3, E e4) { * the first are ignored. */ public static ImmutableSet of(E e1, E e2, E e3, E e4, E e5) { - return construct(5, 5, e1, e2, e3, e4, e5); + return new RegularSetBuilderImpl(5).add(e1).add(e2).add(e3).add(e4).add(e5).review().build(); } /** @@ -141,74 +148,12 @@ public static ImmutableSet of(E e1, E e2, E e3, E e4, E e5) { public static ImmutableSet of(E e1, E e2, E e3, E e4, E e5, E e6, E... others) { checkArgument( others.length <= Integer.MAX_VALUE - 6, "the total number of elements must fit in an int"); - final int paramCount = 6; - Object[] elements = new Object[paramCount + others.length]; - elements[0] = e1; - elements[1] = e2; - elements[2] = e3; - elements[3] = e4; - elements[4] = e5; - elements[5] = e6; - System.arraycopy(others, 0, elements, paramCount, others.length); - return construct(elements.length, elements.length, elements); - } - - /** - * Constructs an {@code ImmutableSet} from the first {@code n} elements of the specified array, - * which we have no particular reason to believe does or does not contain duplicates. If {@code k} - * is the size of the returned {@code ImmutableSet}, then the unique elements of {@code elements} - * will be in the first {@code k} positions, and {@code elements[i] == null} for {@code k <= i < - * n}. - * - *

This may modify {@code elements}. Additionally, if {@code n == elements.length} and {@code - * elements} contains no duplicates, {@code elements} may be used without copying in the returned - * {@code ImmutableSet}, in which case the caller must not modify it. - * - *

{@code elements} may contain only values of type {@code E}. - * - * @throws NullPointerException if any of the first {@code n} elements of {@code elements} is null - */ - private static ImmutableSet constructUnknownDuplication(int n, Object... elements) { - // Guess the size is "halfway between" all duplicates and no duplicates, on a log scale. - return construct( - n, - Math.max( - ImmutableCollection.Builder.DEFAULT_INITIAL_CAPACITY, - IntMath.sqrt(n, RoundingMode.CEILING)), - elements); - } - - /** - * Constructs an {@code ImmutableSet} from the first {@code n} elements of the specified array. If - * {@code k} is the size of the returned {@code ImmutableSet}, then the unique elements of {@code - * elements} will be in the first {@code k} positions, and {@code elements[i] == null} for {@code - * k <= i < n}. - * - *

This may modify {@code elements}. Additionally, if {@code n == elements.length} and {@code - * elements} contains no duplicates, {@code elements} may be used without copying in the returned - * {@code ImmutableSet}, in which case it may no longer be modified. - * - *

{@code elements} may contain only values of type {@code E}. - * - * @throws NullPointerException if any of the first {@code n} elements of {@code elements} is null - */ - private static ImmutableSet construct(int n, int expectedSize, Object... elements) { - switch (n) { - case 0: - return of(); - case 1: - @SuppressWarnings("unchecked") // safe; elements contains only E's - E elem = (E) elements[0]; - return of(elem); - default: - SetBuilderImpl builder = new RegularSetBuilderImpl(expectedSize); - for (int i = 0; i < n; i++) { - @SuppressWarnings("unchecked") - E e = (E) checkNotNull(elements[i]); - builder = builder.add(e); - } - return builder.review().build(); + SetBuilderImpl builder = new RegularSetBuilderImpl(6 + others.length); + builder = builder.add(e1).add(e2).add(e3).add(e4).add(e5).add(e6); + for (int i = 0; i < others.length; i++) { + builder = builder.add(others[i]); } + return builder.review().build(); } /** @@ -238,13 +183,22 @@ public static ImmutableSet copyOf(Collection elements) { } else if (elements instanceof EnumSet) { return copyOfEnumSet((EnumSet) elements); } - Object[] array = elements.toArray(); - if (elements instanceof Set) { - // assume probably no duplicates (though it might be using different equality semantics) - return construct(array.length, array.length, array); - } else { - return constructUnknownDuplication(array.length, array); + + int size = elements.size(); + if (size == 0) { + // We avoid allocating anything. + return of(); } + // Collection.toArray() is required to contain only E instances, and all we do is read them. + E[] array = (E[]) elements.toArray(); + /* + * For a Set, we guess that it contains no duplicates. That's just a guess for purpose of + * sizing; if the Set uses different equality semantics, it might contain duplicates according + * to equals(), and we will deduplicate those properly, albeit at some cost in allocations. + */ + int expectedSize = + elements instanceof Set ? array.length : estimatedSizeForUnknownDuplication(array.length); + return fromArrayWithExpectedSize(array, expectedSize); } /** @@ -292,13 +246,21 @@ public static ImmutableSet copyOf(Iterator elements) { * @since 3.0 */ public static ImmutableSet copyOf(E[] elements) { + return fromArrayWithExpectedSize(elements, estimatedSizeForUnknownDuplication(elements.length)); + } + + private static ImmutableSet fromArrayWithExpectedSize(E[] elements, int expectedSize) { switch (elements.length) { case 0: return of(); case 1: return of(elements[0]); default: - return constructUnknownDuplication(elements.length, elements.clone()); + SetBuilderImpl builder = new RegularSetBuilderImpl(expectedSize); + for (int i = 0; i < elements.length; i++) { + builder = builder.add(elements[i]); + } + return builder.review().build(); } } @@ -1018,5 +980,16 @@ ImmutableSet build() { } } + private static int estimatedSizeForUnknownDuplication(int inputElementsIncludingAnyDuplicates) { + if (inputElementsIncludingAnyDuplicates + < ImmutableCollection.Builder.DEFAULT_INITIAL_CAPACITY) { + return inputElementsIncludingAnyDuplicates; + } + // Guess the size is "halfway between" all duplicates and no duplicates, on a log scale. + return Math.max( + ImmutableCollection.Builder.DEFAULT_INITIAL_CAPACITY, + IntMath.sqrt(inputElementsIncludingAnyDuplicates, RoundingMode.CEILING)); + } + private static final long serialVersionUID = 0xcafebabe; } From 5eda11b981d4baaefcc57688c745b5e347a2eb03 Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Tue, 19 Dec 2023 04:22:44 -0800 Subject: [PATCH 082/216] fix a typo in a class name. RELNOTES=n/a PiperOrigin-RevId: 592190794 --- .../guava/src/com/google/common/primitives/Booleans.java | 8 ++++---- guava/src/com/google/common/primitives/Booleans.java | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/android/guava/src/com/google/common/primitives/Booleans.java b/android/guava/src/com/google/common/primitives/Booleans.java index 1af9e337d2e0..f96d1062d4e9 100644 --- a/android/guava/src/com/google/common/primitives/Booleans.java +++ b/android/guava/src/com/google/common/primitives/Booleans.java @@ -74,8 +74,8 @@ public String toString() { /** * Returns a {@code Comparator} that sorts {@code true} before {@code false}. * - *

This is particularly useful in Java 8+ in combination with {@code Comparators.comparing}, - * e.g. {@code Comparators.comparing(Foo::hasBar, trueFirst())}. + *

This is particularly useful in Java 8+ in combination with {@code Comparator.comparing}, + * e.g. {@code Comparator.comparing(Foo::hasBar, trueFirst())}. * * @since 21.0 */ @@ -86,8 +86,8 @@ public static Comparator trueFirst() { /** * Returns a {@code Comparator} that sorts {@code false} before {@code true}. * - *

This is particularly useful in Java 8+ in combination with {@code Comparators.comparing}, - * e.g. {@code Comparators.comparing(Foo::hasBar, falseFirst())}. + *

This is particularly useful in Java 8+ in combination with {@code Comparator.comparing}, + * e.g. {@code Comparator.comparing(Foo::hasBar, falseFirst())}. * * @since 21.0 */ diff --git a/guava/src/com/google/common/primitives/Booleans.java b/guava/src/com/google/common/primitives/Booleans.java index 1af9e337d2e0..f96d1062d4e9 100644 --- a/guava/src/com/google/common/primitives/Booleans.java +++ b/guava/src/com/google/common/primitives/Booleans.java @@ -74,8 +74,8 @@ public String toString() { /** * Returns a {@code Comparator} that sorts {@code true} before {@code false}. * - *

This is particularly useful in Java 8+ in combination with {@code Comparators.comparing}, - * e.g. {@code Comparators.comparing(Foo::hasBar, trueFirst())}. + *

This is particularly useful in Java 8+ in combination with {@code Comparator.comparing}, + * e.g. {@code Comparator.comparing(Foo::hasBar, trueFirst())}. * * @since 21.0 */ @@ -86,8 +86,8 @@ public static Comparator trueFirst() { /** * Returns a {@code Comparator} that sorts {@code false} before {@code true}. * - *

This is particularly useful in Java 8+ in combination with {@code Comparators.comparing}, - * e.g. {@code Comparators.comparing(Foo::hasBar, falseFirst())}. + *

This is particularly useful in Java 8+ in combination with {@code Comparator.comparing}, + * e.g. {@code Comparator.comparing(Foo::hasBar, falseFirst())}. * * @since 21.0 */ From c7dcd6e712c2c4a68d01b0d27238df0bc71f2b8c Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 19 Dec 2023 13:27:49 -0800 Subject: [PATCH 083/216] Add a missing nullness annotation. I should have added this during cl/591014189. RELNOTES=n/a PiperOrigin-RevId: 592328114 --- android/guava/src/com/google/common/collect/Iterators.java | 2 +- guava/src/com/google/common/collect/Iterators.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/guava/src/com/google/common/collect/Iterators.java b/android/guava/src/com/google/common/collect/Iterators.java index 009a41ceff89..92a5570692b4 100644 --- a/android/guava/src/com/google/common/collect/Iterators.java +++ b/android/guava/src/com/google/common/collect/Iterators.java @@ -1106,7 +1106,7 @@ private static final class SingletonIterator extends UnmodifiableIterator { private static final Object SENTINEL = new Object(); - private Object valueOrSentinel; + private @Nullable Object valueOrSentinel; SingletonIterator(T value) { this.valueOrSentinel = value; diff --git a/guava/src/com/google/common/collect/Iterators.java b/guava/src/com/google/common/collect/Iterators.java index 009a41ceff89..92a5570692b4 100644 --- a/guava/src/com/google/common/collect/Iterators.java +++ b/guava/src/com/google/common/collect/Iterators.java @@ -1106,7 +1106,7 @@ private static final class SingletonIterator extends UnmodifiableIterator { private static final Object SENTINEL = new Object(); - private Object valueOrSentinel; + private @Nullable Object valueOrSentinel; SingletonIterator(T value) { this.valueOrSentinel = value; From 9a32e48c55e1e5304507c88344ea22d7e5ed839a Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 20 Dec 2023 10:03:07 -0800 Subject: [PATCH 084/216] Bump Truth to 1.2.0. RELNOTES=n/a PiperOrigin-RevId: 592590125 --- android/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index 28fc24d47011..630df8db0b75 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -14,7 +14,7 @@ %regex[.*.class] - 1.1.3 + 1.2.0 3.0.2 3.41.0 2.23.0 diff --git a/pom.xml b/pom.xml index 6dae34690165..3d257c33548b 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ %regex[.*.class] - 1.1.3 + 1.2.0 3.0.2 3.41.0 2.23.0 From 25ff2376be7662f973c321a63537ca09169bce88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 26 Dec 2023 07:56:48 -0800 Subject: [PATCH 085/216] Bump github/codeql-action from 3.22.11 to 3.22.12 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.22.11 to 3.22.12. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/b374143c1149a9115d881581d29b8390bbcbb59c...012739e5082ff0c22ca6d6ab32e07c36df03c4a4) Fixes #6894 RELNOTES=n/a PiperOrigin-RevId: 593792253 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 44df61b84e02..9b34631544c5 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@b374143c1149a9115d881581d29b8390bbcbb59c # v3.22.11 + uses: github/codeql-action/upload-sarif@012739e5082ff0c22ca6d6ab32e07c36df03c4a4 # v3.22.12 with: sarif_file: results.sarif From 2d30e0d6d1776792713d0dde44226e60a81cf2ac Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Thu, 28 Dec 2023 07:02:03 -0800 Subject: [PATCH 086/216] Update Public Suffix data. RELNOTES=n/a PiperOrigin-RevId: 594247930 --- .../publicsuffix/PublicSuffixPatterns.java | 14 +++++++------- .../publicsuffix/PublicSuffixPatterns.java | 14 +++++++------- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java b/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java index fd176780e1f4..6cadf1cae19d 100644 --- a/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java +++ b/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java @@ -42,13 +42,13 @@ private PublicSuffixPatterns() {} /** If a hostname is contained as a key in this map, it is a public suffix. */ public static final ImmutableMap EXACT = TrieParser.parseTrie( - "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva?s??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&l&buperananab?ohtac??n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?citsalej.piv,drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?irp?orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.xlh,?rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??vd7ckaabgm--nx?w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&g&olb,ro??ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.&cb,su,t", - "ne,ue,??pib,ten?vog?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&eci&ffoemoh,vres,?ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???u&leiw?rot,?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,tadtsudgniht,v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsohecapsppa,?i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&ht&ron-ue,uos-&em,fa,pa,ue,??lartnec-&ac,li,ue,?ts&ae&-&as,pa,su,vog-su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aeht&ron-pa,uos-pa,?ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,t&ingocnozama.&1-&ht&ron-ue.htua,uos-&em.htua,fa.htua,pa.htua,ue.htua,??lartnec-&ac.htua,li.htua,ue.htua,?ts&ae&-&as.htua,su.&htua,spif-htua,??ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,vog-su.spif-htua,???2-ts&ae&-su.&htua,spif-htua,?ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,??3-ts&aeht&ron-pa.htua,uos-pa.htua,?ew-ue.htua,??tadym,??p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-rettalp,anis:piv,,esaberif,k1,lortnocduolc,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&3s,ht&ron-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??uos-&em&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??fa.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3", - "s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??em.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?li.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ts&ae&-&as&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??su:-etisbew-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,?,vog-su&-&3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,???ht&ron-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??ue&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??vog-su&-&3s,etisbew-3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?????2-&htuos-&pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??lartnec-ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?????3&-ts&aeht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??uos-pa.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???s,?4-tsaehtuos-pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?labolg-3s.tniopssecca.parm,?yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.&rekamegas.1-&htron-nc.&koobeton,oiduts,?tsewhtron-nc.&koobeton,oiduts,??swanozama.&1-&htron-nc.&3s,adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?tsewhtron-nc.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??be.1-&htron-nc,tsewhtron-nc,?????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?gawsklov?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tednalyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?l", - "ov?narts?uas??f&1-&l--nx?s--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vsyt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??snduolc,t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ih", - "sayah??r&abi?ukawaihsin??wi&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&asim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara", - "?ihcat???y&agates?ubihs???e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,n&aecolatigidno,ur:.a,,?poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?e&b?n&igne?oip??rac??gni&arg?rheob??h&sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema???xnal??iws??t&a&eb?ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a!.rekamegas.&1-&ht&ron-ue.&koobeton,oiduts,?uos-&em.&koobeton,oiduts,?fa.&koobeton,oiduts,?pa.&koobeton,oiduts,?ue.&koobeton,oiduts,???lartnec-&ac.&koobeton,oiduts,?em.&koobeton,oiduts,?li.&koobeton,oiduts,?ue.&koobeton,oiduts,??ts&ae&-&as.&koobeton,oiduts,?pa.&koobeton,oiduts,?su.&koobeton,oiduts,spif-koobeton,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,???ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,?ue.&koobeton,oiduts,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,?????2-&htuos-&pa.koobeton,ue.koobeton,?lartnec-ue.koobeton,ts&ae&-su.&koobeton,oiduts,spif-koobeton,?ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,spif-koobeton,?ue.&koobeton,oiduts,????3-ts&aeht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,??ew-ue.&koobeton,oiduts,??4-tsaehtuos-pa.koobeton,??e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l!asite??mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&eiamaka,irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?iamaka,k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,4,5,6,7,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,?t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-", - "&ilrof?ìlrof??ilrof?ìlrof???g&amor&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,lecrev,o&ned,tpyrctfihs,?ppa-rettalp,s&egap,rekrow,?vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van!dlo??xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&ا&راما?لاصتا??را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); + "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&l&buperananab?ohtac??n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?citsalej.piv,drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?irp?orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.xlh,?rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&g&olb,ro??ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.&cb,su,tne,ue,??pib,ten?v", + "og?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&eci&ffoemoh,vres,?ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???u&leiw?rot,?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,tadtsudgniht,v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsohecapsppa,?i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&ht&ron-ue,uos-&em,fa,pa,ue,??lartnec-&ac,li,ue,?ts&ae&-&as,pa,su,vog-su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aeht&ron-pa,uos-pa,?ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,t&ingocnozama.&1-&ht&ron-ue.htua,uos-&em.htua,fa.htua,pa.htua,ue.htua,??lartnec-&ac.htua,li.htua,ue.htua,?ts&ae&-&as.htua,su.&htua,spif-htua,??ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,vog-su.spif-htua,???2-ts&ae&-su.&htua,spif-htua,?ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,??3-ts&aeht&ron-pa.htua,uos-pa.htua,?ew-ue.htua,??tadym,??p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-rettalp,anis:piv,,esaberif,k1,lortnocduolc,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&3s,ht&ron-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??uos-&em&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??fa.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif", + "-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??em.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?li.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ts&ae&-&as&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??su:-etisbew-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,?,vog-su&-&3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,???ht&ron-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??ue&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??vog-su&-&3s,etisbew-3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?????2-&htuos-&pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??lartnec-ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?????3&-ts&aeht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??uos-pa.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???s,?4-tsaehtuos-pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?labolg-3s.tniopssecca.parm,?yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.&rekamegas.1-&htron-nc.&koobeton,oiduts,?tsewhtron-nc.&koobeton,oiduts,??swanozama.&1-&htron-nc.&3s,adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?tsewhtron-nc.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??be.1-&htron-nc,tsewhtron-nc,?????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tednalyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?lov?narts?uas??f&1-&l--nx?s", + "--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vsyt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??snduolc,t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ihsayah??r&abi?ukawaihsin??w", + "i&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&asim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara?ihcat???y&agates?ubihs???", + "e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,n&aecolatigidno,ur:.a,,?poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?e&b?n&igne?oip??rac??gni&arg?rheob??h&sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema???xnal??iws??t&a&eb?ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a!.rekamegas.&1-&ht&ron-ue.&koobeton,oiduts,?uos-&em.&koobeton,oiduts,?fa.&koobeton,oiduts,?pa.&koobeton,oiduts,?ue.&koobeton,oiduts,???lartnec-&ac.&koobeton,oiduts,?em.&koobeton,oiduts,?li.&koobeton,oiduts,?ue.&koobeton,oiduts,??ts&ae&-&as.&koobeton,oiduts,?pa.&koobeton,oiduts,?su.&koobeton,oiduts,spif-koobeton,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,???ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,?ue.&koobeton,oiduts,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,?????2-&htuos-&pa.koobeton,ue.koobeton,?lartnec-ue.koobeton,ts&ae&-su.&koobeton,oiduts,spif-koobeton,?ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,spif-koobeton,?ue.&koobeton,oiduts,????3-ts&aeht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,??ew-ue.&koobeton,oiduts,??4-tsaehtuos-pa.koobeton,??e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l?mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&eiamaka,irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?iamaka,k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,4,5,6,7,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,?t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-&ilrof?ìlrof??ilrof?ìlrof???g&amo", + "r&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,lecrev,o&ned,tpyrctfihs,?ppa-rettalp,s&egap,rekrow,?vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van!dlo??xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&اراما?را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); /** * If a hostname is not a key in the EXCLUDE map, and if removing its leftmost component results diff --git a/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java b/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java index fd176780e1f4..6cadf1cae19d 100644 --- a/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java +++ b/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java @@ -42,13 +42,13 @@ private PublicSuffixPatterns() {} /** If a hostname is contained as a key in this map, it is a public suffix. */ public static final ImmutableMap EXACT = TrieParser.parseTrie( - "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva?s??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&l&buperananab?ohtac??n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?citsalej.piv,drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?irp?orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.xlh,?rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??vd7ckaabgm--nx?w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&g&olb,ro??ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.&cb,su,t", - "ne,ue,??pib,ten?vog?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&eci&ffoemoh,vres,?ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???u&leiw?rot,?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,tadtsudgniht,v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsohecapsppa,?i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&ht&ron-ue,uos-&em,fa,pa,ue,??lartnec-&ac,li,ue,?ts&ae&-&as,pa,su,vog-su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aeht&ron-pa,uos-pa,?ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,t&ingocnozama.&1-&ht&ron-ue.htua,uos-&em.htua,fa.htua,pa.htua,ue.htua,??lartnec-&ac.htua,li.htua,ue.htua,?ts&ae&-&as.htua,su.&htua,spif-htua,??ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,vog-su.spif-htua,???2-ts&ae&-su.&htua,spif-htua,?ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,??3-ts&aeht&ron-pa.htua,uos-pa.htua,?ew-ue.htua,??tadym,??p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-rettalp,anis:piv,,esaberif,k1,lortnocduolc,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&3s,ht&ron-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??uos-&em&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??fa.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3", - "s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??em.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?li.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ts&ae&-&as&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??su:-etisbew-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,?,vog-su&-&3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,???ht&ron-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??ue&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??vog-su&-&3s,etisbew-3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?????2-&htuos-&pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??lartnec-ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?????3&-ts&aeht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??uos-pa.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???s,?4-tsaehtuos-pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?labolg-3s.tniopssecca.parm,?yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.&rekamegas.1-&htron-nc.&koobeton,oiduts,?tsewhtron-nc.&koobeton,oiduts,??swanozama.&1-&htron-nc.&3s,adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?tsewhtron-nc.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??be.1-&htron-nc,tsewhtron-nc,?????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?gawsklov?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tednalyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?l", - "ov?narts?uas??f&1-&l--nx?s--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vsyt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??snduolc,t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ih", - "sayah??r&abi?ukawaihsin??wi&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&asim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara", - "?ihcat???y&agates?ubihs???e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,n&aecolatigidno,ur:.a,,?poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?e&b?n&igne?oip??rac??gni&arg?rheob??h&sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema???xnal??iws??t&a&eb?ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a!.rekamegas.&1-&ht&ron-ue.&koobeton,oiduts,?uos-&em.&koobeton,oiduts,?fa.&koobeton,oiduts,?pa.&koobeton,oiduts,?ue.&koobeton,oiduts,???lartnec-&ac.&koobeton,oiduts,?em.&koobeton,oiduts,?li.&koobeton,oiduts,?ue.&koobeton,oiduts,??ts&ae&-&as.&koobeton,oiduts,?pa.&koobeton,oiduts,?su.&koobeton,oiduts,spif-koobeton,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,???ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,?ue.&koobeton,oiduts,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,?????2-&htuos-&pa.koobeton,ue.koobeton,?lartnec-ue.koobeton,ts&ae&-su.&koobeton,oiduts,spif-koobeton,?ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,spif-koobeton,?ue.&koobeton,oiduts,????3-ts&aeht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,??ew-ue.&koobeton,oiduts,??4-tsaehtuos-pa.koobeton,??e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l!asite??mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&eiamaka,irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?iamaka,k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,4,5,6,7,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,?t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-", - "&ilrof?ìlrof??ilrof?ìlrof???g&amor&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,lecrev,o&ned,tpyrctfihs,?ppa-rettalp,s&egap,rekrow,?vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van!dlo??xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&ا&راما?لاصتا??را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); + "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&l&buperananab?ohtac??n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?citsalej.piv,drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?irp?orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.xlh,?rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&g&olb,ro??ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.&cb,su,tne,ue,??pib,ten?v", + "og?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&eci&ffoemoh,vres,?ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???u&leiw?rot,?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,tadtsudgniht,v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsohecapsppa,?i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&ht&ron-ue,uos-&em,fa,pa,ue,??lartnec-&ac,li,ue,?ts&ae&-&as,pa,su,vog-su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aeht&ron-pa,uos-pa,?ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,t&ingocnozama.&1-&ht&ron-ue.htua,uos-&em.htua,fa.htua,pa.htua,ue.htua,??lartnec-&ac.htua,li.htua,ue.htua,?ts&ae&-&as.htua,su.&htua,spif-htua,??ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,vog-su.spif-htua,???2-ts&ae&-su.&htua,spif-htua,?ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,??3-ts&aeht&ron-pa.htua,uos-pa.htua,?ew-ue.htua,??tadym,??p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-rettalp,anis:piv,,esaberif,k1,lortnocduolc,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&3s,ht&ron-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??uos-&em&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??fa.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif", + "-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??em.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?li.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ts&ae&-&as&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??su:-etisbew-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,?,vog-su&-&3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,???ht&ron-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??ue&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??vog-su&-&3s,etisbew-3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?????2-&htuos-&pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??lartnec-ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?????3&-ts&aeht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??uos-pa.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???s,?4-tsaehtuos-pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?labolg-3s.tniopssecca.parm,?yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.&rekamegas.1-&htron-nc.&koobeton,oiduts,?tsewhtron-nc.&koobeton,oiduts,??swanozama.&1-&htron-nc.&3s,adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?tsewhtron-nc.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??be.1-&htron-nc,tsewhtron-nc,?????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tednalyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?lov?narts?uas??f&1-&l--nx?s", + "--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vsyt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??snduolc,t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ihsayah??r&abi?ukawaihsin??w", + "i&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&asim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara?ihcat???y&agates?ubihs???", + "e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,n&aecolatigidno,ur:.a,,?poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?e&b?n&igne?oip??rac??gni&arg?rheob??h&sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema???xnal??iws??t&a&eb?ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a!.rekamegas.&1-&ht&ron-ue.&koobeton,oiduts,?uos-&em.&koobeton,oiduts,?fa.&koobeton,oiduts,?pa.&koobeton,oiduts,?ue.&koobeton,oiduts,???lartnec-&ac.&koobeton,oiduts,?em.&koobeton,oiduts,?li.&koobeton,oiduts,?ue.&koobeton,oiduts,??ts&ae&-&as.&koobeton,oiduts,?pa.&koobeton,oiduts,?su.&koobeton,oiduts,spif-koobeton,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,???ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,?ue.&koobeton,oiduts,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,?????2-&htuos-&pa.koobeton,ue.koobeton,?lartnec-ue.koobeton,ts&ae&-su.&koobeton,oiduts,spif-koobeton,?ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,spif-koobeton,?ue.&koobeton,oiduts,????3-ts&aeht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,??ew-ue.&koobeton,oiduts,??4-tsaehtuos-pa.koobeton,??e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l?mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&eiamaka,irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?iamaka,k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,4,5,6,7,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,?t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-&ilrof?ìlrof??ilrof?ìlrof???g&amo", + "r&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,lecrev,o&ned,tpyrctfihs,?ppa-rettalp,s&egap,rekrow,?vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van!dlo??xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&اراما?را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); /** * If a hostname is not a key in the EXCLUDE map, and if removing its leftmost component results From 8a8efc75e20b2df9421e301ef9f0f2ed9e14c992 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 28 Dec 2023 18:24:08 -0800 Subject: [PATCH 087/216] Use fake filesystems to make Guava tests work better [under Windows](https://github.com/google/guava/issues/2130) and Android, and prepare jimfs for some preliminary Android testing. RELNOTES=n/a PiperOrigin-RevId: 594346983 --- .../com/google/common/io/MoreFilesTest.java | 85 ++++++++++++------- 1 file changed, 55 insertions(+), 30 deletions(-) diff --git a/guava-tests/test/com/google/common/io/MoreFilesTest.java b/guava-tests/test/com/google/common/io/MoreFilesTest.java index 2b9c20fb62fb..0eee592106ef 100644 --- a/guava-tests/test/com/google/common/io/MoreFilesTest.java +++ b/guava-tests/test/com/google/common/io/MoreFilesTest.java @@ -236,6 +236,12 @@ public void testTouch() throws IOException { Files.delete(temp); assertFalse(Files.exists(temp)); MoreFiles.touch(temp); + + if (isAndroid()) { + // TODO: b/317997723 - Test touch() more after it works under Android's library desugaring. + return; + } + assertTrue(Files.exists(temp)); MoreFiles.touch(temp); assertTrue(Files.exists(temp)); @@ -251,13 +257,13 @@ public void testTouchTime() throws IOException { } public void testCreateParentDirectories_root() throws IOException { - if (isWindows()) { - return; // TODO: b/136041958 - *Sometimes* fails with "A:\: The device is not ready" + // We use a fake filesystem to sidestep flaky problems with Windows (b/136041958). + try (FileSystem fs = Jimfs.newFileSystem(Configuration.unix())) { + Path root = fs.getRootDirectories().iterator().next(); + assertNull(root.getParent()); + assertNull(root.toRealPath().getParent()); + MoreFiles.createParentDirectories(root); // test that there's no exception } - Path root = root(); - assertNull(root.getParent()); - assertNull(root.toRealPath().getParent()); - MoreFiles.createParentDirectories(root); // test that there's no exception } public void testCreateParentDirectories_relativePath() throws IOException { @@ -311,13 +317,20 @@ public void testCreateParentDirectories_nonDirectoryParentExists() throws IOExce } public void testCreateParentDirectories_symlinkParentExists() throws IOException { - if (isWindows()) { - return; // TODO: b/136041958 - *Sometimes* fails with FileAlreadyExistsException + /* + * We use a fake filesystem to sidestep: + * + * - flaky problems with Windows (b/136041958) + * + * - the lack of support for symlinks in the default filesystem under Android's desugared + * java.nio.file + */ + try (FileSystem fs = Jimfs.newFileSystem(Configuration.unix())) { + Path symlink = fs.getPath("linkToDir"); + Files.createSymbolicLink(symlink, fs.getRootDirectories().iterator().next()); + Path file = symlink.resolve("foo"); + MoreFiles.createParentDirectories(file); } - Path symlink = tempDir.resolve("linkToDir"); - Files.createSymbolicLink(symlink, root()); - Path file = symlink.resolve("foo"); - MoreFiles.createParentDirectories(file); } public void testGetFileExtension() { @@ -357,30 +370,37 @@ public void testGetNameWithoutExtension() { } public void testPredicates() throws IOException { - Path file = createTempFile(); - Path dir = tempDir.resolve("dir"); - Files.createDirectory(dir); + /* + * We use a fake filesystem to sidestep the lack of support for symlinks in the default + * filesystem under Android's desugared java.nio.file. + */ + try (FileSystem fs = Jimfs.newFileSystem(Configuration.unix())) { + Path file = fs.getPath("file"); + Files.createFile(file); + Path dir = fs.getPath("dir"); + Files.createDirectory(dir); - assertTrue(MoreFiles.isDirectory().apply(dir)); - assertFalse(MoreFiles.isRegularFile().apply(dir)); + assertTrue(MoreFiles.isDirectory().apply(dir)); + assertFalse(MoreFiles.isRegularFile().apply(dir)); - assertFalse(MoreFiles.isDirectory().apply(file)); - assertTrue(MoreFiles.isRegularFile().apply(file)); + assertFalse(MoreFiles.isDirectory().apply(file)); + assertTrue(MoreFiles.isRegularFile().apply(file)); - Path symlinkToDir = tempDir.resolve("symlinkToDir"); - Path symlinkToFile = tempDir.resolve("symlinkToFile"); + Path symlinkToDir = fs.getPath("symlinkToDir"); + Path symlinkToFile = fs.getPath("symlinkToFile"); - Files.createSymbolicLink(symlinkToDir, dir); - Files.createSymbolicLink(symlinkToFile, file); + Files.createSymbolicLink(symlinkToDir, dir); + Files.createSymbolicLink(symlinkToFile, file); - assertTrue(MoreFiles.isDirectory().apply(symlinkToDir)); - assertFalse(MoreFiles.isRegularFile().apply(symlinkToDir)); + assertTrue(MoreFiles.isDirectory().apply(symlinkToDir)); + assertFalse(MoreFiles.isRegularFile().apply(symlinkToDir)); - assertFalse(MoreFiles.isDirectory().apply(symlinkToFile)); - assertTrue(MoreFiles.isRegularFile().apply(symlinkToFile)); + assertFalse(MoreFiles.isDirectory().apply(symlinkToFile)); + assertTrue(MoreFiles.isRegularFile().apply(symlinkToFile)); - assertFalse(MoreFiles.isDirectory(NOFOLLOW_LINKS).apply(symlinkToDir)); - assertFalse(MoreFiles.isRegularFile(NOFOLLOW_LINKS).apply(symlinkToFile)); + assertFalse(MoreFiles.isDirectory(NOFOLLOW_LINKS).apply(symlinkToDir)); + assertFalse(MoreFiles.isRegularFile(NOFOLLOW_LINKS).apply(symlinkToFile)); + } } /** @@ -576,6 +596,7 @@ public void testDeleteDirectoryContents_symlinkToDir_sdsNotSupported_allowInsecu * not possible to protect against this if the file system doesn't. */ public void testDirectoryDeletion_directorySymlinkRace() throws IOException { + int iterations = isAndroid() ? 100 : 5000; for (DirectoryDeleteMethod method : EnumSet.allOf(DirectoryDeleteMethod.class)) { try (FileSystem fs = newTestFileSystem(SECURE_DIRECTORY_STREAM)) { Path dirToDelete = fs.getPath("dir/b/i"); @@ -586,7 +607,7 @@ public void testDirectoryDeletion_directorySymlinkRace() throws IOException { startDirectorySymlinkSwitching(changingFile, symlinkTarget, executor); try { - for (int i = 0; i < 5000; i++) { + for (int i = 0; i < iterations; i++) { try { Files.createDirectories(changingFile); Files.createFile(dirToDelete.resolve("j/k")); @@ -708,4 +729,8 @@ public void assertDeleteSucceeded(Path path) throws IOException { private static boolean isWindows() { return OS_NAME.value().startsWith("Windows"); } + + private static boolean isAndroid() { + return System.getProperty("java.runtime.name", "").contains("Android"); + } } From f347fb7a2ddd975e7ab94e0f3f71ab3f0d21f580 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 2 Jan 2024 08:40:13 -0800 Subject: [PATCH 088/216] Document that we now run our Android tests under KitKat. RELNOTES=n/a PiperOrigin-RevId: 595126156 --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 51ec2bea2703..2d236923cde4 100644 --- a/README.md +++ b/README.md @@ -123,7 +123,7 @@ flavor. on Linux, with some additional testing on newer JDKs and on Windows. Some features, especially in `com.google.common.io`, may not work correctly in non-Linux environments. For the Android flavor, our unit tests also run on - API level 15 (Ice Cream Sandwich). + API level 19 (KitKat). [guava-snapshot-api-docs]: https://guava.dev/releases/snapshot-jre/api/docs/ [guava-snapshot-api-diffs]: https://guava.dev/releases/snapshot-jre/api/diffs/ From 1de7270043e71ff155005cd1354ab07fe8726cc0 Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Wed, 3 Jan 2024 05:19:36 -0800 Subject: [PATCH 089/216] Fix some typos in comments RELNOTES=n/a PiperOrigin-RevId: 595373073 --- android/guava/src/com/google/common/base/Suppliers.java | 6 +++--- guava/src/com/google/common/base/Suppliers.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/android/guava/src/com/google/common/base/Suppliers.java b/android/guava/src/com/google/common/base/Suppliers.java index d97bff626b0e..60bcf6921fee 100644 --- a/android/guava/src/com/google/common/base/Suppliers.java +++ b/android/guava/src/com/google/common/base/Suppliers.java @@ -140,7 +140,7 @@ public T get() { } } } - // This is safe because we checked `initialized.` + // This is safe because we checked `initialized`. return uncheckedCastNullableTToT(value); } @@ -185,7 +185,7 @@ public T get() { } } } - // This is safe because we checked `delegate.` + // This is safe because we checked `delegate`. return uncheckedCastNullableTToT(value); } @@ -268,7 +268,7 @@ public T get() { } } } - // This is safe because we checked `expirationNanos.` + // This is safe because we checked `expirationNanos`. return uncheckedCastNullableTToT(value); } diff --git a/guava/src/com/google/common/base/Suppliers.java b/guava/src/com/google/common/base/Suppliers.java index d97bff626b0e..60bcf6921fee 100644 --- a/guava/src/com/google/common/base/Suppliers.java +++ b/guava/src/com/google/common/base/Suppliers.java @@ -140,7 +140,7 @@ public T get() { } } } - // This is safe because we checked `initialized.` + // This is safe because we checked `initialized`. return uncheckedCastNullableTToT(value); } @@ -185,7 +185,7 @@ public T get() { } } } - // This is safe because we checked `delegate.` + // This is safe because we checked `delegate`. return uncheckedCastNullableTToT(value); } @@ -268,7 +268,7 @@ public T get() { } } } - // This is safe because we checked `expirationNanos.` + // This is safe because we checked `expirationNanos`. return uncheckedCastNullableTToT(value); } From 757a5d5f87010facdb9e597989656daf2c8fce46 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 8 Jan 2024 11:16:04 -0800 Subject: [PATCH 090/216] Bump github/codeql-action from 3.22.12 to 3.23.0 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.22.12 to 3.23.0. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/012739e5082ff0c22ca6d6ab32e07c36df03c4a4...e5f05b81d5b6ff8cfa111c80c22c5fd02a384118) Fixes #6906 RELNOTES=n/a PiperOrigin-RevId: 596650565 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 9b34631544c5..eaa32a12cdbb 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@012739e5082ff0c22ca6d6ab32e07c36df03c4a4 # v3.22.12 + uses: github/codeql-action/upload-sarif@e5f05b81d5b6ff8cfa111c80c22c5fd02a384118 # v3.23.0 with: sarif_file: results.sarif From ca0ad2ab28cd6cd0974bf2df30ee495dfefb94bf Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 8 Jan 2024 12:30:20 -0800 Subject: [PATCH 091/216] Bump copyright year. Without this, our Javadoc lists 2023 as the most recent year, and that gets weird after a little while. RELNOTES=n/a PiperOrigin-RevId: 596671950 --- android/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index 630df8db0b75..61bbc787d370 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -22,7 +22,7 @@ 9+181-r4173-1 - 2023-02-01T00:00:00Z + 2024-01-02T00:00:00Z UTF-8 integration diff --git a/pom.xml b/pom.xml index 3d257c33548b..d4fa95458c2b 100644 --- a/pom.xml +++ b/pom.xml @@ -22,7 +22,7 @@ 9+181-r4173-1 - 2023-02-01T00:00:00Z + 2024-01-02T00:00:00Z UTF-8 integration From 76e46ec35bbc220ba56d1e9a0abd853a7df51ece Mon Sep 17 00:00:00 2001 From: mfboulos Date: Wed, 10 Jan 2024 09:57:02 -0800 Subject: [PATCH 092/216] Add `Duration` overload for `Suppliers.memoizeWithExpiration`. This CL contains part but not all of https://github.com/google/guava/pull/3691 Fixes https://github.com/google/guava/issues/3169 We'd considered this previously in cl/197933201 but gotten stuck on the question of whether to accept and/or return the `java.util.function` type. My claim is that we want an overload that is near-identical to the old one for ease of migration. Additionally, if we want to support `java.util.function.Supplier` in the future, then we're going to have to add an overload of the existing `memoize` method, and which point it would probably look _more_ weird if we had 2 overloads for `memoize` (and maybe `synchronizedSupplier`) but only a single `memoizeWithExpiration` method. RELNOTES=`base`: Added a `Duration` overload for `Suppliers.memoizeWithExpiration`. PiperOrigin-RevId: 597280125 --- .../com/google/common/base/SuppliersTest.java | 59 ++++++++++++++++++- .../common/base/IgnoreJRERequirement.java | 30 ++++++++++ .../src/com/google/common/base/Internal.java | 53 +++++++++++++++++ .../src/com/google/common/base/Suppliers.java | 53 ++++++++++++++--- android/pom.xml | 2 +- .../com/google/common/base/SuppliersTest.java | 59 ++++++++++++++++++- .../common/base/IgnoreJRERequirement.java | 30 ++++++++++ .../src/com/google/common/base/Internal.java | 53 +++++++++++++++++ .../src/com/google/common/base/Suppliers.java | 53 ++++++++++++++--- pom.xml | 2 +- 10 files changed, 370 insertions(+), 24 deletions(-) create mode 100644 android/guava/src/com/google/common/base/IgnoreJRERequirement.java create mode 100644 android/guava/src/com/google/common/base/Internal.java create mode 100644 guava/src/com/google/common/base/IgnoreJRERequirement.java create mode 100644 guava/src/com/google/common/base/Internal.java diff --git a/android/guava-tests/test/com/google/common/base/SuppliersTest.java b/android/guava-tests/test/com/google/common/base/SuppliersTest.java index fef3a2684b98..6f3d7bdbe03e 100644 --- a/android/guava-tests/test/com/google/common/base/SuppliersTest.java +++ b/android/guava-tests/test/com/google/common/base/SuppliersTest.java @@ -27,6 +27,7 @@ import com.google.common.testing.ClassSanityTester; import com.google.common.testing.EqualsTester; import java.io.Serializable; +import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -216,7 +217,7 @@ public List apply(List list) { @J2ktIncompatible @GwtIncompatible // Thread.sleep - public void testMemoizeWithExpiration() throws InterruptedException { + public void testMemoizeWithExpiration_longTimeUnit() throws InterruptedException { CountingSupplier countingSupplier = new CountingSupplier(); Supplier memoizedSupplier = @@ -225,6 +226,50 @@ public void testMemoizeWithExpiration() throws InterruptedException { checkExpiration(countingSupplier, memoizedSupplier); } + @J2ktIncompatible + @GwtIncompatible // Thread.sleep + @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API + public void testMemoizeWithExpiration_duration() throws InterruptedException { + CountingSupplier countingSupplier = new CountingSupplier(); + + Supplier memoizedSupplier = + Suppliers.memoizeWithExpiration(countingSupplier, Duration.ofMillis(75)); + + checkExpiration(countingSupplier, memoizedSupplier); + } + + public void testMemoizeWithExpiration_longTimeUnitNegative() throws InterruptedException { + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", 0, TimeUnit.MILLISECONDS); + fail(); + } catch (IllegalArgumentException expected) { + } + + try { + Supplier unused = + Suppliers.memoizeWithExpiration(() -> "", -1, TimeUnit.MILLISECONDS); + fail(); + } catch (IllegalArgumentException expected) { + } + } + + @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API + @J2ktIncompatible // Duration + @GwtIncompatible // Duration + public void testMemoizeWithExpiration_durationNegative() throws InterruptedException { + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ZERO); + fail(); + } catch (IllegalArgumentException expected) { + } + + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ofMillis(-1)); + fail(); + } catch (IllegalArgumentException expected) { + } + } + @J2ktIncompatible @GwtIncompatible // Thread.sleep, SerializationTester public void testMemoizeWithExpirationSerialized() throws InterruptedException { @@ -451,15 +496,23 @@ public void testSerialization() { @J2ktIncompatible @GwtIncompatible // reflection + @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersNullChecks() throws Exception { - new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testNulls(); + new ClassSanityTester() + .setDefault(Duration.class, Duration.ofSeconds(1)) + .forAllPublicStaticMethods(Suppliers.class) + .testNulls(); } @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // TODO(cpovirk): ClassNotFoundException: com.google.common.base.Function + @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersSerializable() throws Exception { - new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testSerializable(); + new ClassSanityTester() + .setDefault(Duration.class, Duration.ofSeconds(1)) + .forAllPublicStaticMethods(Suppliers.class) + .testSerializable(); } public void testOfInstance_equals() { diff --git a/android/guava/src/com/google/common/base/IgnoreJRERequirement.java b/android/guava/src/com/google/common/base/IgnoreJRERequirement.java new file mode 100644 index 000000000000..c34a9cdd974b --- /dev/null +++ b/android/guava/src/com/google/common/base/IgnoreJRERequirement.java @@ -0,0 +1,30 @@ +/* + * Copyright 2019 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package com.google.common.base; + +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; + +import java.lang.annotation.Target; + +/** + * Disables Animal Sniffer's checking of compatibility with older versions of Java/Android. + * + *

Each package's copy of this annotation needs to be listed in our {@code pom.xml}. + */ +@Target({METHOD, CONSTRUCTOR, TYPE}) +@ElementTypesAreNonnullByDefault +@interface IgnoreJRERequirement {} diff --git a/android/guava/src/com/google/common/base/Internal.java b/android/guava/src/com/google/common/base/Internal.java new file mode 100644 index 000000000000..0e1ee2400f24 --- /dev/null +++ b/android/guava/src/com/google/common/base/Internal.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package com.google.common.base; + +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; +import java.time.Duration; + +/** This class is for {@code com.google.common.base} use only! */ +@J2ktIncompatible +@GwtIncompatible // java.time.Duration +@ElementTypesAreNonnullByDefault +final class Internal { + + /** + * Returns the number of nanoseconds of the given duration without throwing or overflowing. + * + *

Instead of throwing {@link ArithmeticException}, this method silently saturates to either + * {@link Long#MAX_VALUE} or {@link Long#MIN_VALUE}. This behavior can be useful when decomposing + * a duration in order to call a legacy API which requires a {@code long, TimeUnit} pair. + */ + @SuppressWarnings({ + // We use this method only for cases in which we need to decompose to primitives. + "GoodTime-ApiWithNumericTimeUnit", + "GoodTime-DecomposeToPrimitive", + // We use this method only from within APIs that require a Duration. + "Java7ApiChecker", + }) + @IgnoreJRERequirement + static long toNanosSaturated(Duration duration) { + // Using a try/catch seems lazy, but the catch block will rarely get invoked (except for + // durations longer than approximately +/- 292 years). + try { + return duration.toNanos(); + } catch (ArithmeticException tooBig) { + return duration.isNegative() ? Long.MIN_VALUE : Long.MAX_VALUE; + } + } + + private Internal() {} +} diff --git a/android/guava/src/com/google/common/base/Suppliers.java b/android/guava/src/com/google/common/base/Suppliers.java index 60bcf6921fee..07b27b607e0f 100644 --- a/android/guava/src/com/google/common/base/Suppliers.java +++ b/android/guava/src/com/google/common/base/Suppliers.java @@ -14,13 +14,18 @@ package com.google.common.base; +import static com.google.common.base.Internal.toNanosSaturated; import static com.google.common.base.NullnessCasts.uncheckedCastNullableTToT; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.annotations.Beta; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.io.Serializable; +import java.time.Duration; import java.util.concurrent.TimeUnit; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -34,7 +39,7 @@ * @author Harry Heymann * @since 2.0 */ -@GwtCompatible +@GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public final class Suppliers { private Suppliers() {} @@ -221,10 +226,44 @@ public String toString() { * @throws IllegalArgumentException if {@code duration} is not positive * @since 2.0 */ - @SuppressWarnings("GoodTime") // should accept a java.time.Duration + @SuppressWarnings("GoodTime") // Prefer the Duration overload public static Supplier memoizeWithExpiration( Supplier delegate, long duration, TimeUnit unit) { - return new ExpiringMemoizingSupplier<>(delegate, duration, unit); + checkNotNull(delegate); + checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); + return new ExpiringMemoizingSupplier<>(delegate, unit.toNanos(duration)); + } + + /** + * Returns a supplier that caches the instance supplied by the delegate and removes the cached + * value after the specified time has passed. Subsequent calls to {@code get()} return the cached + * value if the expiration time has not passed. After the expiration time, a new value is + * retrieved, cached, and returned. See: memoization + * + *

The returned supplier is thread-safe. The supplier's serialized form does not contain the + * cached value, which will be recalculated when {@code get()} is called on the reserialized + * instance. The actual memoization does not happen when the underlying delegate throws an + * exception. + * + *

When the underlying delegate throws an exception then this memoizing supplier will keep + * delegating calls until it returns valid data. + * + * @param duration the length of time after a value is created that it should stop being returned + * by subsequent {@code get()} calls + * @throws IllegalArgumentException if {@code duration} is not positive + * @since NEXT + */ + @Beta // only until we're confident that Java 8 APIs are safe for our Android users + @J2ktIncompatible + @GwtIncompatible // java.time.Duration + @SuppressWarnings("Java7ApiChecker") // no more dangerous that wherever the user got the Duration + @IgnoreJRERequirement + public static Supplier memoizeWithExpiration( + Supplier delegate, Duration duration) { + checkNotNull(delegate); + checkArgument(duration.compareTo(Duration.ZERO) > 0, "duration (%s) must be > 0", duration); + return new ExpiringMemoizingSupplier(delegate, toNanosSaturated(duration)); } @VisibleForTesting @@ -237,15 +276,13 @@ static class ExpiringMemoizingSupplier // The special value 0 means "not yet initialized". transient volatile long expirationNanos; - ExpiringMemoizingSupplier(Supplier delegate, long duration, TimeUnit unit) { - this.delegate = checkNotNull(delegate); - this.durationNanos = unit.toNanos(duration); - checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); + ExpiringMemoizingSupplier(Supplier delegate, long durationNanos) { + this.delegate = delegate; + this.durationNanos = durationNanos; } @Override @ParametricNullness - @SuppressWarnings("GoodTime") // reading system time without TimeSource public T get() { // Another variant of Double Checked Locking. // diff --git a/android/pom.xml b/android/pom.xml index 61bbc787d370..59811c7d3de0 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -177,7 +177,7 @@ animal-sniffer-maven-plugin 1.23 - com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement + com.google.common.base.IgnoreJRERequirement,com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement true com.toasttab.android diff --git a/guava-tests/test/com/google/common/base/SuppliersTest.java b/guava-tests/test/com/google/common/base/SuppliersTest.java index fef3a2684b98..6f3d7bdbe03e 100644 --- a/guava-tests/test/com/google/common/base/SuppliersTest.java +++ b/guava-tests/test/com/google/common/base/SuppliersTest.java @@ -27,6 +27,7 @@ import com.google.common.testing.ClassSanityTester; import com.google.common.testing.EqualsTester; import java.io.Serializable; +import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -216,7 +217,7 @@ public List apply(List list) { @J2ktIncompatible @GwtIncompatible // Thread.sleep - public void testMemoizeWithExpiration() throws InterruptedException { + public void testMemoizeWithExpiration_longTimeUnit() throws InterruptedException { CountingSupplier countingSupplier = new CountingSupplier(); Supplier memoizedSupplier = @@ -225,6 +226,50 @@ public void testMemoizeWithExpiration() throws InterruptedException { checkExpiration(countingSupplier, memoizedSupplier); } + @J2ktIncompatible + @GwtIncompatible // Thread.sleep + @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API + public void testMemoizeWithExpiration_duration() throws InterruptedException { + CountingSupplier countingSupplier = new CountingSupplier(); + + Supplier memoizedSupplier = + Suppliers.memoizeWithExpiration(countingSupplier, Duration.ofMillis(75)); + + checkExpiration(countingSupplier, memoizedSupplier); + } + + public void testMemoizeWithExpiration_longTimeUnitNegative() throws InterruptedException { + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", 0, TimeUnit.MILLISECONDS); + fail(); + } catch (IllegalArgumentException expected) { + } + + try { + Supplier unused = + Suppliers.memoizeWithExpiration(() -> "", -1, TimeUnit.MILLISECONDS); + fail(); + } catch (IllegalArgumentException expected) { + } + } + + @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API + @J2ktIncompatible // Duration + @GwtIncompatible // Duration + public void testMemoizeWithExpiration_durationNegative() throws InterruptedException { + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ZERO); + fail(); + } catch (IllegalArgumentException expected) { + } + + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ofMillis(-1)); + fail(); + } catch (IllegalArgumentException expected) { + } + } + @J2ktIncompatible @GwtIncompatible // Thread.sleep, SerializationTester public void testMemoizeWithExpirationSerialized() throws InterruptedException { @@ -451,15 +496,23 @@ public void testSerialization() { @J2ktIncompatible @GwtIncompatible // reflection + @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersNullChecks() throws Exception { - new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testNulls(); + new ClassSanityTester() + .setDefault(Duration.class, Duration.ofSeconds(1)) + .forAllPublicStaticMethods(Suppliers.class) + .testNulls(); } @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // TODO(cpovirk): ClassNotFoundException: com.google.common.base.Function + @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersSerializable() throws Exception { - new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testSerializable(); + new ClassSanityTester() + .setDefault(Duration.class, Duration.ofSeconds(1)) + .forAllPublicStaticMethods(Suppliers.class) + .testSerializable(); } public void testOfInstance_equals() { diff --git a/guava/src/com/google/common/base/IgnoreJRERequirement.java b/guava/src/com/google/common/base/IgnoreJRERequirement.java new file mode 100644 index 000000000000..c34a9cdd974b --- /dev/null +++ b/guava/src/com/google/common/base/IgnoreJRERequirement.java @@ -0,0 +1,30 @@ +/* + * Copyright 2019 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package com.google.common.base; + +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; + +import java.lang.annotation.Target; + +/** + * Disables Animal Sniffer's checking of compatibility with older versions of Java/Android. + * + *

Each package's copy of this annotation needs to be listed in our {@code pom.xml}. + */ +@Target({METHOD, CONSTRUCTOR, TYPE}) +@ElementTypesAreNonnullByDefault +@interface IgnoreJRERequirement {} diff --git a/guava/src/com/google/common/base/Internal.java b/guava/src/com/google/common/base/Internal.java new file mode 100644 index 000000000000..0e1ee2400f24 --- /dev/null +++ b/guava/src/com/google/common/base/Internal.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package com.google.common.base; + +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; +import java.time.Duration; + +/** This class is for {@code com.google.common.base} use only! */ +@J2ktIncompatible +@GwtIncompatible // java.time.Duration +@ElementTypesAreNonnullByDefault +final class Internal { + + /** + * Returns the number of nanoseconds of the given duration without throwing or overflowing. + * + *

Instead of throwing {@link ArithmeticException}, this method silently saturates to either + * {@link Long#MAX_VALUE} or {@link Long#MIN_VALUE}. This behavior can be useful when decomposing + * a duration in order to call a legacy API which requires a {@code long, TimeUnit} pair. + */ + @SuppressWarnings({ + // We use this method only for cases in which we need to decompose to primitives. + "GoodTime-ApiWithNumericTimeUnit", + "GoodTime-DecomposeToPrimitive", + // We use this method only from within APIs that require a Duration. + "Java7ApiChecker", + }) + @IgnoreJRERequirement + static long toNanosSaturated(Duration duration) { + // Using a try/catch seems lazy, but the catch block will rarely get invoked (except for + // durations longer than approximately +/- 292 years). + try { + return duration.toNanos(); + } catch (ArithmeticException tooBig) { + return duration.isNegative() ? Long.MIN_VALUE : Long.MAX_VALUE; + } + } + + private Internal() {} +} diff --git a/guava/src/com/google/common/base/Suppliers.java b/guava/src/com/google/common/base/Suppliers.java index 60bcf6921fee..07b27b607e0f 100644 --- a/guava/src/com/google/common/base/Suppliers.java +++ b/guava/src/com/google/common/base/Suppliers.java @@ -14,13 +14,18 @@ package com.google.common.base; +import static com.google.common.base.Internal.toNanosSaturated; import static com.google.common.base.NullnessCasts.uncheckedCastNullableTToT; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.annotations.Beta; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.io.Serializable; +import java.time.Duration; import java.util.concurrent.TimeUnit; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -34,7 +39,7 @@ * @author Harry Heymann * @since 2.0 */ -@GwtCompatible +@GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public final class Suppliers { private Suppliers() {} @@ -221,10 +226,44 @@ public String toString() { * @throws IllegalArgumentException if {@code duration} is not positive * @since 2.0 */ - @SuppressWarnings("GoodTime") // should accept a java.time.Duration + @SuppressWarnings("GoodTime") // Prefer the Duration overload public static Supplier memoizeWithExpiration( Supplier delegate, long duration, TimeUnit unit) { - return new ExpiringMemoizingSupplier<>(delegate, duration, unit); + checkNotNull(delegate); + checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); + return new ExpiringMemoizingSupplier<>(delegate, unit.toNanos(duration)); + } + + /** + * Returns a supplier that caches the instance supplied by the delegate and removes the cached + * value after the specified time has passed. Subsequent calls to {@code get()} return the cached + * value if the expiration time has not passed. After the expiration time, a new value is + * retrieved, cached, and returned. See: memoization + * + *

The returned supplier is thread-safe. The supplier's serialized form does not contain the + * cached value, which will be recalculated when {@code get()} is called on the reserialized + * instance. The actual memoization does not happen when the underlying delegate throws an + * exception. + * + *

When the underlying delegate throws an exception then this memoizing supplier will keep + * delegating calls until it returns valid data. + * + * @param duration the length of time after a value is created that it should stop being returned + * by subsequent {@code get()} calls + * @throws IllegalArgumentException if {@code duration} is not positive + * @since NEXT + */ + @Beta // only until we're confident that Java 8 APIs are safe for our Android users + @J2ktIncompatible + @GwtIncompatible // java.time.Duration + @SuppressWarnings("Java7ApiChecker") // no more dangerous that wherever the user got the Duration + @IgnoreJRERequirement + public static Supplier memoizeWithExpiration( + Supplier delegate, Duration duration) { + checkNotNull(delegate); + checkArgument(duration.compareTo(Duration.ZERO) > 0, "duration (%s) must be > 0", duration); + return new ExpiringMemoizingSupplier(delegate, toNanosSaturated(duration)); } @VisibleForTesting @@ -237,15 +276,13 @@ static class ExpiringMemoizingSupplier // The special value 0 means "not yet initialized". transient volatile long expirationNanos; - ExpiringMemoizingSupplier(Supplier delegate, long duration, TimeUnit unit) { - this.delegate = checkNotNull(delegate); - this.durationNanos = unit.toNanos(duration); - checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); + ExpiringMemoizingSupplier(Supplier delegate, long durationNanos) { + this.delegate = delegate; + this.durationNanos = durationNanos; } @Override @ParametricNullness - @SuppressWarnings("GoodTime") // reading system time without TimeSource public T get() { // Another variant of Double Checked Locking. // diff --git a/pom.xml b/pom.xml index d4fa95458c2b..a8a12ecc44a7 100644 --- a/pom.xml +++ b/pom.xml @@ -178,7 +178,7 @@ animal-sniffer-maven-plugin 1.23 - com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement + com.google.common.base.IgnoreJRERequirement,com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement true org.codehaus.mojo.signature From 4eaa5a5c186416eed9a1fea44315c109265c353e Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 10 Jan 2024 11:07:37 -0800 Subject: [PATCH 093/216] Roll back `Suppliers` change. RELNOTES=n/a PiperOrigin-RevId: 597301820 --- .../com/google/common/base/SuppliersTest.java | 59 +------------------ .../common/base/IgnoreJRERequirement.java | 30 ---------- .../src/com/google/common/base/Internal.java | 53 ----------------- .../src/com/google/common/base/Suppliers.java | 53 +++-------------- android/pom.xml | 2 +- .../com/google/common/base/SuppliersTest.java | 59 +------------------ .../common/base/IgnoreJRERequirement.java | 30 ---------- .../src/com/google/common/base/Internal.java | 53 ----------------- .../src/com/google/common/base/Suppliers.java | 53 +++-------------- pom.xml | 2 +- 10 files changed, 24 insertions(+), 370 deletions(-) delete mode 100644 android/guava/src/com/google/common/base/IgnoreJRERequirement.java delete mode 100644 android/guava/src/com/google/common/base/Internal.java delete mode 100644 guava/src/com/google/common/base/IgnoreJRERequirement.java delete mode 100644 guava/src/com/google/common/base/Internal.java diff --git a/android/guava-tests/test/com/google/common/base/SuppliersTest.java b/android/guava-tests/test/com/google/common/base/SuppliersTest.java index 6f3d7bdbe03e..fef3a2684b98 100644 --- a/android/guava-tests/test/com/google/common/base/SuppliersTest.java +++ b/android/guava-tests/test/com/google/common/base/SuppliersTest.java @@ -27,7 +27,6 @@ import com.google.common.testing.ClassSanityTester; import com.google.common.testing.EqualsTester; import java.io.Serializable; -import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -217,7 +216,7 @@ public List apply(List list) { @J2ktIncompatible @GwtIncompatible // Thread.sleep - public void testMemoizeWithExpiration_longTimeUnit() throws InterruptedException { + public void testMemoizeWithExpiration() throws InterruptedException { CountingSupplier countingSupplier = new CountingSupplier(); Supplier memoizedSupplier = @@ -226,50 +225,6 @@ public void testMemoizeWithExpiration_longTimeUnit() throws InterruptedException checkExpiration(countingSupplier, memoizedSupplier); } - @J2ktIncompatible - @GwtIncompatible // Thread.sleep - @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API - public void testMemoizeWithExpiration_duration() throws InterruptedException { - CountingSupplier countingSupplier = new CountingSupplier(); - - Supplier memoizedSupplier = - Suppliers.memoizeWithExpiration(countingSupplier, Duration.ofMillis(75)); - - checkExpiration(countingSupplier, memoizedSupplier); - } - - public void testMemoizeWithExpiration_longTimeUnitNegative() throws InterruptedException { - try { - Supplier unused = Suppliers.memoizeWithExpiration(() -> "", 0, TimeUnit.MILLISECONDS); - fail(); - } catch (IllegalArgumentException expected) { - } - - try { - Supplier unused = - Suppliers.memoizeWithExpiration(() -> "", -1, TimeUnit.MILLISECONDS); - fail(); - } catch (IllegalArgumentException expected) { - } - } - - @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API - @J2ktIncompatible // Duration - @GwtIncompatible // Duration - public void testMemoizeWithExpiration_durationNegative() throws InterruptedException { - try { - Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ZERO); - fail(); - } catch (IllegalArgumentException expected) { - } - - try { - Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ofMillis(-1)); - fail(); - } catch (IllegalArgumentException expected) { - } - } - @J2ktIncompatible @GwtIncompatible // Thread.sleep, SerializationTester public void testMemoizeWithExpirationSerialized() throws InterruptedException { @@ -496,23 +451,15 @@ public void testSerialization() { @J2ktIncompatible @GwtIncompatible // reflection - @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersNullChecks() throws Exception { - new ClassSanityTester() - .setDefault(Duration.class, Duration.ofSeconds(1)) - .forAllPublicStaticMethods(Suppliers.class) - .testNulls(); + new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testNulls(); } @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // TODO(cpovirk): ClassNotFoundException: com.google.common.base.Function - @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersSerializable() throws Exception { - new ClassSanityTester() - .setDefault(Duration.class, Duration.ofSeconds(1)) - .forAllPublicStaticMethods(Suppliers.class) - .testSerializable(); + new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testSerializable(); } public void testOfInstance_equals() { diff --git a/android/guava/src/com/google/common/base/IgnoreJRERequirement.java b/android/guava/src/com/google/common/base/IgnoreJRERequirement.java deleted file mode 100644 index c34a9cdd974b..000000000000 --- a/android/guava/src/com/google/common/base/IgnoreJRERequirement.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2019 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ - -package com.google.common.base; - -import static java.lang.annotation.ElementType.CONSTRUCTOR; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; - -import java.lang.annotation.Target; - -/** - * Disables Animal Sniffer's checking of compatibility with older versions of Java/Android. - * - *

Each package's copy of this annotation needs to be listed in our {@code pom.xml}. - */ -@Target({METHOD, CONSTRUCTOR, TYPE}) -@ElementTypesAreNonnullByDefault -@interface IgnoreJRERequirement {} diff --git a/android/guava/src/com/google/common/base/Internal.java b/android/guava/src/com/google/common/base/Internal.java deleted file mode 100644 index 0e1ee2400f24..000000000000 --- a/android/guava/src/com/google/common/base/Internal.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2019 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ - -package com.google.common.base; - -import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; -import java.time.Duration; - -/** This class is for {@code com.google.common.base} use only! */ -@J2ktIncompatible -@GwtIncompatible // java.time.Duration -@ElementTypesAreNonnullByDefault -final class Internal { - - /** - * Returns the number of nanoseconds of the given duration without throwing or overflowing. - * - *

Instead of throwing {@link ArithmeticException}, this method silently saturates to either - * {@link Long#MAX_VALUE} or {@link Long#MIN_VALUE}. This behavior can be useful when decomposing - * a duration in order to call a legacy API which requires a {@code long, TimeUnit} pair. - */ - @SuppressWarnings({ - // We use this method only for cases in which we need to decompose to primitives. - "GoodTime-ApiWithNumericTimeUnit", - "GoodTime-DecomposeToPrimitive", - // We use this method only from within APIs that require a Duration. - "Java7ApiChecker", - }) - @IgnoreJRERequirement - static long toNanosSaturated(Duration duration) { - // Using a try/catch seems lazy, but the catch block will rarely get invoked (except for - // durations longer than approximately +/- 292 years). - try { - return duration.toNanos(); - } catch (ArithmeticException tooBig) { - return duration.isNegative() ? Long.MIN_VALUE : Long.MAX_VALUE; - } - } - - private Internal() {} -} diff --git a/android/guava/src/com/google/common/base/Suppliers.java b/android/guava/src/com/google/common/base/Suppliers.java index 07b27b607e0f..60bcf6921fee 100644 --- a/android/guava/src/com/google/common/base/Suppliers.java +++ b/android/guava/src/com/google/common/base/Suppliers.java @@ -14,18 +14,13 @@ package com.google.common.base; -import static com.google.common.base.Internal.toNanosSaturated; import static com.google.common.base.NullnessCasts.uncheckedCastNullableTToT; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; -import com.google.common.annotations.Beta; import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.io.Serializable; -import java.time.Duration; import java.util.concurrent.TimeUnit; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -39,7 +34,7 @@ * @author Harry Heymann * @since 2.0 */ -@GwtCompatible(emulated = true) +@GwtCompatible @ElementTypesAreNonnullByDefault public final class Suppliers { private Suppliers() {} @@ -226,44 +221,10 @@ public String toString() { * @throws IllegalArgumentException if {@code duration} is not positive * @since 2.0 */ - @SuppressWarnings("GoodTime") // Prefer the Duration overload + @SuppressWarnings("GoodTime") // should accept a java.time.Duration public static Supplier memoizeWithExpiration( Supplier delegate, long duration, TimeUnit unit) { - checkNotNull(delegate); - checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); - return new ExpiringMemoizingSupplier<>(delegate, unit.toNanos(duration)); - } - - /** - * Returns a supplier that caches the instance supplied by the delegate and removes the cached - * value after the specified time has passed. Subsequent calls to {@code get()} return the cached - * value if the expiration time has not passed. After the expiration time, a new value is - * retrieved, cached, and returned. See: memoization - * - *

The returned supplier is thread-safe. The supplier's serialized form does not contain the - * cached value, which will be recalculated when {@code get()} is called on the reserialized - * instance. The actual memoization does not happen when the underlying delegate throws an - * exception. - * - *

When the underlying delegate throws an exception then this memoizing supplier will keep - * delegating calls until it returns valid data. - * - * @param duration the length of time after a value is created that it should stop being returned - * by subsequent {@code get()} calls - * @throws IllegalArgumentException if {@code duration} is not positive - * @since NEXT - */ - @Beta // only until we're confident that Java 8 APIs are safe for our Android users - @J2ktIncompatible - @GwtIncompatible // java.time.Duration - @SuppressWarnings("Java7ApiChecker") // no more dangerous that wherever the user got the Duration - @IgnoreJRERequirement - public static Supplier memoizeWithExpiration( - Supplier delegate, Duration duration) { - checkNotNull(delegate); - checkArgument(duration.compareTo(Duration.ZERO) > 0, "duration (%s) must be > 0", duration); - return new ExpiringMemoizingSupplier(delegate, toNanosSaturated(duration)); + return new ExpiringMemoizingSupplier<>(delegate, duration, unit); } @VisibleForTesting @@ -276,13 +237,15 @@ static class ExpiringMemoizingSupplier // The special value 0 means "not yet initialized". transient volatile long expirationNanos; - ExpiringMemoizingSupplier(Supplier delegate, long durationNanos) { - this.delegate = delegate; - this.durationNanos = durationNanos; + ExpiringMemoizingSupplier(Supplier delegate, long duration, TimeUnit unit) { + this.delegate = checkNotNull(delegate); + this.durationNanos = unit.toNanos(duration); + checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); } @Override @ParametricNullness + @SuppressWarnings("GoodTime") // reading system time without TimeSource public T get() { // Another variant of Double Checked Locking. // diff --git a/android/pom.xml b/android/pom.xml index 59811c7d3de0..61bbc787d370 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -177,7 +177,7 @@ animal-sniffer-maven-plugin 1.23 - com.google.common.base.IgnoreJRERequirement,com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement + com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement true com.toasttab.android diff --git a/guava-tests/test/com/google/common/base/SuppliersTest.java b/guava-tests/test/com/google/common/base/SuppliersTest.java index 6f3d7bdbe03e..fef3a2684b98 100644 --- a/guava-tests/test/com/google/common/base/SuppliersTest.java +++ b/guava-tests/test/com/google/common/base/SuppliersTest.java @@ -27,7 +27,6 @@ import com.google.common.testing.ClassSanityTester; import com.google.common.testing.EqualsTester; import java.io.Serializable; -import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -217,7 +216,7 @@ public List apply(List list) { @J2ktIncompatible @GwtIncompatible // Thread.sleep - public void testMemoizeWithExpiration_longTimeUnit() throws InterruptedException { + public void testMemoizeWithExpiration() throws InterruptedException { CountingSupplier countingSupplier = new CountingSupplier(); Supplier memoizedSupplier = @@ -226,50 +225,6 @@ public void testMemoizeWithExpiration_longTimeUnit() throws InterruptedException checkExpiration(countingSupplier, memoizedSupplier); } - @J2ktIncompatible - @GwtIncompatible // Thread.sleep - @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API - public void testMemoizeWithExpiration_duration() throws InterruptedException { - CountingSupplier countingSupplier = new CountingSupplier(); - - Supplier memoizedSupplier = - Suppliers.memoizeWithExpiration(countingSupplier, Duration.ofMillis(75)); - - checkExpiration(countingSupplier, memoizedSupplier); - } - - public void testMemoizeWithExpiration_longTimeUnitNegative() throws InterruptedException { - try { - Supplier unused = Suppliers.memoizeWithExpiration(() -> "", 0, TimeUnit.MILLISECONDS); - fail(); - } catch (IllegalArgumentException expected) { - } - - try { - Supplier unused = - Suppliers.memoizeWithExpiration(() -> "", -1, TimeUnit.MILLISECONDS); - fail(); - } catch (IllegalArgumentException expected) { - } - } - - @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API - @J2ktIncompatible // Duration - @GwtIncompatible // Duration - public void testMemoizeWithExpiration_durationNegative() throws InterruptedException { - try { - Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ZERO); - fail(); - } catch (IllegalArgumentException expected) { - } - - try { - Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ofMillis(-1)); - fail(); - } catch (IllegalArgumentException expected) { - } - } - @J2ktIncompatible @GwtIncompatible // Thread.sleep, SerializationTester public void testMemoizeWithExpirationSerialized() throws InterruptedException { @@ -496,23 +451,15 @@ public void testSerialization() { @J2ktIncompatible @GwtIncompatible // reflection - @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersNullChecks() throws Exception { - new ClassSanityTester() - .setDefault(Duration.class, Duration.ofSeconds(1)) - .forAllPublicStaticMethods(Suppliers.class) - .testNulls(); + new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testNulls(); } @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // TODO(cpovirk): ClassNotFoundException: com.google.common.base.Function - @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersSerializable() throws Exception { - new ClassSanityTester() - .setDefault(Duration.class, Duration.ofSeconds(1)) - .forAllPublicStaticMethods(Suppliers.class) - .testSerializable(); + new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testSerializable(); } public void testOfInstance_equals() { diff --git a/guava/src/com/google/common/base/IgnoreJRERequirement.java b/guava/src/com/google/common/base/IgnoreJRERequirement.java deleted file mode 100644 index c34a9cdd974b..000000000000 --- a/guava/src/com/google/common/base/IgnoreJRERequirement.java +++ /dev/null @@ -1,30 +0,0 @@ -/* - * Copyright 2019 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ - -package com.google.common.base; - -import static java.lang.annotation.ElementType.CONSTRUCTOR; -import static java.lang.annotation.ElementType.METHOD; -import static java.lang.annotation.ElementType.TYPE; - -import java.lang.annotation.Target; - -/** - * Disables Animal Sniffer's checking of compatibility with older versions of Java/Android. - * - *

Each package's copy of this annotation needs to be listed in our {@code pom.xml}. - */ -@Target({METHOD, CONSTRUCTOR, TYPE}) -@ElementTypesAreNonnullByDefault -@interface IgnoreJRERequirement {} diff --git a/guava/src/com/google/common/base/Internal.java b/guava/src/com/google/common/base/Internal.java deleted file mode 100644 index 0e1ee2400f24..000000000000 --- a/guava/src/com/google/common/base/Internal.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * Copyright (C) 2019 The Guava Authors - * - * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except - * in compliance with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software distributed under the License - * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express - * or implied. See the License for the specific language governing permissions and limitations under - * the License. - */ - -package com.google.common.base; - -import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; -import java.time.Duration; - -/** This class is for {@code com.google.common.base} use only! */ -@J2ktIncompatible -@GwtIncompatible // java.time.Duration -@ElementTypesAreNonnullByDefault -final class Internal { - - /** - * Returns the number of nanoseconds of the given duration without throwing or overflowing. - * - *

Instead of throwing {@link ArithmeticException}, this method silently saturates to either - * {@link Long#MAX_VALUE} or {@link Long#MIN_VALUE}. This behavior can be useful when decomposing - * a duration in order to call a legacy API which requires a {@code long, TimeUnit} pair. - */ - @SuppressWarnings({ - // We use this method only for cases in which we need to decompose to primitives. - "GoodTime-ApiWithNumericTimeUnit", - "GoodTime-DecomposeToPrimitive", - // We use this method only from within APIs that require a Duration. - "Java7ApiChecker", - }) - @IgnoreJRERequirement - static long toNanosSaturated(Duration duration) { - // Using a try/catch seems lazy, but the catch block will rarely get invoked (except for - // durations longer than approximately +/- 292 years). - try { - return duration.toNanos(); - } catch (ArithmeticException tooBig) { - return duration.isNegative() ? Long.MIN_VALUE : Long.MAX_VALUE; - } - } - - private Internal() {} -} diff --git a/guava/src/com/google/common/base/Suppliers.java b/guava/src/com/google/common/base/Suppliers.java index 07b27b607e0f..60bcf6921fee 100644 --- a/guava/src/com/google/common/base/Suppliers.java +++ b/guava/src/com/google/common/base/Suppliers.java @@ -14,18 +14,13 @@ package com.google.common.base; -import static com.google.common.base.Internal.toNanosSaturated; import static com.google.common.base.NullnessCasts.uncheckedCastNullableTToT; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; -import com.google.common.annotations.Beta; import com.google.common.annotations.GwtCompatible; -import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.io.Serializable; -import java.time.Duration; import java.util.concurrent.TimeUnit; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -39,7 +34,7 @@ * @author Harry Heymann * @since 2.0 */ -@GwtCompatible(emulated = true) +@GwtCompatible @ElementTypesAreNonnullByDefault public final class Suppliers { private Suppliers() {} @@ -226,44 +221,10 @@ public String toString() { * @throws IllegalArgumentException if {@code duration} is not positive * @since 2.0 */ - @SuppressWarnings("GoodTime") // Prefer the Duration overload + @SuppressWarnings("GoodTime") // should accept a java.time.Duration public static Supplier memoizeWithExpiration( Supplier delegate, long duration, TimeUnit unit) { - checkNotNull(delegate); - checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); - return new ExpiringMemoizingSupplier<>(delegate, unit.toNanos(duration)); - } - - /** - * Returns a supplier that caches the instance supplied by the delegate and removes the cached - * value after the specified time has passed. Subsequent calls to {@code get()} return the cached - * value if the expiration time has not passed. After the expiration time, a new value is - * retrieved, cached, and returned. See: memoization - * - *

The returned supplier is thread-safe. The supplier's serialized form does not contain the - * cached value, which will be recalculated when {@code get()} is called on the reserialized - * instance. The actual memoization does not happen when the underlying delegate throws an - * exception. - * - *

When the underlying delegate throws an exception then this memoizing supplier will keep - * delegating calls until it returns valid data. - * - * @param duration the length of time after a value is created that it should stop being returned - * by subsequent {@code get()} calls - * @throws IllegalArgumentException if {@code duration} is not positive - * @since NEXT - */ - @Beta // only until we're confident that Java 8 APIs are safe for our Android users - @J2ktIncompatible - @GwtIncompatible // java.time.Duration - @SuppressWarnings("Java7ApiChecker") // no more dangerous that wherever the user got the Duration - @IgnoreJRERequirement - public static Supplier memoizeWithExpiration( - Supplier delegate, Duration duration) { - checkNotNull(delegate); - checkArgument(duration.compareTo(Duration.ZERO) > 0, "duration (%s) must be > 0", duration); - return new ExpiringMemoizingSupplier(delegate, toNanosSaturated(duration)); + return new ExpiringMemoizingSupplier<>(delegate, duration, unit); } @VisibleForTesting @@ -276,13 +237,15 @@ static class ExpiringMemoizingSupplier // The special value 0 means "not yet initialized". transient volatile long expirationNanos; - ExpiringMemoizingSupplier(Supplier delegate, long durationNanos) { - this.delegate = delegate; - this.durationNanos = durationNanos; + ExpiringMemoizingSupplier(Supplier delegate, long duration, TimeUnit unit) { + this.delegate = checkNotNull(delegate); + this.durationNanos = unit.toNanos(duration); + checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); } @Override @ParametricNullness + @SuppressWarnings("GoodTime") // reading system time without TimeSource public T get() { // Another variant of Double Checked Locking. // diff --git a/pom.xml b/pom.xml index a8a12ecc44a7..d4fa95458c2b 100644 --- a/pom.xml +++ b/pom.xml @@ -178,7 +178,7 @@ animal-sniffer-maven-plugin 1.23 - com.google.common.base.IgnoreJRERequirement,com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement + com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement true org.codehaus.mojo.signature From 2fe7b166dff488b5dd52e8614ed639e09b47d96f Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 10 Jan 2024 12:04:18 -0800 Subject: [PATCH 094/216] Internal change. PiperOrigin-RevId: 597318196 --- guava/src/com/google/common/collect/Streams.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/guava/src/com/google/common/collect/Streams.java b/guava/src/com/google/common/collect/Streams.java index 8209cedb55ff..3103998e8cef 100644 --- a/guava/src/com/google/common/collect/Streams.java +++ b/guava/src/com/google/common/collect/Streams.java @@ -25,6 +25,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.math.LongMath; import com.google.errorprone.annotations.InlineMe; +import com.google.errorprone.annotations.InlineMeValidationDisabled; import java.util.ArrayDeque; import java.util.Collection; import java.util.Deque; @@ -104,7 +105,7 @@ public static Stream stream(com.google.common.base.Optional optional) */ @Beta @InlineMe(replacement = "optional.stream()") - @com.google.errorprone.annotations.InlineMeValidationDisabled("Java 9+ API only") + @InlineMeValidationDisabled("Java 9+ API only") public static Stream stream(java.util.Optional optional) { return optional.isPresent() ? Stream.of(optional.get()) : Stream.empty(); } @@ -117,7 +118,7 @@ public static Stream stream(java.util.Optional optional) { */ @Beta @InlineMe(replacement = "optional.stream()") - @com.google.errorprone.annotations.InlineMeValidationDisabled("Java 9+ API only") + @InlineMeValidationDisabled("Java 9+ API only") public static IntStream stream(OptionalInt optional) { return optional.isPresent() ? IntStream.of(optional.getAsInt()) : IntStream.empty(); } @@ -130,7 +131,7 @@ public static IntStream stream(OptionalInt optional) { */ @Beta @InlineMe(replacement = "optional.stream()") - @com.google.errorprone.annotations.InlineMeValidationDisabled("Java 9+ API only") + @InlineMeValidationDisabled("Java 9+ API only") public static LongStream stream(OptionalLong optional) { return optional.isPresent() ? LongStream.of(optional.getAsLong()) : LongStream.empty(); } @@ -143,7 +144,7 @@ public static LongStream stream(OptionalLong optional) { */ @Beta @InlineMe(replacement = "optional.stream()") - @com.google.errorprone.annotations.InlineMeValidationDisabled("Java 9+ API only") + @InlineMeValidationDisabled("Java 9+ API only") public static DoubleStream stream(OptionalDouble optional) { return optional.isPresent() ? DoubleStream.of(optional.getAsDouble()) : DoubleStream.empty(); } From cabc1833ed4ebba03904663ae77af0c1b3dbc2d7 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 11 Jan 2024 06:26:14 -0800 Subject: [PATCH 095/216] Roll forward `Suppliers` change. RELNOTES=n/a PiperOrigin-RevId: 597537613 --- .../com/google/common/base/SuppliersTest.java | 59 ++++++++++++++++++- .../common/base/IgnoreJRERequirement.java | 30 ++++++++++ .../src/com/google/common/base/Internal.java | 53 +++++++++++++++++ .../src/com/google/common/base/Suppliers.java | 55 ++++++++++++++--- android/pom.xml | 2 +- .../com/google/common/base/SuppliersTest.java | 59 ++++++++++++++++++- .../common/base/IgnoreJRERequirement.java | 30 ++++++++++ .../src/com/google/common/base/Internal.java | 53 +++++++++++++++++ .../src/com/google/common/base/Suppliers.java | 55 ++++++++++++++--- pom.xml | 2 +- 10 files changed, 374 insertions(+), 24 deletions(-) create mode 100644 android/guava/src/com/google/common/base/IgnoreJRERequirement.java create mode 100644 android/guava/src/com/google/common/base/Internal.java create mode 100644 guava/src/com/google/common/base/IgnoreJRERequirement.java create mode 100644 guava/src/com/google/common/base/Internal.java diff --git a/android/guava-tests/test/com/google/common/base/SuppliersTest.java b/android/guava-tests/test/com/google/common/base/SuppliersTest.java index fef3a2684b98..6f3d7bdbe03e 100644 --- a/android/guava-tests/test/com/google/common/base/SuppliersTest.java +++ b/android/guava-tests/test/com/google/common/base/SuppliersTest.java @@ -27,6 +27,7 @@ import com.google.common.testing.ClassSanityTester; import com.google.common.testing.EqualsTester; import java.io.Serializable; +import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -216,7 +217,7 @@ public List apply(List list) { @J2ktIncompatible @GwtIncompatible // Thread.sleep - public void testMemoizeWithExpiration() throws InterruptedException { + public void testMemoizeWithExpiration_longTimeUnit() throws InterruptedException { CountingSupplier countingSupplier = new CountingSupplier(); Supplier memoizedSupplier = @@ -225,6 +226,50 @@ public void testMemoizeWithExpiration() throws InterruptedException { checkExpiration(countingSupplier, memoizedSupplier); } + @J2ktIncompatible + @GwtIncompatible // Thread.sleep + @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API + public void testMemoizeWithExpiration_duration() throws InterruptedException { + CountingSupplier countingSupplier = new CountingSupplier(); + + Supplier memoizedSupplier = + Suppliers.memoizeWithExpiration(countingSupplier, Duration.ofMillis(75)); + + checkExpiration(countingSupplier, memoizedSupplier); + } + + public void testMemoizeWithExpiration_longTimeUnitNegative() throws InterruptedException { + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", 0, TimeUnit.MILLISECONDS); + fail(); + } catch (IllegalArgumentException expected) { + } + + try { + Supplier unused = + Suppliers.memoizeWithExpiration(() -> "", -1, TimeUnit.MILLISECONDS); + fail(); + } catch (IllegalArgumentException expected) { + } + } + + @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API + @J2ktIncompatible // Duration + @GwtIncompatible // Duration + public void testMemoizeWithExpiration_durationNegative() throws InterruptedException { + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ZERO); + fail(); + } catch (IllegalArgumentException expected) { + } + + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ofMillis(-1)); + fail(); + } catch (IllegalArgumentException expected) { + } + } + @J2ktIncompatible @GwtIncompatible // Thread.sleep, SerializationTester public void testMemoizeWithExpirationSerialized() throws InterruptedException { @@ -451,15 +496,23 @@ public void testSerialization() { @J2ktIncompatible @GwtIncompatible // reflection + @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersNullChecks() throws Exception { - new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testNulls(); + new ClassSanityTester() + .setDefault(Duration.class, Duration.ofSeconds(1)) + .forAllPublicStaticMethods(Suppliers.class) + .testNulls(); } @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // TODO(cpovirk): ClassNotFoundException: com.google.common.base.Function + @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersSerializable() throws Exception { - new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testSerializable(); + new ClassSanityTester() + .setDefault(Duration.class, Duration.ofSeconds(1)) + .forAllPublicStaticMethods(Suppliers.class) + .testSerializable(); } public void testOfInstance_equals() { diff --git a/android/guava/src/com/google/common/base/IgnoreJRERequirement.java b/android/guava/src/com/google/common/base/IgnoreJRERequirement.java new file mode 100644 index 000000000000..c34a9cdd974b --- /dev/null +++ b/android/guava/src/com/google/common/base/IgnoreJRERequirement.java @@ -0,0 +1,30 @@ +/* + * Copyright 2019 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package com.google.common.base; + +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; + +import java.lang.annotation.Target; + +/** + * Disables Animal Sniffer's checking of compatibility with older versions of Java/Android. + * + *

Each package's copy of this annotation needs to be listed in our {@code pom.xml}. + */ +@Target({METHOD, CONSTRUCTOR, TYPE}) +@ElementTypesAreNonnullByDefault +@interface IgnoreJRERequirement {} diff --git a/android/guava/src/com/google/common/base/Internal.java b/android/guava/src/com/google/common/base/Internal.java new file mode 100644 index 000000000000..0e1ee2400f24 --- /dev/null +++ b/android/guava/src/com/google/common/base/Internal.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package com.google.common.base; + +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; +import java.time.Duration; + +/** This class is for {@code com.google.common.base} use only! */ +@J2ktIncompatible +@GwtIncompatible // java.time.Duration +@ElementTypesAreNonnullByDefault +final class Internal { + + /** + * Returns the number of nanoseconds of the given duration without throwing or overflowing. + * + *

Instead of throwing {@link ArithmeticException}, this method silently saturates to either + * {@link Long#MAX_VALUE} or {@link Long#MIN_VALUE}. This behavior can be useful when decomposing + * a duration in order to call a legacy API which requires a {@code long, TimeUnit} pair. + */ + @SuppressWarnings({ + // We use this method only for cases in which we need to decompose to primitives. + "GoodTime-ApiWithNumericTimeUnit", + "GoodTime-DecomposeToPrimitive", + // We use this method only from within APIs that require a Duration. + "Java7ApiChecker", + }) + @IgnoreJRERequirement + static long toNanosSaturated(Duration duration) { + // Using a try/catch seems lazy, but the catch block will rarely get invoked (except for + // durations longer than approximately +/- 292 years). + try { + return duration.toNanos(); + } catch (ArithmeticException tooBig) { + return duration.isNegative() ? Long.MIN_VALUE : Long.MAX_VALUE; + } + } + + private Internal() {} +} diff --git a/android/guava/src/com/google/common/base/Suppliers.java b/android/guava/src/com/google/common/base/Suppliers.java index 60bcf6921fee..4460d441cf29 100644 --- a/android/guava/src/com/google/common/base/Suppliers.java +++ b/android/guava/src/com/google/common/base/Suppliers.java @@ -14,13 +14,18 @@ package com.google.common.base; +import static com.google.common.base.Internal.toNanosSaturated; import static com.google.common.base.NullnessCasts.uncheckedCastNullableTToT; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.annotations.Beta; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.io.Serializable; +import java.time.Duration; import java.util.concurrent.TimeUnit; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -34,7 +39,7 @@ * @author Harry Heymann * @since 2.0 */ -@GwtCompatible +@GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public final class Suppliers { private Suppliers() {} @@ -221,10 +226,46 @@ public String toString() { * @throws IllegalArgumentException if {@code duration} is not positive * @since 2.0 */ - @SuppressWarnings("GoodTime") // should accept a java.time.Duration + @SuppressWarnings("GoodTime") // Prefer the Duration overload public static Supplier memoizeWithExpiration( Supplier delegate, long duration, TimeUnit unit) { - return new ExpiringMemoizingSupplier<>(delegate, duration, unit); + checkNotNull(delegate); + checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); + return new ExpiringMemoizingSupplier<>(delegate, unit.toNanos(duration)); + } + + /** + * Returns a supplier that caches the instance supplied by the delegate and removes the cached + * value after the specified time has passed. Subsequent calls to {@code get()} return the cached + * value if the expiration time has not passed. After the expiration time, a new value is + * retrieved, cached, and returned. See: memoization + * + *

The returned supplier is thread-safe. The supplier's serialized form does not contain the + * cached value, which will be recalculated when {@code get()} is called on the reserialized + * instance. The actual memoization does not happen when the underlying delegate throws an + * exception. + * + *

When the underlying delegate throws an exception then this memoizing supplier will keep + * delegating calls until it returns valid data. + * + * @param duration the length of time after a value is created that it should stop being returned + * by subsequent {@code get()} calls + * @throws IllegalArgumentException if {@code duration} is not positive + * @since NEXT + */ + @Beta // only until we're confident that Java 8 APIs are safe for our Android users + @J2ktIncompatible + @GwtIncompatible // java.time.Duration + @SuppressWarnings("Java7ApiChecker") // no more dangerous that wherever the user got the Duration + @IgnoreJRERequirement + public static Supplier memoizeWithExpiration( + Supplier delegate, Duration duration) { + checkNotNull(delegate); + // The alternative of `duration.compareTo(Duration.ZERO) > 0` causes J2ObjC trouble. + checkArgument( + !duration.isNegative() && !duration.isZero(), "duration (%s) must be > 0", duration); + return new ExpiringMemoizingSupplier(delegate, toNanosSaturated(duration)); } @VisibleForTesting @@ -237,15 +278,13 @@ static class ExpiringMemoizingSupplier // The special value 0 means "not yet initialized". transient volatile long expirationNanos; - ExpiringMemoizingSupplier(Supplier delegate, long duration, TimeUnit unit) { - this.delegate = checkNotNull(delegate); - this.durationNanos = unit.toNanos(duration); - checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); + ExpiringMemoizingSupplier(Supplier delegate, long durationNanos) { + this.delegate = delegate; + this.durationNanos = durationNanos; } @Override @ParametricNullness - @SuppressWarnings("GoodTime") // reading system time without TimeSource public T get() { // Another variant of Double Checked Locking. // diff --git a/android/pom.xml b/android/pom.xml index 61bbc787d370..59811c7d3de0 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -177,7 +177,7 @@ animal-sniffer-maven-plugin 1.23 - com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement + com.google.common.base.IgnoreJRERequirement,com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement true com.toasttab.android diff --git a/guava-tests/test/com/google/common/base/SuppliersTest.java b/guava-tests/test/com/google/common/base/SuppliersTest.java index fef3a2684b98..6f3d7bdbe03e 100644 --- a/guava-tests/test/com/google/common/base/SuppliersTest.java +++ b/guava-tests/test/com/google/common/base/SuppliersTest.java @@ -27,6 +27,7 @@ import com.google.common.testing.ClassSanityTester; import com.google.common.testing.EqualsTester; import java.io.Serializable; +import java.time.Duration; import java.util.ArrayList; import java.util.List; import java.util.concurrent.TimeUnit; @@ -216,7 +217,7 @@ public List apply(List list) { @J2ktIncompatible @GwtIncompatible // Thread.sleep - public void testMemoizeWithExpiration() throws InterruptedException { + public void testMemoizeWithExpiration_longTimeUnit() throws InterruptedException { CountingSupplier countingSupplier = new CountingSupplier(); Supplier memoizedSupplier = @@ -225,6 +226,50 @@ public void testMemoizeWithExpiration() throws InterruptedException { checkExpiration(countingSupplier, memoizedSupplier); } + @J2ktIncompatible + @GwtIncompatible // Thread.sleep + @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API + public void testMemoizeWithExpiration_duration() throws InterruptedException { + CountingSupplier countingSupplier = new CountingSupplier(); + + Supplier memoizedSupplier = + Suppliers.memoizeWithExpiration(countingSupplier, Duration.ofMillis(75)); + + checkExpiration(countingSupplier, memoizedSupplier); + } + + public void testMemoizeWithExpiration_longTimeUnitNegative() throws InterruptedException { + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", 0, TimeUnit.MILLISECONDS); + fail(); + } catch (IllegalArgumentException expected) { + } + + try { + Supplier unused = + Suppliers.memoizeWithExpiration(() -> "", -1, TimeUnit.MILLISECONDS); + fail(); + } catch (IllegalArgumentException expected) { + } + } + + @SuppressWarnings("Java7ApiChecker") // test of Java 8+ API + @J2ktIncompatible // Duration + @GwtIncompatible // Duration + public void testMemoizeWithExpiration_durationNegative() throws InterruptedException { + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ZERO); + fail(); + } catch (IllegalArgumentException expected) { + } + + try { + Supplier unused = Suppliers.memoizeWithExpiration(() -> "", Duration.ofMillis(-1)); + fail(); + } catch (IllegalArgumentException expected) { + } + } + @J2ktIncompatible @GwtIncompatible // Thread.sleep, SerializationTester public void testMemoizeWithExpirationSerialized() throws InterruptedException { @@ -451,15 +496,23 @@ public void testSerialization() { @J2ktIncompatible @GwtIncompatible // reflection + @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersNullChecks() throws Exception { - new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testNulls(); + new ClassSanityTester() + .setDefault(Duration.class, Duration.ofSeconds(1)) + .forAllPublicStaticMethods(Suppliers.class) + .testNulls(); } @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // TODO(cpovirk): ClassNotFoundException: com.google.common.base.Function + @SuppressWarnings("Java7ApiChecker") // includes test of Java 8+ API public void testSuppliersSerializable() throws Exception { - new ClassSanityTester().forAllPublicStaticMethods(Suppliers.class).testSerializable(); + new ClassSanityTester() + .setDefault(Duration.class, Duration.ofSeconds(1)) + .forAllPublicStaticMethods(Suppliers.class) + .testSerializable(); } public void testOfInstance_equals() { diff --git a/guava/src/com/google/common/base/IgnoreJRERequirement.java b/guava/src/com/google/common/base/IgnoreJRERequirement.java new file mode 100644 index 000000000000..c34a9cdd974b --- /dev/null +++ b/guava/src/com/google/common/base/IgnoreJRERequirement.java @@ -0,0 +1,30 @@ +/* + * Copyright 2019 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package com.google.common.base; + +import static java.lang.annotation.ElementType.CONSTRUCTOR; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.TYPE; + +import java.lang.annotation.Target; + +/** + * Disables Animal Sniffer's checking of compatibility with older versions of Java/Android. + * + *

Each package's copy of this annotation needs to be listed in our {@code pom.xml}. + */ +@Target({METHOD, CONSTRUCTOR, TYPE}) +@ElementTypesAreNonnullByDefault +@interface IgnoreJRERequirement {} diff --git a/guava/src/com/google/common/base/Internal.java b/guava/src/com/google/common/base/Internal.java new file mode 100644 index 000000000000..0e1ee2400f24 --- /dev/null +++ b/guava/src/com/google/common/base/Internal.java @@ -0,0 +1,53 @@ +/* + * Copyright (C) 2019 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except + * in compliance with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software distributed under the License + * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express + * or implied. See the License for the specific language governing permissions and limitations under + * the License. + */ + +package com.google.common.base; + +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; +import java.time.Duration; + +/** This class is for {@code com.google.common.base} use only! */ +@J2ktIncompatible +@GwtIncompatible // java.time.Duration +@ElementTypesAreNonnullByDefault +final class Internal { + + /** + * Returns the number of nanoseconds of the given duration without throwing or overflowing. + * + *

Instead of throwing {@link ArithmeticException}, this method silently saturates to either + * {@link Long#MAX_VALUE} or {@link Long#MIN_VALUE}. This behavior can be useful when decomposing + * a duration in order to call a legacy API which requires a {@code long, TimeUnit} pair. + */ + @SuppressWarnings({ + // We use this method only for cases in which we need to decompose to primitives. + "GoodTime-ApiWithNumericTimeUnit", + "GoodTime-DecomposeToPrimitive", + // We use this method only from within APIs that require a Duration. + "Java7ApiChecker", + }) + @IgnoreJRERequirement + static long toNanosSaturated(Duration duration) { + // Using a try/catch seems lazy, but the catch block will rarely get invoked (except for + // durations longer than approximately +/- 292 years). + try { + return duration.toNanos(); + } catch (ArithmeticException tooBig) { + return duration.isNegative() ? Long.MIN_VALUE : Long.MAX_VALUE; + } + } + + private Internal() {} +} diff --git a/guava/src/com/google/common/base/Suppliers.java b/guava/src/com/google/common/base/Suppliers.java index 60bcf6921fee..4460d441cf29 100644 --- a/guava/src/com/google/common/base/Suppliers.java +++ b/guava/src/com/google/common/base/Suppliers.java @@ -14,13 +14,18 @@ package com.google.common.base; +import static com.google.common.base.Internal.toNanosSaturated; import static com.google.common.base.NullnessCasts.uncheckedCastNullableTToT; import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import com.google.common.annotations.Beta; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.io.Serializable; +import java.time.Duration; import java.util.concurrent.TimeUnit; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -34,7 +39,7 @@ * @author Harry Heymann * @since 2.0 */ -@GwtCompatible +@GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public final class Suppliers { private Suppliers() {} @@ -221,10 +226,46 @@ public String toString() { * @throws IllegalArgumentException if {@code duration} is not positive * @since 2.0 */ - @SuppressWarnings("GoodTime") // should accept a java.time.Duration + @SuppressWarnings("GoodTime") // Prefer the Duration overload public static Supplier memoizeWithExpiration( Supplier delegate, long duration, TimeUnit unit) { - return new ExpiringMemoizingSupplier<>(delegate, duration, unit); + checkNotNull(delegate); + checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); + return new ExpiringMemoizingSupplier<>(delegate, unit.toNanos(duration)); + } + + /** + * Returns a supplier that caches the instance supplied by the delegate and removes the cached + * value after the specified time has passed. Subsequent calls to {@code get()} return the cached + * value if the expiration time has not passed. After the expiration time, a new value is + * retrieved, cached, and returned. See: memoization + * + *

The returned supplier is thread-safe. The supplier's serialized form does not contain the + * cached value, which will be recalculated when {@code get()} is called on the reserialized + * instance. The actual memoization does not happen when the underlying delegate throws an + * exception. + * + *

When the underlying delegate throws an exception then this memoizing supplier will keep + * delegating calls until it returns valid data. + * + * @param duration the length of time after a value is created that it should stop being returned + * by subsequent {@code get()} calls + * @throws IllegalArgumentException if {@code duration} is not positive + * @since NEXT + */ + @Beta // only until we're confident that Java 8 APIs are safe for our Android users + @J2ktIncompatible + @GwtIncompatible // java.time.Duration + @SuppressWarnings("Java7ApiChecker") // no more dangerous that wherever the user got the Duration + @IgnoreJRERequirement + public static Supplier memoizeWithExpiration( + Supplier delegate, Duration duration) { + checkNotNull(delegate); + // The alternative of `duration.compareTo(Duration.ZERO) > 0` causes J2ObjC trouble. + checkArgument( + !duration.isNegative() && !duration.isZero(), "duration (%s) must be > 0", duration); + return new ExpiringMemoizingSupplier(delegate, toNanosSaturated(duration)); } @VisibleForTesting @@ -237,15 +278,13 @@ static class ExpiringMemoizingSupplier // The special value 0 means "not yet initialized". transient volatile long expirationNanos; - ExpiringMemoizingSupplier(Supplier delegate, long duration, TimeUnit unit) { - this.delegate = checkNotNull(delegate); - this.durationNanos = unit.toNanos(duration); - checkArgument(duration > 0, "duration (%s %s) must be > 0", duration, unit); + ExpiringMemoizingSupplier(Supplier delegate, long durationNanos) { + this.delegate = delegate; + this.durationNanos = durationNanos; } @Override @ParametricNullness - @SuppressWarnings("GoodTime") // reading system time without TimeSource public T get() { // Another variant of Double Checked Locking. // diff --git a/pom.xml b/pom.xml index d4fa95458c2b..a8a12ecc44a7 100644 --- a/pom.xml +++ b/pom.xml @@ -178,7 +178,7 @@ animal-sniffer-maven-plugin 1.23 - com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement + com.google.common.base.IgnoreJRERequirement,com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement true org.codehaus.mojo.signature From eccc0f6e9dfb567374303ba2bf8189dcc3ac286e Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 11 Jan 2024 09:38:43 -0800 Subject: [PATCH 096/216] Prepare for forthcoming `@Nullable` annotations on `Optional.orElseGet`. Soon, nullness checkers will know that `orElseGet` can return `null`... but not be smart enough to know that it can't return `null` _here_. RELNOTES=n/a PiperOrigin-RevId: 597579395 --- guava/src/com/google/common/collect/Streams.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/guava/src/com/google/common/collect/Streams.java b/guava/src/com/google/common/collect/Streams.java index 3103998e8cef..01548e86c80b 100644 --- a/guava/src/com/google/common/collect/Streams.java +++ b/guava/src/com/google/common/collect/Streams.java @@ -953,7 +953,7 @@ T get() { public static OptionalInt findLast(IntStream stream) { // findLast(Stream) does some allocation, so we might as well box some more java.util.Optional boxedLast = findLast(stream.boxed()); - return boxedLast.map(OptionalInt::of).orElseGet(OptionalInt::empty); + return boxedLast.map(OptionalInt::of).orElse(OptionalInt.empty()); } /** @@ -971,7 +971,7 @@ public static OptionalInt findLast(IntStream stream) { public static OptionalLong findLast(LongStream stream) { // findLast(Stream) does some allocation, so we might as well box some more java.util.Optional boxedLast = findLast(stream.boxed()); - return boxedLast.map(OptionalLong::of).orElseGet(OptionalLong::empty); + return boxedLast.map(OptionalLong::of).orElse(OptionalLong.empty()); } /** @@ -989,7 +989,7 @@ public static OptionalLong findLast(LongStream stream) { public static OptionalDouble findLast(DoubleStream stream) { // findLast(Stream) does some allocation, so we might as well box some more java.util.Optional boxedLast = findLast(stream.boxed()); - return boxedLast.map(OptionalDouble::of).orElseGet(OptionalDouble::empty); + return boxedLast.map(OptionalDouble::of).orElse(OptionalDouble.empty()); } private Streams() {} From 0824e6e2e8396f016e9a99fc6cc472687749f9b0 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Fri, 12 Jan 2024 08:43:20 -0800 Subject: [PATCH 097/216] Remove `final` so that J2KT can generate overrides in subclasses. Those overrides let J2KT resolve the conflict between the `default` methods on the interfaces and the methods inherited from the superclass. RELNOTES=n/a PiperOrigin-RevId: 597850278 --- guava/src/com/google/common/collect/CollectSpliterators.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guava/src/com/google/common/collect/CollectSpliterators.java b/guava/src/com/google/common/collect/CollectSpliterators.java index 7d0e82f203a8..a1bfe86f6941 100644 --- a/guava/src/com/google/common/collect/CollectSpliterators.java +++ b/guava/src/com/google/common/collect/CollectSpliterators.java @@ -349,7 +349,7 @@ OutSpliteratorT newFlatMapSpliterator( */ @Override - public final boolean tryAdvance(Consumer action) { + public /*non-final for J2KT*/ boolean tryAdvance(Consumer action) { while (true) { if (prefix != null && prefix.tryAdvance(action)) { if (estimatedSize != Long.MAX_VALUE) { @@ -366,7 +366,7 @@ public final boolean tryAdvance(Consumer action) { } @Override - public final void forEachRemaining(Consumer action) { + public /*non-final for J2KT*/ void forEachRemaining(Consumer action) { if (prefix != null) { prefix.forEachRemaining(action); prefix = null; From 823412c0934f71c770aaf17e301ec9338e408b14 Mon Sep 17 00:00:00 2001 From: Stefan Haustein Date: Mon, 15 Jan 2024 03:44:45 -0800 Subject: [PATCH 098/216] Add a missing nullability annotation for the j2kt super source. Also remove an unused method. RELNOTES=n/a PiperOrigin-RevId: 598568213 --- .../com/google/common/util/concurrent/AbstractFuture.java | 6 ------ 1 file changed, 6 deletions(-) diff --git a/guava-gwt/src-super/com/google/common/util/concurrent/super/com/google/common/util/concurrent/AbstractFuture.java b/guava-gwt/src-super/com/google/common/util/concurrent/super/com/google/common/util/concurrent/AbstractFuture.java index e17376e7ad01..242335ec9e98 100644 --- a/guava-gwt/src-super/com/google/common/util/concurrent/super/com/google/common/util/concurrent/AbstractFuture.java +++ b/guava-gwt/src-super/com/google/common/util/concurrent/super/com/google/common/util/concurrent/AbstractFuture.java @@ -17,7 +17,6 @@ package com.google.common.util.concurrent; import static com.google.common.base.Preconditions.checkNotNull; -import static com.google.common.base.Preconditions.checkState; import static com.google.common.base.Strings.isNullOrEmpty; import static com.google.common.util.concurrent.Futures.getDone; import static com.google.common.util.concurrent.MoreExecutors.directExecutor; @@ -240,11 +239,6 @@ protected final Throwable tryInternalFastPathGetFailure() { return null; } - final Throwable trustedGetException() { - checkState(state == State.FAILURE); - return throwable; - } - final void maybePropagateCancellationTo(@Nullable Future related) { if (related != null & isCancelled()) { related.cancel(wasInterrupted()); From bc85d072757c2c050075115818a0940ffcb9974e Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 16 Jan 2024 06:07:46 -0800 Subject: [PATCH 099/216] Bump actions/upload-artifact from 4.0.0 to 4.1.0 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.0.0 to 4.1.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/c7d193f32edcb7bfad88892161225aeda64e9392...1eb3cb2b3e0f29609092a73eb033bb759a334595) Fixes #6919 RELNOTES=n/a PiperOrigin-RevId: 598819490 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index eaa32a12cdbb..bdc25678a862 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -59,7 +59,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@c7d193f32edcb7bfad88892161225aeda64e9392 # v4.0.0 + uses: actions/upload-artifact@1eb3cb2b3e0f29609092a73eb033bb759a334595 # v4.1.0 with: name: SARIF file path: results.sarif From a5200a397bbb3a5ba18bf8242d925c3e0f950f90 Mon Sep 17 00:00:00 2001 From: Stefan Haustein Date: Tue, 16 Jan 2024 10:18:37 -0800 Subject: [PATCH 100/216] Remove obsolete TODO comments PiperOrigin-RevId: 598880027 --- .../test/com/google/common/primitives/BooleansTest.java | 1 - .../test/com/google/common/primitives/UnsignedLongTest.java | 1 - guava-tests/test/com/google/common/primitives/BooleansTest.java | 1 - .../test/com/google/common/primitives/UnsignedLongTest.java | 1 - 4 files changed, 4 deletions(-) diff --git a/android/guava-tests/test/com/google/common/primitives/BooleansTest.java b/android/guava-tests/test/com/google/common/primitives/BooleansTest.java index 1b39ef715617..e6fbd1aed90d 100644 --- a/android/guava-tests/test/com/google/common/primitives/BooleansTest.java +++ b/android/guava-tests/test/com/google/common/primitives/BooleansTest.java @@ -49,7 +49,6 @@ public class BooleansTest extends TestCase { private static final boolean[] VALUES = {false, true}; - @J2ktIncompatible // TODO(b/285538920): Fix and enable. public void testHashCode() { assertThat(Booleans.hashCode(true)).isEqualTo(Boolean.TRUE.hashCode()); assertThat(Booleans.hashCode(false)).isEqualTo(Boolean.FALSE.hashCode()); diff --git a/android/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java b/android/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java index 335e6e3ef7ca..99b9a02f2a16 100644 --- a/android/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java +++ b/android/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java @@ -234,7 +234,6 @@ public void testDivideByZeroThrows() { } } - @J2ktIncompatible // TODO(b/285538920): Wrong result for j2kt public void testMod() { for (long a : TEST_LONGS) { for (long b : TEST_LONGS) { diff --git a/guava-tests/test/com/google/common/primitives/BooleansTest.java b/guava-tests/test/com/google/common/primitives/BooleansTest.java index 1b39ef715617..e6fbd1aed90d 100644 --- a/guava-tests/test/com/google/common/primitives/BooleansTest.java +++ b/guava-tests/test/com/google/common/primitives/BooleansTest.java @@ -49,7 +49,6 @@ public class BooleansTest extends TestCase { private static final boolean[] VALUES = {false, true}; - @J2ktIncompatible // TODO(b/285538920): Fix and enable. public void testHashCode() { assertThat(Booleans.hashCode(true)).isEqualTo(Boolean.TRUE.hashCode()); assertThat(Booleans.hashCode(false)).isEqualTo(Boolean.FALSE.hashCode()); diff --git a/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java b/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java index 335e6e3ef7ca..99b9a02f2a16 100644 --- a/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java +++ b/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java @@ -234,7 +234,6 @@ public void testDivideByZeroThrows() { } } - @J2ktIncompatible // TODO(b/285538920): Wrong result for j2kt public void testMod() { for (long a : TEST_LONGS) { for (long b : TEST_LONGS) { From 8481d3329cbbfb07d1094b8c09e810d4a88b892c Mon Sep 17 00:00:00 2001 From: Stephan Schroevers Date: Wed, 17 Jan 2024 10:56:36 -0800 Subject: [PATCH 101/216] Document the JDK 9+ alternative to `ByteStreams#toByteArray` Fixes #6915 RELNOTES=n/a PiperOrigin-RevId: 599226558 --- android/guava/src/com/google/common/io/ByteStreams.java | 2 ++ guava/src/com/google/common/io/ByteStreams.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/android/guava/src/com/google/common/io/ByteStreams.java b/android/guava/src/com/google/common/io/ByteStreams.java index 640bc8bfc01a..184f7df28a47 100644 --- a/android/guava/src/com/google/common/io/ByteStreams.java +++ b/android/guava/src/com/google/common/io/ByteStreams.java @@ -233,6 +233,8 @@ private static byte[] combineBuffers(Queue bufs, int totalLen) { /** * Reads all bytes from an input stream into a byte array. Does not close the stream. * + *

Java 9+ users: use {@code in#readAllBytes()} instead. + * * @param in the input stream to read from * @return a byte array containing all the bytes from the stream * @throws IOException if an I/O error occurs diff --git a/guava/src/com/google/common/io/ByteStreams.java b/guava/src/com/google/common/io/ByteStreams.java index 640bc8bfc01a..184f7df28a47 100644 --- a/guava/src/com/google/common/io/ByteStreams.java +++ b/guava/src/com/google/common/io/ByteStreams.java @@ -233,6 +233,8 @@ private static byte[] combineBuffers(Queue bufs, int totalLen) { /** * Reads all bytes from an input stream into a byte array. Does not close the stream. * + *

Java 9+ users: use {@code in#readAllBytes()} instead. + * * @param in the input stream to read from * @return a byte array containing all the bytes from the stream * @throws IOException if an I/O error occurs From c537e5aadc48619432d53841ec884f5c5e9d0c19 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 18 Jan 2024 08:09:53 -0800 Subject: [PATCH 102/216] Bump github/codeql-action from 3.23.0 to 3.23.1 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.23.0 to 3.23.1. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/e5f05b81d5b6ff8cfa111c80c22c5fd02a384118...0b21cf2492b6b02c465a3e5d7c473717ad7721ba) Fixes #6927 RELNOTES=n/a PiperOrigin-RevId: 599510781 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index bdc25678a862..7d2aa662f349 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@e5f05b81d5b6ff8cfa111c80c22c5fd02a384118 # v3.23.0 + uses: github/codeql-action/upload-sarif@0b21cf2492b6b02c465a3e5d7c473717ad7721ba # v3.23.1 with: sarif_file: results.sarif From 6be1208afff8dbd66bf44a448e8062c7b074f31c Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 18 Jan 2024 10:09:52 -0800 Subject: [PATCH 103/216] Remove stale suppressions. RELNOTES=n/a PiperOrigin-RevId: 599543226 --- .../common/collect/testing/SpliteratorTester.java | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java index 6197e86a64a4..28868cad94e3 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java @@ -113,14 +113,6 @@ boolean tryAdvance(Consumer action) { } } - /* - * The AndroidJdkLibsChecker violation is informing us that this method isn't usable under - * Desugar. But we want to include it here for Nougat+ users -- and, mainly, for non-Android - * users. Fortunately, anyone who tries to use it under Desugar will presumably already see errors - * from creating the Spliterator.OfInt in the first place. So it's probably OK for us to suppress - * this particular violation. - */ - @SuppressWarnings("AndroidJdkLibsChecker") private static final class GeneralSpliteratorOfPrimitive extends GeneralSpliterator { final Spliterator.OfPrimitive spliterator; final Function, C> consumerizer; @@ -248,7 +240,6 @@ public static SpliteratorTester of(Supplier> spliteratorSu } /** @since 28.1 */ - @SuppressWarnings("AndroidJdkLibsChecker") // see comment on GeneralSpliteratorOfPrimitive public static SpliteratorTester ofInt(Supplier spliteratorSupplier) { return new SpliteratorTester<>( ImmutableSet.of( @@ -257,7 +248,6 @@ public static SpliteratorTester ofInt(Supplier split } /** @since 28.1 */ - @SuppressWarnings("AndroidJdkLibsChecker") // see comment on GeneralSpliteratorOfPrimitive public static SpliteratorTester ofLong(Supplier spliteratorSupplier) { return new SpliteratorTester<>( ImmutableSet.of( @@ -266,7 +256,6 @@ public static SpliteratorTester ofLong(Supplier splite } /** @since 28.1 */ - @SuppressWarnings("AndroidJdkLibsChecker") // see comment on GeneralSpliteratorOfPrimitive public static SpliteratorTester ofDouble( Supplier spliteratorSupplier) { return new SpliteratorTester<>( From 9541c7662e497cb65254a9c023a5a28b1f31d51f Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 19 Jan 2024 10:23:54 -0800 Subject: [PATCH 104/216] Bump actions/upload-artifact from 4.1.0 to 4.2.0 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.1.0 to 4.2.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/1eb3cb2b3e0f29609092a73eb033bb759a334595...694cdabd8bdb0f10b2cea11669e1bf5453eed0a6) Fixes #6930 RELNOTES=n/a PiperOrigin-RevId: 599871240 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 7d2aa662f349..3e4a3f063626 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -59,7 +59,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@1eb3cb2b3e0f29609092a73eb033bb759a334595 # v4.1.0 + uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 with: name: SARIF file path: results.sarif From 8dc5e98e31eb5c8d2cd010eb383a10caf38d6658 Mon Sep 17 00:00:00 2001 From: Kurt Alfred Kluever Date: Sun, 21 Jan 2024 09:06:34 -0800 Subject: [PATCH 105/216] Internal Change. RELNOTES=n/a PiperOrigin-RevId: 600257857 --- .../test/com/google/common/base/SuppliersTest.java | 5 +++++ guava-tests/test/com/google/common/base/SuppliersTest.java | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/android/guava-tests/test/com/google/common/base/SuppliersTest.java b/android/guava-tests/test/com/google/common/base/SuppliersTest.java index 6f3d7bdbe03e..82b84819945e 100644 --- a/android/guava-tests/test/com/google/common/base/SuppliersTest.java +++ b/android/guava-tests/test/com/google/common/base/SuppliersTest.java @@ -217,6 +217,7 @@ public List apply(List list) { @J2ktIncompatible @GwtIncompatible // Thread.sleep + @SuppressWarnings("DoNotCall") public void testMemoizeWithExpiration_longTimeUnit() throws InterruptedException { CountingSupplier countingSupplier = new CountingSupplier(); @@ -238,6 +239,7 @@ public void testMemoizeWithExpiration_duration() throws InterruptedException { checkExpiration(countingSupplier, memoizedSupplier); } + @SuppressWarnings("DoNotCall") public void testMemoizeWithExpiration_longTimeUnitNegative() throws InterruptedException { try { Supplier unused = Suppliers.memoizeWithExpiration(() -> "", 0, TimeUnit.MILLISECONDS); @@ -272,6 +274,7 @@ public void testMemoizeWithExpiration_durationNegative() throws InterruptedExcep @J2ktIncompatible @GwtIncompatible // Thread.sleep, SerializationTester + @SuppressWarnings("DoNotCall") public void testMemoizeWithExpirationSerialized() throws InterruptedException { SerializableCountingSupplier countingSupplier = new SerializableCountingSupplier(); @@ -329,6 +332,7 @@ public void testOfInstanceSuppliesNull() { @J2ktIncompatible @GwtIncompatible // Thread + @SuppressWarnings("DoNotCall") public void testExpiringMemoizedSupplierThreadSafe() throws Throwable { Function, Supplier> memoizer = new Function, Supplier>() { @@ -479,6 +483,7 @@ public void testSupplierFunction() { @J2ktIncompatible @GwtIncompatible // SerializationTester + @SuppressWarnings("DoNotCall") public void testSerialization() { assertEquals(Integer.valueOf(5), reserialize(Suppliers.ofInstance(5)).get()); assertEquals( diff --git a/guava-tests/test/com/google/common/base/SuppliersTest.java b/guava-tests/test/com/google/common/base/SuppliersTest.java index 6f3d7bdbe03e..82b84819945e 100644 --- a/guava-tests/test/com/google/common/base/SuppliersTest.java +++ b/guava-tests/test/com/google/common/base/SuppliersTest.java @@ -217,6 +217,7 @@ public List apply(List list) { @J2ktIncompatible @GwtIncompatible // Thread.sleep + @SuppressWarnings("DoNotCall") public void testMemoizeWithExpiration_longTimeUnit() throws InterruptedException { CountingSupplier countingSupplier = new CountingSupplier(); @@ -238,6 +239,7 @@ public void testMemoizeWithExpiration_duration() throws InterruptedException { checkExpiration(countingSupplier, memoizedSupplier); } + @SuppressWarnings("DoNotCall") public void testMemoizeWithExpiration_longTimeUnitNegative() throws InterruptedException { try { Supplier unused = Suppliers.memoizeWithExpiration(() -> "", 0, TimeUnit.MILLISECONDS); @@ -272,6 +274,7 @@ public void testMemoizeWithExpiration_durationNegative() throws InterruptedExcep @J2ktIncompatible @GwtIncompatible // Thread.sleep, SerializationTester + @SuppressWarnings("DoNotCall") public void testMemoizeWithExpirationSerialized() throws InterruptedException { SerializableCountingSupplier countingSupplier = new SerializableCountingSupplier(); @@ -329,6 +332,7 @@ public void testOfInstanceSuppliesNull() { @J2ktIncompatible @GwtIncompatible // Thread + @SuppressWarnings("DoNotCall") public void testExpiringMemoizedSupplierThreadSafe() throws Throwable { Function, Supplier> memoizer = new Function, Supplier>() { @@ -479,6 +483,7 @@ public void testSupplierFunction() { @J2ktIncompatible @GwtIncompatible // SerializationTester + @SuppressWarnings("DoNotCall") public void testSerialization() { assertEquals(Integer.valueOf(5), reserialize(Suppliers.ofInstance(5)).get()); assertEquals( From 52654b7c9a12a187b35039a5015e26c0aa724725 Mon Sep 17 00:00:00 2001 From: Stefan Haustein Date: Mon, 22 Jan 2024 02:59:18 -0800 Subject: [PATCH 106/216] Relax tests slightly to allow kotlin native behaviour that seems to be still conforming with the spec. PiperOrigin-RevId: 600401554 --- .../test/com/google/common/primitives/CharsTest.java | 6 ++---- .../google/common/primitives/UnsignedIntsTest.java | 12 +++++++++++- .../test/com/google/common/primitives/CharsTest.java | 6 ++---- .../google/common/primitives/UnsignedIntsTest.java | 12 +++++++++++- 4 files changed, 26 insertions(+), 10 deletions(-) diff --git a/android/guava-tests/test/com/google/common/primitives/CharsTest.java b/android/guava-tests/test/com/google/common/primitives/CharsTest.java index 7a6280f3018d..839ebb8dcf44 100644 --- a/android/guava-tests/test/com/google/common/primitives/CharsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/CharsTest.java @@ -89,14 +89,12 @@ private void assertCastFails(long value) { } } - @J2ktIncompatible // TODO(b/285538920): Fix and enable. public void testCompare() { for (char x : VALUES) { for (char y : VALUES) { - // note: spec requires only that the sign is the same assertWithMessage(x + ", " + y) - .that(Chars.compare(x, y)) - .isEqualTo(Character.valueOf(x).compareTo(y)); + .that(Math.signum(Chars.compare(x, y))) + .isEqualTo(Math.signum(Character.valueOf(x).compareTo(y))); } } } diff --git a/android/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java b/android/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java index 1b118863a971..d9c151fb4e94 100644 --- a/android/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java @@ -304,20 +304,28 @@ public void testParseIntWithRadixLimits() { } } - @J2ktIncompatible // TODO(b/285538920): Exception mismatch public void testParseIntThrowsExceptionForInvalidRadix() { // Valid radix values are Character.MIN_RADIX to Character.MAX_RADIX, // inclusive. + // + // Note: According to the spec, a NumberFormatException is thrown for a number that is not + // parseable, but the spec doesn't seem to say which exception is thrown for an invalid radix. + // In contrast to the JVM, Kotlin native throws an Illegal argument exception in this case + // (which seems to make more sense). try { UnsignedInts.parseUnsignedInt("0", Character.MIN_RADIX - 1); fail(); } catch (NumberFormatException expected) { + } catch (IllegalArgumentException expected) { + // Kotlin native, see above } try { UnsignedInts.parseUnsignedInt("0", Character.MAX_RADIX + 1); fail(); } catch (NumberFormatException expected) { + } catch (IllegalArgumentException expected) { + // Kotlin native, see above } // The radix is used as an array index, so try a negative value. @@ -325,6 +333,8 @@ public void testParseIntThrowsExceptionForInvalidRadix() { UnsignedInts.parseUnsignedInt("0", -1); fail(); } catch (NumberFormatException expected) { + } catch (IllegalArgumentException expected) { + // Kotlin native, see above } } diff --git a/guava-tests/test/com/google/common/primitives/CharsTest.java b/guava-tests/test/com/google/common/primitives/CharsTest.java index 7a6280f3018d..839ebb8dcf44 100644 --- a/guava-tests/test/com/google/common/primitives/CharsTest.java +++ b/guava-tests/test/com/google/common/primitives/CharsTest.java @@ -89,14 +89,12 @@ private void assertCastFails(long value) { } } - @J2ktIncompatible // TODO(b/285538920): Fix and enable. public void testCompare() { for (char x : VALUES) { for (char y : VALUES) { - // note: spec requires only that the sign is the same assertWithMessage(x + ", " + y) - .that(Chars.compare(x, y)) - .isEqualTo(Character.valueOf(x).compareTo(y)); + .that(Math.signum(Chars.compare(x, y))) + .isEqualTo(Math.signum(Character.valueOf(x).compareTo(y))); } } } diff --git a/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java b/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java index 1b118863a971..d9c151fb4e94 100644 --- a/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java +++ b/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java @@ -304,20 +304,28 @@ public void testParseIntWithRadixLimits() { } } - @J2ktIncompatible // TODO(b/285538920): Exception mismatch public void testParseIntThrowsExceptionForInvalidRadix() { // Valid radix values are Character.MIN_RADIX to Character.MAX_RADIX, // inclusive. + // + // Note: According to the spec, a NumberFormatException is thrown for a number that is not + // parseable, but the spec doesn't seem to say which exception is thrown for an invalid radix. + // In contrast to the JVM, Kotlin native throws an Illegal argument exception in this case + // (which seems to make more sense). try { UnsignedInts.parseUnsignedInt("0", Character.MIN_RADIX - 1); fail(); } catch (NumberFormatException expected) { + } catch (IllegalArgumentException expected) { + // Kotlin native, see above } try { UnsignedInts.parseUnsignedInt("0", Character.MAX_RADIX + 1); fail(); } catch (NumberFormatException expected) { + } catch (IllegalArgumentException expected) { + // Kotlin native, see above } // The radix is used as an array index, so try a negative value. @@ -325,6 +333,8 @@ public void testParseIntThrowsExceptionForInvalidRadix() { UnsignedInts.parseUnsignedInt("0", -1); fail(); } catch (NumberFormatException expected) { + } catch (IllegalArgumentException expected) { + // Kotlin native, see above } } From 8dca77634125cbaf53365000d1c9f7fb32f6dcea Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Mon, 22 Jan 2024 09:26:55 -0800 Subject: [PATCH 107/216] change behavior of views returned by graph accessor methods that take a graph element as input: they now throw IllegalStateException when that element is removed from the graph RELNOTES=change behavior of views returned by graph accessor methods that take a graph element as input: they now throw IllegalStateException when that element is removed from the graph PiperOrigin-RevId: 600480069 --- .../common/graph/AbstractGraphTest.java | 91 +++++++--- .../common/graph/AbstractNetworkTest.java | 138 ++++++++++----- .../common/graph/InvalidatableSetTest.java | 60 +++++++ .../com/google/common/graph/TestUtil.java | 13 +- .../common/graph/AbstractBaseGraph.java | 57 ++++--- .../google/common/graph/AbstractNetwork.java | 33 +++- .../com/google/common/graph/BaseGraph.java | 61 ++++++- .../src/com/google/common/graph/Graph.java | 61 ++++++- .../google/common/graph/GraphConstants.java | 6 + .../google/common/graph/InvalidatableSet.java | 54 ++++++ .../src/com/google/common/graph/Network.java | 157 ++++++++++++++--- .../google/common/graph/StandardNetwork.java | 14 +- .../common/graph/StandardValueGraph.java | 21 +-- .../com/google/common/graph/ValueGraph.java | 61 +++++-- .../common/graph/AbstractGraphTest.java | 91 +++++++--- .../common/graph/AbstractNetworkTest.java | 138 ++++++++++----- .../common/graph/InvalidatableSetTest.java | 60 +++++++ .../com/google/common/graph/TestUtil.java | 13 +- .../common/graph/AbstractBaseGraph.java | 57 ++++--- .../google/common/graph/AbstractNetwork.java | 33 +++- .../com/google/common/graph/BaseGraph.java | 61 ++++++- guava/src/com/google/common/graph/Graph.java | 61 ++++++- .../google/common/graph/GraphConstants.java | 6 + .../google/common/graph/InvalidatableSet.java | 54 ++++++ .../src/com/google/common/graph/Network.java | 161 +++++++++++++++--- .../google/common/graph/StandardNetwork.java | 14 +- .../common/graph/StandardValueGraph.java | 21 +-- .../com/google/common/graph/ValueGraph.java | 60 +++++-- 28 files changed, 1329 insertions(+), 328 deletions(-) create mode 100644 android/guava-tests/test/com/google/common/graph/InvalidatableSetTest.java create mode 100644 android/guava/src/com/google/common/graph/InvalidatableSet.java create mode 100644 guava-tests/test/com/google/common/graph/InvalidatableSetTest.java create mode 100644 guava/src/com/google/common/graph/InvalidatableSet.java diff --git a/android/guava-tests/test/com/google/common/graph/AbstractGraphTest.java b/android/guava-tests/test/com/google/common/graph/AbstractGraphTest.java index a8209244c037..8b4b5076cdf7 100644 --- a/android/guava-tests/test/com/google/common/graph/AbstractGraphTest.java +++ b/android/guava-tests/test/com/google/common/graph/AbstractGraphTest.java @@ -17,6 +17,7 @@ package com.google.common.graph; import static com.google.common.graph.TestUtil.assertNodeNotInGraphErrorMessage; +import static com.google.common.graph.TestUtil.assertNodeRemovedFromGraphErrorMessage; import static com.google.common.graph.TestUtil.assertStronglyEquivalent; import static com.google.common.graph.TestUtil.sanityCheckSet; import static com.google.common.truth.Truth.assertThat; @@ -234,9 +235,8 @@ public void adjacentNodes_noAdjacentNodes() { @Test public void adjacentNodes_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(NODE_NOT_IN_GRAPH))); } @Test @@ -247,9 +247,8 @@ public void predecessors_noPredecessors() { @Test public void predecessors_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.predecessors(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.predecessors(NODE_NOT_IN_GRAPH))); } @Test @@ -260,9 +259,8 @@ public void successors_noSuccessors() { @Test public void successors_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.successors(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.successors(NODE_NOT_IN_GRAPH))); } @Test @@ -273,9 +271,8 @@ public void incidentEdges_noIncidentEdges() { @Test public void incidentEdges_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.incidentEdges(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.incidentEdges(NODE_NOT_IN_GRAPH))); } @Test @@ -293,9 +290,8 @@ public void degree_isolatedNode() { @Test public void degree_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.degree(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.degree(NODE_NOT_IN_GRAPH))); } @Test @@ -306,9 +302,8 @@ public void inDegree_isolatedNode() { @Test public void inDegree_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.inDegree(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.inDegree(NODE_NOT_IN_GRAPH))); } @Test @@ -319,9 +314,8 @@ public void outDegree_isolatedNode() { @Test public void outDegree_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.outDegree(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.outDegree(NODE_NOT_IN_GRAPH))); } @Test @@ -351,8 +345,24 @@ public void removeNode_existingNode() { assertThat(graphAsMutableGraph.removeNode(N1)).isTrue(); assertThat(graphAsMutableGraph.removeNode(N1)).isFalse(); assertThat(graph.nodes()).containsExactly(N2, N4); + assertThat(graph.adjacentNodes(N2)).isEmpty(); + assertThat(graph.predecessors(N2)).isEmpty(); + assertThat(graph.successors(N2)).isEmpty(); + assertThat(graph.incidentEdges(N2)).isEmpty(); assertThat(graph.adjacentNodes(N4)).isEmpty(); + assertThat(graph.predecessors(N4)).isEmpty(); + assertThat(graph.successors(N4)).isEmpty(); + assertThat(graph.incidentEdges(N4)).isEmpty(); + + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.predecessors(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.successors(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.incidentEdges(N1))); } @Test @@ -382,19 +392,48 @@ public void removeNode_nodeNotPresent() { } @Test - public void removeNode_queryAfterRemoval() { + public void queryAccessorSetAfterElementRemoval() { assume().that(graphIsMutable()).isTrue(); putEdge(N1, N2); putEdge(N2, N1); Set n1AdjacentNodes = graph.adjacentNodes(N1); Set n2AdjacentNodes = graph.adjacentNodes(N2); + Set n1Predecessors = graph.predecessors(N1); + Set n2Predecessors = graph.predecessors(N2); + Set n1Successors = graph.successors(N1); + Set n2Successors = graph.successors(N2); + Set> n1IncidentEdges = graph.incidentEdges(N1); + Set> n2IncidentEdges = graph.incidentEdges(N2); assertThat(graphAsMutableGraph.removeNode(N1)).isTrue(); - assertThat(n1AdjacentNodes).isEmpty(); + + // The choice of the size() method to call here is arbitrary. We assume that if any of the Set + // methods executes the validation check, they all will, and thus we only need to test one of + // them to ensure that the validation check happens and has the expected behavior. + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1AdjacentNodes::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1Predecessors::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1Successors::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1IncidentEdges::size)); + assertThat(n2AdjacentNodes).isEmpty(); - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(N1)); - assertNodeNotInGraphErrorMessage(e); + assertThat(n2Predecessors).isEmpty(); + assertThat(n2Successors).isEmpty(); + assertThat(n2IncidentEdges).isEmpty(); + } + + @Test + public void queryGraphAfterElementRemoval() { + assume().that(graphIsMutable()).isTrue(); + + putEdge(N1, N2); + putEdge(N2, N1); + assertThat(graphAsMutableGraph.removeNode(N1)).isTrue(); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(N1))); } @Test diff --git a/android/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java b/android/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java index b9558f706e86..7313e8835ba8 100644 --- a/android/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java +++ b/android/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java @@ -17,7 +17,9 @@ package com.google.common.graph; import static com.google.common.graph.TestUtil.assertEdgeNotInGraphErrorMessage; +import static com.google.common.graph.TestUtil.assertEdgeRemovedFromGraphErrorMessage; import static com.google.common.graph.TestUtil.assertNodeNotInGraphErrorMessage; +import static com.google.common.graph.TestUtil.assertNodeRemovedFromGraphErrorMessage; import static com.google.common.graph.TestUtil.assertStronglyEquivalent; import static com.google.common.graph.TestUtil.sanityCheckSet; import static com.google.common.truth.Truth.assertThat; @@ -416,10 +418,9 @@ public void incidentEdges_isolatedNode() { @Test public void incidentEdges_nodeNotInGraph() { - IllegalArgumentException e = + assertNodeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.incidentEdges(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + IllegalArgumentException.class, () -> network.incidentEdges(NODE_NOT_IN_GRAPH))); } @Test @@ -430,10 +431,9 @@ public void incidentNodes_oneEdge() { @Test public void incidentNodes_edgeNotInGraph() { - IllegalArgumentException e = + assertEdgeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.incidentNodes(EDGE_NOT_IN_GRAPH)); - assertEdgeNotInGraphErrorMessage(e); + IllegalArgumentException.class, () -> network.incidentNodes(EDGE_NOT_IN_GRAPH))); } @Test @@ -451,10 +451,9 @@ public void adjacentNodes_noAdjacentNodes() { @Test public void adjacentNodes_nodeNotInGraph() { - IllegalArgumentException e = + assertNodeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.adjacentNodes(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + IllegalArgumentException.class, () -> network.adjacentNodes(NODE_NOT_IN_GRAPH))); } @Test @@ -475,10 +474,9 @@ public void adjacentEdges_noAdjacentEdges() { @Test public void adjacentEdges_edgeNotInGraph() { - IllegalArgumentException e = + assertEdgeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.adjacentEdges(EDGE_NOT_IN_GRAPH)); - assertEdgeNotInGraphErrorMessage(e); + IllegalArgumentException.class, () -> network.adjacentEdges(EDGE_NOT_IN_GRAPH))); } @Test @@ -504,19 +502,16 @@ public void edgesConnecting_disconnectedNodes() { public void edgesConnecting_nodesNotInGraph() { addNode(N1); addNode(N2); - IllegalArgumentException e = + assertNodeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.edgesConnecting(N1, NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); - e = + IllegalArgumentException.class, () -> network.edgesConnecting(N1, NODE_NOT_IN_GRAPH))); + assertNodeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.edgesConnecting(NODE_NOT_IN_GRAPH, N2)); - assertNodeNotInGraphErrorMessage(e); - e = + IllegalArgumentException.class, () -> network.edgesConnecting(NODE_NOT_IN_GRAPH, N2))); + assertNodeNotInGraphErrorMessage( assertThrows( IllegalArgumentException.class, - () -> network.edgesConnecting(NODE_NOT_IN_GRAPH, NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + () -> network.edgesConnecting(NODE_NOT_IN_GRAPH, NODE_NOT_IN_GRAPH))); } @Test @@ -581,9 +576,8 @@ public void inEdges_noInEdges() { @Test public void inEdges_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> network.inEdges(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.inEdges(NODE_NOT_IN_GRAPH))); } @Test @@ -594,9 +588,8 @@ public void outEdges_noOutEdges() { @Test public void outEdges_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> network.outEdges(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.outEdges(NODE_NOT_IN_GRAPH))); } @Test @@ -607,9 +600,9 @@ public void predecessors_noPredecessors() { @Test public void predecessors_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> network.predecessors(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows( + IllegalArgumentException.class, () -> network.predecessors(NODE_NOT_IN_GRAPH))); } @Test @@ -620,9 +613,8 @@ public void successors_noSuccessors() { @Test public void successors_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> network.successors(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.successors(NODE_NOT_IN_GRAPH))); } @Test @@ -654,6 +646,28 @@ public void removeNode_existingNode() { assertThat(networkAsMutableNetwork.nodes()).containsExactly(N2, N4); assertThat(networkAsMutableNetwork.edges()).doesNotContain(E12); assertThat(networkAsMutableNetwork.edges()).doesNotContain(E41); + + assertThat(network.adjacentNodes(N2)).isEmpty(); + assertThat(network.predecessors(N2)).isEmpty(); + assertThat(network.successors(N2)).isEmpty(); + assertThat(network.incidentEdges(N2)).isEmpty(); + assertThat(network.inEdges(N2)).isEmpty(); + assertThat(network.outEdges(N2)).isEmpty(); + assertThat(network.adjacentNodes(N4)).isEmpty(); + assertThat(network.predecessors(N4)).isEmpty(); + assertThat(network.successors(N4)).isEmpty(); + assertThat(network.incidentEdges(N4)).isEmpty(); + assertThat(network.inEdges(N4)).isEmpty(); + assertThat(network.outEdges(N4)).isEmpty(); + + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.adjacentNodes(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.predecessors(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.successors(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.incidentEdges(N1))); } @Test @@ -667,19 +681,52 @@ public void removeNode_nodeNotPresent() { } @Test - public void removeNode_queryAfterRemoval() { + public void queryAccessorSetAfterElementRemoval() { assume().that(graphIsMutable()).isTrue(); addEdge(N1, N2, E12); - Set n1AdjacentNodes = networkAsMutableNetwork.adjacentNodes(N1); - Set n2AdjacentNodes = networkAsMutableNetwork.adjacentNodes(N2); - assertTrue(networkAsMutableNetwork.removeNode(N1)); - assertThat(n1AdjacentNodes).isEmpty(); + Set n1AdjacentNodes = network.adjacentNodes(N1); + Set n2AdjacentNodes = network.adjacentNodes(N2); + Set n1Predecessors = network.predecessors(N1); + Set n2Predecessors = network.predecessors(N2); + Set n1Successors = network.successors(N1); + Set n2Successors = network.successors(N2); + Set n1IncidentEdges = network.incidentEdges(N1); + Set n2IncidentEdges = network.incidentEdges(N2); + Set n1InEdges = network.inEdges(N1); + Set n2InEdges = network.inEdges(N2); + Set n1OutEdges = network.outEdges(N1); + Set n2OutEdges = network.outEdges(N2); + Set e12AdjacentEdges = network.adjacentEdges(E12); + Set n12EdgesConnecting = network.edgesConnecting(N1, N2); + assertThat(networkAsMutableNetwork.removeNode(N1)).isTrue(); + + // The choice of the size() method to call here is arbitrary. We assume that if any of the Set + // methods executes the validation check, they all will, and thus we only need to test one of + // them to ensure that the validation check happens and has the expected behavior. + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1AdjacentNodes::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1Predecessors::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1Successors::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1IncidentEdges::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1InEdges::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1OutEdges::size)); + assertEdgeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, e12AdjacentEdges::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n12EdgesConnecting::size)); + assertThat(n2AdjacentNodes).isEmpty(); - IllegalArgumentException e = - assertThrows( - IllegalArgumentException.class, () -> networkAsMutableNetwork.adjacentNodes(N1)); - assertNodeNotInGraphErrorMessage(e); + assertThat(n2Predecessors).isEmpty(); + assertThat(n2Successors).isEmpty(); + assertThat(n2IncidentEdges).isEmpty(); + assertThat(n2InEdges).isEmpty(); + assertThat(n2OutEdges).isEmpty(); } @Test @@ -724,10 +771,9 @@ public void removeEdge_queryAfterRemoval() { EndpointPair unused = networkAsMutableNetwork.incidentNodes(E12); // ensure cache (if any) is populated assertTrue(networkAsMutableNetwork.removeEdge(E12)); - IllegalArgumentException e = + assertEdgeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> networkAsMutableNetwork.incidentNodes(E12)); - assertEdgeNotInGraphErrorMessage(e); + IllegalArgumentException.class, () -> networkAsMutableNetwork.incidentNodes(E12))); } @Test @@ -807,7 +853,7 @@ public void concurrentIteration() throws Exception { * synchronization actions.) * * All that said: I haven't actually managed to make this particular test produce a TSAN error - * for the field accesses in MapIteratorCache. This teset *has* found other TSAN errors, + * for the field accesses in MapIteratorCache. This test *has* found other TSAN errors, * including in MapRetrievalCache, so I'm not sure why this one is different. I did at least * confirm that my change to MapIteratorCache fixes the TSAN error in the (larger) test it was * originally reported in. diff --git a/android/guava-tests/test/com/google/common/graph/InvalidatableSetTest.java b/android/guava-tests/test/com/google/common/graph/InvalidatableSetTest.java new file mode 100644 index 000000000000..1af877f39f87 --- /dev/null +++ b/android/guava-tests/test/com/google/common/graph/InvalidatableSetTest.java @@ -0,0 +1,60 @@ +package com.google.common.graph; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertThrows; + +import com.google.common.collect.ImmutableSet; +import java.util.HashSet; +import java.util.Set; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public final class InvalidatableSetTest { + Set wrappedSet; + Set copyOfWrappedSet; + InvalidatableSet setToTest; + + @Before + public void createSets() { + wrappedSet = new HashSet<>(); + wrappedSet.add(1); + wrappedSet.add(2); + wrappedSet.add(3); + + copyOfWrappedSet = ImmutableSet.copyOf(wrappedSet); + setToTest = + InvalidatableSet.of(wrappedSet, () -> wrappedSet.contains(1), () -> 1 + "is not present"); + } + + @Test + @SuppressWarnings("TruthSelfEquals") + public void testEquals() { + // sanity check on construction of copyOfWrappedSet + assertThat(wrappedSet).isEqualTo(copyOfWrappedSet); + + // test that setToTest is still valid + assertThat(setToTest).isEqualTo(wrappedSet); + assertThat(setToTest).isEqualTo(copyOfWrappedSet); + + // invalidate setToTest + wrappedSet.remove(1); + // sanity check on update of wrappedSet + assertThat(wrappedSet).isNotEqualTo(copyOfWrappedSet); + + ImmutableSet copyOfModifiedSet = ImmutableSet.copyOf(wrappedSet); // {2,3} + // sanity check on construction of copyOfModifiedSet + assertThat(wrappedSet).isEqualTo(copyOfModifiedSet); + + // setToTest should throw when it calls equals(), or equals is called on it, except for itself + assertThat(setToTest).isEqualTo(setToTest); + assertThrows(IllegalStateException.class, () -> setToTest.equals(wrappedSet)); + assertThrows(IllegalStateException.class, () -> setToTest.equals(copyOfWrappedSet)); + assertThrows(IllegalStateException.class, () -> setToTest.equals(copyOfModifiedSet)); + assertThrows(IllegalStateException.class, () -> wrappedSet.equals(setToTest)); + assertThrows(IllegalStateException.class, () -> copyOfWrappedSet.equals(setToTest)); + assertThrows(IllegalStateException.class, () -> copyOfModifiedSet.equals(setToTest)); + } +} diff --git a/android/guava-tests/test/com/google/common/graph/TestUtil.java b/android/guava-tests/test/com/google/common/graph/TestUtil.java index 68a2503e223f..95fc75296c3a 100644 --- a/android/guava-tests/test/com/google/common/graph/TestUtil.java +++ b/android/guava-tests/test/com/google/common/graph/TestUtil.java @@ -28,6 +28,7 @@ final class TestUtil { static final String ERROR_ELEMENT_NOT_IN_GRAPH = "not an element of this graph"; static final String ERROR_NODE_NOT_IN_GRAPH = "Should not be allowed to pass a node that is not an element of the graph."; + static final String ERROR_ELEMENT_REMOVED = "used to generate this set"; private static final String NODE_STRING = "Node"; private static final String EDGE_STRING = "Edge"; @@ -42,12 +43,22 @@ static void assertNodeNotInGraphErrorMessage(Throwable throwable) { assertThat(throwable).hasMessageThat().startsWith(NODE_STRING); assertThat(throwable).hasMessageThat().contains(ERROR_ELEMENT_NOT_IN_GRAPH); } - + static void assertEdgeNotInGraphErrorMessage(Throwable throwable) { assertThat(throwable).hasMessageThat().startsWith(EDGE_STRING); assertThat(throwable).hasMessageThat().contains(ERROR_ELEMENT_NOT_IN_GRAPH); } + static void assertNodeRemovedFromGraphErrorMessage(Throwable throwable) { + assertThat(throwable).hasMessageThat().startsWith(NODE_STRING); + assertThat(throwable).hasMessageThat().contains(ERROR_ELEMENT_REMOVED); + } + + static void assertEdgeRemovedFromGraphErrorMessage(Throwable throwable) { + assertThat(throwable).hasMessageThat().startsWith(EDGE_STRING); + assertThat(throwable).hasMessageThat().contains(ERROR_ELEMENT_REMOVED); + } + static void assertStronglyEquivalent(Graph graphA, Graph graphB) { // Properties not covered by equals() assertThat(graphA.allowsSelfLoops()).isEqualTo(graphB.allowsSelfLoops()); diff --git a/android/guava/src/com/google/common/graph/AbstractBaseGraph.java b/android/guava/src/com/google/common/graph/AbstractBaseGraph.java index 5adcc9216c7a..16cbdde7eec6 100644 --- a/android/guava/src/com/google/common/graph/AbstractBaseGraph.java +++ b/android/guava/src/com/google/common/graph/AbstractBaseGraph.java @@ -20,6 +20,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; import static com.google.common.graph.GraphConstants.ENDPOINTS_MISMATCH; +import static com.google.common.graph.GraphConstants.NODE_PAIR_REMOVED_FROM_GRAPH; +import static com.google.common.graph.GraphConstants.NODE_REMOVED_FROM_GRAPH; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterators; @@ -106,27 +108,30 @@ public ElementOrder incidentEdgeOrder() { public Set> incidentEdges(N node) { checkNotNull(node); checkArgument(nodes().contains(node), "Node %s is not an element of this graph.", node); - return new IncidentEdgeSet(this, node) { - @Override - public UnmodifiableIterator> iterator() { - if (graph.isDirected()) { - return Iterators.unmodifiableIterator( - Iterators.concat( - Iterators.transform( - graph.predecessors(node).iterator(), - (N predecessor) -> EndpointPair.ordered(predecessor, node)), + IncidentEdgeSet incident = + new IncidentEdgeSet(this, node) { + @Override + public UnmodifiableIterator> iterator() { + if (graph.isDirected()) { + return Iterators.unmodifiableIterator( + Iterators.concat( + Iterators.transform( + graph.predecessors(node).iterator(), + (N predecessor) -> EndpointPair.ordered(predecessor, node)), + Iterators.transform( + // filter out 'node' from successors (already covered by predecessors, + // above) + Sets.difference(graph.successors(node), ImmutableSet.of(node)).iterator(), + (N successor) -> EndpointPair.ordered(node, successor)))); + } else { + return Iterators.unmodifiableIterator( Iterators.transform( - // filter out 'node' from successors (already covered by predecessors, above) - Sets.difference(graph.successors(node), ImmutableSet.of(node)).iterator(), - (N successor) -> EndpointPair.ordered(node, successor)))); - } else { - return Iterators.unmodifiableIterator( - Iterators.transform( - graph.adjacentNodes(node).iterator(), - (N adjacentNode) -> EndpointPair.unordered(node, adjacentNode))); - } - } - }; + graph.adjacentNodes(node).iterator(), + (N adjacentNode) -> EndpointPair.unordered(node, adjacentNode))); + } + } + }; + return nodeInvalidatableSet(incident, node); } @Override @@ -184,4 +189,16 @@ protected final void validateEndpoints(EndpointPair endpoints) { protected final boolean isOrderingCompatible(EndpointPair endpoints) { return endpoints.isOrdered() == this.isDirected(); } + + protected final Set nodeInvalidatableSet(Set set, N node) { + return InvalidatableSet.of( + set, () -> nodes().contains(node), () -> String.format(NODE_REMOVED_FROM_GRAPH, node)); + } + + protected final Set nodePairInvalidatableSet(Set set, N nodeU, N nodeV) { + return InvalidatableSet.of( + set, + () -> nodes().contains(nodeU) && nodes().contains(nodeV), + () -> String.format(NODE_PAIR_REMOVED_FROM_GRAPH, nodeU, nodeV)); + } } diff --git a/android/guava/src/com/google/common/graph/AbstractNetwork.java b/android/guava/src/com/google/common/graph/AbstractNetwork.java index 0e59378d3a27..053f35ea4aaa 100644 --- a/android/guava/src/com/google/common/graph/AbstractNetwork.java +++ b/android/guava/src/com/google/common/graph/AbstractNetwork.java @@ -18,8 +18,11 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.graph.GraphConstants.EDGE_REMOVED_FROM_GRAPH; import static com.google.common.graph.GraphConstants.ENDPOINTS_MISMATCH; import static com.google.common.graph.GraphConstants.MULTIPLE_EDGES_CONNECTING; +import static com.google.common.graph.GraphConstants.NODE_PAIR_REMOVED_FROM_GRAPH; +import static com.google.common.graph.GraphConstants.NODE_REMOVED_FROM_GRAPH; import static java.util.Collections.unmodifiableSet; import com.google.common.annotations.Beta; @@ -50,7 +53,6 @@ @Beta @ElementTypesAreNonnullByDefault public abstract class AbstractNetwork implements Network { - @Override public Graph asGraph() { return new AbstractGraph() { @@ -160,16 +162,20 @@ public Set adjacentEdges(E edge) { EndpointPair endpointPair = incidentNodes(edge); // Verifies that edge is in this network. Set endpointPairIncidentEdges = Sets.union(incidentEdges(endpointPair.nodeU()), incidentEdges(endpointPair.nodeV())); - return Sets.difference(endpointPairIncidentEdges, ImmutableSet.of(edge)); + return edgeInvalidatableSet( + Sets.difference(endpointPairIncidentEdges, ImmutableSet.of(edge)), edge); } @Override public Set edgesConnecting(N nodeU, N nodeV) { Set outEdgesU = outEdges(nodeU); Set inEdgesV = inEdges(nodeV); - return outEdgesU.size() <= inEdgesV.size() - ? unmodifiableSet(Sets.filter(outEdgesU, connectedPredicate(nodeU, nodeV))) - : unmodifiableSet(Sets.filter(inEdgesV, connectedPredicate(nodeV, nodeU))); + return nodePairInvalidatableSet( + outEdgesU.size() <= inEdgesV.size() + ? unmodifiableSet(Sets.filter(outEdgesU, connectedPredicate(nodeU, nodeV))) + : unmodifiableSet(Sets.filter(inEdgesV, connectedPredicate(nodeV, nodeU))), + nodeU, + nodeV); } @Override @@ -272,6 +278,23 @@ public String toString() { + edgeIncidentNodesMap(this); } + protected final Set edgeInvalidatableSet(Set set, E edge) { + return InvalidatableSet.of( + set, () -> edges().contains(edge), () -> String.format(EDGE_REMOVED_FROM_GRAPH, edge)); + } + + protected final Set nodeInvalidatableSet(Set set, N node) { + return InvalidatableSet.of( + set, () -> nodes().contains(node), () -> String.format(NODE_REMOVED_FROM_GRAPH, node)); + } + + protected final Set nodePairInvalidatableSet(Set set, N nodeU, N nodeV) { + return InvalidatableSet.of( + set, + () -> nodes().contains(nodeU) && nodes().contains(nodeV), + () -> String.format(NODE_PAIR_REMOVED_FROM_GRAPH, nodeU, nodeV)); + } + private static Map> edgeIncidentNodesMap(final Network network) { return Maps.asMap(network.edges(), network::incidentNodes); } diff --git a/android/guava/src/com/google/common/graph/BaseGraph.java b/android/guava/src/com/google/common/graph/BaseGraph.java index 68813e18a76d..0fa83e3ad146 100644 --- a/android/guava/src/com/google/common/graph/BaseGraph.java +++ b/android/guava/src/com/google/common/graph/BaseGraph.java @@ -71,44 +71,93 @@ interface BaseGraph extends SuccessorsFunction, PredecessorsFunction { // /** - * Returns the nodes which have an incident edge in common with {@code node} in this graph. + * Returns a live view of the nodes which have an incident edge in common with {@code node} in + * this graph. * *

This is equal to the union of {@link #predecessors(Object)} and {@link #successors(Object)}. * + *

If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ Set adjacentNodes(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s incoming edges against the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s incoming edges against the direction (if any) of the edge. * *

In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * + *

If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set predecessors(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s outgoing edges in the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s outgoing edges in the direction (if any) of the edge. * *

In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * *

This is not the same as "all nodes reachable from {@code node} by following outgoing * edges". For that functionality, see {@link Graphs#reachableNodes(Graph, Object)}. * + *

If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set successors(N node); /** - * Returns the edges in this graph whose endpoints include {@code node}. + * Returns a live view of the edges in this graph whose endpoints include {@code node}. * *

This is equal to the union of incoming and outgoing edges. * + *

If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this graph * @since 24.0 */ diff --git a/android/guava/src/com/google/common/graph/Graph.java b/android/guava/src/com/google/common/graph/Graph.java index 5dc0e71faf6d..b56842ab9c8a 100644 --- a/android/guava/src/com/google/common/graph/Graph.java +++ b/android/guava/src/com/google/common/graph/Graph.java @@ -156,45 +156,94 @@ public interface Graph extends BaseGraph { // /** - * Returns the nodes which have an incident edge in common with {@code node} in this graph. + * Returns a live view of the nodes which have an incident edge in common with {@code node} in + * this graph. * *

This is equal to the union of {@link #predecessors(Object)} and {@link #successors(Object)}. * + *

If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set adjacentNodes(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s incoming edges against the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s incoming edges against the direction (if any) of the edge. * *

In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * + *

If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set predecessors(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s outgoing edges in the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s outgoing edges in the direction (if any) of the edge. * *

In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * *

This is not the same as "all nodes reachable from {@code node} by following outgoing * edges". For that functionality, see {@link Graphs#reachableNodes(Graph, Object)}. * + *

If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set successors(N node); /** - * Returns the edges in this graph whose endpoints include {@code node}. + * Returns a live view of the edges in this graph whose endpoints include {@code node}. * *

This is equal to the union of incoming and outgoing edges. * + *

If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this graph * @since 24.0 */ diff --git a/android/guava/src/com/google/common/graph/GraphConstants.java b/android/guava/src/com/google/common/graph/GraphConstants.java index 4e8510662cf1..263d6fd40617 100644 --- a/android/guava/src/com/google/common/graph/GraphConstants.java +++ b/android/guava/src/com/google/common/graph/GraphConstants.java @@ -35,6 +35,12 @@ private GraphConstants() {} // Error messages static final String NODE_NOT_IN_GRAPH = "Node %s is not an element of this graph."; static final String EDGE_NOT_IN_GRAPH = "Edge %s is not an element of this graph."; + static final String NODE_REMOVED_FROM_GRAPH = + "Node %s that was used to generate this set is no longer in the graph."; + static final String NODE_PAIR_REMOVED_FROM_GRAPH = + "Node %s or node %s that were used to generate this set are no longer in the graph."; + static final String EDGE_REMOVED_FROM_GRAPH = + "Edge %s that was used to generate this set is no longer in the graph."; static final String REUSING_EDGE = "Edge %s already exists between the following nodes: %s, " + "so it cannot be reused to connect the following nodes: %s."; diff --git a/android/guava/src/com/google/common/graph/InvalidatableSet.java b/android/guava/src/com/google/common/graph/InvalidatableSet.java new file mode 100644 index 000000000000..f8834b589ae9 --- /dev/null +++ b/android/guava/src/com/google/common/graph/InvalidatableSet.java @@ -0,0 +1,54 @@ +package com.google.common.graph; + +import static com.google.common.base.Preconditions.checkNotNull; + +import com.google.common.base.Supplier; +import com.google.common.collect.ForwardingSet; +import java.util.Set; + +/** + * A subclass of `ForwardingSet` that throws `IllegalStateException` on invocation of any method + * (except `hashCode` and `equals`) if the provided `Supplier` returns false. + */ +@ElementTypesAreNonnullByDefault +final class InvalidatableSet extends ForwardingSet { + private final Supplier validator; + private final Set delegate; + private final Supplier errorMessage; + + public static final InvalidatableSet of( + Set delegate, Supplier validator, Supplier errorMessage) { + return new InvalidatableSet<>( + checkNotNull(delegate), checkNotNull(validator), checkNotNull(errorMessage)); + } + + @Override + protected Set delegate() { + validate(); + return delegate; + } + + private InvalidatableSet( + Set delegate, Supplier validator, Supplier errorMessage) { + this.delegate = delegate; + this.validator = validator; + this.errorMessage = errorMessage; + } + + // Override hashCode() to access delegate directly (so that it doesn't trigger the validate() call + // via delegate()); it seems inappropriate to throw ISE on this method. + @Override + public int hashCode() { + return delegate.hashCode(); + } + + private void validate() { + // Don't use checkState(), because we don't want the overhead of generating the error message + // unless it's actually going to be used; validate() is called for all set method calls, so it + // needs to be fast. + // (We could instead generate the message once, when the set is created, but zero is better.) + if (!validator.get()) { + throw new IllegalStateException(errorMessage.get()); + } + } +} diff --git a/android/guava/src/com/google/common/graph/Network.java b/android/guava/src/com/google/common/graph/Network.java index adf0c3dd8b2e..2e47764c095a 100644 --- a/android/guava/src/com/google/common/graph/Network.java +++ b/android/guava/src/com/google/common/graph/Network.java @@ -56,20 +56,20 @@ * NetworkBuilder} class: * *
{@code
- * MutableNetwork graph = NetworkBuilder.directed().build();
+ * MutableNetwork network = NetworkBuilder.directed().build();
  * }
* *

{@link NetworkBuilder#build()} returns an instance of {@link MutableNetwork}, which is a * subtype of {@code Network} that provides methods for adding and removing nodes and edges. If you - * do not need to mutate a graph (e.g. if you write a method than runs a read-only algorithm on the - * graph), you should use the non-mutating {@link Network} interface, or an {@link + * do not need to mutate a network (e.g. if you write a method than runs a read-only algorithm on + * the network), you should use the non-mutating {@link Network} interface, or an {@link * ImmutableNetwork}. * *

You can create an immutable copy of an existing {@code Network} using {@link * ImmutableNetwork#copyOf(Network)}: * *

{@code
- * ImmutableNetwork immutableGraph = ImmutableNetwork.copyOf(graph);
+ * ImmutableNetwork immutableGraph = ImmutableNetwork.copyOf(network);
  * }
* *

Instances of {@link ImmutableNetwork} do not implement {@link MutableNetwork} (obviously!) and @@ -160,69 +160,135 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti // /** - * Returns the nodes which have an incident edge in common with {@code node} in this network. + * Returns a live view of the nodes which have an incident edge in common with {@code node} in + * this network. * *

This is equal to the union of {@link #predecessors(Object)} and {@link #successors(Object)}. * + *

If {@code node} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this network */ Set adjacentNodes(N node); /** - * Returns all nodes in this network adjacent to {@code node} which can be reached by traversing - * {@code node}'s incoming edges against the direction (if any) of the edge. + * Returns a live view of all nodes in this network adjacent to {@code node} which can be reached + * by traversing {@code node}'s incoming edges against the direction (if any) of the edge. * *

In an undirected network, this is equivalent to {@link #adjacentNodes(Object)}. * + *

If {@code node} is removed from the network after this method is called, the `Set` returned + * by this method will be invalidated, and will throw `IllegalStateException` if it is accessed in + * any way. + * * @throws IllegalArgumentException if {@code node} is not an element of this network */ @Override Set predecessors(N node); /** - * Returns all nodes in this network adjacent to {@code node} which can be reached by traversing - * {@code node}'s outgoing edges in the direction (if any) of the edge. + * Returns a live view of all nodes in this network adjacent to {@code node} which can be reached + * by traversing {@code node}'s outgoing edges in the direction (if any) of the edge. * *

In an undirected network, this is equivalent to {@link #adjacentNodes(Object)}. * *

This is not the same as "all nodes reachable from {@code node} by following outgoing * edges". For that functionality, see {@link Graphs#reachableNodes(Graph, Object)}. * + *

If {@code node} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this network */ @Override Set successors(N node); /** - * Returns the edges whose {@link #incidentNodes(Object) incident nodes} in this network include - * {@code node}. + * Returns a live view of the edges whose {@link #incidentNodes(Object) incident nodes} in this + * network include {@code node}. * *

This is equal to the union of {@link #inEdges(Object)} and {@link #outEdges(Object)}. * + *

If {@code node} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this network + * @since 24.0 */ Set incidentEdges(N node); /** - * Returns all edges in this network which can be traversed in the direction (if any) of the edge - * to end at {@code node}. + * Returns a live view of all edges in this network which can be traversed in the direction (if + * any) of the edge to end at {@code node}. * *

In a directed network, an incoming edge's {@link EndpointPair#target()} equals {@code node}. * *

In an undirected network, this is equivalent to {@link #incidentEdges(Object)}. * + *

If {@code node} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this network */ Set inEdges(N node); /** - * Returns all edges in this network which can be traversed in the direction (if any) of the edge - * starting from {@code node}. + * Returns a live view of all edges in this network which can be traversed in the direction (if + * any) of the edge starting from {@code node}. * *

In a directed network, an outgoing edge's {@link EndpointPair#source()} equals {@code node}. * *

In an undirected network, this is equivalent to {@link #incidentEdges(Object)}. * + *

If {@code node} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this network */ Set outEdges(N node); @@ -270,15 +336,28 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti EndpointPair incidentNodes(E edge); /** - * Returns the edges which have an {@link #incidentNodes(Object) incident node} in common with - * {@code edge}. An edge is not considered adjacent to itself. + * Returns a live view of the edges which have an {@link #incidentNodes(Object) incident node} in + * common with {@code edge}. An edge is not considered adjacent to itself. + * + *

If {@code edge} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code edge} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
* * @throws IllegalArgumentException if {@code edge} is not an element of this network */ Set adjacentEdges(E edge); /** - * Returns the set of edges that each directly connect {@code nodeU} to {@code nodeV}. + * Returns a live view of the set of edges that each directly connect {@code nodeU} to {@code + * nodeV}. * *

In an undirected network, this is equal to {@code edgesConnecting(nodeV, nodeU)}. * @@ -287,14 +366,27 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti * edges}, the resulting set will contain at most one edge (equivalent to {@code * edgeConnecting(nodeU, nodeV).asSet()}). * + *

If either {@code nodeU} or {@code nodeV} are removed from the network after this method is + * called, the {@code Set} {@code view} returned by this method will be invalidated, and will + * throw {@code IllegalStateException} if it is accessed in any way, with the following + * exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code nodeU} or {@code nodeV} are re-added to the network after having been removed, + * {@code view}'s behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code nodeU} or {@code nodeV} is not an element of this * network */ Set edgesConnecting(N nodeU, N nodeV); /** - * Returns the set of edges that each directly connect {@code endpoints} (in the order, if any, - * specified by {@code endpoints}). + * Returns a live view of the set of edges that each directly connect {@code endpoints} (in the + * order, if any, specified by {@code endpoints}). * *

The resulting set of edges will be parallel (i.e. have equal {@link * #incidentNodes(Object)}). If this network does not {@link #allowsParallelEdges() allow parallel @@ -303,8 +395,21 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti * *

If this network is directed, {@code endpoints} must be ordered. * + *

If either element of {@code endpoints} is removed from the network after this method is + * called, the {@code Set} {@code view} returned by this method will be invalidated, and will + * throw {@code IllegalStateException} if it is accessed in any way, with the following + * exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if either endpoint is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if either endpoint is not an element of this network - * @throws IllegalArgumentException if the endpoints are unordered and the graph is directed + * @throws IllegalArgumentException if the endpoints are unordered and the network is directed * @since 27.1 */ Set edgesConnecting(EndpointPair endpoints); @@ -328,12 +433,12 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti * Returns the single edge that directly connects {@code endpoints} (in the order, if any, * specified by {@code endpoints}), if one is present, or {@code null} if no such edge exists. * - *

If this graph is directed, the endpoints must be ordered. + *

If this network is directed, the endpoints must be ordered. * * @throws IllegalArgumentException if there are multiple parallel edges connecting {@code nodeU} * to {@code nodeV} * @throws IllegalArgumentException if either endpoint is not an element of this network - * @throws IllegalArgumentException if the endpoints are unordered and the graph is directed + * @throws IllegalArgumentException if the endpoints are unordered and the network is directed * @since 27.1 */ @CheckForNull @@ -344,7 +449,7 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti * equivalent to {@code nodes().contains(nodeU) && successors(nodeU).contains(nodeV)}, and to * {@code edgeConnectingOrNull(nodeU, nodeV) != null}. * - *

In an undirected graph, this is equal to {@code hasEdgeConnecting(nodeV, nodeU)}. + *

In an undirected network, this is equal to {@code hasEdgeConnecting(nodeV, nodeU)}. * * @since 23.0 */ @@ -355,8 +460,8 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti * any, specified by {@code endpoints}). * *

Unlike the other {@code EndpointPair}-accepting methods, this method does not throw if the - * endpoints are unordered and the graph is directed; it simply returns {@code false}. This is for - * consistency with {@link Graph#hasEdgeConnecting(EndpointPair)} and {@link + * endpoints are unordered and the network is directed; it simply returns {@code false}. This is + * for consistency with {@link Graph#hasEdgeConnecting(EndpointPair)} and {@link * ValueGraph#hasEdgeConnecting(EndpointPair)}. * * @since 27.1 diff --git a/android/guava/src/com/google/common/graph/StandardNetwork.java b/android/guava/src/com/google/common/graph/StandardNetwork.java index 2aa103f99683..9c3cfd5a01b2 100644 --- a/android/guava/src/com/google/common/graph/StandardNetwork.java +++ b/android/guava/src/com/google/common/graph/StandardNetwork.java @@ -130,7 +130,7 @@ public ElementOrder edgeOrder() { @Override public Set incidentEdges(N node) { - return checkedConnections(node).incidentEdges(); + return nodeInvalidatableSet(checkedConnections(node).incidentEdges(), node); } @Override @@ -143,7 +143,7 @@ public EndpointPair incidentNodes(E edge) { @Override public Set adjacentNodes(N node) { - return checkedConnections(node).adjacentNodes(); + return nodeInvalidatableSet(checkedConnections(node).adjacentNodes(), node); } @Override @@ -153,27 +153,27 @@ public Set edgesConnecting(N nodeU, N nodeV) { return ImmutableSet.of(); } checkArgument(containsNode(nodeV), NODE_NOT_IN_GRAPH, nodeV); - return connectionsU.edgesConnecting(nodeV); + return nodePairInvalidatableSet(connectionsU.edgesConnecting(nodeV), nodeU, nodeV); } @Override public Set inEdges(N node) { - return checkedConnections(node).inEdges(); + return nodeInvalidatableSet(checkedConnections(node).inEdges(), node); } @Override public Set outEdges(N node) { - return checkedConnections(node).outEdges(); + return nodeInvalidatableSet(checkedConnections(node).outEdges(), node); } @Override public Set predecessors(N node) { - return checkedConnections(node).predecessors(); + return nodeInvalidatableSet(checkedConnections(node).predecessors(), node); } @Override public Set successors(N node) { - return checkedConnections(node).successors(); + return nodeInvalidatableSet(checkedConnections(node).successors(), node); } final NetworkConnections checkedConnections(N node) { diff --git a/android/guava/src/com/google/common/graph/StandardValueGraph.java b/android/guava/src/com/google/common/graph/StandardValueGraph.java index ab3ae582b55e..a5f3553087d9 100644 --- a/android/guava/src/com/google/common/graph/StandardValueGraph.java +++ b/android/guava/src/com/google/common/graph/StandardValueGraph.java @@ -103,29 +103,30 @@ public ElementOrder nodeOrder() { @Override public Set adjacentNodes(N node) { - return checkedConnections(node).adjacentNodes(); + return nodeInvalidatableSet(checkedConnections(node).adjacentNodes(), node); } @Override public Set predecessors(N node) { - return checkedConnections(node).predecessors(); + return nodeInvalidatableSet(checkedConnections(node).predecessors(), node); } @Override public Set successors(N node) { - return checkedConnections(node).successors(); + return nodeInvalidatableSet(checkedConnections(node).successors(), node); } @Override public Set> incidentEdges(N node) { GraphConnections connections = checkedConnections(node); - - return new IncidentEdgeSet(this, node) { - @Override - public Iterator> iterator() { - return connections.incidentEdgeIterator(node); - } - }; + IncidentEdgeSet incident = + new IncidentEdgeSet(this, node) { + @Override + public Iterator> iterator() { + return connections.incidentEdgeIterator(node); + } + }; + return nodeInvalidatableSet(incident, node); } @Override diff --git a/android/guava/src/com/google/common/graph/ValueGraph.java b/android/guava/src/com/google/common/graph/ValueGraph.java index bd3cf36401e3..56da5417cb44 100644 --- a/android/guava/src/com/google/common/graph/ValueGraph.java +++ b/android/guava/src/com/google/common/graph/ValueGraph.java @@ -17,7 +17,6 @@ package com.google.common.graph; import com.google.common.annotations.Beta; -import java.util.Collection; import java.util.Set; import javax.annotation.CheckForNull; @@ -166,45 +165,86 @@ public interface ValueGraph extends BaseGraph { // /** - * Returns the nodes which have an incident edge in common with {@code node} in this graph. + * Returns a live view of the nodes which have an incident edge in common with {@code node} in + * this graph. * *

This is equal to the union of {@link #predecessors(Object)} and {@link #successors(Object)}. * + *

If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set adjacentNodes(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s incoming edges against the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s incoming edges against the direction (if any) of the edge. * *

In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * + *

If {@code node} is removed from the graph after this method is called, the `Set` returned by + * this method will be invalidated, and will throw `IllegalStateException` if it is accessed in + * any way. + * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set predecessors(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s outgoing edges in the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s outgoing edges in the direction (if any) of the edge. * *

In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * *

This is not the same as "all nodes reachable from {@code node} by following outgoing * edges". For that functionality, see {@link Graphs#reachableNodes(Graph, Object)}. * + *

If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set successors(N node); /** - * Returns the edges in this graph whose endpoints include {@code node}. + * Returns a live view of the edges in this graph whose endpoints include {@code node}. * *

This is equal to the union of incoming and outgoing edges. * + *

If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

    + *
  • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
  • {@code hashCode()} does not throw + *
  • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
+ * * @throws IllegalArgumentException if {@code node} is not an element of this graph * @since 24.0 */ @@ -316,7 +356,8 @@ public interface ValueGraph extends BaseGraph { *
  • A and B have equal {@link #isDirected() directedness}. *
  • A and B have equal {@link #nodes() node sets}. *
  • A and B have equal {@link #edges() edge sets}. - *
  • The {@link #edgeValue(Object, Object) value} of a given edge is the same in both A and B. + *
  • The {@link #edgeValueOrDefault(N, N, V) value} of a given edge is the same in both A and + * B. * * *

    Graph properties besides {@link #isDirected() directedness} do not affect equality. @@ -331,8 +372,8 @@ public interface ValueGraph extends BaseGraph { /** * Returns the hash code for this graph. The hash code of a graph is defined as the hash code of a - * map from each of its {@link #edges() edges} to the associated {@link #edgeValue(Object, Object) - * edge value}. + * map from each of its {@link #edges() edges} to the associated {@link #edgeValueOrDefault(N, N, + * V) edge value}. * *

    A reference implementation of this is provided by {@link AbstractValueGraph#hashCode()}. */ diff --git a/guava-tests/test/com/google/common/graph/AbstractGraphTest.java b/guava-tests/test/com/google/common/graph/AbstractGraphTest.java index a8209244c037..8b4b5076cdf7 100644 --- a/guava-tests/test/com/google/common/graph/AbstractGraphTest.java +++ b/guava-tests/test/com/google/common/graph/AbstractGraphTest.java @@ -17,6 +17,7 @@ package com.google.common.graph; import static com.google.common.graph.TestUtil.assertNodeNotInGraphErrorMessage; +import static com.google.common.graph.TestUtil.assertNodeRemovedFromGraphErrorMessage; import static com.google.common.graph.TestUtil.assertStronglyEquivalent; import static com.google.common.graph.TestUtil.sanityCheckSet; import static com.google.common.truth.Truth.assertThat; @@ -234,9 +235,8 @@ public void adjacentNodes_noAdjacentNodes() { @Test public void adjacentNodes_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(NODE_NOT_IN_GRAPH))); } @Test @@ -247,9 +247,8 @@ public void predecessors_noPredecessors() { @Test public void predecessors_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.predecessors(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.predecessors(NODE_NOT_IN_GRAPH))); } @Test @@ -260,9 +259,8 @@ public void successors_noSuccessors() { @Test public void successors_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.successors(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.successors(NODE_NOT_IN_GRAPH))); } @Test @@ -273,9 +271,8 @@ public void incidentEdges_noIncidentEdges() { @Test public void incidentEdges_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.incidentEdges(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.incidentEdges(NODE_NOT_IN_GRAPH))); } @Test @@ -293,9 +290,8 @@ public void degree_isolatedNode() { @Test public void degree_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.degree(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.degree(NODE_NOT_IN_GRAPH))); } @Test @@ -306,9 +302,8 @@ public void inDegree_isolatedNode() { @Test public void inDegree_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.inDegree(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.inDegree(NODE_NOT_IN_GRAPH))); } @Test @@ -319,9 +314,8 @@ public void outDegree_isolatedNode() { @Test public void outDegree_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.outDegree(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.outDegree(NODE_NOT_IN_GRAPH))); } @Test @@ -351,8 +345,24 @@ public void removeNode_existingNode() { assertThat(graphAsMutableGraph.removeNode(N1)).isTrue(); assertThat(graphAsMutableGraph.removeNode(N1)).isFalse(); assertThat(graph.nodes()).containsExactly(N2, N4); + assertThat(graph.adjacentNodes(N2)).isEmpty(); + assertThat(graph.predecessors(N2)).isEmpty(); + assertThat(graph.successors(N2)).isEmpty(); + assertThat(graph.incidentEdges(N2)).isEmpty(); assertThat(graph.adjacentNodes(N4)).isEmpty(); + assertThat(graph.predecessors(N4)).isEmpty(); + assertThat(graph.successors(N4)).isEmpty(); + assertThat(graph.incidentEdges(N4)).isEmpty(); + + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.predecessors(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.successors(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.incidentEdges(N1))); } @Test @@ -382,19 +392,48 @@ public void removeNode_nodeNotPresent() { } @Test - public void removeNode_queryAfterRemoval() { + public void queryAccessorSetAfterElementRemoval() { assume().that(graphIsMutable()).isTrue(); putEdge(N1, N2); putEdge(N2, N1); Set n1AdjacentNodes = graph.adjacentNodes(N1); Set n2AdjacentNodes = graph.adjacentNodes(N2); + Set n1Predecessors = graph.predecessors(N1); + Set n2Predecessors = graph.predecessors(N2); + Set n1Successors = graph.successors(N1); + Set n2Successors = graph.successors(N2); + Set> n1IncidentEdges = graph.incidentEdges(N1); + Set> n2IncidentEdges = graph.incidentEdges(N2); assertThat(graphAsMutableGraph.removeNode(N1)).isTrue(); - assertThat(n1AdjacentNodes).isEmpty(); + + // The choice of the size() method to call here is arbitrary. We assume that if any of the Set + // methods executes the validation check, they all will, and thus we only need to test one of + // them to ensure that the validation check happens and has the expected behavior. + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1AdjacentNodes::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1Predecessors::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1Successors::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1IncidentEdges::size)); + assertThat(n2AdjacentNodes).isEmpty(); - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(N1)); - assertNodeNotInGraphErrorMessage(e); + assertThat(n2Predecessors).isEmpty(); + assertThat(n2Successors).isEmpty(); + assertThat(n2IncidentEdges).isEmpty(); + } + + @Test + public void queryGraphAfterElementRemoval() { + assume().that(graphIsMutable()).isTrue(); + + putEdge(N1, N2); + putEdge(N2, N1); + assertThat(graphAsMutableGraph.removeNode(N1)).isTrue(); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> graph.adjacentNodes(N1))); } @Test diff --git a/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java b/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java index a29ffc5ae42b..9fee7c8be6b4 100644 --- a/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java +++ b/guava-tests/test/com/google/common/graph/AbstractNetworkTest.java @@ -17,7 +17,9 @@ package com.google.common.graph; import static com.google.common.graph.TestUtil.assertEdgeNotInGraphErrorMessage; +import static com.google.common.graph.TestUtil.assertEdgeRemovedFromGraphErrorMessage; import static com.google.common.graph.TestUtil.assertNodeNotInGraphErrorMessage; +import static com.google.common.graph.TestUtil.assertNodeRemovedFromGraphErrorMessage; import static com.google.common.graph.TestUtil.assertStronglyEquivalent; import static com.google.common.graph.TestUtil.sanityCheckSet; import static com.google.common.truth.Truth.assertThat; @@ -423,10 +425,9 @@ public void incidentEdges_isolatedNode() { @Test public void incidentEdges_nodeNotInGraph() { - IllegalArgumentException e = + assertNodeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.incidentEdges(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + IllegalArgumentException.class, () -> network.incidentEdges(NODE_NOT_IN_GRAPH))); } @Test @@ -437,10 +438,9 @@ public void incidentNodes_oneEdge() { @Test public void incidentNodes_edgeNotInGraph() { - IllegalArgumentException e = + assertEdgeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.incidentNodes(EDGE_NOT_IN_GRAPH)); - assertEdgeNotInGraphErrorMessage(e); + IllegalArgumentException.class, () -> network.incidentNodes(EDGE_NOT_IN_GRAPH))); } @Test @@ -458,10 +458,9 @@ public void adjacentNodes_noAdjacentNodes() { @Test public void adjacentNodes_nodeNotInGraph() { - IllegalArgumentException e = + assertNodeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.adjacentNodes(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + IllegalArgumentException.class, () -> network.adjacentNodes(NODE_NOT_IN_GRAPH))); } @Test @@ -482,10 +481,9 @@ public void adjacentEdges_noAdjacentEdges() { @Test public void adjacentEdges_edgeNotInGraph() { - IllegalArgumentException e = + assertEdgeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.adjacentEdges(EDGE_NOT_IN_GRAPH)); - assertEdgeNotInGraphErrorMessage(e); + IllegalArgumentException.class, () -> network.adjacentEdges(EDGE_NOT_IN_GRAPH))); } @Test @@ -511,19 +509,16 @@ public void edgesConnecting_disconnectedNodes() { public void edgesConnecting_nodesNotInGraph() { addNode(N1); addNode(N2); - IllegalArgumentException e = + assertNodeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.edgesConnecting(N1, NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); - e = + IllegalArgumentException.class, () -> network.edgesConnecting(N1, NODE_NOT_IN_GRAPH))); + assertNodeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> network.edgesConnecting(NODE_NOT_IN_GRAPH, N2)); - assertNodeNotInGraphErrorMessage(e); - e = + IllegalArgumentException.class, () -> network.edgesConnecting(NODE_NOT_IN_GRAPH, N2))); + assertNodeNotInGraphErrorMessage( assertThrows( IllegalArgumentException.class, - () -> network.edgesConnecting(NODE_NOT_IN_GRAPH, NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + () -> network.edgesConnecting(NODE_NOT_IN_GRAPH, NODE_NOT_IN_GRAPH))); } @Test @@ -588,9 +583,8 @@ public void inEdges_noInEdges() { @Test public void inEdges_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> network.inEdges(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.inEdges(NODE_NOT_IN_GRAPH))); } @Test @@ -601,9 +595,8 @@ public void outEdges_noOutEdges() { @Test public void outEdges_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> network.outEdges(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.outEdges(NODE_NOT_IN_GRAPH))); } @Test @@ -614,9 +607,9 @@ public void predecessors_noPredecessors() { @Test public void predecessors_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> network.predecessors(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows( + IllegalArgumentException.class, () -> network.predecessors(NODE_NOT_IN_GRAPH))); } @Test @@ -627,9 +620,8 @@ public void successors_noSuccessors() { @Test public void successors_nodeNotInGraph() { - IllegalArgumentException e = - assertThrows(IllegalArgumentException.class, () -> network.successors(NODE_NOT_IN_GRAPH)); - assertNodeNotInGraphErrorMessage(e); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.successors(NODE_NOT_IN_GRAPH))); } @Test @@ -661,6 +653,28 @@ public void removeNode_existingNode() { assertThat(networkAsMutableNetwork.nodes()).containsExactly(N2, N4); assertThat(networkAsMutableNetwork.edges()).doesNotContain(E12); assertThat(networkAsMutableNetwork.edges()).doesNotContain(E41); + + assertThat(network.adjacentNodes(N2)).isEmpty(); + assertThat(network.predecessors(N2)).isEmpty(); + assertThat(network.successors(N2)).isEmpty(); + assertThat(network.incidentEdges(N2)).isEmpty(); + assertThat(network.inEdges(N2)).isEmpty(); + assertThat(network.outEdges(N2)).isEmpty(); + assertThat(network.adjacentNodes(N4)).isEmpty(); + assertThat(network.predecessors(N4)).isEmpty(); + assertThat(network.successors(N4)).isEmpty(); + assertThat(network.incidentEdges(N4)).isEmpty(); + assertThat(network.inEdges(N4)).isEmpty(); + assertThat(network.outEdges(N4)).isEmpty(); + + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.adjacentNodes(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.predecessors(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.successors(N1))); + assertNodeNotInGraphErrorMessage( + assertThrows(IllegalArgumentException.class, () -> network.incidentEdges(N1))); } @Test @@ -674,19 +688,52 @@ public void removeNode_nodeNotPresent() { } @Test - public void removeNode_queryAfterRemoval() { + public void queryAccessorSetAfterElementRemoval() { assume().that(graphIsMutable()).isTrue(); addEdge(N1, N2, E12); - Set n1AdjacentNodes = networkAsMutableNetwork.adjacentNodes(N1); - Set n2AdjacentNodes = networkAsMutableNetwork.adjacentNodes(N2); - assertTrue(networkAsMutableNetwork.removeNode(N1)); - assertThat(n1AdjacentNodes).isEmpty(); + Set n1AdjacentNodes = network.adjacentNodes(N1); + Set n2AdjacentNodes = network.adjacentNodes(N2); + Set n1Predecessors = network.predecessors(N1); + Set n2Predecessors = network.predecessors(N2); + Set n1Successors = network.successors(N1); + Set n2Successors = network.successors(N2); + Set n1IncidentEdges = network.incidentEdges(N1); + Set n2IncidentEdges = network.incidentEdges(N2); + Set n1InEdges = network.inEdges(N1); + Set n2InEdges = network.inEdges(N2); + Set n1OutEdges = network.outEdges(N1); + Set n2OutEdges = network.outEdges(N2); + Set e12AdjacentEdges = network.adjacentEdges(E12); + Set n12EdgesConnecting = network.edgesConnecting(N1, N2); + assertThat(networkAsMutableNetwork.removeNode(N1)).isTrue(); + + // The choice of the size() method to call here is arbitrary. We assume that if any of the Set + // methods executes the validation check, they all will, and thus we only need to test one of + // them to ensure that the validation check happens and has the expected behavior. + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1AdjacentNodes::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1Predecessors::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1Successors::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1IncidentEdges::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1InEdges::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n1OutEdges::size)); + assertEdgeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, e12AdjacentEdges::size)); + assertNodeRemovedFromGraphErrorMessage( + assertThrows(IllegalStateException.class, n12EdgesConnecting::size)); + assertThat(n2AdjacentNodes).isEmpty(); - IllegalArgumentException e = - assertThrows( - IllegalArgumentException.class, () -> networkAsMutableNetwork.adjacentNodes(N1)); - assertNodeNotInGraphErrorMessage(e); + assertThat(n2Predecessors).isEmpty(); + assertThat(n2Successors).isEmpty(); + assertThat(n2IncidentEdges).isEmpty(); + assertThat(n2InEdges).isEmpty(); + assertThat(n2OutEdges).isEmpty(); } @Test @@ -731,10 +778,9 @@ public void removeEdge_queryAfterRemoval() { EndpointPair unused = networkAsMutableNetwork.incidentNodes(E12); // ensure cache (if any) is populated assertTrue(networkAsMutableNetwork.removeEdge(E12)); - IllegalArgumentException e = + assertEdgeNotInGraphErrorMessage( assertThrows( - IllegalArgumentException.class, () -> networkAsMutableNetwork.incidentNodes(E12)); - assertEdgeNotInGraphErrorMessage(e); + IllegalArgumentException.class, () -> networkAsMutableNetwork.incidentNodes(E12))); } @Test @@ -814,7 +860,7 @@ public void concurrentIteration() throws Exception { * synchronization actions.) * * All that said: I haven't actually managed to make this particular test produce a TSAN error - * for the field accesses in MapIteratorCache. This teset *has* found other TSAN errors, + * for the field accesses in MapIteratorCache. This test *has* found other TSAN errors, * including in MapRetrievalCache, so I'm not sure why this one is different. I did at least * confirm that my change to MapIteratorCache fixes the TSAN error in the (larger) test it was * originally reported in. diff --git a/guava-tests/test/com/google/common/graph/InvalidatableSetTest.java b/guava-tests/test/com/google/common/graph/InvalidatableSetTest.java new file mode 100644 index 000000000000..1af877f39f87 --- /dev/null +++ b/guava-tests/test/com/google/common/graph/InvalidatableSetTest.java @@ -0,0 +1,60 @@ +package com.google.common.graph; + +import static com.google.common.truth.Truth.assertThat; +import static org.junit.Assert.assertThrows; + +import com.google.common.collect.ImmutableSet; +import java.util.HashSet; +import java.util.Set; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.JUnit4; + +@RunWith(JUnit4.class) +public final class InvalidatableSetTest { + Set wrappedSet; + Set copyOfWrappedSet; + InvalidatableSet setToTest; + + @Before + public void createSets() { + wrappedSet = new HashSet<>(); + wrappedSet.add(1); + wrappedSet.add(2); + wrappedSet.add(3); + + copyOfWrappedSet = ImmutableSet.copyOf(wrappedSet); + setToTest = + InvalidatableSet.of(wrappedSet, () -> wrappedSet.contains(1), () -> 1 + "is not present"); + } + + @Test + @SuppressWarnings("TruthSelfEquals") + public void testEquals() { + // sanity check on construction of copyOfWrappedSet + assertThat(wrappedSet).isEqualTo(copyOfWrappedSet); + + // test that setToTest is still valid + assertThat(setToTest).isEqualTo(wrappedSet); + assertThat(setToTest).isEqualTo(copyOfWrappedSet); + + // invalidate setToTest + wrappedSet.remove(1); + // sanity check on update of wrappedSet + assertThat(wrappedSet).isNotEqualTo(copyOfWrappedSet); + + ImmutableSet copyOfModifiedSet = ImmutableSet.copyOf(wrappedSet); // {2,3} + // sanity check on construction of copyOfModifiedSet + assertThat(wrappedSet).isEqualTo(copyOfModifiedSet); + + // setToTest should throw when it calls equals(), or equals is called on it, except for itself + assertThat(setToTest).isEqualTo(setToTest); + assertThrows(IllegalStateException.class, () -> setToTest.equals(wrappedSet)); + assertThrows(IllegalStateException.class, () -> setToTest.equals(copyOfWrappedSet)); + assertThrows(IllegalStateException.class, () -> setToTest.equals(copyOfModifiedSet)); + assertThrows(IllegalStateException.class, () -> wrappedSet.equals(setToTest)); + assertThrows(IllegalStateException.class, () -> copyOfWrappedSet.equals(setToTest)); + assertThrows(IllegalStateException.class, () -> copyOfModifiedSet.equals(setToTest)); + } +} diff --git a/guava-tests/test/com/google/common/graph/TestUtil.java b/guava-tests/test/com/google/common/graph/TestUtil.java index 68a2503e223f..95fc75296c3a 100644 --- a/guava-tests/test/com/google/common/graph/TestUtil.java +++ b/guava-tests/test/com/google/common/graph/TestUtil.java @@ -28,6 +28,7 @@ final class TestUtil { static final String ERROR_ELEMENT_NOT_IN_GRAPH = "not an element of this graph"; static final String ERROR_NODE_NOT_IN_GRAPH = "Should not be allowed to pass a node that is not an element of the graph."; + static final String ERROR_ELEMENT_REMOVED = "used to generate this set"; private static final String NODE_STRING = "Node"; private static final String EDGE_STRING = "Edge"; @@ -42,12 +43,22 @@ static void assertNodeNotInGraphErrorMessage(Throwable throwable) { assertThat(throwable).hasMessageThat().startsWith(NODE_STRING); assertThat(throwable).hasMessageThat().contains(ERROR_ELEMENT_NOT_IN_GRAPH); } - + static void assertEdgeNotInGraphErrorMessage(Throwable throwable) { assertThat(throwable).hasMessageThat().startsWith(EDGE_STRING); assertThat(throwable).hasMessageThat().contains(ERROR_ELEMENT_NOT_IN_GRAPH); } + static void assertNodeRemovedFromGraphErrorMessage(Throwable throwable) { + assertThat(throwable).hasMessageThat().startsWith(NODE_STRING); + assertThat(throwable).hasMessageThat().contains(ERROR_ELEMENT_REMOVED); + } + + static void assertEdgeRemovedFromGraphErrorMessage(Throwable throwable) { + assertThat(throwable).hasMessageThat().startsWith(EDGE_STRING); + assertThat(throwable).hasMessageThat().contains(ERROR_ELEMENT_REMOVED); + } + static void assertStronglyEquivalent(Graph graphA, Graph graphB) { // Properties not covered by equals() assertThat(graphA.allowsSelfLoops()).isEqualTo(graphB.allowsSelfLoops()); diff --git a/guava/src/com/google/common/graph/AbstractBaseGraph.java b/guava/src/com/google/common/graph/AbstractBaseGraph.java index 5adcc9216c7a..16cbdde7eec6 100644 --- a/guava/src/com/google/common/graph/AbstractBaseGraph.java +++ b/guava/src/com/google/common/graph/AbstractBaseGraph.java @@ -20,6 +20,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Preconditions.checkState; import static com.google.common.graph.GraphConstants.ENDPOINTS_MISMATCH; +import static com.google.common.graph.GraphConstants.NODE_PAIR_REMOVED_FROM_GRAPH; +import static com.google.common.graph.GraphConstants.NODE_REMOVED_FROM_GRAPH; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Iterators; @@ -106,27 +108,30 @@ public ElementOrder incidentEdgeOrder() { public Set> incidentEdges(N node) { checkNotNull(node); checkArgument(nodes().contains(node), "Node %s is not an element of this graph.", node); - return new IncidentEdgeSet(this, node) { - @Override - public UnmodifiableIterator> iterator() { - if (graph.isDirected()) { - return Iterators.unmodifiableIterator( - Iterators.concat( - Iterators.transform( - graph.predecessors(node).iterator(), - (N predecessor) -> EndpointPair.ordered(predecessor, node)), + IncidentEdgeSet incident = + new IncidentEdgeSet(this, node) { + @Override + public UnmodifiableIterator> iterator() { + if (graph.isDirected()) { + return Iterators.unmodifiableIterator( + Iterators.concat( + Iterators.transform( + graph.predecessors(node).iterator(), + (N predecessor) -> EndpointPair.ordered(predecessor, node)), + Iterators.transform( + // filter out 'node' from successors (already covered by predecessors, + // above) + Sets.difference(graph.successors(node), ImmutableSet.of(node)).iterator(), + (N successor) -> EndpointPair.ordered(node, successor)))); + } else { + return Iterators.unmodifiableIterator( Iterators.transform( - // filter out 'node' from successors (already covered by predecessors, above) - Sets.difference(graph.successors(node), ImmutableSet.of(node)).iterator(), - (N successor) -> EndpointPair.ordered(node, successor)))); - } else { - return Iterators.unmodifiableIterator( - Iterators.transform( - graph.adjacentNodes(node).iterator(), - (N adjacentNode) -> EndpointPair.unordered(node, adjacentNode))); - } - } - }; + graph.adjacentNodes(node).iterator(), + (N adjacentNode) -> EndpointPair.unordered(node, adjacentNode))); + } + } + }; + return nodeInvalidatableSet(incident, node); } @Override @@ -184,4 +189,16 @@ protected final void validateEndpoints(EndpointPair endpoints) { protected final boolean isOrderingCompatible(EndpointPair endpoints) { return endpoints.isOrdered() == this.isDirected(); } + + protected final Set nodeInvalidatableSet(Set set, N node) { + return InvalidatableSet.of( + set, () -> nodes().contains(node), () -> String.format(NODE_REMOVED_FROM_GRAPH, node)); + } + + protected final Set nodePairInvalidatableSet(Set set, N nodeU, N nodeV) { + return InvalidatableSet.of( + set, + () -> nodes().contains(nodeU) && nodes().contains(nodeV), + () -> String.format(NODE_PAIR_REMOVED_FROM_GRAPH, nodeU, nodeV)); + } } diff --git a/guava/src/com/google/common/graph/AbstractNetwork.java b/guava/src/com/google/common/graph/AbstractNetwork.java index 6ad96cb06867..08382e7b68b0 100644 --- a/guava/src/com/google/common/graph/AbstractNetwork.java +++ b/guava/src/com/google/common/graph/AbstractNetwork.java @@ -18,8 +18,11 @@ import static com.google.common.base.Preconditions.checkArgument; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.graph.GraphConstants.EDGE_REMOVED_FROM_GRAPH; import static com.google.common.graph.GraphConstants.ENDPOINTS_MISMATCH; import static com.google.common.graph.GraphConstants.MULTIPLE_EDGES_CONNECTING; +import static com.google.common.graph.GraphConstants.NODE_PAIR_REMOVED_FROM_GRAPH; +import static com.google.common.graph.GraphConstants.NODE_REMOVED_FROM_GRAPH; import static java.util.Collections.unmodifiableSet; import com.google.common.annotations.Beta; @@ -51,7 +54,6 @@ @Beta @ElementTypesAreNonnullByDefault public abstract class AbstractNetwork implements Network { - @Override public Graph asGraph() { return new AbstractGraph() { @@ -161,16 +163,20 @@ public Set adjacentEdges(E edge) { EndpointPair endpointPair = incidentNodes(edge); // Verifies that edge is in this network. Set endpointPairIncidentEdges = Sets.union(incidentEdges(endpointPair.nodeU()), incidentEdges(endpointPair.nodeV())); - return Sets.difference(endpointPairIncidentEdges, ImmutableSet.of(edge)); + return edgeInvalidatableSet( + Sets.difference(endpointPairIncidentEdges, ImmutableSet.of(edge)), edge); } @Override public Set edgesConnecting(N nodeU, N nodeV) { Set outEdgesU = outEdges(nodeU); Set inEdgesV = inEdges(nodeV); - return outEdgesU.size() <= inEdgesV.size() - ? unmodifiableSet(Sets.filter(outEdgesU, connectedPredicate(nodeU, nodeV))) - : unmodifiableSet(Sets.filter(inEdgesV, connectedPredicate(nodeV, nodeU))); + return nodePairInvalidatableSet( + outEdgesU.size() <= inEdgesV.size() + ? unmodifiableSet(Sets.filter(outEdgesU, connectedPredicate(nodeU, nodeV))) + : unmodifiableSet(Sets.filter(inEdgesV, connectedPredicate(nodeV, nodeU))), + nodeU, + nodeV); } @Override @@ -284,6 +290,23 @@ public String toString() { + edgeIncidentNodesMap(this); } + protected final Set edgeInvalidatableSet(Set set, E edge) { + return InvalidatableSet.of( + set, () -> edges().contains(edge), () -> String.format(EDGE_REMOVED_FROM_GRAPH, edge)); + } + + protected final Set nodeInvalidatableSet(Set set, N node) { + return InvalidatableSet.of( + set, () -> nodes().contains(node), () -> String.format(NODE_REMOVED_FROM_GRAPH, node)); + } + + protected final Set nodePairInvalidatableSet(Set set, N nodeU, N nodeV) { + return InvalidatableSet.of( + set, + () -> nodes().contains(nodeU) && nodes().contains(nodeV), + () -> String.format(NODE_PAIR_REMOVED_FROM_GRAPH, nodeU, nodeV)); + } + private static Map> edgeIncidentNodesMap(final Network network) { return Maps.asMap(network.edges(), network::incidentNodes); } diff --git a/guava/src/com/google/common/graph/BaseGraph.java b/guava/src/com/google/common/graph/BaseGraph.java index 68813e18a76d..0fa83e3ad146 100644 --- a/guava/src/com/google/common/graph/BaseGraph.java +++ b/guava/src/com/google/common/graph/BaseGraph.java @@ -71,44 +71,93 @@ interface BaseGraph extends SuccessorsFunction, PredecessorsFunction { // /** - * Returns the nodes which have an incident edge in common with {@code node} in this graph. + * Returns a live view of the nodes which have an incident edge in common with {@code node} in + * this graph. * *

    This is equal to the union of {@link #predecessors(Object)} and {@link #successors(Object)}. * + *

    If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ Set adjacentNodes(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s incoming edges against the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s incoming edges against the direction (if any) of the edge. * *

    In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * + *

    If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set predecessors(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s outgoing edges in the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s outgoing edges in the direction (if any) of the edge. * *

    In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * *

    This is not the same as "all nodes reachable from {@code node} by following outgoing * edges". For that functionality, see {@link Graphs#reachableNodes(Graph, Object)}. * + *

    If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set successors(N node); /** - * Returns the edges in this graph whose endpoints include {@code node}. + * Returns a live view of the edges in this graph whose endpoints include {@code node}. * *

    This is equal to the union of incoming and outgoing edges. * + *

    If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this graph * @since 24.0 */ diff --git a/guava/src/com/google/common/graph/Graph.java b/guava/src/com/google/common/graph/Graph.java index 5dc0e71faf6d..b56842ab9c8a 100644 --- a/guava/src/com/google/common/graph/Graph.java +++ b/guava/src/com/google/common/graph/Graph.java @@ -156,45 +156,94 @@ public interface Graph extends BaseGraph { // /** - * Returns the nodes which have an incident edge in common with {@code node} in this graph. + * Returns a live view of the nodes which have an incident edge in common with {@code node} in + * this graph. * *

    This is equal to the union of {@link #predecessors(Object)} and {@link #successors(Object)}. * + *

    If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set adjacentNodes(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s incoming edges against the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s incoming edges against the direction (if any) of the edge. * *

    In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * + *

    If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set predecessors(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s outgoing edges in the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s outgoing edges in the direction (if any) of the edge. * *

    In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * *

    This is not the same as "all nodes reachable from {@code node} by following outgoing * edges". For that functionality, see {@link Graphs#reachableNodes(Graph, Object)}. * + *

    If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set successors(N node); /** - * Returns the edges in this graph whose endpoints include {@code node}. + * Returns a live view of the edges in this graph whose endpoints include {@code node}. * *

    This is equal to the union of incoming and outgoing edges. * + *

    If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this graph * @since 24.0 */ diff --git a/guava/src/com/google/common/graph/GraphConstants.java b/guava/src/com/google/common/graph/GraphConstants.java index 4e8510662cf1..263d6fd40617 100644 --- a/guava/src/com/google/common/graph/GraphConstants.java +++ b/guava/src/com/google/common/graph/GraphConstants.java @@ -35,6 +35,12 @@ private GraphConstants() {} // Error messages static final String NODE_NOT_IN_GRAPH = "Node %s is not an element of this graph."; static final String EDGE_NOT_IN_GRAPH = "Edge %s is not an element of this graph."; + static final String NODE_REMOVED_FROM_GRAPH = + "Node %s that was used to generate this set is no longer in the graph."; + static final String NODE_PAIR_REMOVED_FROM_GRAPH = + "Node %s or node %s that were used to generate this set are no longer in the graph."; + static final String EDGE_REMOVED_FROM_GRAPH = + "Edge %s that was used to generate this set is no longer in the graph."; static final String REUSING_EDGE = "Edge %s already exists between the following nodes: %s, " + "so it cannot be reused to connect the following nodes: %s."; diff --git a/guava/src/com/google/common/graph/InvalidatableSet.java b/guava/src/com/google/common/graph/InvalidatableSet.java new file mode 100644 index 000000000000..f8834b589ae9 --- /dev/null +++ b/guava/src/com/google/common/graph/InvalidatableSet.java @@ -0,0 +1,54 @@ +package com.google.common.graph; + +import static com.google.common.base.Preconditions.checkNotNull; + +import com.google.common.base.Supplier; +import com.google.common.collect.ForwardingSet; +import java.util.Set; + +/** + * A subclass of `ForwardingSet` that throws `IllegalStateException` on invocation of any method + * (except `hashCode` and `equals`) if the provided `Supplier` returns false. + */ +@ElementTypesAreNonnullByDefault +final class InvalidatableSet extends ForwardingSet { + private final Supplier validator; + private final Set delegate; + private final Supplier errorMessage; + + public static final InvalidatableSet of( + Set delegate, Supplier validator, Supplier errorMessage) { + return new InvalidatableSet<>( + checkNotNull(delegate), checkNotNull(validator), checkNotNull(errorMessage)); + } + + @Override + protected Set delegate() { + validate(); + return delegate; + } + + private InvalidatableSet( + Set delegate, Supplier validator, Supplier errorMessage) { + this.delegate = delegate; + this.validator = validator; + this.errorMessage = errorMessage; + } + + // Override hashCode() to access delegate directly (so that it doesn't trigger the validate() call + // via delegate()); it seems inappropriate to throw ISE on this method. + @Override + public int hashCode() { + return delegate.hashCode(); + } + + private void validate() { + // Don't use checkState(), because we don't want the overhead of generating the error message + // unless it's actually going to be used; validate() is called for all set method calls, so it + // needs to be fast. + // (We could instead generate the message once, when the set is created, but zero is better.) + if (!validator.get()) { + throw new IllegalStateException(errorMessage.get()); + } + } +} diff --git a/guava/src/com/google/common/graph/Network.java b/guava/src/com/google/common/graph/Network.java index eb9e313e541b..330b5a75bc53 100644 --- a/guava/src/com/google/common/graph/Network.java +++ b/guava/src/com/google/common/graph/Network.java @@ -57,20 +57,20 @@ * NetworkBuilder} class: * *
    {@code
    - * MutableNetwork graph = NetworkBuilder.directed().build();
    + * MutableNetwork network = NetworkBuilder.directed().build();
      * }
    * *

    {@link NetworkBuilder#build()} returns an instance of {@link MutableNetwork}, which is a * subtype of {@code Network} that provides methods for adding and removing nodes and edges. If you - * do not need to mutate a graph (e.g. if you write a method than runs a read-only algorithm on the - * graph), you should use the non-mutating {@link Network} interface, or an {@link + * do not need to mutate a network (e.g. if you write a method than runs a read-only algorithm on + * the network), you should use the non-mutating {@link Network} interface, or an {@link * ImmutableNetwork}. * *

    You can create an immutable copy of an existing {@code Network} using {@link * ImmutableNetwork#copyOf(Network)}: * *

    {@code
    - * ImmutableNetwork immutableGraph = ImmutableNetwork.copyOf(graph);
    + * ImmutableNetwork immutableGraph = ImmutableNetwork.copyOf(network);
      * }
    * *

    Instances of {@link ImmutableNetwork} do not implement {@link MutableNetwork} (obviously!) and @@ -161,69 +161,135 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti // /** - * Returns the nodes which have an incident edge in common with {@code node} in this network. + * Returns a live view of the nodes which have an incident edge in common with {@code node} in + * this graph. * *

    This is equal to the union of {@link #predecessors(Object)} and {@link #successors(Object)}. * + *

    If {@code node} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this network */ Set adjacentNodes(N node); /** - * Returns all nodes in this network adjacent to {@code node} which can be reached by traversing - * {@code node}'s incoming edges against the direction (if any) of the edge. + * Returns a live view of all nodes in this network adjacent to {@code node} which can be reached + * by traversing {@code node}'s incoming edges against the direction (if any) of the edge. * *

    In an undirected network, this is equivalent to {@link #adjacentNodes(Object)}. * + *

    If {@code node} is removed from the network after this method is called, the `Set` returned + * by this method will be invalidated, and will throw `IllegalStateException` if it is accessed in + * any way. + * * @throws IllegalArgumentException if {@code node} is not an element of this network */ @Override Set predecessors(N node); /** - * Returns all nodes in this network adjacent to {@code node} which can be reached by traversing - * {@code node}'s outgoing edges in the direction (if any) of the edge. + * Returns a live view of all nodes in this network adjacent to {@code node} which can be reached + * by traversing {@code node}'s outgoing edges in the direction (if any) of the edge. * *

    In an undirected network, this is equivalent to {@link #adjacentNodes(Object)}. * *

    This is not the same as "all nodes reachable from {@code node} by following outgoing * edges". For that functionality, see {@link Graphs#reachableNodes(Graph, Object)}. * + *

    If {@code node} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this network */ @Override Set successors(N node); /** - * Returns the edges whose {@link #incidentNodes(Object) incident nodes} in this network include - * {@code node}. + * Returns a live view of the edges whose {@link #incidentNodes(Object) incident nodes} in this + * network include {@code node}. * *

    This is equal to the union of {@link #inEdges(Object)} and {@link #outEdges(Object)}. * + *

    If {@code node} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this network + * @since 24.0 */ Set incidentEdges(N node); /** - * Returns all edges in this network which can be traversed in the direction (if any) of the edge - * to end at {@code node}. + * Returns a live view of all edges in this network which can be traversed in the direction (if + * any) of the edge to end at {@code node}. * *

    In a directed network, an incoming edge's {@link EndpointPair#target()} equals {@code node}. * *

    In an undirected network, this is equivalent to {@link #incidentEdges(Object)}. * + *

    If {@code node} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this network */ Set inEdges(N node); /** - * Returns all edges in this network which can be traversed in the direction (if any) of the edge - * starting from {@code node}. + * Returns a live view of all edges in this network which can be traversed in the direction (if + * any) of the edge starting from {@code node}. * *

    In a directed network, an outgoing edge's {@link EndpointPair#source()} equals {@code node}. * *

    In an undirected network, this is equivalent to {@link #incidentEdges(Object)}. * + *

    If {@code node} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this network */ Set outEdges(N node); @@ -271,15 +337,28 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti EndpointPair incidentNodes(E edge); /** - * Returns the edges which have an {@link #incidentNodes(Object) incident node} in common with - * {@code edge}. An edge is not considered adjacent to itself. + * Returns a live view of the edges which have an {@link #incidentNodes(Object) incident node} in + * common with {@code edge}. An edge is not considered adjacent to itself. + * + *

    If {@code edge} is removed from the network after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code edge} is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
    * * @throws IllegalArgumentException if {@code edge} is not an element of this network */ Set adjacentEdges(E edge); /** - * Returns the set of edges that each directly connect {@code nodeU} to {@code nodeV}. + * Returns a live view of the set of edges that each directly connect {@code nodeU} to {@code + * nodeV}. * *

    In an undirected network, this is equal to {@code edgesConnecting(nodeV, nodeU)}. * @@ -288,14 +367,27 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti * edges}, the resulting set will contain at most one edge (equivalent to {@code * edgeConnecting(nodeU, nodeV).asSet()}). * + *

    If either {@code nodeU} or {@code nodeV} are removed from the network after this method is + * called, the {@code Set} {@code view} returned by this method will be invalidated, and will + * throw {@code IllegalStateException} if it is accessed in any way, with the following + * exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code nodeU} or {@code nodeV} are re-added to the network after having been removed, + * {@code view}'s behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code nodeU} or {@code nodeV} is not an element of this * network */ Set edgesConnecting(N nodeU, N nodeV); /** - * Returns the set of edges that each directly connect {@code endpoints} (in the order, if any, - * specified by {@code endpoints}). + * Returns a live view of the set of edges that each directly connect {@code endpoints} (in the + * order, if any, specified by {@code endpoints}). * *

    The resulting set of edges will be parallel (i.e. have equal {@link * #incidentNodes(Object)}). If this network does not {@link #allowsParallelEdges() allow parallel @@ -304,8 +396,21 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti * *

    If this network is directed, {@code endpoints} must be ordered. * + *

    If either element of {@code endpoints} is removed from the network after this method is + * called, the {@code Set} {@code view} returned by this method will be invalidated, and will + * throw {@code IllegalStateException} if it is accessed in any way, with the following + * exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if either endpoint is re-added to the network after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if either endpoint is not an element of this network - * @throws IllegalArgumentException if the endpoints are unordered and the graph is directed + * @throws IllegalArgumentException if the endpoints are unordered and the network is directed * @since 27.1 */ Set edgesConnecting(EndpointPair endpoints); @@ -329,12 +434,12 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti * specified by {@code endpoints}), if one is present, or {@code Optional.empty()} if no such edge * exists. * - *

    If this graph is directed, the endpoints must be ordered. + *

    If this network is directed, the endpoints must be ordered. * * @throws IllegalArgumentException if there are multiple parallel edges connecting {@code nodeU} * to {@code nodeV} * @throws IllegalArgumentException if either endpoint is not an element of this network - * @throws IllegalArgumentException if the endpoints are unordered and the graph is directed + * @throws IllegalArgumentException if the endpoints are unordered and the network is directed * @since 27.1 */ Optional edgeConnecting(EndpointPair endpoints); @@ -358,12 +463,12 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti * Returns the single edge that directly connects {@code endpoints} (in the order, if any, * specified by {@code endpoints}), if one is present, or {@code null} if no such edge exists. * - *

    If this graph is directed, the endpoints must be ordered. + *

    If this network is directed, the endpoints must be ordered. * * @throws IllegalArgumentException if there are multiple parallel edges connecting {@code nodeU} * to {@code nodeV} * @throws IllegalArgumentException if either endpoint is not an element of this network - * @throws IllegalArgumentException if the endpoints are unordered and the graph is directed + * @throws IllegalArgumentException if the endpoints are unordered and the network is directed * @since 27.1 */ @CheckForNull @@ -374,7 +479,7 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti * equivalent to {@code nodes().contains(nodeU) && successors(nodeU).contains(nodeV)}, and to * {@code edgeConnectingOrNull(nodeU, nodeV) != null}. * - *

    In an undirected graph, this is equal to {@code hasEdgeConnecting(nodeV, nodeU)}. + *

    In an undirected network, this is equal to {@code hasEdgeConnecting(nodeV, nodeU)}. * * @since 23.0 */ @@ -385,8 +490,8 @@ public interface Network extends SuccessorsFunction, PredecessorsFuncti * any, specified by {@code endpoints}). * *

    Unlike the other {@code EndpointPair}-accepting methods, this method does not throw if the - * endpoints are unordered and the graph is directed; it simply returns {@code false}. This is for - * consistency with {@link Graph#hasEdgeConnecting(EndpointPair)} and {@link + * endpoints are unordered and the network is directed; it simply returns {@code false}. This is + * for consistency with {@link Graph#hasEdgeConnecting(EndpointPair)} and {@link * ValueGraph#hasEdgeConnecting(EndpointPair)}. * * @since 27.1 diff --git a/guava/src/com/google/common/graph/StandardNetwork.java b/guava/src/com/google/common/graph/StandardNetwork.java index 2aa103f99683..9c3cfd5a01b2 100644 --- a/guava/src/com/google/common/graph/StandardNetwork.java +++ b/guava/src/com/google/common/graph/StandardNetwork.java @@ -130,7 +130,7 @@ public ElementOrder edgeOrder() { @Override public Set incidentEdges(N node) { - return checkedConnections(node).incidentEdges(); + return nodeInvalidatableSet(checkedConnections(node).incidentEdges(), node); } @Override @@ -143,7 +143,7 @@ public EndpointPair incidentNodes(E edge) { @Override public Set adjacentNodes(N node) { - return checkedConnections(node).adjacentNodes(); + return nodeInvalidatableSet(checkedConnections(node).adjacentNodes(), node); } @Override @@ -153,27 +153,27 @@ public Set edgesConnecting(N nodeU, N nodeV) { return ImmutableSet.of(); } checkArgument(containsNode(nodeV), NODE_NOT_IN_GRAPH, nodeV); - return connectionsU.edgesConnecting(nodeV); + return nodePairInvalidatableSet(connectionsU.edgesConnecting(nodeV), nodeU, nodeV); } @Override public Set inEdges(N node) { - return checkedConnections(node).inEdges(); + return nodeInvalidatableSet(checkedConnections(node).inEdges(), node); } @Override public Set outEdges(N node) { - return checkedConnections(node).outEdges(); + return nodeInvalidatableSet(checkedConnections(node).outEdges(), node); } @Override public Set predecessors(N node) { - return checkedConnections(node).predecessors(); + return nodeInvalidatableSet(checkedConnections(node).predecessors(), node); } @Override public Set successors(N node) { - return checkedConnections(node).successors(); + return nodeInvalidatableSet(checkedConnections(node).successors(), node); } final NetworkConnections checkedConnections(N node) { diff --git a/guava/src/com/google/common/graph/StandardValueGraph.java b/guava/src/com/google/common/graph/StandardValueGraph.java index ab3ae582b55e..a5f3553087d9 100644 --- a/guava/src/com/google/common/graph/StandardValueGraph.java +++ b/guava/src/com/google/common/graph/StandardValueGraph.java @@ -103,29 +103,30 @@ public ElementOrder nodeOrder() { @Override public Set adjacentNodes(N node) { - return checkedConnections(node).adjacentNodes(); + return nodeInvalidatableSet(checkedConnections(node).adjacentNodes(), node); } @Override public Set predecessors(N node) { - return checkedConnections(node).predecessors(); + return nodeInvalidatableSet(checkedConnections(node).predecessors(), node); } @Override public Set successors(N node) { - return checkedConnections(node).successors(); + return nodeInvalidatableSet(checkedConnections(node).successors(), node); } @Override public Set> incidentEdges(N node) { GraphConnections connections = checkedConnections(node); - - return new IncidentEdgeSet(this, node) { - @Override - public Iterator> iterator() { - return connections.incidentEdgeIterator(node); - } - }; + IncidentEdgeSet incident = + new IncidentEdgeSet(this, node) { + @Override + public Iterator> iterator() { + return connections.incidentEdgeIterator(node); + } + }; + return nodeInvalidatableSet(incident, node); } @Override diff --git a/guava/src/com/google/common/graph/ValueGraph.java b/guava/src/com/google/common/graph/ValueGraph.java index a13e87eb9833..6495e2d4d0ba 100644 --- a/guava/src/com/google/common/graph/ValueGraph.java +++ b/guava/src/com/google/common/graph/ValueGraph.java @@ -17,7 +17,6 @@ package com.google.common.graph; import com.google.common.annotations.Beta; -import java.util.Collection; import java.util.Optional; import java.util.Set; import javax.annotation.CheckForNull; @@ -167,45 +166,86 @@ public interface ValueGraph extends BaseGraph { // /** - * Returns the nodes which have an incident edge in common with {@code node} in this graph. + * Returns a live view of the nodes which have an incident edge in common with {@code node} in + * this graph. * *

    This is equal to the union of {@link #predecessors(Object)} and {@link #successors(Object)}. * + *

    If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set adjacentNodes(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s incoming edges against the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s incoming edges against the direction (if any) of the edge. * *

    In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * + *

    If {@code node} is removed from the graph after this method is called, the `Set` returned by + * this method will be invalidated, and will throw `IllegalStateException` if it is accessed in + * any way. + * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set predecessors(N node); /** - * Returns all nodes in this graph adjacent to {@code node} which can be reached by traversing - * {@code node}'s outgoing edges in the direction (if any) of the edge. + * Returns a live view of all nodes in this graph adjacent to {@code node} which can be reached by + * traversing {@code node}'s outgoing edges in the direction (if any) of the edge. * *

    In an undirected graph, this is equivalent to {@link #adjacentNodes(Object)}. * *

    This is not the same as "all nodes reachable from {@code node} by following outgoing * edges". For that functionality, see {@link Graphs#reachableNodes(Graph, Object)}. * + *

    If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this graph */ @Override Set successors(N node); /** - * Returns the edges in this graph whose endpoints include {@code node}. + * Returns a live view of the edges in this graph whose endpoints include {@code node}. * *

    This is equal to the union of incoming and outgoing edges. * + *

    If {@code node} is removed from the graph after this method is called, the {@code Set} + * {@code view} returned by this method will be invalidated, and will throw {@code + * IllegalStateException} if it is accessed in any way, with the following exceptions: + * + *

      + *
    • {@code view.equals(view)} evaluates to {@code true} (but any other `equals()` expression + * involving {@code view} will throw) + *
    • {@code hashCode()} does not throw + *
    • if {@code node} is re-added to the graph after having been removed, {@code view}'s + * behavior is undefined + *
    + * * @throws IllegalArgumentException if {@code node} is not an element of this graph * @since 24.0 */ @@ -340,7 +380,7 @@ public interface ValueGraph extends BaseGraph { *
  • A and B have equal {@link #isDirected() directedness}. *
  • A and B have equal {@link #nodes() node sets}. *
  • A and B have equal {@link #edges() edge sets}. - *
  • The {@link #edgeValue(Object, Object) value} of a given edge is the same in both A and B. + *
  • The {@link #edgeValue(N, N) value} of a given edge is the same in both A and B. * * *

    Graph properties besides {@link #isDirected() directedness} do not affect equality. @@ -355,8 +395,8 @@ public interface ValueGraph extends BaseGraph { /** * Returns the hash code for this graph. The hash code of a graph is defined as the hash code of a - * map from each of its {@link #edges() edges} to the associated {@link #edgeValue(Object, Object) - * edge value}. + * map from each of its {@link #edges() edges} to the associated {@link #edgeValue(N, N) edge + * value}. * *

    A reference implementation of this is provided by {@link AbstractValueGraph#hashCode()}. */ From 36980a944c593696aed126d7ebf6e374d0872ce0 Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Mon, 22 Jan 2024 11:35:42 -0800 Subject: [PATCH 108/216] Add a missing nullability annotation for the j2kt super source. Also renames folders to follow convention. RELNOTES=n/a PiperOrigin-RevId: 600520371 --- .../google/common/util/concurrent/AbstractFuture.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/guava-gwt/src-super/com/google/common/util/concurrent/super/com/google/common/util/concurrent/AbstractFuture.java b/guava-gwt/src-super/com/google/common/util/concurrent/super/com/google/common/util/concurrent/AbstractFuture.java index 242335ec9e98..c92fae2d0dff 100644 --- a/guava-gwt/src-super/com/google/common/util/concurrent/super/com/google/common/util/concurrent/AbstractFuture.java +++ b/guava-gwt/src-super/com/google/common/util/concurrent/super/com/google/common/util/concurrent/AbstractFuture.java @@ -308,7 +308,7 @@ boolean isDone() { } @Override - void maybeThrowOnGet(Throwable cause) throws ExecutionException { + void maybeThrowOnGet(@Nullable Throwable cause) throws ExecutionException { throw new IllegalStateException("Cannot get() on a pending future."); } @@ -324,7 +324,7 @@ boolean isDone() { } @Override - void maybeThrowOnGet(Throwable cause) throws ExecutionException { + void maybeThrowOnGet(@Nullable Throwable cause) throws ExecutionException { throw new IllegalStateException("Cannot get() on a pending future."); } @@ -335,7 +335,7 @@ boolean permitsPublicUserToTransitionTo(State state) { VALUE, FAILURE { @Override - void maybeThrowOnGet(Throwable cause) throws ExecutionException { + void maybeThrowOnGet(@Nullable Throwable cause) throws ExecutionException { throw new ExecutionException(cause); } }, @@ -346,7 +346,7 @@ boolean isCancelled() { } @Override - void maybeThrowOnGet(Throwable cause) throws ExecutionException { + void maybeThrowOnGet(@Nullable Throwable cause) throws ExecutionException { // TODO(cpovirk): chain in a CancellationException created at the cancel() call? throw new CancellationException(); } @@ -360,7 +360,7 @@ boolean isCancelled() { return false; } - void maybeThrowOnGet(Throwable cause) throws ExecutionException {} + void maybeThrowOnGet(@Nullable Throwable cause) throws ExecutionException {} boolean permitsPublicUserToTransitionTo(State state) { return false; From 813797368c5d27388143c6d1ee9fdc97366bf84c Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 22 Jan 2024 14:16:18 -0800 Subject: [PATCH 109/216] Bump a few deps. The big one is Truth, which has new overloads of `Truth.assertThat`, which we need to adopt to help with https://github.com/google/truth/issues/746. RELNOTES=n/a PiperOrigin-RevId: 600567850 --- android/pom.xml | 6 +++--- guava-gwt/pom.xml | 2 +- integration-tests/gradle/build.gradle.kts | 8 ++++---- pom.xml | 6 +++--- 4 files changed, 11 insertions(+), 11 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index 59811c7d3de0..db20a09fdd55 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -14,10 +14,10 @@ %regex[.*.class] - 1.2.0 + 1.3.0 3.0.2 - 3.41.0 - 2.23.0 + 3.42.0 + 2.24.1 2.8 9+181-r4173-1 diff --git a/guava-gwt/pom.xml b/guava-gwt/pom.xml index e8bc4811afc0..86fa4b971aa9 100644 --- a/guava-gwt/pom.xml +++ b/guava-gwt/pom.xml @@ -17,7 +17,7 @@ This project includes GWT-friendly sources. - 2.10.0 + 2.11.0 2.10.0 WARN diff --git a/integration-tests/gradle/build.gradle.kts b/integration-tests/gradle/build.gradle.kts index 963b7187329f..cafccc49b790 100644 --- a/integration-tests/gradle/build.gradle.kts +++ b/integration-tests/gradle/build.gradle.kts @@ -9,8 +9,8 @@ val expectedReducedRuntimeClasspathAndroidVersion = "guava-${guavaVersionJre.replace("jre", "android")}.jar", "failureaccess-1.0.2.jar", "jsr305-3.0.2.jar", - "checker-qual-3.41.0.jar", - "error_prone_annotations-2.23.0.jar", + "checker-qual-3.42.0.jar", + "error_prone_annotations-2.24.1.jar", "listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" ) val expectedReducedRuntimeClasspathJreVersion = @@ -18,8 +18,8 @@ val expectedReducedRuntimeClasspathJreVersion = "guava-$guavaVersionJre.jar", "failureaccess-1.0.2.jar", "jsr305-3.0.2.jar", - "checker-qual-3.41.0.jar", - "error_prone_annotations-2.23.0.jar", + "checker-qual-3.42.0.jar", + "error_prone_annotations-2.24.1.jar", "listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" ) val expectedCompileClasspathAndroidVersion = diff --git a/pom.xml b/pom.xml index a8a12ecc44a7..736111d2bef5 100644 --- a/pom.xml +++ b/pom.xml @@ -14,10 +14,10 @@ %regex[.*.class] - 1.2.0 + 1.3.0 3.0.2 - 3.41.0 - 2.23.0 + 3.42.0 + 2.24.1 2.8 9+181-r4173-1 From 4f394e66d0e5a1a3b9bbeaf8fdb2b8100ddada10 Mon Sep 17 00:00:00 2001 From: Julien Dramaix Date: Tue, 23 Jan 2024 10:40:55 -0800 Subject: [PATCH 110/216] Nullmark J2CL super-source'd classes of Guava collection. RELNOTES=n/a PiperOrigin-RevId: 600837780 --- .../collect/AbstractSortedMultiset.java | 12 +++++-- .../common/collect/DescendingMultiset.java | 20 +++++++---- .../ForwardingImmutableCollection.java | 3 +- .../collect/ForwardingImmutableList.java | 5 +-- .../collect/ForwardingImmutableMap.java | 7 ++-- .../collect/ForwardingImmutableSet.java | 3 +- .../collect/ForwardingSortedMultiset.java | 15 ++++++-- .../google/common/collect/ImmutableBiMap.java | 11 ++++-- .../common/collect/ImmutableCollection.java | 5 +-- .../common/collect/ImmutableEnumMap.java | 1 + .../common/collect/ImmutableEnumSet.java | 1 + .../google/common/collect/ImmutableList.java | 1 + .../google/common/collect/ImmutableMap.java | 33 +++++++++-------- .../google/common/collect/ImmutableSet.java | 4 ++- .../common/collect/ImmutableSortedMap.java | 36 +++++++++++-------- .../common/collect/ImmutableSortedSet.java | 7 +++- .../collect/JdkBackedImmutableBiMap.java | 2 ++ .../common/collect/JdkBackedImmutableMap.java | 1 + .../com/google/common/collect/MapMaker.java | 1 + .../common/collect/RegularImmutableBiMap.java | 1 + .../common/collect/RegularImmutableList.java | 4 ++- .../common/collect/RegularImmutableMap.java | 1 + .../collect/RegularImmutableMultiset.java | 4 ++- .../common/collect/RegularImmutableSet.java | 1 + .../collect/RegularImmutableSortedSet.java | 6 ++-- .../collect/SingletonImmutableBiMap.java | 4 ++- .../collect/SingletonImmutableList.java | 1 + .../common/collect/SingletonImmutableSet.java | 5 ++- .../google/common/collect/SortedMultiset.java | 9 ++++- .../collect/UnmodifiableSortedMultiset.java | 11 ++++-- 30 files changed, 153 insertions(+), 62 deletions(-) diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/AbstractSortedMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/AbstractSortedMultiset.java index 412ef964c8c6..45709eebba13 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/AbstractSortedMultiset.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/AbstractSortedMultiset.java @@ -20,6 +20,8 @@ import java.util.Comparator; import java.util.Iterator; import java.util.SortedSet; +import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * This class provides a skeletal implementation of the {@link SortedMultiset} interface. @@ -31,7 +33,9 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) -abstract class AbstractSortedMultiset extends AbstractMultiset implements SortedMultiset { +@ElementTypesAreNonnullByDefault +abstract class AbstractSortedMultiset extends AbstractMultiset + implements SortedMultiset { @GwtTransient final Comparator comparator; // needed for serialization @@ -60,18 +64,21 @@ public Comparator comparator() { } @Override + @CheckForNull public Entry firstEntry() { Iterator> entryIterator = entryIterator(); return entryIterator.hasNext() ? entryIterator.next() : null; } @Override + @CheckForNull public Entry lastEntry() { Iterator> entryIterator = descendingEntryIterator(); return entryIterator.hasNext() ? entryIterator.next() : null; } @Override + @CheckForNull public Entry pollFirstEntry() { Iterator> entryIterator = entryIterator(); if (entryIterator.hasNext()) { @@ -84,6 +91,7 @@ public Entry pollFirstEntry() { } @Override + @CheckForNull public Entry pollLastEntry() { Iterator> entryIterator = descendingEntryIterator(); if (entryIterator.hasNext()) { @@ -110,7 +118,7 @@ Iterator descendingIterator() { return Multisets.iteratorImpl(descendingMultiset()); } - private transient SortedMultiset descendingMultiset; + @Nullable private transient SortedMultiset descendingMultiset; @Override public SortedMultiset descendingMultiset() { diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/DescendingMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/DescendingMultiset.java index 9a4d3833cba4..aaecc2d166ca 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/DescendingMultiset.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/DescendingMultiset.java @@ -21,6 +21,8 @@ import java.util.Iterator; import java.util.Set; import java.util.SortedSet; +import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A skeleton implementation of a descending multiset. Only needs {@code forwardMultiset()} and @@ -29,10 +31,12 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) -abstract class DescendingMultiset extends ForwardingMultiset implements SortedMultiset { +@ElementTypesAreNonnullByDefault +abstract class DescendingMultiset extends ForwardingMultiset + implements SortedMultiset { abstract SortedMultiset forwardMultiset(); - private transient Comparator comparator; + @Nullable private transient Comparator comparator; @Override public Comparator comparator() { @@ -43,7 +47,7 @@ public Comparator comparator() { return result; } - private transient SortedSet elementSet; + @Nullable private transient SortedSet elementSet; @Override public SortedSet elementSet() { @@ -55,11 +59,13 @@ public SortedSet elementSet() { } @Override + @CheckForNull public Entry pollFirstEntry() { return forwardMultiset().pollLastEntry(); } @Override + @CheckForNull public Entry pollLastEntry() { return forwardMultiset().pollFirstEntry(); } @@ -93,18 +99,20 @@ public SortedMultiset descendingMultiset() { } @Override + @CheckForNull public Entry firstEntry() { return forwardMultiset().lastEntry(); } @Override + @CheckForNull public Entry lastEntry() { return forwardMultiset().firstEntry(); } abstract Iterator> entryIterator(); - private transient Set> entrySet; + @Nullable private transient Set> entrySet; @Override public Set> entrySet() { @@ -137,12 +145,12 @@ public Iterator iterator() { } @Override - public Object[] toArray() { + public @Nullable Object[] toArray() { return standardToArray(); } @Override - public T[] toArray(T[] array) { + public T[] toArray(T[] array) { return standardToArray(array); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableCollection.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableCollection.java index a541c77fa135..2f3ff079ef4d 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableCollection.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableCollection.java @@ -26,6 +26,7 @@ * @author Hayward Chan */ // TODO: Make this class GWT serializable. +@ElementTypesAreNonnullByDefault class ForwardingImmutableCollection extends ImmutableCollection { final transient Collection delegate; @@ -64,7 +65,7 @@ public Object[] toArray() { } @Override - public T[] toArray(T[] other) { + public T[] toArray(T[] other) { return delegate.toArray(other); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableList.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableList.java index a54c383f9d29..e9ea9e95cd15 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableList.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableList.java @@ -25,6 +25,7 @@ * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault abstract class ForwardingImmutableList extends ImmutableList { ForwardingImmutableList() {} @@ -55,7 +56,7 @@ public Object[] toArray() { } @Override - public boolean equals(Object obj) { + public boolean equals(@Nullable Object obj) { return delegateList().equals(obj); } @@ -89,7 +90,7 @@ public boolean isEmpty() { } @Override - public T[] toArray(T[] other) { + public T[] toArray(T[] other) { return delegateList().toArray(other); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableMap.java index e3dd7032c279..8fbed96f069e 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableMap.java @@ -28,6 +28,7 @@ * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault public abstract class ForwardingImmutableMap extends ImmutableMap { final transient Map delegate; @@ -65,7 +66,7 @@ public final boolean containsValue(@Nullable Object value) { return delegate.containsValue(value); } - public V get(@Nullable Object key) { + public @Nullable V get(@Nullable Object key) { return (key == null) ? null : Maps.safeGet(delegate, key); } @@ -79,7 +80,7 @@ protected Set> delegate() { } @Override - public boolean contains(Object object) { + public boolean contains(@Nullable Object object) { if (object instanceof Entry && ((Entry) object).getKey() == null) { return false; } @@ -91,7 +92,7 @@ public boolean contains(Object object) { } @Override - public T[] toArray(T[] array) { + public T[] toArray(T[] array) { T[] result = super.toArray(array); if (size() < result.length) { // It works around a GWT bug where elements after last is not diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableSet.java index 09fcd9e2cd67..111b919da0d7 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableSet.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableSet.java @@ -26,6 +26,7 @@ * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault @SuppressWarnings("serial") // Serialization only done in GWT. public abstract class ForwardingImmutableSet extends ImmutableSet { private final transient Set delegate; @@ -66,7 +67,7 @@ public Object[] toArray() { } @Override - public T[] toArray(T[] other) { + public T[] toArray(T[] other) { return delegate.toArray(other); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingSortedMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingSortedMultiset.java index 13f6f15d82a1..0d8d3f636346 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingSortedMultiset.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingSortedMultiset.java @@ -17,6 +17,8 @@ import java.util.Comparator; import java.util.Iterator; import java.util.SortedSet; +import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A sorted multiset which forwards all its method calls to another sorted multiset. Subclasses @@ -35,8 +37,9 @@ * * @author Louis Wasserman */ -public abstract class ForwardingSortedMultiset extends ForwardingMultiset - implements SortedMultiset { +@ElementTypesAreNonnullByDefault +public abstract class ForwardingSortedMultiset + extends ForwardingMultiset implements SortedMultiset { /** Constructor for use by subclasses. */ protected ForwardingSortedMultiset() {} @@ -97,6 +100,7 @@ SortedMultiset forwardMultiset() { } @Override + @CheckForNull public Entry firstEntry() { return delegate().firstEntry(); } @@ -107,6 +111,7 @@ public Entry firstEntry() { *

    If you override {@link #entrySet()}, you may wish to override {@link #firstEntry()} to * forward to this implementation. */ + @CheckForNull protected Entry standardFirstEntry() { Iterator> entryIterator = entrySet().iterator(); if (!entryIterator.hasNext()) { @@ -117,6 +122,7 @@ protected Entry standardFirstEntry() { } @Override + @CheckForNull public Entry lastEntry() { return delegate().lastEntry(); } @@ -128,6 +134,7 @@ public Entry lastEntry() { *

    If you override {@link #descendingMultiset} or {@link #entrySet()}, you may wish to override * {@link #firstEntry()} to forward to this implementation. */ + @CheckForNull protected Entry standardLastEntry() { Iterator> entryIterator = descendingMultiset().entrySet().iterator(); if (!entryIterator.hasNext()) { @@ -138,6 +145,7 @@ protected Entry standardLastEntry() { } @Override + @CheckForNull public Entry pollFirstEntry() { return delegate().pollFirstEntry(); } @@ -148,6 +156,7 @@ public Entry pollFirstEntry() { *

    If you override {@link #entrySet()}, you may wish to override {@link #pollFirstEntry()} to * forward to this implementation. */ + @CheckForNull protected Entry standardPollFirstEntry() { Iterator> entryIterator = entrySet().iterator(); if (!entryIterator.hasNext()) { @@ -160,6 +169,7 @@ protected Entry standardPollFirstEntry() { } @Override + @CheckForNull public Entry pollLastEntry() { return delegate().pollLastEntry(); } @@ -171,6 +181,7 @@ public Entry pollLastEntry() { *

    If you override {@link #descendingMultiset()} or {@link #entrySet()}, you may wish to * override {@link #pollLastEntry()} to forward to this implementation. */ + @CheckForNull protected Entry standardPollLastEntry() { Iterator> entryIterator = descendingMultiset().entrySet().iterator(); if (!entryIterator.hasNext()) { diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableBiMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableBiMap.java index 0b9b3cd3254b..1da198c7b6bc 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableBiMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableBiMap.java @@ -24,17 +24,21 @@ import java.util.Map.Entry; import java.util.function.Function; import java.util.stream.Collector; +import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * GWT emulation of {@link com.google.common.collect.ImmutableBiMap}. * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault public abstract class ImmutableBiMap extends ForwardingImmutableMap implements BiMap { - public static Collector> toImmutableBiMap( - Function keyFunction, - Function valueFunction) { + public static + Collector> toImmutableBiMap( + Function keyFunction, + Function valueFunction) { return CollectCollectors.toImmutableBiMap(keyFunction, valueFunction); } @@ -256,6 +260,7 @@ public ImmutableSet values() { return inverse().keySet(); } + @CheckForNull public final V forcePut(K key, V value) { throw new UnsupportedOperationException(); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableCollection.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableCollection.java index 93fc4bd24622..a5a7bea47450 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableCollection.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableCollection.java @@ -33,6 +33,7 @@ * @author Jesse Wilson */ @SuppressWarnings("serial") // we're overriding default serialization +@ElementTypesAreNonnullByDefault public abstract class ImmutableCollection extends AbstractCollection implements Serializable { static final int SPLITERATOR_CHARACTERISTICS = Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.ORDERED; @@ -49,7 +50,7 @@ public final boolean add(E e) { throw new UnsupportedOperationException(); } - public final boolean remove(Object object) { + public final boolean remove(@Nullable Object object) { throw new UnsupportedOperationException(); } @@ -73,7 +74,7 @@ public final void clear() { throw new UnsupportedOperationException(); } - private transient ImmutableList asList; + private transient @Nullable ImmutableList asList; public ImmutableList asList() { ImmutableList list = asList; diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableEnumMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableEnumMap.java index f49899166265..72db1e73ddb5 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableEnumMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableEnumMap.java @@ -27,6 +27,7 @@ * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault final class ImmutableEnumMap extends ForwardingImmutableMap { static ImmutableMap asImmutable(Map map) { for (Entry entry : checkNotNull(map).entrySet()) { diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableEnumSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableEnumSet.java index be7e4b7284e4..7c57d244b38a 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableEnumSet.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableEnumSet.java @@ -24,6 +24,7 @@ * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault final class ImmutableEnumSet extends ForwardingImmutableSet { static ImmutableSet asImmutable(Set delegate) { switch (delegate.size()) { diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableList.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableList.java index e9d8705ff21f..1d6d6fb61806 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableList.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableList.java @@ -38,6 +38,7 @@ * @author Hayward Chan */ @SuppressWarnings("serial") // we're overriding default serialization +@ElementTypesAreNonnullByDefault public abstract class ImmutableList extends ImmutableCollection implements List, RandomAccess { diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMap.java index 685e8ae1704a..a5d890ef7ff4 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMap.java @@ -49,6 +49,7 @@ * @see ImmutableSortedMap * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault public abstract class ImmutableMap implements Map, Serializable { abstract static class IteratorBasedImmutableMap extends ImmutableMap { @@ -72,16 +73,18 @@ public UnmodifiableIterator> iterator() { ImmutableMap() {} - public static Collector> toImmutableMap( - Function keyFunction, - Function valueFunction) { + public static + Collector> toImmutableMap( + Function keyFunction, + Function valueFunction) { return CollectCollectors.toImmutableMap(keyFunction, valueFunction); } - public static Collector> toImmutableMap( - Function keyFunction, - Function valueFunction, - BinaryOperator mergeFunction) { + public static + Collector> toImmutableMap( + Function keyFunction, + Function valueFunction, + BinaryOperator mergeFunction) { checkNotNull(keyFunction); checkNotNull(valueFunction); checkNotNull(mergeFunction); @@ -255,7 +258,7 @@ static Entry entryOf(K key, V value) { public static class Builder { final List> entries; - Comparator valueComparator; + @Nullable Comparator valueComparator; public Builder() { this.entries = Lists.newArrayList(); @@ -407,11 +410,11 @@ public static ImmutableMap copyOf( abstract boolean isPartialView(); - public final V put(K k, V v) { + public final @Nullable V put(K k, V v) { throw new UnsupportedOperationException(); } - public final V remove(Object o) { + public final @Nullable V remove(Object o) { throw new UnsupportedOperationException(); } @@ -438,7 +441,7 @@ public boolean containsValue(@Nullable Object value) { return values().contains(value); } - private transient ImmutableSet> cachedEntrySet = null; + private transient @Nullable ImmutableSet> cachedEntrySet = null; public final ImmutableSet> entrySet() { if (cachedEntrySet != null) { @@ -449,7 +452,7 @@ public final ImmutableSet> entrySet() { abstract ImmutableSet> createEntrySet(); - private transient ImmutableSet cachedKeySet = null; + private transient @Nullable ImmutableSet cachedKeySet = null; public ImmutableSet keySet() { if (cachedKeySet != null) { @@ -481,7 +484,7 @@ Spliterator keySpliterator() { return CollectSpliterators.map(entrySet().spliterator(), Entry::getKey); } - private transient ImmutableCollection cachedValues = null; + private transient @Nullable ImmutableCollection cachedValues = null; public ImmutableCollection values() { if (cachedValues != null) { @@ -491,7 +494,7 @@ public ImmutableCollection values() { } // cached so that this.multimapView().inverse() only computes inverse once - private transient ImmutableSetMultimap multimapView; + private transient @Nullable ImmutableSetMultimap multimapView; public ImmutableSetMultimap asMultimap() { ImmutableSetMultimap result = multimapView; @@ -519,7 +522,7 @@ public boolean containsKey(@Nullable Object key) { } @Override - public ImmutableSet get(@Nullable Object key) { + public @Nullable ImmutableSet get(@Nullable Object key) { V outerValue = ImmutableMap.this.get(key); return (outerValue == null) ? null : ImmutableSet.of(outerValue); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSet.java index a5ba12333ae1..603fc1766955 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSet.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSet.java @@ -28,6 +28,7 @@ import java.util.Set; import java.util.stream.Collector; import jsinterop.annotations.JsMethod; +import org.checkerframework.checker.nullness.qual.Nullable; /** * GWT emulated version of {@link com.google.common.collect.ImmutableSet}. For the unsorted sets, @@ -39,6 +40,7 @@ * @see ImmutableSortedSet * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault @SuppressWarnings("serial") // Serialization only done in GWT. public abstract class ImmutableSet extends ImmutableCollection implements Set { ImmutableSet() {} @@ -170,7 +172,7 @@ private static ImmutableSet create(E... elements) { } @Override - public boolean equals(Object obj) { + public boolean equals(@Nullable Object obj) { return Sets.equalsImpl(this, obj); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java index 7006cc880a54..e6f4ce6f20a3 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java @@ -32,6 +32,8 @@ import java.util.function.Function; import java.util.stream.Collector; import java.util.stream.Collectors; +import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * GWT emulated version of {@link com.google.common.collect.ImmutableSortedMap}. It's a thin wrapper @@ -39,6 +41,7 @@ * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault public final class ImmutableSortedMap extends ForwardingImmutableMap implements SortedMap { @@ -47,9 +50,9 @@ public final class ImmutableSortedMap extends ForwardingImmutableMap // This reference is only used by GWT compiler to infer the keys and values // of the map that needs to be serialized. - private Comparator unusedComparatorForSerialization; - private K unusedKeyForSerialization; - private V unusedValueForSerialization; + private @Nullable Comparator unusedComparatorForSerialization; + private @Nullable K unusedKeyForSerialization; + private @Nullable V unusedValueForSerialization; private final transient SortedMap sortedDelegate; @@ -67,18 +70,20 @@ public final class ImmutableSortedMap extends ForwardingImmutableMap this.sortedDelegate = delegate; } - public static Collector> toImmutableSortedMap( - Comparator comparator, - Function keyFunction, - Function valueFunction) { + public static + Collector> toImmutableSortedMap( + Comparator comparator, + Function keyFunction, + Function valueFunction) { return CollectCollectors.toImmutableSortedMap(comparator, keyFunction, valueFunction); } - public static Collector> toImmutableSortedMap( - Comparator comparator, - Function keyFunction, - Function valueFunction, - BinaryOperator mergeFunction) { + public static + Collector> toImmutableSortedMap( + Comparator comparator, + Function keyFunction, + Function valueFunction, + BinaryOperator mergeFunction) { checkNotNull(comparator); checkNotNull(keyFunction); checkNotNull(valueFunction); @@ -398,7 +403,7 @@ public ImmutableSortedMap buildOrThrow() { } } - private transient ImmutableSortedSet keySet; + private transient @Nullable ImmutableSortedSet keySet; @Override public ImmutableSortedSet keySet() { @@ -421,14 +426,17 @@ public Comparator comparator() { return comparator; } + @CheckForNull public K firstKey() { return sortedDelegate.firstKey(); } + @CheckForNull public K lastKey() { return sortedDelegate.lastKey(); } + @CheckForNull K higher(K k) { Iterator iterator = keySet().tailSet(k).iterator(); while (iterator.hasNext()) { @@ -513,7 +521,7 @@ private static SortedMap newModifiableDelegate(Comparator Comparator nullAccepting(Comparator comparator) { + private static Comparator<@Nullable E> nullAccepting(Comparator comparator) { return Ordering.from(comparator).nullsFirst(); } } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java index 6a3250adf404..14fae8b9c7a2 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java @@ -29,6 +29,7 @@ import java.util.SortedSet; import java.util.TreeSet; import java.util.stream.Collector; +import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -36,6 +37,7 @@ * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault public abstract class ImmutableSortedSet extends ForwardingImmutableSet implements SortedSet, SortedIterable { // TODO(cpovirk): split into ImmutableSortedSet/ForwardingImmutableSortedSet? @@ -264,7 +266,7 @@ public Object[] toArray() { } @Override - public T[] toArray(T[] other) { + public T[] toArray(T[] other) { return ObjectArrays.toArrayImpl(this, other); } @@ -308,6 +310,7 @@ public ImmutableSortedSet headSet(E toElement) { } } + @CheckForNull E higher(E e) { checkNotNull(e); Iterator iterator = tailSet(e).iterator(); @@ -320,11 +323,13 @@ E higher(E e) { return null; } + @CheckForNull public E ceiling(E e) { ImmutableSortedSet set = tailSet(e, true); return !set.isEmpty() ? set.first() : null; } + @CheckForNull public E floor(E e) { ImmutableSortedSet set = headSet(e, true); return !set.isEmpty() ? set.last() : null; diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/JdkBackedImmutableBiMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/JdkBackedImmutableBiMap.java index abc1544bc798..ad469780e2ac 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/JdkBackedImmutableBiMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/JdkBackedImmutableBiMap.java @@ -15,10 +15,12 @@ */ package com.google.common.collect; + /** * GWT emulation of {@link JdkBackedImmutableBiMap}. Never used, but must exist so that the client * is willing to deserialize maps that were this type on the server. */ +@ElementTypesAreNonnullByDefault class JdkBackedImmutableBiMap extends RegularImmutableBiMap { private JdkBackedImmutableBiMap(ImmutableMap delegate, ImmutableBiMap inverse) { super(delegate, inverse); diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/JdkBackedImmutableMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/JdkBackedImmutableMap.java index 88d1611e7dec..574d619def6f 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/JdkBackedImmutableMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/JdkBackedImmutableMap.java @@ -22,6 +22,7 @@ * GWT emulation of {@link JdkBackedImmutableMap}. Never used, but must exist so that the client is * willing to deserialize maps that were this type on the server. */ +@ElementTypesAreNonnullByDefault final class JdkBackedImmutableMap extends ForwardingImmutableMap { JdkBackedImmutableMap(Map delegate) { super(delegate); diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/MapMaker.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/MapMaker.java index a0d535ca8ff2..459ab06cf59b 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/MapMaker.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/MapMaker.java @@ -27,6 +27,7 @@ * * @author Charles Fry */ +@ElementTypesAreNonnullByDefault public final class MapMaker { private int initialCapacity = 16; diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableBiMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableBiMap.java index c9995809aef5..234f599f928a 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableBiMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableBiMap.java @@ -24,6 +24,7 @@ * @author Jared Levy * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault @SuppressWarnings("serial") class RegularImmutableBiMap extends ImmutableBiMap { static final RegularImmutableBiMap EMPTY = diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableList.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableList.java index f547d469bde8..47c07c3723b6 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableList.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableList.java @@ -20,18 +20,20 @@ import static java.util.Collections.unmodifiableList; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; /** * GWT emulated version of {@link RegularImmutableList}. * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault class RegularImmutableList extends ForwardingImmutableList { static final ImmutableList EMPTY = new RegularImmutableList(emptyList()); private final List delegate; - E forSerialization; + @Nullable E forSerialization; RegularImmutableList(List delegate) { // TODO(cpovirk): avoid redundant unmodifiableList wrapping diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableMap.java index e00ee41331c5..d3a455e306b9 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableMap.java @@ -23,6 +23,7 @@ * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault final class RegularImmutableMap extends ForwardingImmutableMap { static final ImmutableMap EMPTY = new RegularImmutableMap(); diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableMultiset.java index 8afd8265f984..06d6e4466d4f 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableMultiset.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableMultiset.java @@ -14,8 +14,10 @@ package com.google.common.collect; import java.util.Collection; +import org.checkerframework.checker.nullness.qual.Nullable; /** Never actually created; instead delegates to JdkBackedImmutableMultiset. */ +@ElementTypesAreNonnullByDefault class RegularImmutableMultiset extends ImmutableMultiset { static final ImmutableMultiset EMPTY = JdkBackedImmutableMultiset.create(ImmutableList.of()); @@ -31,7 +33,7 @@ static ImmutableMultiset create(Collection> } @Override - public int count(Object element) { + public int count(@Nullable Object element) { throw new AssertionError(); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSet.java index 30752512de41..84a52b3f5fda 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSet.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSet.java @@ -24,6 +24,7 @@ * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault final class RegularImmutableSet extends ForwardingImmutableSet { static final RegularImmutableSet EMPTY = new RegularImmutableSet(Collections.emptySet()); diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSortedSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSortedSet.java index 908e38e7808f..c8bb8d7d5703 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSortedSet.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableSortedSet.java @@ -18,19 +18,21 @@ import java.util.Comparator; import java.util.SortedSet; +import org.checkerframework.checker.nullness.qual.Nullable; /** * GWT emulation of {@link RegularImmutableSortedSet}. * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault final class RegularImmutableSortedSet extends ImmutableSortedSet { /** true if this set is a subset of another immutable sorted set. */ final boolean isSubset; - private Comparator unusedComparatorForSerialization; - private E unusedElementForSerialization; + private @Nullable Comparator unusedComparatorForSerialization; + private @Nullable E unusedElementForSerialization; RegularImmutableSortedSet(SortedSet delegate, boolean isSubset) { super(delegate); diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableBiMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableBiMap.java index 11a93b89a271..dc1ae96e4eea 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableBiMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableBiMap.java @@ -19,12 +19,14 @@ import static com.google.common.base.Preconditions.checkNotNull; import java.util.Collections; +import org.checkerframework.checker.nullness.qual.Nullable; /** * GWT emulation of {@link SingletonImmutableBiMap}. * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault final class SingletonImmutableBiMap extends ImmutableBiMap { // These references are used both by the custom field serializer, and by the @@ -36,7 +38,7 @@ final class SingletonImmutableBiMap extends ImmutableBiMap { K singleKey; V singleValue; - transient SingletonImmutableBiMap inverse; + @Nullable transient SingletonImmutableBiMap inverse; SingletonImmutableBiMap(K key, V value) { super(Collections.singletonMap(checkNotNull(key), checkNotNull(value))); diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableList.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableList.java index 7c525f413355..a49e143bccb6 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableList.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableList.java @@ -26,6 +26,7 @@ * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault final class SingletonImmutableList extends ForwardingImmutableList { final transient List delegate; diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableSet.java index 19e54ddc37cf..63576d0fb8af 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableSet.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SingletonImmutableSet.java @@ -18,11 +18,14 @@ import static com.google.common.base.Preconditions.checkNotNull; +import org.checkerframework.checker.nullness.qual.Nullable; + /** * GWT emulation of {@link SingletonImmutableSet}. * * @author Hayward Chan */ +@ElementTypesAreNonnullByDefault final class SingletonImmutableSet extends ImmutableSet { // This reference is used both by the custom field serializer, and by the @@ -47,7 +50,7 @@ public UnmodifiableIterator iterator() { } @Override - public boolean contains(Object object) { + public boolean contains(@Nullable Object object) { return element.equals(object); } } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SortedMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SortedMultiset.java index e4c0a6334e96..9ebd1d1b8ad3 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SortedMultiset.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/SortedMultiset.java @@ -18,6 +18,8 @@ import java.util.Comparator; import java.util.SortedSet; +import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * GWT emulation of {@code SortedMultiset}, with {@code elementSet} reduced to returning a {@code @@ -26,15 +28,20 @@ * @author Louis Wasserman * @since 11.0 */ -public interface SortedMultiset extends Multiset, SortedIterable { +@ElementTypesAreNonnullByDefault +public interface SortedMultiset extends Multiset, SortedIterable { Comparator comparator(); + @CheckForNull Entry firstEntry(); + @CheckForNull Entry lastEntry(); + @CheckForNull Entry pollFirstEntry(); + @CheckForNull Entry pollLastEntry(); /** diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/UnmodifiableSortedMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/UnmodifiableSortedMultiset.java index 2f26fc790c43..3b31f0f99fe9 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/UnmodifiableSortedMultiset.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/UnmodifiableSortedMultiset.java @@ -20,13 +20,16 @@ import java.util.Collections; import java.util.Comparator; import java.util.SortedSet; +import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Implementation of {@link Multisets#unmodifiableSortedMultiset(SortedMultiset)} for GWT. * * @author Louis Wasserman */ -final class UnmodifiableSortedMultiset extends UnmodifiableMultiset +@ElementTypesAreNonnullByDefault +final class UnmodifiableSortedMultiset extends UnmodifiableMultiset implements SortedMultiset { UnmodifiableSortedMultiset(SortedMultiset delegate) { super(delegate); @@ -52,7 +55,7 @@ public SortedSet elementSet() { return (SortedSet) super.elementSet(); } - private transient UnmodifiableSortedMultiset descendingMultiset; + private transient @Nullable UnmodifiableSortedMultiset descendingMultiset; @Override public SortedMultiset descendingMultiset() { @@ -66,21 +69,25 @@ public SortedMultiset descendingMultiset() { } @Override + @CheckForNull public Entry firstEntry() { return delegate().firstEntry(); } @Override + @CheckForNull public Entry lastEntry() { return delegate().lastEntry(); } @Override + @CheckForNull public Entry pollFirstEntry() { throw new UnsupportedOperationException(); } @Override + @CheckForNull public Entry pollLastEntry() { throw new UnsupportedOperationException(); } From fccfe96854ca59b74fb3cd13a2db9cff005510ed Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 24 Jan 2024 08:00:49 -0800 Subject: [PATCH 111/216] Make J2CL super-source'd classes pass nullness checking. RELNOTES=n/a PiperOrigin-RevId: 601121536 --- .../com/google/common/collect/DescendingMultiset.java | 1 + .../google/common/collect/ForwardingImmutableMap.java | 4 +++- .../com/google/common/collect/ImmutableSortedMap.java | 6 ++++-- .../com/google/common/collect/ImmutableSortedSet.java | 10 +++++++++- 4 files changed, 17 insertions(+), 4 deletions(-) diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/DescendingMultiset.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/DescendingMultiset.java index aaecc2d166ca..a5924b88fd3b 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/DescendingMultiset.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/DescendingMultiset.java @@ -150,6 +150,7 @@ public Iterator iterator() { } @Override + @SuppressWarnings("nullness") // b/192354773 in our checker affects toArray declarations public T[] toArray(T[] array) { return standardToArray(array); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableMap.java index 8fbed96f069e..1b13ed3ea151 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ForwardingImmutableMap.java @@ -92,12 +92,14 @@ public boolean contains(@Nullable Object object) { } @Override + @SuppressWarnings("nullness") // b/192354773 in our checker affects toArray declarations public T[] toArray(T[] array) { T[] result = super.toArray(array); if (size() < result.length) { // It works around a GWT bug where elements after last is not // properly null'ed. - result[size()] = null; + @Nullable Object[] unsoundlyCovariantArray = result; + unsoundlyCovariantArray[size()] = null; } return result; } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java index e6f4ce6f20a3..cc43b88a4668 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java @@ -484,7 +484,9 @@ public ImmutableSortedMap tailMap(K fromKey) { return newView(sortedDelegate.tailMap(fromKey)); } - public ImmutableSortedMap tailMap(K fromKey, boolean inclusive) { + public ImmutableSortedMap tailMap(K fromKeyParam, boolean inclusive) { + // Declare a "true" local variable so that the Checker Framework will infer nullness. + K fromKey = fromKeyParam; checkNotNull(fromKey); if (!inclusive) { fromKey = higher(fromKey); @@ -522,6 +524,6 @@ private static SortedMap newModifiableDelegate(Comparator Comparator<@Nullable E> nullAccepting(Comparator comparator) { - return Ordering.from(comparator).nullsFirst(); + return Ordering.from(comparator).nullsFirst(); } } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java index 14fae8b9c7a2..1f6e879b43ab 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java @@ -262,10 +262,18 @@ public UnmodifiableIterator iterator() { @Override public Object[] toArray() { - return ObjectArrays.toArrayImpl(this); + /* + * ObjectArrays.toArrayImpl returns `@Nullable Object[]` rather than `Object[]` but only because + * it can be used with collections that may contain null. This collection is a collection of + * non-null elements, so we can treat it as a plain `Object[]`. + */ + @SuppressWarnings("nullness") + Object[] result = ObjectArrays.toArrayImpl(this); + return result; } @Override + @SuppressWarnings("nullness") // b/192354773 in our checker affects toArray declarations public T[] toArray(T[] other) { return ObjectArrays.toArrayImpl(this, other); } From 518fd1d4f3aa79cd495a099f009eba4824acacd5 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 24 Jan 2024 08:20:02 -0800 Subject: [PATCH 112/216] Bump actions/upload-artifact from 4.2.0 to 4.3.0 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.2.0 to 4.3.0. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/694cdabd8bdb0f10b2cea11669e1bf5453eed0a6...26f96dfa697d77e81fd5907df203aa23a56210a8) Fixes #6941 RELNOTES=n/a PiperOrigin-RevId: 601126729 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 3e4a3f063626..1e04b4130878 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -59,7 +59,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@694cdabd8bdb0f10b2cea11669e1bf5453eed0a6 # v4.2.0 + uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0 with: name: SARIF file path: results.sarif From 35feec94233edab8f07505780949ff8b8c53779b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 08:48:04 -0800 Subject: [PATCH 113/216] Bump styfle/cancel-workflow-action from 0.12.0 to 0.12.1 Bumps [styfle/cancel-workflow-action](https://github.com/styfle/cancel-workflow-action) from 0.12.0 to 0.12.1. - [Release notes](https://github.com/styfle/cancel-workflow-action/releases) - [Commits](https://github.com/styfle/cancel-workflow-action/compare/01ce38bf961b4e243a6342cbade0dbc8ba3f0432...85880fa0301c86cca9da44039ee3bb12d3bedbfa) Fixes #6946 RELNOTES=n/a PiperOrigin-RevId: 601777866 --- .github/workflows/ci.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 7e4508d0862c..54c80866b1e7 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,7 +32,7 @@ jobs: steps: # Cancel any previous runs for the same branch that are still running. - name: 'Cancel previous runs' - uses: styfle/cancel-workflow-action@01ce38bf961b4e243a6342cbade0dbc8ba3f0432 + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa with: access_token: ${{ github.token }} - name: 'Check out repository' From 9aa7ee69405507289a2a619563e15605f553803b Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 26 Jan 2024 08:56:37 -0800 Subject: [PATCH 114/216] Bump github/codeql-action from 3.23.1 to 3.23.2 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.23.1 to 3.23.2. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/0b21cf2492b6b02c465a3e5d7c473717ad7721ba...b7bf0a3ed3ecfa44160715d7c442788f65f0f923) Fixes #6945 RELNOTES=n/a PiperOrigin-RevId: 601779702 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 1e04b4130878..298e0a8e7f6d 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@0b21cf2492b6b02c465a3e5d7c473717ad7721ba # v3.23.1 + uses: github/codeql-action/upload-sarif@b7bf0a3ed3ecfa44160715d7c442788f65f0f923 # v3.23.2 with: sarif_file: results.sarif From e5d98af4cbf23c807efaa4a4e45ada0363891bd2 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 29 Jan 2024 14:54:10 -0800 Subject: [PATCH 115/216] Internal change. RELNOTES=n/a PiperOrigin-RevId: 602508333 --- guava-tests/test/com/google/common/io/MoreFilesTest.java | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/guava-tests/test/com/google/common/io/MoreFilesTest.java b/guava-tests/test/com/google/common/io/MoreFilesTest.java index 0eee592106ef..dd0064a02806 100644 --- a/guava-tests/test/com/google/common/io/MoreFilesTest.java +++ b/guava-tests/test/com/google/common/io/MoreFilesTest.java @@ -235,13 +235,8 @@ public void testTouch() throws IOException { assertTrue(Files.exists(temp)); Files.delete(temp); assertFalse(Files.exists(temp)); - MoreFiles.touch(temp); - - if (isAndroid()) { - // TODO: b/317997723 - Test touch() more after it works under Android's library desugaring. - return; - } + MoreFiles.touch(temp); assertTrue(Files.exists(temp)); MoreFiles.touch(temp); assertTrue(Files.exists(temp)); From da9bc28e5d188a18f1996617a64c56d2e7de6e10 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 29 Jan 2024 16:09:35 -0800 Subject: [PATCH 116/216] Add a tiny bit more `@SafeVarargs`. We appear to have gotten most of these already, but I turned up some more by searching for `public[^{};]*>[.][.][.] pcre:yes`. (further progress on https://github.com/google/guava/issues/1073) RELNOTES=n/a PiperOrigin-RevId: 602528367 --- android/guava/src/com/google/common/collect/FluentIterable.java | 1 + .../guava/src/com/google/common/collect/ImmutableSortedMap.java | 1 + android/guava/src/com/google/common/collect/Iterators.java | 1 + guava/src/com/google/common/collect/FluentIterable.java | 1 + guava/src/com/google/common/collect/ImmutableSortedMap.java | 1 + guava/src/com/google/common/collect/Iterators.java | 1 + 6 files changed, 6 insertions(+) diff --git a/android/guava/src/com/google/common/collect/FluentIterable.java b/android/guava/src/com/google/common/collect/FluentIterable.java index 64b5ed1cfd93..0abfb481c11a 100644 --- a/android/guava/src/com/google/common/collect/FluentIterable.java +++ b/android/guava/src/com/google/common/collect/FluentIterable.java @@ -254,6 +254,7 @@ public Iterator iterator() { * @throws NullPointerException if any of the provided iterables is {@code null} * @since 20.0 */ + @SafeVarargs public static FluentIterable concat( Iterable... inputs) { return concatNoDefensiveCopy(Arrays.copyOf(inputs, inputs.length)); diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java index 985624968122..83b5e4f36ab6 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -1493,6 +1493,7 @@ public static ImmutableSortedMap of( */ @DoNotCall("ImmutableSortedMap.ofEntries not currently available; use ImmutableSortedMap.copyOf") @Deprecated + @SafeVarargs public static ImmutableSortedMap ofEntries( Entry... entries) { throw new UnsupportedOperationException(); diff --git a/android/guava/src/com/google/common/collect/Iterators.java b/android/guava/src/com/google/common/collect/Iterators.java index 92a5570692b4..9f7b6f711295 100644 --- a/android/guava/src/com/google/common/collect/Iterators.java +++ b/android/guava/src/com/google/common/collect/Iterators.java @@ -549,6 +549,7 @@ public I next() { * * @throws NullPointerException if any of the provided iterators is null */ + @SafeVarargs public static Iterator concat(Iterator... inputs) { return concatNoDefensiveCopy(Arrays.copyOf(inputs, inputs.length)); } diff --git a/guava/src/com/google/common/collect/FluentIterable.java b/guava/src/com/google/common/collect/FluentIterable.java index fd8178d7c479..8d1b67864bbf 100644 --- a/guava/src/com/google/common/collect/FluentIterable.java +++ b/guava/src/com/google/common/collect/FluentIterable.java @@ -251,6 +251,7 @@ public Iterator iterator() { * @throws NullPointerException if any of the provided iterables is {@code null} * @since 20.0 */ + @SafeVarargs public static FluentIterable concat( Iterable... inputs) { return concatNoDefensiveCopy(Arrays.copyOf(inputs, inputs.length)); diff --git a/guava/src/com/google/common/collect/ImmutableSortedMap.java b/guava/src/com/google/common/collect/ImmutableSortedMap.java index ba0b91c9561f..5ff26fa65a32 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -1468,6 +1468,7 @@ public static ImmutableSortedMap of( */ @DoNotCall("ImmutableSortedMap.ofEntries not currently available; use ImmutableSortedMap.copyOf") @Deprecated + @SafeVarargs public static ImmutableSortedMap ofEntries( Entry... entries) { throw new UnsupportedOperationException(); diff --git a/guava/src/com/google/common/collect/Iterators.java b/guava/src/com/google/common/collect/Iterators.java index 92a5570692b4..9f7b6f711295 100644 --- a/guava/src/com/google/common/collect/Iterators.java +++ b/guava/src/com/google/common/collect/Iterators.java @@ -549,6 +549,7 @@ public I next() { * * @throws NullPointerException if any of the provided iterators is null */ + @SafeVarargs public static Iterator concat(Iterator... inputs) { return concatNoDefensiveCopy(Arrays.copyOf(inputs, inputs.length)); } From a9d243cef98f29bbc342c423d9b91b5ce678871e Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 31 Jan 2024 09:56:34 -0800 Subject: [PATCH 117/216] Automated Code Change PiperOrigin-RevId: 603080567 --- .../common/collect/FluentIterableTest.java | 18 ++++-------------- .../common/collect/MoreCollectorsTest.java | 6 +++--- .../google/common/graph/ValueGraphTest.java | 10 +++++----- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/guava-tests/test/com/google/common/collect/FluentIterableTest.java b/guava-tests/test/com/google/common/collect/FluentIterableTest.java index 5a3236cf9a1d..e073bae4f321 100644 --- a/guava-tests/test/com/google/common/collect/FluentIterableTest.java +++ b/guava-tests/test/com/google/common/collect/FluentIterableTest.java @@ -16,7 +16,6 @@ package com.google.common.collect; -import static com.google.common.collect.FluentIterableTest.Help.assertThat; import static com.google.common.collect.Lists.newArrayList; import static com.google.common.truth.Truth.assertThat; import static java.util.Arrays.asList; @@ -31,8 +30,7 @@ import com.google.common.collect.testing.IteratorFeature; import com.google.common.collect.testing.IteratorTester; import com.google.common.testing.NullPointerTester; -import com.google.common.truth.IterableSubject; -import com.google.common.truth.Truth; +import com.google.common.truth.Truth8; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -41,7 +39,6 @@ import java.util.Set; import java.util.SortedSet; import java.util.concurrent.TimeUnit; -import java.util.stream.Stream; import junit.framework.AssertionFailedError; import junit.framework.TestCase; import org.checkerframework.checker.nullness.qual.Nullable; @@ -926,16 +923,9 @@ public void testGet_outOfBounds() { * just test that the toArray() contents are as expected. */ public void testStream() { - assertThat(FluentIterable.of().stream()).isEmpty(); - assertThat(FluentIterable.of("a").stream()).containsExactly("a"); - assertThat(FluentIterable.of(1, 2, 3).stream().filter(n -> n > 1)).containsExactly(2, 3); - } - - // TODO(kevinb): add assertThat(Stream) to Truth? - static class Help { - static IterableSubject assertThat(Stream stream) { - return Truth.assertThat(stream.toArray()).asList(); - } + Truth8.assertThat(FluentIterable.of().stream()).isEmpty(); + Truth8.assertThat(FluentIterable.of("a").stream()).containsExactly("a"); + Truth8.assertThat(FluentIterable.of(1, 2, 3).stream().filter(n -> n > 1)).containsExactly(2, 3); } private static void assertCanIterateAgain(Iterable iterable) { diff --git a/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java b/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java index 65a8971350a2..8c9ea0da7e2d 100644 --- a/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java +++ b/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java @@ -17,9 +17,9 @@ package com.google.common.collect; import static com.google.common.truth.Truth.assertThat; -import static com.google.common.truth.Truth8.assertThat; import com.google.common.annotations.GwtCompatible; +import com.google.common.truth.Truth8; import java.util.NoSuchElementException; import java.util.stream.Stream; import junit.framework.TestCase; @@ -32,11 +32,11 @@ @GwtCompatible public class MoreCollectorsTest extends TestCase { public void testToOptionalEmpty() { - assertThat(Stream.empty().collect(MoreCollectors.toOptional())).isEmpty(); + Truth8.assertThat(Stream.empty().collect(MoreCollectors.toOptional())).isEmpty(); } public void testToOptionalSingleton() { - assertThat(Stream.of(1).collect(MoreCollectors.toOptional())).hasValue(1); + Truth8.assertThat(Stream.of(1).collect(MoreCollectors.toOptional())).hasValue(1); } public void testToOptionalNull() { diff --git a/guava-tests/test/com/google/common/graph/ValueGraphTest.java b/guava-tests/test/com/google/common/graph/ValueGraphTest.java index 62e596546b7a..95ff63b091b1 100644 --- a/guava-tests/test/com/google/common/graph/ValueGraphTest.java +++ b/guava-tests/test/com/google/common/graph/ValueGraphTest.java @@ -19,11 +19,11 @@ import static com.google.common.graph.GraphConstants.ENDPOINTS_MISMATCH; import static com.google.common.graph.TestUtil.assertStronglyEquivalent; import static com.google.common.truth.Truth.assertThat; -import static com.google.common.truth.Truth8.assertThat; import static java.util.concurrent.Executors.newFixedThreadPool; import static org.junit.Assert.assertThrows; import com.google.common.collect.ImmutableList; +import com.google.common.truth.Truth8; import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.CyclicBarrier; @@ -183,14 +183,14 @@ public void hasEdgeConnecting_undirected_mismatch() { public void edgeValue_directed_correct() { graph = ValueGraphBuilder.directed().build(); graph.putEdgeValue(1, 2, "A"); - assertThat(graph.edgeValue(EndpointPair.ordered(1, 2))).hasValue("A"); + Truth8.assertThat(graph.edgeValue(EndpointPair.ordered(1, 2))).hasValue("A"); } @Test public void edgeValue_directed_backwards() { graph = ValueGraphBuilder.directed().build(); graph.putEdgeValue(1, 2, "A"); - assertThat(graph.edgeValue(EndpointPair.ordered(2, 1))).isEmpty(); + Truth8.assertThat(graph.edgeValue(EndpointPair.ordered(2, 1))).isEmpty(); } @Test @@ -211,14 +211,14 @@ public void edgeValue_directed_mismatch() { public void edgeValue_undirected_correct() { graph = ValueGraphBuilder.undirected().build(); graph.putEdgeValue(1, 2, "A"); - assertThat(graph.edgeValue(EndpointPair.unordered(1, 2))).hasValue("A"); + Truth8.assertThat(graph.edgeValue(EndpointPair.unordered(1, 2))).hasValue("A"); } @Test public void edgeValue_undirected_backwards() { graph = ValueGraphBuilder.undirected().build(); graph.putEdgeValue(1, 2, "A"); - assertThat(graph.edgeValue(EndpointPair.unordered(2, 1))).hasValue("A"); + Truth8.assertThat(graph.edgeValue(EndpointPair.unordered(2, 1))).hasValue("A"); } @Test From d3232b71ce5eee2fb861a7f75bcebe1290afafdc Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Thu, 1 Feb 2024 13:43:05 -0800 Subject: [PATCH 118/216] Move tsan suppressions to annotations RELNOTES=Improved j2objc compatibility PiperOrigin-RevId: 603470054 --- .../common/util/concurrent/AbstractCatchingFuture.java | 7 ++++--- .../util/concurrent/AbstractTransformFuture.java | 5 +++-- .../google/common/util/concurrent/AggregateFuture.java | 4 +++- .../common/util/concurrent/CollectionFuture.java | 3 ++- .../google/common/util/concurrent/CombinedFuture.java | 3 ++- .../common/util/concurrent/ExecutionSequencer.java | 10 ++++++---- .../src/com/google/common/util/concurrent/Futures.java | 3 ++- .../common/util/concurrent/SequentialExecutor.java | 2 ++ .../google/common/util/concurrent/TimeoutFuture.java | 7 ++++--- .../common/util/concurrent/AbstractCatchingFuture.java | 7 ++++--- .../util/concurrent/AbstractTransformFuture.java | 5 +++-- .../google/common/util/concurrent/AggregateFuture.java | 4 +++- .../common/util/concurrent/CollectionFuture.java | 3 ++- .../google/common/util/concurrent/CombinedFuture.java | 3 ++- .../common/util/concurrent/ExecutionSequencer.java | 10 ++++++---- .../src/com/google/common/util/concurrent/Futures.java | 3 ++- .../common/util/concurrent/SequentialExecutor.java | 2 ++ .../google/common/util/concurrent/TimeoutFuture.java | 7 ++++--- 18 files changed, 56 insertions(+), 32 deletions(-) diff --git a/android/guava/src/com/google/common/util/concurrent/AbstractCatchingFuture.java b/android/guava/src/com/google/common/util/concurrent/AbstractCatchingFuture.java index 8fa6500280d6..6555872a9744 100644 --- a/android/guava/src/com/google/common/util/concurrent/AbstractCatchingFuture.java +++ b/android/guava/src/com/google/common/util/concurrent/AbstractCatchingFuture.java @@ -26,6 +26,7 @@ import com.google.common.util.concurrent.internal.InternalFutureFailureAccess; import com.google.common.util.concurrent.internal.InternalFutures; import com.google.errorprone.annotations.ForOverride; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; import javax.annotation.CheckForNull; @@ -62,9 +63,9 @@ abstract class AbstractCatchingFuture< * In certain circumstances, this field might theoretically not be visible to an afterDone() call * triggered by cancel(). For details, see the comments on the fields of TimeoutFuture. */ - @CheckForNull ListenableFuture inputFuture; - @CheckForNull Class exceptionType; - @CheckForNull F fallback; + @CheckForNull @LazyInit ListenableFuture inputFuture; + @CheckForNull @LazyInit Class exceptionType; + @CheckForNull @LazyInit F fallback; AbstractCatchingFuture( ListenableFuture inputFuture, Class exceptionType, F fallback) { diff --git a/android/guava/src/com/google/common/util/concurrent/AbstractTransformFuture.java b/android/guava/src/com/google/common/util/concurrent/AbstractTransformFuture.java index 3c5f30b63fb9..f23333c5dc1c 100644 --- a/android/guava/src/com/google/common/util/concurrent/AbstractTransformFuture.java +++ b/android/guava/src/com/google/common/util/concurrent/AbstractTransformFuture.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.base.Function; import com.google.errorprone.annotations.ForOverride; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; @@ -57,8 +58,8 @@ abstract class AbstractTransformFuture< * In certain circumstances, this field might theoretically not be visible to an afterDone() call * triggered by cancel(). For details, see the comments on the fields of TimeoutFuture. */ - @CheckForNull ListenableFuture inputFuture; - @CheckForNull F function; + @CheckForNull @LazyInit ListenableFuture inputFuture; + @CheckForNull @LazyInit F function; AbstractTransformFuture(ListenableFuture inputFuture, F function) { this.inputFuture = checkNotNull(inputFuture); diff --git a/android/guava/src/com/google/common/util/concurrent/AggregateFuture.java b/android/guava/src/com/google/common/util/concurrent/AggregateFuture.java index 35347741667d..a29430dee100 100644 --- a/android/guava/src/com/google/common/util/concurrent/AggregateFuture.java +++ b/android/guava/src/com/google/common/util/concurrent/AggregateFuture.java @@ -27,6 +27,7 @@ import com.google.common.collect.ImmutableCollection; import com.google.errorprone.annotations.ForOverride; import com.google.errorprone.annotations.OverridingMethodsMustInvokeSuper; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -55,7 +56,8 @@ abstract class AggregateFuture> futures; + @CheckForNull @LazyInit + private ImmutableCollection> futures; private final boolean allMustSucceed; private final boolean collectsValues; diff --git a/android/guava/src/com/google/common/util/concurrent/CollectionFuture.java b/android/guava/src/com/google/common/util/concurrent/CollectionFuture.java index 062aee7a79dc..445f6ccac305 100644 --- a/android/guava/src/com/google/common/util/concurrent/CollectionFuture.java +++ b/android/guava/src/com/google/common/util/concurrent/CollectionFuture.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.Lists; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.Collections; import java.util.List; import javax.annotation.CheckForNull; @@ -36,7 +37,7 @@ abstract class CollectionFuture> values; + @CheckForNull @LazyInit private List<@Nullable Present> values; CollectionFuture( ImmutableCollection> futures, diff --git a/android/guava/src/com/google/common/util/concurrent/CombinedFuture.java b/android/guava/src/com/google/common/util/concurrent/CombinedFuture.java index c22211164c40..fbbf113fa8be 100644 --- a/android/guava/src/com/google/common/util/concurrent/CombinedFuture.java +++ b/android/guava/src/com/google/common/util/concurrent/CombinedFuture.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.ImmutableCollection; +import com.google.errorprone.annotations.concurrent.LazyInit; import com.google.j2objc.annotations.WeakOuter; import java.util.concurrent.Callable; import java.util.concurrent.CancellationException; @@ -33,7 +34,7 @@ @ElementTypesAreNonnullByDefault final class CombinedFuture extends AggregateFuture<@Nullable Object, V> { - @CheckForNull private CombinedFutureInterruptibleTask task; + @CheckForNull @LazyInit private CombinedFutureInterruptibleTask task; CombinedFuture( ImmutableCollection> futures, diff --git a/android/guava/src/com/google/common/util/concurrent/ExecutionSequencer.java b/android/guava/src/com/google/common/util/concurrent/ExecutionSequencer.java index c335711c064f..4e13a9d0b315 100644 --- a/android/guava/src/com/google/common/util/concurrent/ExecutionSequencer.java +++ b/android/guava/src/com/google/common/util/concurrent/ExecutionSequencer.java @@ -26,9 +26,9 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.J2ktIncompatible; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.concurrent.Callable; import java.util.concurrent.Executor; -import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicReference; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -100,7 +100,7 @@ public static ExecutionSequencer create() { private final AtomicReference> ref = new AtomicReference<>(immediateVoidFuture()); - private ThreadConfinedTaskQueue latestTaskQueue = new ThreadConfinedTaskQueue(); + private @LazyInit ThreadConfinedTaskQueue latestTaskQueue = new ThreadConfinedTaskQueue(); /** * This object is unsafely published, but avoids problematic races by relying exclusively on the @@ -131,9 +131,11 @@ private static final class ThreadConfinedTaskQueue { * All the states where thread != currentThread are identical for our purposes, and so even * though it's racy, we don't care which of those values we get, so no need to synchronize. */ - @CheckForNull Thread thread; + @CheckForNull @LazyInit Thread thread; + /** Only used by the thread associated with this object */ @CheckForNull Runnable nextTask; + /** Only used by the thread associated with this object */ @CheckForNull Executor nextExecutor; } @@ -308,7 +310,7 @@ private static final class TaskNonReentrantExecutor extends AtomicReference extends AbstractFuture.TrustedFuture implements Runnable { - @CheckForNull private ListenableFuture delegate; + @CheckForNull @LazyInit private ListenableFuture delegate; NonCancellationPropagatingFuture(final ListenableFuture delegate) { this.delegate = delegate; diff --git a/android/guava/src/com/google/common/util/concurrent/SequentialExecutor.java b/android/guava/src/com/google/common/util/concurrent/SequentialExecutor.java index ebc33178d0c5..2fcddadbcab4 100644 --- a/android/guava/src/com/google/common/util/concurrent/SequentialExecutor.java +++ b/android/guava/src/com/google/common/util/concurrent/SequentialExecutor.java @@ -25,6 +25,7 @@ import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Preconditions; import com.google.errorprone.annotations.concurrent.GuardedBy; +import com.google.errorprone.annotations.concurrent.LazyInit; import com.google.j2objc.annotations.RetainedWith; import java.util.ArrayDeque; import java.util.Deque; @@ -70,6 +71,7 @@ enum WorkerRunningState { private final Deque queue = new ArrayDeque<>(); /** see {@link WorkerRunningState} */ + @LazyInit @GuardedBy("queue") private WorkerRunningState workerRunningState = IDLE; diff --git a/android/guava/src/com/google/common/util/concurrent/TimeoutFuture.java b/android/guava/src/com/google/common/util/concurrent/TimeoutFuture.java index aca62305463f..b3f7f1346e5b 100644 --- a/android/guava/src/com/google/common/util/concurrent/TimeoutFuture.java +++ b/android/guava/src/com/google/common/util/concurrent/TimeoutFuture.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Preconditions; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; @@ -75,8 +76,8 @@ final class TimeoutFuture extends FluentFuture.Trust * write-barriers). */ - @CheckForNull private ListenableFuture delegateRef; - @CheckForNull private ScheduledFuture timer; + @CheckForNull @LazyInit private ListenableFuture delegateRef; + @CheckForNull @LazyInit private ScheduledFuture timer; private TimeoutFuture(ListenableFuture delegate) { this.delegateRef = Preconditions.checkNotNull(delegate); @@ -84,7 +85,7 @@ private TimeoutFuture(ListenableFuture delegate) { /** A runnable that is called when the delegate or the timer completes. */ private static final class Fire implements Runnable { - @CheckForNull TimeoutFuture timeoutFutureRef; + @CheckForNull @LazyInit TimeoutFuture timeoutFutureRef; Fire(TimeoutFuture timeoutFuture) { this.timeoutFutureRef = timeoutFuture; diff --git a/guava/src/com/google/common/util/concurrent/AbstractCatchingFuture.java b/guava/src/com/google/common/util/concurrent/AbstractCatchingFuture.java index 8fa6500280d6..6555872a9744 100644 --- a/guava/src/com/google/common/util/concurrent/AbstractCatchingFuture.java +++ b/guava/src/com/google/common/util/concurrent/AbstractCatchingFuture.java @@ -26,6 +26,7 @@ import com.google.common.util.concurrent.internal.InternalFutureFailureAccess; import com.google.common.util.concurrent.internal.InternalFutures; import com.google.errorprone.annotations.ForOverride; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; import javax.annotation.CheckForNull; @@ -62,9 +63,9 @@ abstract class AbstractCatchingFuture< * In certain circumstances, this field might theoretically not be visible to an afterDone() call * triggered by cancel(). For details, see the comments on the fields of TimeoutFuture. */ - @CheckForNull ListenableFuture inputFuture; - @CheckForNull Class exceptionType; - @CheckForNull F fallback; + @CheckForNull @LazyInit ListenableFuture inputFuture; + @CheckForNull @LazyInit Class exceptionType; + @CheckForNull @LazyInit F fallback; AbstractCatchingFuture( ListenableFuture inputFuture, Class exceptionType, F fallback) { diff --git a/guava/src/com/google/common/util/concurrent/AbstractTransformFuture.java b/guava/src/com/google/common/util/concurrent/AbstractTransformFuture.java index 3c5f30b63fb9..f23333c5dc1c 100644 --- a/guava/src/com/google/common/util/concurrent/AbstractTransformFuture.java +++ b/guava/src/com/google/common/util/concurrent/AbstractTransformFuture.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.base.Function; import com.google.errorprone.annotations.ForOverride; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import java.util.concurrent.Executor; @@ -57,8 +58,8 @@ abstract class AbstractTransformFuture< * In certain circumstances, this field might theoretically not be visible to an afterDone() call * triggered by cancel(). For details, see the comments on the fields of TimeoutFuture. */ - @CheckForNull ListenableFuture inputFuture; - @CheckForNull F function; + @CheckForNull @LazyInit ListenableFuture inputFuture; + @CheckForNull @LazyInit F function; AbstractTransformFuture(ListenableFuture inputFuture, F function) { this.inputFuture = checkNotNull(inputFuture); diff --git a/guava/src/com/google/common/util/concurrent/AggregateFuture.java b/guava/src/com/google/common/util/concurrent/AggregateFuture.java index 35347741667d..a29430dee100 100644 --- a/guava/src/com/google/common/util/concurrent/AggregateFuture.java +++ b/guava/src/com/google/common/util/concurrent/AggregateFuture.java @@ -27,6 +27,7 @@ import com.google.common.collect.ImmutableCollection; import com.google.errorprone.annotations.ForOverride; import com.google.errorprone.annotations.OverridingMethodsMustInvokeSuper; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.Set; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; @@ -55,7 +56,8 @@ abstract class AggregateFuture> futures; + @CheckForNull @LazyInit + private ImmutableCollection> futures; private final boolean allMustSucceed; private final boolean collectsValues; diff --git a/guava/src/com/google/common/util/concurrent/CollectionFuture.java b/guava/src/com/google/common/util/concurrent/CollectionFuture.java index 062aee7a79dc..445f6ccac305 100644 --- a/guava/src/com/google/common/util/concurrent/CollectionFuture.java +++ b/guava/src/com/google/common/util/concurrent/CollectionFuture.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.Lists; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.Collections; import java.util.List; import javax.annotation.CheckForNull; @@ -36,7 +37,7 @@ abstract class CollectionFuture> values; + @CheckForNull @LazyInit private List<@Nullable Present> values; CollectionFuture( ImmutableCollection> futures, diff --git a/guava/src/com/google/common/util/concurrent/CombinedFuture.java b/guava/src/com/google/common/util/concurrent/CombinedFuture.java index c22211164c40..fbbf113fa8be 100644 --- a/guava/src/com/google/common/util/concurrent/CombinedFuture.java +++ b/guava/src/com/google/common/util/concurrent/CombinedFuture.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.ImmutableCollection; +import com.google.errorprone.annotations.concurrent.LazyInit; import com.google.j2objc.annotations.WeakOuter; import java.util.concurrent.Callable; import java.util.concurrent.CancellationException; @@ -33,7 +34,7 @@ @ElementTypesAreNonnullByDefault final class CombinedFuture extends AggregateFuture<@Nullable Object, V> { - @CheckForNull private CombinedFutureInterruptibleTask task; + @CheckForNull @LazyInit private CombinedFutureInterruptibleTask task; CombinedFuture( ImmutableCollection> futures, diff --git a/guava/src/com/google/common/util/concurrent/ExecutionSequencer.java b/guava/src/com/google/common/util/concurrent/ExecutionSequencer.java index c335711c064f..4e13a9d0b315 100644 --- a/guava/src/com/google/common/util/concurrent/ExecutionSequencer.java +++ b/guava/src/com/google/common/util/concurrent/ExecutionSequencer.java @@ -26,9 +26,9 @@ import static java.util.Objects.requireNonNull; import com.google.common.annotations.J2ktIncompatible; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.concurrent.Callable; import java.util.concurrent.Executor; -import java.util.concurrent.Future; import java.util.concurrent.atomic.AtomicReference; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -100,7 +100,7 @@ public static ExecutionSequencer create() { private final AtomicReference> ref = new AtomicReference<>(immediateVoidFuture()); - private ThreadConfinedTaskQueue latestTaskQueue = new ThreadConfinedTaskQueue(); + private @LazyInit ThreadConfinedTaskQueue latestTaskQueue = new ThreadConfinedTaskQueue(); /** * This object is unsafely published, but avoids problematic races by relying exclusively on the @@ -131,9 +131,11 @@ private static final class ThreadConfinedTaskQueue { * All the states where thread != currentThread are identical for our purposes, and so even * though it's racy, we don't care which of those values we get, so no need to synchronize. */ - @CheckForNull Thread thread; + @CheckForNull @LazyInit Thread thread; + /** Only used by the thread associated with this object */ @CheckForNull Runnable nextTask; + /** Only used by the thread associated with this object */ @CheckForNull Executor nextExecutor; } @@ -308,7 +310,7 @@ private static final class TaskNonReentrantExecutor extends AtomicReference extends AbstractFuture.TrustedFuture implements Runnable { - @CheckForNull private ListenableFuture delegate; + @CheckForNull @LazyInit private ListenableFuture delegate; NonCancellationPropagatingFuture(final ListenableFuture delegate) { this.delegate = delegate; diff --git a/guava/src/com/google/common/util/concurrent/SequentialExecutor.java b/guava/src/com/google/common/util/concurrent/SequentialExecutor.java index ebc33178d0c5..2fcddadbcab4 100644 --- a/guava/src/com/google/common/util/concurrent/SequentialExecutor.java +++ b/guava/src/com/google/common/util/concurrent/SequentialExecutor.java @@ -25,6 +25,7 @@ import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Preconditions; import com.google.errorprone.annotations.concurrent.GuardedBy; +import com.google.errorprone.annotations.concurrent.LazyInit; import com.google.j2objc.annotations.RetainedWith; import java.util.ArrayDeque; import java.util.Deque; @@ -70,6 +71,7 @@ enum WorkerRunningState { private final Deque queue = new ArrayDeque<>(); /** see {@link WorkerRunningState} */ + @LazyInit @GuardedBy("queue") private WorkerRunningState workerRunningState = IDLE; diff --git a/guava/src/com/google/common/util/concurrent/TimeoutFuture.java b/guava/src/com/google/common/util/concurrent/TimeoutFuture.java index aca62305463f..b3f7f1346e5b 100644 --- a/guava/src/com/google/common/util/concurrent/TimeoutFuture.java +++ b/guava/src/com/google/common/util/concurrent/TimeoutFuture.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Preconditions; +import com.google.errorprone.annotations.concurrent.LazyInit; import java.util.concurrent.ExecutionException; import java.util.concurrent.Future; import java.util.concurrent.ScheduledExecutorService; @@ -75,8 +76,8 @@ final class TimeoutFuture extends FluentFuture.Trust * write-barriers). */ - @CheckForNull private ListenableFuture delegateRef; - @CheckForNull private ScheduledFuture timer; + @CheckForNull @LazyInit private ListenableFuture delegateRef; + @CheckForNull @LazyInit private ScheduledFuture timer; private TimeoutFuture(ListenableFuture delegate) { this.delegateRef = Preconditions.checkNotNull(delegate); @@ -84,7 +85,7 @@ private TimeoutFuture(ListenableFuture delegate) { /** A runnable that is called when the delegate or the timer completes. */ private static final class Fire implements Runnable { - @CheckForNull TimeoutFuture timeoutFutureRef; + @CheckForNull @LazyInit TimeoutFuture timeoutFutureRef; Fire(TimeoutFuture timeoutFuture) { this.timeoutFutureRef = timeoutFuture; From ee17e1f12f54668e842d4c5136185b8ccd8aef69 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Fri, 2 Feb 2024 07:49:07 -0800 Subject: [PATCH 119/216] Bump gradle/wrapper-validation-action from 1.1.0 to 2.0.0 Bumps [gradle/wrapper-validation-action](https://github.com/gradle/wrapper-validation-action) from 1.1.0 to 2.0.0. - [Release notes](https://github.com/gradle/wrapper-validation-action/releases) - [Commits](https://github.com/gradle/wrapper-validation-action/compare/56b90f209b02bf6d1deae490e9ef18b21a389cd4...27152f6fa06a6b8062ef7195c795692e51fc2c81) Fixes #6954 RELNOTES=n/a PiperOrigin-RevId: 603685545 --- .github/workflows/gradle-wrapper-validation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 9e1bf74b3ed0..9d4b1f4d2b65 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -10,4 +10,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: gradle/wrapper-validation-action@56b90f209b02bf6d1deae490e9ef18b21a389cd4 + - uses: gradle/wrapper-validation-action@27152f6fa06a6b8062ef7195c795692e51fc2c81 From 7e0e6edb1a372fd5051420a4a63df9ca6e5a582d Mon Sep 17 00:00:00 2001 From: cpovirk Date: Fri, 2 Feb 2024 11:10:57 -0800 Subject: [PATCH 120/216] Bump Truth to 1.4.0. RELNOTES=n/a PiperOrigin-RevId: 603736141 --- android/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index db20a09fdd55..49ccb931a562 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -14,7 +14,7 @@ %regex[.*.class] - 1.3.0 + 1.4.0 3.0.2 3.42.0 2.24.1 diff --git a/pom.xml b/pom.xml index 736111d2bef5..8d3fc5f34a18 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ %regex[.*.class] - 1.3.0 + 1.4.0 3.0.2 3.42.0 2.24.1 From 6e2d0d8296f43c68657ecb09d366d358c939700c Mon Sep 17 00:00:00 2001 From: cpovirk Date: Fri, 2 Feb 2024 16:09:18 -0800 Subject: [PATCH 121/216] Add an overload of `spliterator()` to the Android flavor of one of our classes. This is a further attempt to shake out any problems in advance of exposing "real" Java 8 APIs (https://github.com/google/guava/issues/6567). If something goes wrong with `spliterator()`, I think we could remove it without breaking callers: Either it's an override (in which case calls to it will continue to work after it's removed) or it's not (in which case Java 8 APIs aren't available, so calls to it would never have worked.) RELNOTES=n/a PiperOrigin-RevId: 603812702 --- .../common/collect/ImmutableCollection.java | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/android/guava/src/com/google/common/collect/ImmutableCollection.java b/android/guava/src/com/google/common/collect/ImmutableCollection.java index 1da069a2f19b..c8167e8f61cc 100644 --- a/android/guava/src/com/google/common/collect/ImmutableCollection.java +++ b/android/guava/src/com/google/common/collect/ImmutableCollection.java @@ -36,6 +36,8 @@ import java.util.HashSet; import java.util.Iterator; import java.util.List; +import java.util.Spliterator; +import java.util.Spliterators; import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; @@ -176,6 +178,11 @@ public abstract class ImmutableCollection extends AbstractCollection imple * These are properties of the collection as a whole; SIZED and SUBSIZED are more properties of * the spliterator implementation. */ + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + // @IgnoreJRERequirement is not necessary because this compiles down to a constant. + // (which is fortunate because Animal Sniffer doesn't look for @IgnoreJRERequirement on fields) + static final int SPLITERATOR_CHARACTERISTICS = + Spliterator.IMMUTABLE | Spliterator.NONNULL | Spliterator.ORDERED; ImmutableCollection() {} @@ -183,6 +190,14 @@ public abstract class ImmutableCollection extends AbstractCollection imple @Override public abstract UnmodifiableIterator iterator(); + @Override + @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) + @IgnoreJRERequirement // used only from APIs with Java 8 types in them + // (not used within guava-android as of this writing, but we include it in the jar as a test) + public Spliterator spliterator() { + return Spliterators.spliterator(this, SPLITERATOR_CHARACTERISTICS); + } + private static final Object[] EMPTY_ARRAY = {}; @Override From cc1b9d2be0f6c162f2c85f47eb899dff189adb71 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 5 Feb 2024 08:28:21 -0800 Subject: [PATCH 122/216] Bump github/codeql-action from 3.23.2 to 3.24.0 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.23.2 to 3.24.0. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/b7bf0a3ed3ecfa44160715d7c442788f65f0f923...e8893c57a1f3a2b659b6b55564fdfdbbd2982911) Fixes #6959 RELNOTES=n/a PiperOrigin-RevId: 604326106 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 298e0a8e7f6d..03acb3181b77 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@b7bf0a3ed3ecfa44160715d7c442788f65f0f923 # v3.23.2 + uses: github/codeql-action/upload-sarif@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0 with: sarif_file: results.sarif From 3688a537d57c369cfd079f08d6b38391e3ade7d0 Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Mon, 5 Feb 2024 12:44:33 -0800 Subject: [PATCH 123/216] Improve performance of InternetDomainName::ancestor. RELNOTES=n/a PiperOrigin-RevId: 604403663 --- .../google/common/net/InternetDomainName.java | 22 ++++++++++++++++++- .../google/common/net/InternetDomainName.java | 22 ++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/android/guava/src/com/google/common/net/InternetDomainName.java b/android/guava/src/com/google/common/net/InternetDomainName.java index d098bf4fb0b9..7f75203eb0b0 100644 --- a/android/guava/src/com/google/common/net/InternetDomainName.java +++ b/android/guava/src/com/google/common/net/InternetDomainName.java @@ -162,6 +162,16 @@ public final class InternetDomainName { checkArgument(validateSyntax(parts), "Not a valid domain name: '%s'", name); } + /** + * Internal constructor that skips validations when creating an instance from parts of an + * already-validated InternetDomainName, as in {@link ancestor}. + */ + private InternetDomainName(String name, ImmutableList parts) { + checkArgument(!parts.isEmpty(), "Cannot create an InternetDomainName with zero parts."); + this.name = name; + this.parts = parts; + } + /** * The index in the {@link #parts()} list at which the public suffix begins. For example, for the * domain name {@code myblog.blogspot.co.uk}, the value would be 1 (the index of the {@code @@ -585,7 +595,17 @@ public InternetDomainName parent() { *

    TODO: Reasonable candidate for addition to public API. */ private InternetDomainName ancestor(int levels) { - return from(DOT_JOINER.join(parts.subList(levels, parts.size()))); + ImmutableList ancestorParts = parts.subList(levels, parts.size()); + + // levels equals the number of dots that are getting clipped away, then add the length of each + // clipped part to get the length of the leading substring that is being removed. + int substringFrom = levels; + for (int i = 0; i < levels; i++) { + substringFrom += parts.get(i).length(); + } + String ancestorName = name.substring(substringFrom); + + return new InternetDomainName(ancestorName, ancestorParts); } /** diff --git a/guava/src/com/google/common/net/InternetDomainName.java b/guava/src/com/google/common/net/InternetDomainName.java index d098bf4fb0b9..7f75203eb0b0 100644 --- a/guava/src/com/google/common/net/InternetDomainName.java +++ b/guava/src/com/google/common/net/InternetDomainName.java @@ -162,6 +162,16 @@ public final class InternetDomainName { checkArgument(validateSyntax(parts), "Not a valid domain name: '%s'", name); } + /** + * Internal constructor that skips validations when creating an instance from parts of an + * already-validated InternetDomainName, as in {@link ancestor}. + */ + private InternetDomainName(String name, ImmutableList parts) { + checkArgument(!parts.isEmpty(), "Cannot create an InternetDomainName with zero parts."); + this.name = name; + this.parts = parts; + } + /** * The index in the {@link #parts()} list at which the public suffix begins. For example, for the * domain name {@code myblog.blogspot.co.uk}, the value would be 1 (the index of the {@code @@ -585,7 +595,17 @@ public InternetDomainName parent() { *

    TODO: Reasonable candidate for addition to public API. */ private InternetDomainName ancestor(int levels) { - return from(DOT_JOINER.join(parts.subList(levels, parts.size()))); + ImmutableList ancestorParts = parts.subList(levels, parts.size()); + + // levels equals the number of dots that are getting clipped away, then add the length of each + // clipped part to get the length of the leading substring that is being removed. + int substringFrom = levels; + for (int i = 0; i < levels; i++) { + substringFrom += parts.get(i).length(); + } + String ancestorName = name.substring(substringFrom); + + return new InternetDomainName(ancestorName, ancestorParts); } /** From 750ba3eb45c4667e8dde0d66b6441c12209dece5 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 5 Feb 2024 13:34:48 -0800 Subject: [PATCH 124/216] Suppress bogus nullness errors until we're able to fix our checker. RELNOTES=n/a PiperOrigin-RevId: 604417755 --- android/guava/src/com/google/common/collect/CompactHashSet.java | 1 + .../src/com/google/common/collect/CompactLinkedHashSet.java | 1 + .../guava/src/com/google/common/collect/ImmutableSortedMap.java | 1 + android/guava/src/com/google/common/collect/Lists.java | 1 + android/guava/src/com/google/common/collect/Ordering.java | 2 ++ android/guava/src/com/google/common/collect/Sets.java | 1 + android/guava/src/com/google/common/collect/TopKSelector.java | 2 ++ guava/src/com/google/common/collect/CompactHashSet.java | 1 + guava/src/com/google/common/collect/CompactLinkedHashSet.java | 1 + guava/src/com/google/common/collect/ImmutableSortedMap.java | 1 + guava/src/com/google/common/collect/Lists.java | 1 + guava/src/com/google/common/collect/Ordering.java | 2 ++ guava/src/com/google/common/collect/Sets.java | 1 + guava/src/com/google/common/collect/TopKSelector.java | 2 ++ 14 files changed, 18 insertions(+) diff --git a/android/guava/src/com/google/common/collect/CompactHashSet.java b/android/guava/src/com/google/common/collect/CompactHashSet.java index 52f8a4a676ce..d6e37f69aaa7 100644 --- a/android/guava/src/com/google/common/collect/CompactHashSet.java +++ b/android/guava/src/com/google/common/collect/CompactHashSet.java @@ -104,6 +104,7 @@ class CompactHashSet extends AbstractSet implemen * @return a new {@code CompactHashSet} containing those elements (minus duplicates) */ @SafeVarargs + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public static CompactHashSet create(E... elements) { CompactHashSet set = createWithExpectedSize(elements.length); Collections.addAll(set, elements); diff --git a/android/guava/src/com/google/common/collect/CompactLinkedHashSet.java b/android/guava/src/com/google/common/collect/CompactLinkedHashSet.java index 21d48058ad72..b5c554fc47b6 100644 --- a/android/guava/src/com/google/common/collect/CompactLinkedHashSet.java +++ b/android/guava/src/com/google/common/collect/CompactLinkedHashSet.java @@ -79,6 +79,7 @@ class CompactLinkedHashSet extends CompactHashSet * @return a new {@code CompactLinkedHashSet} containing those elements (minus duplicates) */ @SafeVarargs + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public static CompactLinkedHashSet create(E... elements) { CompactLinkedHashSet set = createWithExpectedSize(elements.length); Collections.addAll(set, elements); diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java index 83b5e4f36ab6..d96c4d1f5a79 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -499,6 +499,7 @@ private static ImmutableSortedMap fromEntries( return fromEntries(comparator, sameComparator, entryArray, entryArray.length); } + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. private static ImmutableSortedMap fromEntries( final Comparator comparator, boolean sameComparator, diff --git a/android/guava/src/com/google/common/collect/Lists.java b/android/guava/src/com/google/common/collect/Lists.java index e59f60aae4e1..e79ea14f8197 100644 --- a/android/guava/src/com/google/common/collect/Lists.java +++ b/android/guava/src/com/google/common/collect/Lists.java @@ -100,6 +100,7 @@ private Lists() {} */ @SafeVarargs @GwtCompatible(serializable = true) + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public static ArrayList newArrayList(E... elements) { checkNotNull(elements); // for GWT // Avoid integer overflow when a large array is passed in diff --git a/android/guava/src/com/google/common/collect/Ordering.java b/android/guava/src/com/google/common/collect/Ordering.java index 86318aa44336..3b25c42fa487 100644 --- a/android/guava/src/com/google/common/collect/Ordering.java +++ b/android/guava/src/com/google/common/collect/Ordering.java @@ -746,6 +746,7 @@ public E max( * @throws IllegalArgumentException if {@code k} is negative * @since 8.0 */ + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public List leastOf(Iterable iterable, int k) { if (iterable instanceof Collection) { Collection collection = (Collection) iterable; @@ -862,6 +863,7 @@ public List greatestOf(Iterator iterator, int k) { * calling {@link Collections#sort(List)}. */ // TODO(kevinb): rerun benchmarks including new options + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public List sortedCopy(Iterable elements) { @SuppressWarnings("unchecked") // does not escape, and contains only E's E[] array = (E[]) Iterables.toArray(elements); diff --git a/android/guava/src/com/google/common/collect/Sets.java b/android/guava/src/com/google/common/collect/Sets.java index 60578e6d03f5..e9fdc4408f25 100644 --- a/android/guava/src/com/google/common/collect/Sets.java +++ b/android/guava/src/com/google/common/collect/Sets.java @@ -194,6 +194,7 @@ public static > EnumSet newEnumSet( * asList}{@code (...))}, or for creating an empty set then calling {@link Collections#addAll}. * This method is not actually very useful and will likely be deprecated in the future. */ + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public static HashSet newHashSet(E... elements) { HashSet set = newHashSetWithExpectedSize(elements.length); Collections.addAll(set, elements); diff --git a/android/guava/src/com/google/common/collect/TopKSelector.java b/android/guava/src/com/google/common/collect/TopKSelector.java index 24fa85ded80c..be0a97b5f411 100644 --- a/android/guava/src/com/google/common/collect/TopKSelector.java +++ b/android/guava/src/com/google/common/collect/TopKSelector.java @@ -159,6 +159,7 @@ public void offer(@ParametricNullness T elem) { * Quickselects the top k elements from the 2k elements in the buffer. O(k) expected time, O(k log * k) worst case. */ + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. private void trim() { int left = 0; int right = 2 * k - 1; @@ -271,6 +272,7 @@ public void offerAll(Iterator elements) { *

    The returned list is an unmodifiable copy and will not be affected by further changes to * this {@code TopKSelector}. This method returns in O(k log k) time. */ + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public List topK() { @SuppressWarnings("nullness") // safe because we pass sort() a range that contains real Ts T[] castBuffer = (T[]) buffer; diff --git a/guava/src/com/google/common/collect/CompactHashSet.java b/guava/src/com/google/common/collect/CompactHashSet.java index dc3c76934bd8..75e6bf767cee 100644 --- a/guava/src/com/google/common/collect/CompactHashSet.java +++ b/guava/src/com/google/common/collect/CompactHashSet.java @@ -108,6 +108,7 @@ class CompactHashSet extends AbstractSet implemen * @return a new {@code CompactHashSet} containing those elements (minus duplicates) */ @SafeVarargs + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public static CompactHashSet create(E... elements) { CompactHashSet set = createWithExpectedSize(elements.length); Collections.addAll(set, elements); diff --git a/guava/src/com/google/common/collect/CompactLinkedHashSet.java b/guava/src/com/google/common/collect/CompactLinkedHashSet.java index c1d813cdb435..8a9284265261 100644 --- a/guava/src/com/google/common/collect/CompactLinkedHashSet.java +++ b/guava/src/com/google/common/collect/CompactLinkedHashSet.java @@ -81,6 +81,7 @@ class CompactLinkedHashSet extends CompactHashSet * @return a new {@code CompactLinkedHashSet} containing those elements (minus duplicates) */ @SafeVarargs + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public static CompactLinkedHashSet create(E... elements) { CompactLinkedHashSet set = createWithExpectedSize(elements.length); Collections.addAll(set, elements); diff --git a/guava/src/com/google/common/collect/ImmutableSortedMap.java b/guava/src/com/google/common/collect/ImmutableSortedMap.java index 5ff26fa65a32..93731eaa62ad 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -502,6 +502,7 @@ private static ImmutableSortedMap fromEntries( return fromEntries(comparator, sameComparator, entryArray, entryArray.length); } + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. private static ImmutableSortedMap fromEntries( final Comparator comparator, boolean sameComparator, diff --git a/guava/src/com/google/common/collect/Lists.java b/guava/src/com/google/common/collect/Lists.java index a9c99e27afb9..ae057e0d3d57 100644 --- a/guava/src/com/google/common/collect/Lists.java +++ b/guava/src/com/google/common/collect/Lists.java @@ -101,6 +101,7 @@ private Lists() {} */ @SafeVarargs @GwtCompatible(serializable = true) + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public static ArrayList newArrayList(E... elements) { checkNotNull(elements); // for GWT // Avoid integer overflow when a large array is passed in diff --git a/guava/src/com/google/common/collect/Ordering.java b/guava/src/com/google/common/collect/Ordering.java index cca04f6e7ae5..b1d76a06435d 100644 --- a/guava/src/com/google/common/collect/Ordering.java +++ b/guava/src/com/google/common/collect/Ordering.java @@ -746,6 +746,7 @@ public E max( * @throws IllegalArgumentException if {@code k} is negative * @since 8.0 */ + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public List leastOf(Iterable iterable, int k) { if (iterable instanceof Collection) { Collection collection = (Collection) iterable; @@ -862,6 +863,7 @@ public List greatestOf(Iterator iterator, int k) { * calling {@link Collections#sort(List)}. */ // TODO(kevinb): rerun benchmarks including new options + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public List sortedCopy(Iterable elements) { @SuppressWarnings("unchecked") // does not escape, and contains only E's E[] array = (E[]) Iterables.toArray(elements); diff --git a/guava/src/com/google/common/collect/Sets.java b/guava/src/com/google/common/collect/Sets.java index c38181001991..49df281f2774 100644 --- a/guava/src/com/google/common/collect/Sets.java +++ b/guava/src/com/google/common/collect/Sets.java @@ -196,6 +196,7 @@ public static > EnumSet newEnumSet( * asList}{@code (...))}, or for creating an empty set then calling {@link Collections#addAll}. * This method is not actually very useful and will likely be deprecated in the future. */ + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public static HashSet newHashSet(E... elements) { HashSet set = newHashSetWithExpectedSize(elements.length); Collections.addAll(set, elements); diff --git a/guava/src/com/google/common/collect/TopKSelector.java b/guava/src/com/google/common/collect/TopKSelector.java index f819f84a3537..7fa214f3b578 100644 --- a/guava/src/com/google/common/collect/TopKSelector.java +++ b/guava/src/com/google/common/collect/TopKSelector.java @@ -160,6 +160,7 @@ public void offer(@ParametricNullness T elem) { * Quickselects the top k elements from the 2k elements in the buffer. O(k) expected time, O(k log * k) worst case. */ + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. private void trim() { int left = 0; int right = 2 * k - 1; @@ -272,6 +273,7 @@ public void offerAll(Iterator elements) { *

    The returned list is an unmodifiable copy and will not be affected by further changes to * this {@code TopKSelector}. This method returns in O(k log k) time. */ + @SuppressWarnings("nullness") // TODO: b/316358623 - Remove after checker fix. public List topK() { @SuppressWarnings("nullness") // safe because we pass sort() a range that contains real Ts T[] castBuffer = (T[]) buffer; From f346bbb6a704bc365be576146c040abc296d15da Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 6 Feb 2024 06:37:26 -0800 Subject: [PATCH 125/216] Expose `FakeTicker` `Duration` methods to Android users. This makes another good trial balloon for https://github.com/google/guava/issues/6567 because it's in our testlib, where the stakes are lower. (Granted, the testlib is also much less commonly used, so we won't learn a lot from this trial.) RELNOTES=`testing`: Exposed `FakeTicker` `Duration` methods to Android users. PiperOrigin-RevId: 604629836 --- .../com/google/common/testing/FakeTicker.java | 39 +++++++++++++++++++ .../google/common/testing/FakeTickerTest.java | 16 ++++++++ .../com/google/common/testing/FakeTicker.java | 7 +++- .../google/common/testing/FakeTickerTest.java | 7 +++- 4 files changed, 65 insertions(+), 4 deletions(-) diff --git a/android/guava-testlib/src/com/google/common/testing/FakeTicker.java b/android/guava-testlib/src/com/google/common/testing/FakeTicker.java index 8c0e0026e0ce..3fe3f96c6ab2 100644 --- a/android/guava-testlib/src/com/google/common/testing/FakeTicker.java +++ b/android/guava-testlib/src/com/google/common/testing/FakeTicker.java @@ -18,9 +18,13 @@ import static com.google.common.base.Preconditions.checkArgument; +import com.google.common.annotations.Beta; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Ticker; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import java.time.Duration; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; @@ -57,6 +61,22 @@ public FakeTicker advance(long nanoseconds) { return this; } + /** + * Advances the ticker value by {@code duration}. + * + * @since NEXT (but since 28.0 in the JRE flavor) + */ + @GwtIncompatible + @J2ktIncompatible + @CanIgnoreReturnValue + @SuppressWarnings("Java7ApiChecker") // guava-android can rely on library desugaring now. + @IgnoreJRERequirement // TODO: b/288085449 - Remove this once we use library-desugaring scents. + @Beta // TODO: b/288085449 - Remove @Beta after we're sure that Java 8 APIs are safe for Android + public FakeTicker advance(Duration duration) { + return advance(duration.toNanos()); + } + /** * Sets the increment applied to the ticker whenever it is queried. * @@ -71,6 +91,25 @@ public FakeTicker setAutoIncrementStep(long autoIncrementStep, TimeUnit timeUnit return this; } + /** + * Sets the increment applied to the ticker whenever it is queried. + * + *

    The default behavior is to auto increment by zero. i.e: The ticker is left unchanged when + * queried. + * + * @since NEXT (but since 28.0 in the JRE flavor) + */ + @GwtIncompatible + @J2ktIncompatible + @CanIgnoreReturnValue + @SuppressWarnings("Java7ApiChecker") // guava-android can rely on library desugaring now. + @IgnoreJRERequirement // TODO: b/288085449 - Remove this once we use library-desugaring scents. + @Beta // TODO: b/288085449 - Remove @Beta after we're sure that Java 8 APIs are safe for Android + public FakeTicker setAutoIncrementStep(Duration autoIncrementStep) { + return setAutoIncrementStep(autoIncrementStep.toNanos(), TimeUnit.NANOSECONDS); + } + @Override public long read() { return nanos.getAndAdd(autoIncrementStepNanos); diff --git a/android/guava-testlib/test/com/google/common/testing/FakeTickerTest.java b/android/guava-testlib/test/com/google/common/testing/FakeTickerTest.java index 5810524d071f..366dcb4ccead 100644 --- a/android/guava-testlib/test/com/google/common/testing/FakeTickerTest.java +++ b/android/guava-testlib/test/com/google/common/testing/FakeTickerTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import java.time.Duration; import java.util.EnumSet; import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; @@ -42,6 +43,9 @@ public void testNullPointerExceptions() { tester.testAllPublicInstanceMethods(new FakeTicker()); } + @GwtIncompatible // java.time.Duration + @SuppressWarnings("Java7ApiChecker") // guava-android can rely on library desugaring now. + @IgnoreJRERequirement // TODO: b/288085449 - Remove this once we use library-desugaring scents. public void testAdvance() { FakeTicker ticker = new FakeTicker(); assertEquals(0, ticker.read()); @@ -49,6 +53,8 @@ public void testAdvance() { assertEquals(10, ticker.read()); ticker.advance(1, TimeUnit.MILLISECONDS); assertEquals(1000010L, ticker.read()); + ticker.advance(Duration.ofMillis(1)); + assertEquals(2000010L, ticker.read()); } public void testAutoIncrementStep_returnsSameInstance() { @@ -77,6 +83,16 @@ public void testAutoIncrementStep_seconds() { assertEquals(6000000000L, ticker.read()); } + @GwtIncompatible // java.time.Duration + @SuppressWarnings("Java7ApiChecker") // guava-android can rely on library desugaring now. + @IgnoreJRERequirement // TODO: b/288085449 - Remove this once we use library-desugaring scents. + public void testAutoIncrementStep_duration() { + FakeTicker ticker = new FakeTicker().setAutoIncrementStep(Duration.ofMillis(1)); + assertEquals(0, ticker.read()); + assertEquals(1000000, ticker.read()); + assertEquals(2000000, ticker.read()); + } + public void testAutoIncrementStep_resetToZero() { FakeTicker ticker = new FakeTicker().setAutoIncrementStep(10, TimeUnit.NANOSECONDS); assertEquals(0, ticker.read()); diff --git a/guava-testlib/src/com/google/common/testing/FakeTicker.java b/guava-testlib/src/com/google/common/testing/FakeTicker.java index 2c3e798ff83c..5849057da2ca 100644 --- a/guava-testlib/src/com/google/common/testing/FakeTicker.java +++ b/guava-testlib/src/com/google/common/testing/FakeTicker.java @@ -23,6 +23,7 @@ import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Ticker; import com.google.errorprone.annotations.CanIgnoreReturnValue; +import java.time.Duration; import java.util.concurrent.TimeUnit; import java.util.concurrent.atomic.AtomicLong; @@ -67,7 +68,8 @@ public FakeTicker advance(long nanoseconds) { @GwtIncompatible @J2ktIncompatible @CanIgnoreReturnValue - public FakeTicker advance(java.time.Duration duration) { + @SuppressWarnings("Java7ApiChecker") // guava-android can rely on library desugaring now. + public FakeTicker advance(Duration duration) { return advance(duration.toNanos()); } @@ -96,7 +98,8 @@ public FakeTicker setAutoIncrementStep(long autoIncrementStep, TimeUnit timeUnit @GwtIncompatible @J2ktIncompatible @CanIgnoreReturnValue - public FakeTicker setAutoIncrementStep(java.time.Duration autoIncrementStep) { + @SuppressWarnings("Java7ApiChecker") // guava-android can rely on library desugaring now. + public FakeTicker setAutoIncrementStep(Duration autoIncrementStep) { return setAutoIncrementStep(autoIncrementStep.toNanos(), TimeUnit.NANOSECONDS); } diff --git a/guava-testlib/test/com/google/common/testing/FakeTickerTest.java b/guava-testlib/test/com/google/common/testing/FakeTickerTest.java index 5120119db1bc..2d0da3098aa2 100644 --- a/guava-testlib/test/com/google/common/testing/FakeTickerTest.java +++ b/guava-testlib/test/com/google/common/testing/FakeTickerTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import java.time.Duration; import java.util.EnumSet; import java.util.concurrent.Callable; import java.util.concurrent.CountDownLatch; @@ -43,6 +44,7 @@ public void testNullPointerExceptions() { } @GwtIncompatible // java.time.Duration + @SuppressWarnings("Java7ApiChecker") // guava-android can rely on library desugaring now. public void testAdvance() { FakeTicker ticker = new FakeTicker(); assertEquals(0, ticker.read()); @@ -50,7 +52,7 @@ public void testAdvance() { assertEquals(10, ticker.read()); ticker.advance(1, TimeUnit.MILLISECONDS); assertEquals(1000010L, ticker.read()); - ticker.advance(java.time.Duration.ofMillis(1)); + ticker.advance(Duration.ofMillis(1)); assertEquals(2000010L, ticker.read()); } @@ -81,8 +83,9 @@ public void testAutoIncrementStep_seconds() { } @GwtIncompatible // java.time.Duration + @SuppressWarnings("Java7ApiChecker") // guava-android can rely on library desugaring now. public void testAutoIncrementStep_duration() { - FakeTicker ticker = new FakeTicker().setAutoIncrementStep(java.time.Duration.ofMillis(1)); + FakeTicker ticker = new FakeTicker().setAutoIncrementStep(Duration.ofMillis(1)); assertEquals(0, ticker.read()); assertEquals(1000000, ticker.read()); assertEquals(2000000, ticker.read()); From 06ba460973e5316a6f35edeaa25042a3eb9e19ab Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Tue, 6 Feb 2024 08:08:00 -0800 Subject: [PATCH 126/216] Remove `@J2ktIncompatible` from passing `primitives` tests Some were only disabled because they were disabled for J2cl before. Some long-related tests may be working now due to a fix in J2kt a while back. RELNOTES=n/a PiperOrigin-RevId: 604650334 --- .../test/com/google/common/primitives/BytesTest.java | 2 +- .../test/com/google/common/primitives/CharsTest.java | 5 ----- .../test/com/google/common/primitives/DoublesTest.java | 6 +----- .../test/com/google/common/primitives/FloatsTest.java | 5 +---- .../test/com/google/common/primitives/IntsTest.java | 4 +--- .../test/com/google/common/primitives/LongsTest.java | 3 +-- .../test/com/google/common/primitives/ShortsTest.java | 9 +-------- .../com/google/common/primitives/UnsignedIntsTest.java | 1 - .../com/google/common/primitives/UnsignedLongTest.java | 8 +------- .../test/com/google/common/primitives/BytesTest.java | 2 +- .../test/com/google/common/primitives/CharsTest.java | 5 ----- .../test/com/google/common/primitives/DoublesTest.java | 6 +----- .../test/com/google/common/primitives/FloatsTest.java | 5 +---- .../test/com/google/common/primitives/IntsTest.java | 4 +--- .../test/com/google/common/primitives/LongsTest.java | 3 +-- .../test/com/google/common/primitives/ShortsTest.java | 9 +-------- .../com/google/common/primitives/UnsignedIntsTest.java | 1 - .../com/google/common/primitives/UnsignedLongTest.java | 8 +------- 18 files changed, 14 insertions(+), 72 deletions(-) diff --git a/android/guava-tests/test/com/google/common/primitives/BytesTest.java b/android/guava-tests/test/com/google/common/primitives/BytesTest.java index 55302d7bc173..59b5cded15d1 100644 --- a/android/guava-tests/test/com/google/common/primitives/BytesTest.java +++ b/android/guava-tests/test/com/google/common/primitives/BytesTest.java @@ -211,7 +211,7 @@ public void testToArray_withConversion() { assertThat(Bytes.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // TODO(b/278877942): Enable + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { byte[] array = {(byte) 0, (byte) 1}; List list = Bytes.asList(array); diff --git a/android/guava-tests/test/com/google/common/primitives/CharsTest.java b/android/guava-tests/test/com/google/common/primitives/CharsTest.java index 839ebb8dcf44..7c0739c457da 100644 --- a/android/guava-tests/test/com/google/common/primitives/CharsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/CharsTest.java @@ -223,14 +223,12 @@ public void testConcat() { .isEqualTo(new char[] {(char) 1, (char) 2, (char) 3, (char) 4}); } - @J2ktIncompatible @GwtIncompatible // Chars.fromByteArray public void testFromByteArray() { assertThat(Chars.fromByteArray(new byte[] {0x23, 0x45, (byte) 0xDC})).isEqualTo('\u2345'); assertThat(Chars.fromByteArray(new byte[] {(byte) 0xFE, (byte) 0xDC})).isEqualTo('\uFEDC'); } - @J2ktIncompatible @GwtIncompatible // Chars.fromByteArray public void testFromByteArrayFails() { try { @@ -240,14 +238,12 @@ public void testFromByteArrayFails() { } } - @J2ktIncompatible @GwtIncompatible // Chars.fromBytes public void testFromBytes() { assertThat(Chars.fromBytes((byte) 0x23, (byte) 0x45)).isEqualTo('\u2345'); assertThat(Chars.fromBytes((byte) 0xFE, (byte) 0xDC)).isEqualTo('\uFEDC'); } - @J2ktIncompatible @GwtIncompatible // Chars.fromByteArray, Chars.toByteArray public void testByteArrayRoundTrips() { char c = 0; @@ -275,7 +271,6 @@ public void testByteArrayRoundTrips() { assertThat(c).isEqualTo((char) 0); // sanity check } - @J2ktIncompatible @GwtIncompatible // Chars.fromByteArray, Chars.toByteArray public void testByteArrayRoundTripsFails() { try { diff --git a/android/guava-tests/test/com/google/common/primitives/DoublesTest.java b/android/guava-tests/test/com/google/common/primitives/DoublesTest.java index 2483f42bce87..8d135d053b91 100644 --- a/android/guava-tests/test/com/google/common/primitives/DoublesTest.java +++ b/android/guava-tests/test/com/google/common/primitives/DoublesTest.java @@ -207,7 +207,6 @@ public void testLastIndexOf() { assertThat(Doubles.lastIndexOf(new double[] {NaN, 5.0}, NaN)).isEqualTo(-1); } - @J2ktIncompatible @GwtIncompatible public void testMax_noArgs() { try { @@ -231,7 +230,6 @@ public void testMax() { assertThat(Double.isNaN(Doubles.max(VALUES))).isTrue(); } - @J2ktIncompatible @GwtIncompatible public void testMin_noArgs() { try { @@ -307,7 +305,6 @@ public void testEnsureCapacity_fail() { } } - @J2ktIncompatible @GwtIncompatible // Double.toString returns different value in GWT. public void testJoin() { assertThat(Doubles.join(",", EMPTY)).isEmpty(); @@ -577,7 +574,7 @@ public void testToArray_withConversion() { assertThat(Doubles.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // b/285319375 + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { double[] array = {(double) 0, (double) 1}; List list = Doubles.asList(array); @@ -783,7 +780,6 @@ public void testStringConverter_nullConversions() { assertThat(Doubles.stringConverter().reverse().convert(null)).isNull(); } - @J2ktIncompatible @GwtIncompatible // Double.toString returns different value in GWT. public void testStringConverter_reverse() { Converter converter = Doubles.stringConverter(); diff --git a/android/guava-tests/test/com/google/common/primitives/FloatsTest.java b/android/guava-tests/test/com/google/common/primitives/FloatsTest.java index 4a1e8fbc8e55..79ed839c569e 100644 --- a/android/guava-tests/test/com/google/common/primitives/FloatsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/FloatsTest.java @@ -197,7 +197,6 @@ public void testLastIndexOf() { assertThat(Floats.lastIndexOf(new float[] {NaN, 5f}, NaN)).isEqualTo(-1); } - @J2ktIncompatible @GwtIncompatible public void testMax_noArgs() { try { @@ -220,7 +219,6 @@ public void testMax() { assertThat(Float.isNaN(Floats.max(VALUES))).isTrue(); } - @J2ktIncompatible @GwtIncompatible public void testMin_noArgs() { try { @@ -293,7 +291,6 @@ public void testEnsureCapacity_fail() { } } - @J2ktIncompatible @GwtIncompatible // Float.toString returns different value in GWT. public void testJoin() { assertThat(Floats.join(",", EMPTY)).isEmpty(); @@ -556,7 +553,7 @@ public void testToArray_withConversion() { assertThat(Floats.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // b/285319375 + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { float[] array = {(float) 0, (float) 1}; List list = Floats.asList(array); diff --git a/android/guava-tests/test/com/google/common/primitives/IntsTest.java b/android/guava-tests/test/com/google/common/primitives/IntsTest.java index 1a60b7f0ee93..85fb6b07e954 100644 --- a/android/guava-tests/test/com/google/common/primitives/IntsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/IntsTest.java @@ -166,7 +166,6 @@ public void testLastIndexOf() { .isEqualTo(3); } - @J2ktIncompatible @GwtIncompatible public void testMax_noArgs() { try { @@ -183,7 +182,6 @@ public void testMax() { .isEqualTo((int) 9); } - @J2ktIncompatible @GwtIncompatible public void testMin_noArgs() { try { @@ -539,7 +537,7 @@ public void testToArray_withConversion() { assertThat(Ints.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // b/285319375 + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { int[] array = {(int) 0, (int) 1}; List list = Ints.asList(array); diff --git a/android/guava-tests/test/com/google/common/primitives/LongsTest.java b/android/guava-tests/test/com/google/common/primitives/LongsTest.java index 83363c41144c..0875b5d566a2 100644 --- a/android/guava-tests/test/com/google/common/primitives/LongsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/LongsTest.java @@ -53,7 +53,6 @@ public class LongsTest extends TestCase { private static final long[] VALUES = {MIN_VALUE, (long) -1, (long) 0, (long) 1, MAX_VALUE}; - @J2ktIncompatible @GwtIncompatible // Long.hashCode returns different values in GWT. public void testHashCode() { for (long value : VALUES) { @@ -581,7 +580,7 @@ public void testToArray_withConversion() { assertThat(Longs.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // b/285319375 + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { long[] array = {(long) 0, (long) 1}; List list = Longs.asList(array); diff --git a/android/guava-tests/test/com/google/common/primitives/ShortsTest.java b/android/guava-tests/test/com/google/common/primitives/ShortsTest.java index 26eb04779374..18430e307016 100644 --- a/android/guava-tests/test/com/google/common/primitives/ShortsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/ShortsTest.java @@ -184,7 +184,6 @@ public void testLastIndexOf() { .isEqualTo(3); } - @J2ktIncompatible @GwtIncompatible public void testMax_noArgs() { try { @@ -202,7 +201,6 @@ public void testMax() { .isEqualTo((short) 9); } - @J2ktIncompatible @GwtIncompatible public void testMin_noArgs() { try { @@ -246,14 +244,12 @@ public void testConcat() { .isEqualTo(new short[] {(short) 1, (short) 2, (short) 3, (short) 4}); } - @J2ktIncompatible @GwtIncompatible // Shorts.toByteArray public void testToByteArray() { assertThat(Shorts.toByteArray((short) 0x2345)).isEqualTo(new byte[] {0x23, 0x45}); assertThat(Shorts.toByteArray((short) 0xFEDC)).isEqualTo(new byte[] {(byte) 0xFE, (byte) 0xDC}); } - @J2ktIncompatible @GwtIncompatible // Shorts.fromByteArray public void testFromByteArray() { assertThat(Shorts.fromByteArray(new byte[] {0x23, 0x45})).isEqualTo((short) 0x2345); @@ -261,7 +257,6 @@ public void testFromByteArray() { .isEqualTo((short) 0xFEDC); } - @J2ktIncompatible @GwtIncompatible // Shorts.fromByteArray public void testFromByteArrayFails() { try { @@ -271,14 +266,12 @@ public void testFromByteArrayFails() { } } - @J2ktIncompatible @GwtIncompatible // Shorts.fromBytes public void testFromBytes() { assertThat(Shorts.fromBytes((byte) 0x23, (byte) 0x45)).isEqualTo((short) 0x2345); assertThat(Shorts.fromBytes((byte) 0xFE, (byte) 0xDC)).isEqualTo((short) 0xFEDC); } - @J2ktIncompatible @GwtIncompatible // Shorts.fromByteArray, Shorts.toByteArray public void testByteArrayRoundTrips() { Random r = new Random(5); @@ -569,7 +562,7 @@ public void testToArray_withConversion() { assertThat(Shorts.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // b/285319375 + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { short[] array = {(short) 0, (short) 1}; List list = Shorts.asList(array); diff --git a/android/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java b/android/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java index d9c151fb4e94..216b6867b466 100644 --- a/android/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java @@ -246,7 +246,6 @@ public void testRemainder() { } } - @J2ktIncompatible @GwtIncompatible // Too slow in GWT (~3min fully optimized) public void testDivideRemainderEuclideanProperty() { // Use a seed so that the test is deterministic: diff --git a/android/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java b/android/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java index 99b9a02f2a16..1918cc032529 100644 --- a/android/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java +++ b/android/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java @@ -103,7 +103,7 @@ public void testValueOfLong() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt + public void testValueOfBigInteger() { BigInteger min = BigInteger.ZERO; BigInteger max = UnsignedLong.MAX_VALUE.bigIntegerValue(); @@ -125,7 +125,6 @@ public void testToString() { } } - @J2ktIncompatible @GwtIncompatible // too slow public void testToStringRadix() { for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) { @@ -167,7 +166,6 @@ public void testDoubleValue() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt public void testPlus() { for (long a : TEST_LONGS) { for (long b : TEST_LONGS) { @@ -180,7 +178,6 @@ public void testPlus() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt public void testMinus() { for (long a : TEST_LONGS) { for (long b : TEST_LONGS) { @@ -194,7 +191,6 @@ public void testMinus() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt public void testTimes() { for (long a : TEST_LONGS) { for (long b : TEST_LONGS) { @@ -208,7 +204,6 @@ public void testTimes() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt public void testDividedBy() { for (long a : TEST_LONGS) { for (long b : TEST_LONGS) { @@ -270,7 +265,6 @@ public void testCompare() { } } - @J2ktIncompatible @GwtIncompatible // too slow public void testEquals() { EqualsTester equalsTester = new EqualsTester(); diff --git a/guava-tests/test/com/google/common/primitives/BytesTest.java b/guava-tests/test/com/google/common/primitives/BytesTest.java index 55302d7bc173..59b5cded15d1 100644 --- a/guava-tests/test/com/google/common/primitives/BytesTest.java +++ b/guava-tests/test/com/google/common/primitives/BytesTest.java @@ -211,7 +211,7 @@ public void testToArray_withConversion() { assertThat(Bytes.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // TODO(b/278877942): Enable + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { byte[] array = {(byte) 0, (byte) 1}; List list = Bytes.asList(array); diff --git a/guava-tests/test/com/google/common/primitives/CharsTest.java b/guava-tests/test/com/google/common/primitives/CharsTest.java index 839ebb8dcf44..7c0739c457da 100644 --- a/guava-tests/test/com/google/common/primitives/CharsTest.java +++ b/guava-tests/test/com/google/common/primitives/CharsTest.java @@ -223,14 +223,12 @@ public void testConcat() { .isEqualTo(new char[] {(char) 1, (char) 2, (char) 3, (char) 4}); } - @J2ktIncompatible @GwtIncompatible // Chars.fromByteArray public void testFromByteArray() { assertThat(Chars.fromByteArray(new byte[] {0x23, 0x45, (byte) 0xDC})).isEqualTo('\u2345'); assertThat(Chars.fromByteArray(new byte[] {(byte) 0xFE, (byte) 0xDC})).isEqualTo('\uFEDC'); } - @J2ktIncompatible @GwtIncompatible // Chars.fromByteArray public void testFromByteArrayFails() { try { @@ -240,14 +238,12 @@ public void testFromByteArrayFails() { } } - @J2ktIncompatible @GwtIncompatible // Chars.fromBytes public void testFromBytes() { assertThat(Chars.fromBytes((byte) 0x23, (byte) 0x45)).isEqualTo('\u2345'); assertThat(Chars.fromBytes((byte) 0xFE, (byte) 0xDC)).isEqualTo('\uFEDC'); } - @J2ktIncompatible @GwtIncompatible // Chars.fromByteArray, Chars.toByteArray public void testByteArrayRoundTrips() { char c = 0; @@ -275,7 +271,6 @@ public void testByteArrayRoundTrips() { assertThat(c).isEqualTo((char) 0); // sanity check } - @J2ktIncompatible @GwtIncompatible // Chars.fromByteArray, Chars.toByteArray public void testByteArrayRoundTripsFails() { try { diff --git a/guava-tests/test/com/google/common/primitives/DoublesTest.java b/guava-tests/test/com/google/common/primitives/DoublesTest.java index 2483f42bce87..8d135d053b91 100644 --- a/guava-tests/test/com/google/common/primitives/DoublesTest.java +++ b/guava-tests/test/com/google/common/primitives/DoublesTest.java @@ -207,7 +207,6 @@ public void testLastIndexOf() { assertThat(Doubles.lastIndexOf(new double[] {NaN, 5.0}, NaN)).isEqualTo(-1); } - @J2ktIncompatible @GwtIncompatible public void testMax_noArgs() { try { @@ -231,7 +230,6 @@ public void testMax() { assertThat(Double.isNaN(Doubles.max(VALUES))).isTrue(); } - @J2ktIncompatible @GwtIncompatible public void testMin_noArgs() { try { @@ -307,7 +305,6 @@ public void testEnsureCapacity_fail() { } } - @J2ktIncompatible @GwtIncompatible // Double.toString returns different value in GWT. public void testJoin() { assertThat(Doubles.join(",", EMPTY)).isEmpty(); @@ -577,7 +574,7 @@ public void testToArray_withConversion() { assertThat(Doubles.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // b/285319375 + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { double[] array = {(double) 0, (double) 1}; List list = Doubles.asList(array); @@ -783,7 +780,6 @@ public void testStringConverter_nullConversions() { assertThat(Doubles.stringConverter().reverse().convert(null)).isNull(); } - @J2ktIncompatible @GwtIncompatible // Double.toString returns different value in GWT. public void testStringConverter_reverse() { Converter converter = Doubles.stringConverter(); diff --git a/guava-tests/test/com/google/common/primitives/FloatsTest.java b/guava-tests/test/com/google/common/primitives/FloatsTest.java index 4a1e8fbc8e55..79ed839c569e 100644 --- a/guava-tests/test/com/google/common/primitives/FloatsTest.java +++ b/guava-tests/test/com/google/common/primitives/FloatsTest.java @@ -197,7 +197,6 @@ public void testLastIndexOf() { assertThat(Floats.lastIndexOf(new float[] {NaN, 5f}, NaN)).isEqualTo(-1); } - @J2ktIncompatible @GwtIncompatible public void testMax_noArgs() { try { @@ -220,7 +219,6 @@ public void testMax() { assertThat(Float.isNaN(Floats.max(VALUES))).isTrue(); } - @J2ktIncompatible @GwtIncompatible public void testMin_noArgs() { try { @@ -293,7 +291,6 @@ public void testEnsureCapacity_fail() { } } - @J2ktIncompatible @GwtIncompatible // Float.toString returns different value in GWT. public void testJoin() { assertThat(Floats.join(",", EMPTY)).isEmpty(); @@ -556,7 +553,7 @@ public void testToArray_withConversion() { assertThat(Floats.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // b/285319375 + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { float[] array = {(float) 0, (float) 1}; List list = Floats.asList(array); diff --git a/guava-tests/test/com/google/common/primitives/IntsTest.java b/guava-tests/test/com/google/common/primitives/IntsTest.java index 1a60b7f0ee93..85fb6b07e954 100644 --- a/guava-tests/test/com/google/common/primitives/IntsTest.java +++ b/guava-tests/test/com/google/common/primitives/IntsTest.java @@ -166,7 +166,6 @@ public void testLastIndexOf() { .isEqualTo(3); } - @J2ktIncompatible @GwtIncompatible public void testMax_noArgs() { try { @@ -183,7 +182,6 @@ public void testMax() { .isEqualTo((int) 9); } - @J2ktIncompatible @GwtIncompatible public void testMin_noArgs() { try { @@ -539,7 +537,7 @@ public void testToArray_withConversion() { assertThat(Ints.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // b/285319375 + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { int[] array = {(int) 0, (int) 1}; List list = Ints.asList(array); diff --git a/guava-tests/test/com/google/common/primitives/LongsTest.java b/guava-tests/test/com/google/common/primitives/LongsTest.java index 83363c41144c..0875b5d566a2 100644 --- a/guava-tests/test/com/google/common/primitives/LongsTest.java +++ b/guava-tests/test/com/google/common/primitives/LongsTest.java @@ -53,7 +53,6 @@ public class LongsTest extends TestCase { private static final long[] VALUES = {MIN_VALUE, (long) -1, (long) 0, (long) 1, MAX_VALUE}; - @J2ktIncompatible @GwtIncompatible // Long.hashCode returns different values in GWT. public void testHashCode() { for (long value : VALUES) { @@ -581,7 +580,7 @@ public void testToArray_withConversion() { assertThat(Longs.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // b/285319375 + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { long[] array = {(long) 0, (long) 1}; List list = Longs.asList(array); diff --git a/guava-tests/test/com/google/common/primitives/ShortsTest.java b/guava-tests/test/com/google/common/primitives/ShortsTest.java index 26eb04779374..18430e307016 100644 --- a/guava-tests/test/com/google/common/primitives/ShortsTest.java +++ b/guava-tests/test/com/google/common/primitives/ShortsTest.java @@ -184,7 +184,6 @@ public void testLastIndexOf() { .isEqualTo(3); } - @J2ktIncompatible @GwtIncompatible public void testMax_noArgs() { try { @@ -202,7 +201,6 @@ public void testMax() { .isEqualTo((short) 9); } - @J2ktIncompatible @GwtIncompatible public void testMin_noArgs() { try { @@ -246,14 +244,12 @@ public void testConcat() { .isEqualTo(new short[] {(short) 1, (short) 2, (short) 3, (short) 4}); } - @J2ktIncompatible @GwtIncompatible // Shorts.toByteArray public void testToByteArray() { assertThat(Shorts.toByteArray((short) 0x2345)).isEqualTo(new byte[] {0x23, 0x45}); assertThat(Shorts.toByteArray((short) 0xFEDC)).isEqualTo(new byte[] {(byte) 0xFE, (byte) 0xDC}); } - @J2ktIncompatible @GwtIncompatible // Shorts.fromByteArray public void testFromByteArray() { assertThat(Shorts.fromByteArray(new byte[] {0x23, 0x45})).isEqualTo((short) 0x2345); @@ -261,7 +257,6 @@ public void testFromByteArray() { .isEqualTo((short) 0xFEDC); } - @J2ktIncompatible @GwtIncompatible // Shorts.fromByteArray public void testFromByteArrayFails() { try { @@ -271,14 +266,12 @@ public void testFromByteArrayFails() { } } - @J2ktIncompatible @GwtIncompatible // Shorts.fromBytes public void testFromBytes() { assertThat(Shorts.fromBytes((byte) 0x23, (byte) 0x45)).isEqualTo((short) 0x2345); assertThat(Shorts.fromBytes((byte) 0xFE, (byte) 0xDC)).isEqualTo((short) 0xFEDC); } - @J2ktIncompatible @GwtIncompatible // Shorts.fromByteArray, Shorts.toByteArray public void testByteArrayRoundTrips() { Random r = new Random(5); @@ -569,7 +562,7 @@ public void testToArray_withConversion() { assertThat(Shorts.toArray(doubles)).isEqualTo(array); } - @J2ktIncompatible // b/285319375 + @J2ktIncompatible // b/239034072: Kotlin varargs copy parameter arrays. public void testAsList_isAView() { short[] array = {(short) 0, (short) 1}; List list = Shorts.asList(array); diff --git a/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java b/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java index d9c151fb4e94..216b6867b466 100644 --- a/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java +++ b/guava-tests/test/com/google/common/primitives/UnsignedIntsTest.java @@ -246,7 +246,6 @@ public void testRemainder() { } } - @J2ktIncompatible @GwtIncompatible // Too slow in GWT (~3min fully optimized) public void testDivideRemainderEuclideanProperty() { // Use a seed so that the test is deterministic: diff --git a/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java b/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java index 99b9a02f2a16..1918cc032529 100644 --- a/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java +++ b/guava-tests/test/com/google/common/primitives/UnsignedLongTest.java @@ -103,7 +103,7 @@ public void testValueOfLong() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt + public void testValueOfBigInteger() { BigInteger min = BigInteger.ZERO; BigInteger max = UnsignedLong.MAX_VALUE.bigIntegerValue(); @@ -125,7 +125,6 @@ public void testToString() { } } - @J2ktIncompatible @GwtIncompatible // too slow public void testToStringRadix() { for (int radix = Character.MIN_RADIX; radix <= Character.MAX_RADIX; radix++) { @@ -167,7 +166,6 @@ public void testDoubleValue() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt public void testPlus() { for (long a : TEST_LONGS) { for (long b : TEST_LONGS) { @@ -180,7 +178,6 @@ public void testPlus() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt public void testMinus() { for (long a : TEST_LONGS) { for (long b : TEST_LONGS) { @@ -194,7 +191,6 @@ public void testMinus() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt public void testTimes() { for (long a : TEST_LONGS) { for (long b : TEST_LONGS) { @@ -208,7 +204,6 @@ public void testTimes() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt public void testDividedBy() { for (long a : TEST_LONGS) { for (long b : TEST_LONGS) { @@ -270,7 +265,6 @@ public void testCompare() { } } - @J2ktIncompatible @GwtIncompatible // too slow public void testEquals() { EqualsTester equalsTester = new EqualsTester(); From f12f918d22288f2f50b8e753560dbee3fb32c052 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 6 Feb 2024 09:43:23 -0800 Subject: [PATCH 127/216] Bump actions/upload-artifact from 4.3.0 to 4.3.1 Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4.3.0 to 4.3.1. - [Release notes](https://github.com/actions/upload-artifact/releases) - [Commits](https://github.com/actions/upload-artifact/compare/26f96dfa697d77e81fd5907df203aa23a56210a8...5d5d22a31266ced268874388b861e4b58bb5c2f3) Fixes #6966 RELNOTES=n/a PiperOrigin-RevId: 604676608 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 03acb3181b77..886fae92bda2 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -59,7 +59,7 @@ jobs: # Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF # format to the repository Actions tab. - name: "Upload artifact" - uses: actions/upload-artifact@26f96dfa697d77e81fd5907df203aa23a56210a8 # v4.3.0 + uses: actions/upload-artifact@5d5d22a31266ced268874388b861e4b58bb5c2f3 # v4.3.1 with: name: SARIF file path: results.sarif From 1bd273ff689ee8d92232bbd61c665df1a6a2f3e4 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 6 Feb 2024 10:31:55 -0800 Subject: [PATCH 128/216] Migrate usages of `Truth8.assertThat` to equivalent usages of `Truth.assertThat`. The `Truth8` methods will be hidden in the future. All callers will use `Truth`. PiperOrigin-RevId: 604692296 --- .../common/collect/FluentIterableTest.java | 7 +- .../common/collect/MoreCollectorsTest.java | 5 +- .../google/common/collect/StreamsTest.java | 99 ++++++++----------- .../google/common/graph/ValueGraphTest.java | 9 +- 4 files changed, 52 insertions(+), 68 deletions(-) diff --git a/guava-tests/test/com/google/common/collect/FluentIterableTest.java b/guava-tests/test/com/google/common/collect/FluentIterableTest.java index e073bae4f321..ce28a472ab7f 100644 --- a/guava-tests/test/com/google/common/collect/FluentIterableTest.java +++ b/guava-tests/test/com/google/common/collect/FluentIterableTest.java @@ -30,7 +30,6 @@ import com.google.common.collect.testing.IteratorFeature; import com.google.common.collect.testing.IteratorTester; import com.google.common.testing.NullPointerTester; -import com.google.common.truth.Truth8; import java.util.ArrayList; import java.util.Collection; import java.util.Collections; @@ -923,9 +922,9 @@ public void testGet_outOfBounds() { * just test that the toArray() contents are as expected. */ public void testStream() { - Truth8.assertThat(FluentIterable.of().stream()).isEmpty(); - Truth8.assertThat(FluentIterable.of("a").stream()).containsExactly("a"); - Truth8.assertThat(FluentIterable.of(1, 2, 3).stream().filter(n -> n > 1)).containsExactly(2, 3); + assertThat(FluentIterable.of().stream()).isEmpty(); + assertThat(FluentIterable.of("a").stream()).containsExactly("a"); + assertThat(FluentIterable.of(1, 2, 3).stream().filter(n -> n > 1)).containsExactly(2, 3); } private static void assertCanIterateAgain(Iterable iterable) { diff --git a/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java b/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java index 8c9ea0da7e2d..282be1a5b207 100644 --- a/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java +++ b/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java @@ -19,7 +19,6 @@ import static com.google.common.truth.Truth.assertThat; import com.google.common.annotations.GwtCompatible; -import com.google.common.truth.Truth8; import java.util.NoSuchElementException; import java.util.stream.Stream; import junit.framework.TestCase; @@ -32,11 +31,11 @@ @GwtCompatible public class MoreCollectorsTest extends TestCase { public void testToOptionalEmpty() { - Truth8.assertThat(Stream.empty().collect(MoreCollectors.toOptional())).isEmpty(); + assertThat(Stream.empty().collect(MoreCollectors.toOptional())).isEmpty(); } public void testToOptionalSingleton() { - Truth8.assertThat(Stream.of(1).collect(MoreCollectors.toOptional())).hasValue(1); + assertThat(Stream.of(1).collect(MoreCollectors.toOptional())).hasValue(1); } public void testToOptionalNull() { diff --git a/guava-tests/test/com/google/common/collect/StreamsTest.java b/guava-tests/test/com/google/common/collect/StreamsTest.java index 2da73a974240..36a409be73ad 100644 --- a/guava-tests/test/com/google/common/collect/StreamsTest.java +++ b/guava-tests/test/com/google/common/collect/StreamsTest.java @@ -16,14 +16,13 @@ import static com.google.common.collect.Streams.findLast; import static com.google.common.collect.Streams.stream; +import static com.google.common.truth.Truth.assertThat; import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; import com.google.common.collect.testing.SpliteratorTester; import com.google.common.primitives.Doubles; import com.google.common.truth.IterableSubject; -import com.google.common.truth.Truth; -import com.google.common.truth.Truth8; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -80,58 +79,57 @@ public void testStream_javaOptional() { } public void testFindLast_refStream() { - Truth8.assertThat(findLast(Stream.of())).isEmpty(); - Truth8.assertThat(findLast(Stream.of("a", "b", "c", "d"))).hasValue("d"); + assertThat(findLast(Stream.of())).isEmpty(); + assertThat(findLast(Stream.of("a", "b", "c", "d"))).hasValue("d"); // test with a large, not-subsized Spliterator List list = IntStream.rangeClosed(0, 10000).boxed().collect(Collectors.toCollection(LinkedList::new)); - Truth8.assertThat(findLast(list.stream())).hasValue(10000); + assertThat(findLast(list.stream())).hasValue(10000); // no way to find out the stream is empty without walking its spliterator - Truth8.assertThat(findLast(list.stream().filter(i -> i < 0))).isEmpty(); + assertThat(findLast(list.stream().filter(i -> i < 0))).isEmpty(); } public void testFindLast_intStream() { - Truth.assertThat(findLast(IntStream.of())).isEqualTo(OptionalInt.empty()); - Truth.assertThat(findLast(IntStream.of(1, 2, 3, 4, 5))).isEqualTo(OptionalInt.of(5)); + assertThat(findLast(IntStream.of())).isEqualTo(OptionalInt.empty()); + assertThat(findLast(IntStream.of(1, 2, 3, 4, 5))).isEqualTo(OptionalInt.of(5)); // test with a large, not-subsized Spliterator List list = IntStream.rangeClosed(0, 10000).boxed().collect(Collectors.toCollection(LinkedList::new)); - Truth.assertThat(findLast(list.stream().mapToInt(i -> i))).isEqualTo(OptionalInt.of(10000)); + assertThat(findLast(list.stream().mapToInt(i -> i))).isEqualTo(OptionalInt.of(10000)); // no way to find out the stream is empty without walking its spliterator - Truth.assertThat(findLast(list.stream().mapToInt(i -> i).filter(i -> i < 0))) + assertThat(findLast(list.stream().mapToInt(i -> i).filter(i -> i < 0))) .isEqualTo(OptionalInt.empty()); } public void testFindLast_longStream() { - Truth.assertThat(findLast(LongStream.of())).isEqualTo(OptionalLong.empty()); - Truth.assertThat(findLast(LongStream.of(1, 2, 3, 4, 5))).isEqualTo(OptionalLong.of(5)); + assertThat(findLast(LongStream.of())).isEqualTo(OptionalLong.empty()); + assertThat(findLast(LongStream.of(1, 2, 3, 4, 5))).isEqualTo(OptionalLong.of(5)); // test with a large, not-subsized Spliterator List list = LongStream.rangeClosed(0, 10000).boxed().collect(Collectors.toCollection(LinkedList::new)); - Truth.assertThat(findLast(list.stream().mapToLong(i -> i))).isEqualTo(OptionalLong.of(10000)); + assertThat(findLast(list.stream().mapToLong(i -> i))).isEqualTo(OptionalLong.of(10000)); // no way to find out the stream is empty without walking its spliterator - Truth.assertThat(findLast(list.stream().mapToLong(i -> i).filter(i -> i < 0))) + assertThat(findLast(list.stream().mapToLong(i -> i).filter(i -> i < 0))) .isEqualTo(OptionalLong.empty()); } public void testFindLast_doubleStream() { - Truth.assertThat(findLast(DoubleStream.of())).isEqualTo(OptionalDouble.empty()); - Truth.assertThat(findLast(DoubleStream.of(1, 2, 3, 4, 5))).isEqualTo(OptionalDouble.of(5)); + assertThat(findLast(DoubleStream.of())).isEqualTo(OptionalDouble.empty()); + assertThat(findLast(DoubleStream.of(1, 2, 3, 4, 5))).isEqualTo(OptionalDouble.of(5)); // test with a large, not-subsized Spliterator List list = LongStream.rangeClosed(0, 10000).boxed().collect(Collectors.toCollection(LinkedList::new)); - Truth.assertThat(findLast(list.stream().mapToDouble(i -> i))) - .isEqualTo(OptionalDouble.of(10000)); + assertThat(findLast(list.stream().mapToDouble(i -> i))).isEqualTo(OptionalDouble.of(10000)); // no way to find out the stream is empty without walking its spliterator - Truth.assertThat(findLast(list.stream().mapToDouble(i -> i).filter(i -> i < 0))) + assertThat(findLast(list.stream().mapToDouble(i -> i).filter(i -> i < 0))) .isEqualTo(OptionalDouble.empty()); } @@ -153,7 +151,7 @@ public void testConcat_refStream_closeIsPropagated() { Streams.concat(Stream.of("a"), streamB, Stream.empty(), Stream.of("c", "d")); assertThat(concatenated).containsExactly("a", "b", "c", "d").inOrder(); concatenated.close(); - Truth.assertThat(closeCountB.get()).isEqualTo(1); + assertThat(closeCountB.get()).isEqualTo(1); } public void testConcat_refStream_closeIsPropagated_Stream_concat() { @@ -165,7 +163,7 @@ public void testConcat_refStream_closeIsPropagated_Stream_concat() { .reduce(Stream.empty(), Stream::concat); assertThat(concatenated).containsExactly("a", "b", "c", "d").inOrder(); concatenated.close(); - Truth.assertThat(closeCountB.get()).isEqualTo(1); + assertThat(closeCountB.get()).isEqualTo(1); } public void testConcat_refStream_closeIsPropagated_Stream_flatMap() { @@ -178,7 +176,7 @@ public void testConcat_refStream_closeIsPropagated_Stream_flatMap() { assertThat(concatenated).containsExactly("a", "b", "c", "d").inOrder(); concatenated.close(); // even without close, see doc for flatMap - Truth.assertThat(closeCountB.get()).isEqualTo(1); + assertThat(closeCountB.get()).isEqualTo(1); } public void testConcat_refStream_closeIsPropagated_exceptionsChained() { @@ -193,8 +191,8 @@ public void testConcat_refStream_closeIsPropagated_exceptionsChained() { } catch (RuntimeException e) { exception = e; } - Truth.assertThat(exception).isEqualTo(exception1); - Truth.assertThat(exception.getSuppressed()) + assertThat(exception).isEqualTo(exception1); + assertThat(exception.getSuppressed()) .asList() .containsExactly(exception2, exception3) .inOrder(); @@ -207,7 +205,7 @@ private static Runnable doThrow(RuntimeException exception) { } public void testConcat_refStream_parallel() { - Truth.assertThat( + assertThat( Streams.concat(Stream.of("a"), Stream.of("b"), Stream.empty(), Stream.of("c", "d")) .parallel() .toArray()) @@ -232,7 +230,7 @@ public void testConcat_longStream() { } public void testConcat_doubleStream() { - assertThat( + assertThatDoubleStream( Streams.concat( DoubleStream.of(1), DoubleStream.of(2), @@ -253,8 +251,8 @@ public void testStream_optionalLong() { } public void testStream_optionalDouble() { - assertThat(stream(OptionalDouble.empty())).isEmpty(); - assertThat(stream(OptionalDouble.of(5.0))).containsExactly(5.0); + assertThatDoubleStream(stream(OptionalDouble.empty())).isEmpty(); + assertThatDoubleStream(stream(OptionalDouble.of(5.0))).containsExactly(5.0); } public void testConcatInfiniteStream() { @@ -276,7 +274,8 @@ public void testConcatInfiniteStream_long() { } public void testConcatInfiniteStream_double() { - assertThat(Streams.concat(DoubleStream.of(1, 2, 3), DoubleStream.generate(() -> 5)).limit(5)) + assertThatDoubleStream( + Streams.concat(DoubleStream.of(1, 2, 3), DoubleStream.generate(() -> 5)).limit(5)) .containsExactly(1., 2., 3., 5., 5.) .inOrder(); } @@ -326,7 +325,7 @@ private void testMapWithIndex_closeIsPropagated(Stream source) { withIndex.close(); - Truth.assertThat(stringsCloseCount.get()).isEqualTo(1); + assertThat(stringsCloseCount.get()).isEqualTo(1); } public void testMapWithIndex_intStream() { @@ -351,7 +350,7 @@ private void testMapWithIndex_intStream_closeIsPropagated(IntStream source) { withIndex.close(); - Truth.assertThat(intStreamCloseCount.get()).isEqualTo(1); + assertThat(intStreamCloseCount.get()).isEqualTo(1); } public void testMapWithIndex_longStream() { @@ -376,7 +375,7 @@ private void testMapWithIndex_longStream_closeIsPropagated(LongStream source) { withIndex.close(); - Truth.assertThat(longStreamCloseCount.get()).isEqualTo(1); + assertThat(longStreamCloseCount.get()).isEqualTo(1); } @GwtIncompatible // TODO(b/38490623): reenable after GWT double-to-string conversion is fixed @@ -403,7 +402,7 @@ private void testMapWithIndex_doubleStream_closeIsPropagated(DoubleStream source withIndex.close(); - Truth.assertThat(doubleStreamCloseCount.get()).isEqualTo(1); + assertThat(doubleStreamCloseCount.get()).isEqualTo(1); } public void testZip() { @@ -422,8 +421,8 @@ public void testZip_closeIsPropagated() { zipped.close(); - Truth.assertThat(lettersCloseCount.get()).isEqualTo(1); - Truth.assertThat(numbersCloseCount.get()).isEqualTo(1); + assertThat(lettersCloseCount.get()).isEqualTo(1); + assertThat(numbersCloseCount.get()).isEqualTo(1); } public void testZipFiniteWithInfinite() { @@ -460,21 +459,21 @@ public void testForEachPair() { List list = new ArrayList<>(); Streams.forEachPair( Stream.of("a", "b", "c"), Stream.of(1, 2, 3), (a, b) -> list.add(a + ":" + b)); - Truth.assertThat(list).containsExactly("a:1", "b:2", "c:3"); + assertThat(list).containsExactly("a:1", "b:2", "c:3"); } public void testForEachPair_differingLengths1() { List list = new ArrayList<>(); Streams.forEachPair( Stream.of("a", "b", "c", "d"), Stream.of(1, 2, 3), (a, b) -> list.add(a + ":" + b)); - Truth.assertThat(list).containsExactly("a:1", "b:2", "c:3"); + assertThat(list).containsExactly("a:1", "b:2", "c:3"); } public void testForEachPair_differingLengths2() { List list = new ArrayList<>(); Streams.forEachPair( Stream.of("a", "b", "c"), Stream.of(1, 2, 3, 4), (a, b) -> list.add(a + ":" + b)); - Truth.assertThat(list).containsExactly("a:1", "b:2", "c:3"); + assertThat(list).containsExactly("a:1", "b:2", "c:3"); } public void testForEachPair_oneEmpty() { @@ -485,7 +484,7 @@ public void testForEachPair_finiteWithInfinite() { List list = new ArrayList<>(); Streams.forEachPair( Stream.of("a", "b", "c"), Stream.iterate(1, i -> i + 1), (a, b) -> list.add(a + ":" + b)); - Truth.assertThat(list).containsExactly("a:1", "b:2", "c:3"); + assertThat(list).containsExactly("a:1", "b:2", "c:3"); } public void testForEachPair_parallel() { @@ -498,26 +497,14 @@ public void testForEachPair_parallel() { streamB, (a, b) -> { count.incrementAndGet(); - Truth.assertThat(a.equals(String.valueOf(b))).isTrue(); + assertThat(a.equals(String.valueOf(b))).isTrue(); }); - Truth.assertThat(count.get()).isEqualTo(100000); + assertThat(count.get()).isEqualTo(100000); // of course, this test doesn't prove that anything actually happened in parallel... } - // TODO(kevinb): switch to importing Truth's assertThat(Stream) if we get that added - private static IterableSubject assertThat(Stream stream) { - return Truth.assertThat(stream.toArray()).asList(); - } - - private static IterableSubject assertThat(IntStream stream) { - return Truth.assertThat(stream.toArray()).asList(); - } - - private static IterableSubject assertThat(LongStream stream) { - return Truth.assertThat(stream.toArray()).asList(); - } - - private static IterableSubject assertThat(DoubleStream stream) { - return Truth.assertThat(Doubles.asList(stream.toArray())); + // TODO(kevinb): switch to importing Truth's assertThat(DoubleStream) if we get that added + private static IterableSubject assertThatDoubleStream(DoubleStream stream) { + return assertThat(Doubles.asList(stream.toArray())); } } diff --git a/guava-tests/test/com/google/common/graph/ValueGraphTest.java b/guava-tests/test/com/google/common/graph/ValueGraphTest.java index 95ff63b091b1..9920eac27844 100644 --- a/guava-tests/test/com/google/common/graph/ValueGraphTest.java +++ b/guava-tests/test/com/google/common/graph/ValueGraphTest.java @@ -23,7 +23,6 @@ import static org.junit.Assert.assertThrows; import com.google.common.collect.ImmutableList; -import com.google.common.truth.Truth8; import java.util.Set; import java.util.concurrent.Callable; import java.util.concurrent.CyclicBarrier; @@ -183,14 +182,14 @@ public void hasEdgeConnecting_undirected_mismatch() { public void edgeValue_directed_correct() { graph = ValueGraphBuilder.directed().build(); graph.putEdgeValue(1, 2, "A"); - Truth8.assertThat(graph.edgeValue(EndpointPair.ordered(1, 2))).hasValue("A"); + assertThat(graph.edgeValue(EndpointPair.ordered(1, 2))).hasValue("A"); } @Test public void edgeValue_directed_backwards() { graph = ValueGraphBuilder.directed().build(); graph.putEdgeValue(1, 2, "A"); - Truth8.assertThat(graph.edgeValue(EndpointPair.ordered(2, 1))).isEmpty(); + assertThat(graph.edgeValue(EndpointPair.ordered(2, 1))).isEmpty(); } @Test @@ -211,14 +210,14 @@ public void edgeValue_directed_mismatch() { public void edgeValue_undirected_correct() { graph = ValueGraphBuilder.undirected().build(); graph.putEdgeValue(1, 2, "A"); - Truth8.assertThat(graph.edgeValue(EndpointPair.unordered(1, 2))).hasValue("A"); + assertThat(graph.edgeValue(EndpointPair.unordered(1, 2))).hasValue("A"); } @Test public void edgeValue_undirected_backwards() { graph = ValueGraphBuilder.undirected().build(); graph.putEdgeValue(1, 2, "A"); - Truth8.assertThat(graph.edgeValue(EndpointPair.unordered(2, 1))).hasValue("A"); + assertThat(graph.edgeValue(EndpointPair.unordered(2, 1))).hasValue("A"); } @Test From 7f4bbf75d6f9ea641dc34ec230f3a65b72be93e6 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Wed, 7 Feb 2024 09:47:59 -0800 Subject: [PATCH 129/216] Enable additional `com.google.common.math` tests on J2kt Some had only been disabled for J2kt to mirror existing GwtIncompatible annotations. Others are now working due to improvements in J2kt Native's JRE emulation since the tests were initially enabled. RELNOTES=n/a PiperOrigin-RevId: 605014151 --- .../common/math/BigIntegerMathTest.java | 29 +--------- .../google/common/math/DoubleMathTest.java | 43 -------------- .../com/google/common/math/IntMathTest.java | 23 -------- .../com/google/common/math/LongMathTest.java | 56 +------------------ .../google/common/math/BigIntegerMath.java | 11 ---- .../com/google/common/math/DoubleMath.java | 11 ---- .../src/com/google/common/math/IntMath.java | 4 -- .../src/com/google/common/math/LongMath.java | 15 ----- .../google/common/math/ToDoubleRounder.java | 2 - .../common/math/BigIntegerMathTest.java | 29 +--------- .../google/common/math/DoubleMathTest.java | 43 -------------- .../com/google/common/math/IntMathTest.java | 23 -------- .../com/google/common/math/LongMathTest.java | 56 +------------------ .../google/common/math/BigIntegerMath.java | 11 ---- .../com/google/common/math/DoubleMath.java | 11 ---- guava/src/com/google/common/math/IntMath.java | 4 -- .../src/com/google/common/math/LongMath.java | 15 ----- .../google/common/math/ToDoubleRounder.java | 2 - 18 files changed, 10 insertions(+), 378 deletions(-) diff --git a/android/guava-tests/test/com/google/common/math/BigIntegerMathTest.java b/android/guava-tests/test/com/google/common/math/BigIntegerMathTest.java index 2bfe3a325174..bc348230dbd7 100644 --- a/android/guava-tests/test/com/google/common/math/BigIntegerMathTest.java +++ b/android/guava-tests/test/com/google/common/math/BigIntegerMathTest.java @@ -113,7 +113,6 @@ public void testFloorPowerOfTwoZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantSqrt2PrecomputedBits() { assertEquals( @@ -217,7 +216,6 @@ public void testLog2HalfEven() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10ZeroAlwaysThrows() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -229,7 +227,6 @@ public void testLog10ZeroAlwaysThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10NegativeAlwaysThrows() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -241,7 +238,6 @@ public void testLog10NegativeAlwaysThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10Floor() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -253,7 +249,6 @@ public void testLog10Floor() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10Ceiling() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -266,7 +261,6 @@ public void testLog10Ceiling() { } // Relies on the correctness of log10(BigInteger, FLOOR). - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10Exact() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -281,7 +275,6 @@ public void testLog10Exact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10HalfUp() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -294,7 +287,6 @@ public void testLog10HalfUp() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10HalfDown() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -308,7 +300,6 @@ public void testLog10HalfDown() { } // Relies on the correctness of log10(BigInteger, {HALF_UP,HALF_DOWN}). - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10HalfEven() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -320,7 +311,6 @@ public void testLog10HalfEven() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10TrivialOnPowerOf10() { BigInteger x = BigInteger.TEN.pow(100); @@ -329,7 +319,6 @@ public void testLog10TrivialOnPowerOf10() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtZeroAlwaysZero() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -337,7 +326,6 @@ public void testSqrtZeroAlwaysZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtNegativeAlwaysThrows() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -349,7 +337,6 @@ public void testSqrtNegativeAlwaysThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtFloor() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -362,7 +349,6 @@ public void testSqrtFloor() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtCeiling() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -376,7 +362,6 @@ public void testSqrtCeiling() { } // Relies on the correctness of sqrt(BigInteger, FLOOR). - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtExact() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -392,7 +377,6 @@ public void testSqrtExact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtHalfUp() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -409,7 +393,6 @@ public void testSqrtHalfUp() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtHalfDown() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -427,7 +410,6 @@ public void testSqrtHalfDown() { } // Relies on the correctness of sqrt(BigInteger, {HALF_UP,HALF_DOWN}). - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtHalfEven() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -439,7 +421,6 @@ public void testSqrtHalfEven() { } } - @J2ktIncompatible @GwtIncompatible // TODO @AndroidIncompatible // slow public void testDivNonZero() { @@ -460,11 +441,11 @@ public void testDivNonZero() { private static final BigInteger BAD_FOR_GINGERBREAD_P = new BigInteger("-9223372036854775808"); private static final BigInteger BAD_FOR_GINGERBREAD_Q = new BigInteger("-4294967296"); - @J2ktIncompatible @GwtIncompatible // TODO @AndroidIncompatible // slow public void testDivNonZeroExact() { - boolean isAndroid = System.getProperty("java.runtime.name").contains("Android"); + String runtimeName = System.getProperty("java.runtime.name"); + boolean isAndroid = runtimeName != null && runtimeName.contains("Android"); for (BigInteger p : NONZERO_BIGINTEGER_CANDIDATES) { for (BigInteger q : NONZERO_BIGINTEGER_CANDIDATES) { if (isAndroid && p.equals(BAD_FOR_ANDROID_P) && q.equals(BAD_FOR_ANDROID_Q)) { @@ -492,7 +473,6 @@ public void testDivNonZeroExact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testZeroDivIsAlwaysZero() { for (BigInteger q : NONZERO_BIGINTEGER_CANDIDATES) { @@ -502,7 +482,6 @@ public void testZeroDivIsAlwaysZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testDivByZeroAlwaysFails() { for (BigInteger p : ALL_BIGINTEGER_CANDIDATES) { @@ -540,7 +519,6 @@ public void testBinomialSmall() { runBinomialTest(0, 30); } - @J2ktIncompatible @GwtIncompatible // too slow public void testBinomialLarge() { runBinomialTest(31, 100); @@ -575,7 +553,7 @@ public void testBinomialOutside() { } @J2ktIncompatible - @GwtIncompatible + @GwtIncompatible // EnumSet.complementOf private static final class RoundToDoubleTester { private final BigInteger input; private final Map expectedValues = new EnumMap<>(RoundingMode.class); @@ -819,7 +797,6 @@ public void testNullPointers() { tester.testAllPublicStaticMethods(BigIntegerMath.class); } - @J2ktIncompatible @GwtIncompatible // String.format private static void failFormat(String template, Object... args) { fail(String.format(template, args)); diff --git a/android/guava-tests/test/com/google/common/math/DoubleMathTest.java b/android/guava-tests/test/com/google/common/math/DoubleMathTest.java index 93de8c716135..08c5fa3967be 100644 --- a/android/guava-tests/test/com/google/common/math/DoubleMathTest.java +++ b/android/guava-tests/test/com/google/common/math/DoubleMathTest.java @@ -80,7 +80,6 @@ public void testConstantsEverySixteenthFactorial() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundIntegralDoubleToInt() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -100,7 +99,6 @@ public void testRoundIntegralDoubleToInt() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundFractionalDoubleToInt() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -123,7 +121,6 @@ public void testRoundFractionalDoubleToInt() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundExactIntegralDoubleToInt() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -141,7 +138,6 @@ public void testRoundExactIntegralDoubleToInt() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundExactFractionalDoubleToIntFails() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -153,7 +149,6 @@ public void testRoundExactFractionalDoubleToIntFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundNaNToIntAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -165,7 +160,6 @@ public void testRoundNaNToIntAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundInfiniteToIntAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -182,7 +176,6 @@ public void testRoundInfiniteToIntAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundIntegralDoubleToLong() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -202,7 +195,6 @@ public void testRoundIntegralDoubleToLong() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundFractionalDoubleToLong() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -222,7 +214,6 @@ public void testRoundFractionalDoubleToLong() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundExactIntegralDoubleToLong() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -241,7 +232,6 @@ public void testRoundExactIntegralDoubleToLong() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundExactFractionalDoubleToLongFails() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -253,7 +243,6 @@ public void testRoundExactFractionalDoubleToLongFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundNaNToLongAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -265,7 +254,6 @@ public void testRoundNaNToLongAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundInfiniteToLongAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -282,7 +270,6 @@ public void testRoundInfiniteToLongAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundIntegralDoubleToBigInteger() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -293,7 +280,6 @@ public void testRoundIntegralDoubleToBigInteger() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundFractionalDoubleToBigInteger() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -304,7 +290,6 @@ public void testRoundFractionalDoubleToBigInteger() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundExactIntegralDoubleToBigInteger() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -313,7 +298,6 @@ public void testRoundExactIntegralDoubleToBigInteger() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundExactFractionalDoubleToBigIntegerFails() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -325,7 +309,6 @@ public void testRoundExactFractionalDoubleToBigIntegerFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundNaNToBigIntegerAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -337,7 +320,6 @@ public void testRoundNaNToBigIntegerAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundInfiniteToBigIntegerAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -354,7 +336,6 @@ public void testRoundInfiniteToBigIntegerAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundLog2Floor() { for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -364,7 +345,6 @@ public void testRoundLog2Floor() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode), StrictMath public void testRoundLog2Ceiling() { for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -375,7 +355,6 @@ public void testRoundLog2Ceiling() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode), StrictMath public void testRoundLog2Down() { for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -392,7 +371,6 @@ public void testRoundLog2Down() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode), StrictMath public void testRoundLog2Up() { for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -409,7 +387,6 @@ public void testRoundLog2Up() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode) public void testRoundLog2Half() { // We don't expect perfect rounding accuracy. @@ -428,7 +405,6 @@ public void testRoundLog2Half() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode) public void testRoundLog2Exact() { for (double x : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -443,7 +419,6 @@ public void testRoundLog2Exact() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode) public void testRoundLog2ThrowsOnZerosInfinitiesAndNaN() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -458,7 +433,6 @@ public void testRoundLog2ThrowsOnZerosInfinitiesAndNaN() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode) public void testRoundLog2ThrowsOnNegative() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -472,7 +446,6 @@ public void testRoundLog2ThrowsOnNegative() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.isPowerOfTwo, DoubleMath.log2(double, RoundingMode), StrictMath public void testIsPowerOfTwoYes() { for (int i = -1074; i <= 1023; i++) { @@ -480,7 +453,6 @@ public void testIsPowerOfTwoYes() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.isPowerOfTwo, DoubleMath.log2(double, RoundingMode), StrictMath public void testIsPowerOfTwo() { for (double x : ALL_DOUBLE_CANDIDATES) { @@ -493,7 +465,6 @@ public void testIsPowerOfTwo() { } } - @J2ktIncompatible @GwtIncompatible // #trueLog2, Math.ulp public void testLog2Accuracy() { for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -526,7 +497,6 @@ public void testLog2NaNInfinity() { assertTrue(Double.isNaN(DoubleMath.log2(Double.NaN))); } - @J2ktIncompatible @GwtIncompatible // StrictMath private strictfp double trueLog2(double d) { double trueLog2 = StrictMath.log(d) / StrictMath.log(2); @@ -545,7 +515,6 @@ private strictfp double trueLog2(double d) { return trueLog2; } - @J2ktIncompatible @GwtIncompatible // DoubleMath.isMathematicalInteger public void testIsMathematicalIntegerIntegral() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -553,7 +522,6 @@ public void testIsMathematicalIntegerIntegral() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.isMathematicalInteger public void testIsMathematicalIntegerFractional() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -561,7 +529,6 @@ public void testIsMathematicalIntegerFractional() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.isMathematicalInteger public void testIsMathematicalIntegerNotFinite() { for (double d : Arrays.asList(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN)) { @@ -569,7 +536,6 @@ public void testIsMathematicalIntegerNotFinite() { } } - @J2ktIncompatible @GwtIncompatible // Math.ulp public void testFactorial() { for (int i = 0; i <= DoubleMath.MAX_FACTORIAL; i++) { @@ -745,7 +711,6 @@ public void testFuzzyCompareBadTolerance() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_doubleVarargs() { assertEquals(-1.375, DoubleMath.mean(1.1, -2.2, 4.4, -8.8), 1.0e-10); @@ -762,21 +727,18 @@ public void testMean_doubleVarargs() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_intVarargs() { assertEquals(-13.75, DoubleMath.mean(11, -22, 44, -88), 1.0e-10); assertEquals(11.0, DoubleMath.mean(11), 1.0e-10); } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_longVarargs() { assertEquals(-13.75, DoubleMath.mean(11L, -22L, 44L, -88L), 1.0e-10); assertEquals(11.0, DoubleMath.mean(11L), 1.0e-10); } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_emptyVarargs() { try { @@ -786,7 +748,6 @@ public void testMean_emptyVarargs() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_doubleIterable() { assertEquals(-1.375, DoubleMath.mean(ImmutableList.of(1.1, -2.2, 4.4, -8.8)), 1.0e-10); @@ -808,7 +769,6 @@ public void testMean_doubleIterable() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_intIterable() { assertEquals(-13.75, DoubleMath.mean(ImmutableList.of(11, -22, 44, -88)), 1.0e-10); @@ -820,7 +780,6 @@ public void testMean_intIterable() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_longIterable() { assertEquals(-13.75, DoubleMath.mean(ImmutableList.of(11L, -22L, 44L, -88L)), 1.0e-10); @@ -832,7 +791,6 @@ public void testMean_longIterable() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_intIterator() { assertEquals(-13.75, DoubleMath.mean(ImmutableList.of(11, -22, 44, -88).iterator()), 1.0e-10); @@ -844,7 +802,6 @@ public void testMean_intIterator() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_longIterator() { assertEquals( diff --git a/android/guava-tests/test/com/google/common/math/IntMathTest.java b/android/guava-tests/test/com/google/common/math/IntMathTest.java index 30588875d3c4..73128e46803f 100644 --- a/android/guava-tests/test/com/google/common/math/IntMathTest.java +++ b/android/guava-tests/test/com/google/common/math/IntMathTest.java @@ -111,7 +111,6 @@ public void testFloorPowerOfTwoZero() { } } - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testConstantMaxPowerOfSqrt2Unsigned() { assertEquals( @@ -120,7 +119,6 @@ public void testConstantMaxPowerOfSqrt2Unsigned() { /*actual=*/ IntMath.MAX_POWER_OF_SQRT2_UNSIGNED); } - @J2ktIncompatible @GwtIncompatible // pow() public void testConstantsPowersOf10() { for (int i = 0; i < IntMath.powersOf10.length - 1; i++) { @@ -128,7 +126,6 @@ public void testConstantsPowersOf10() { } } - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testMaxLog10ForLeadingZeros() { for (int i = 0; i < Integer.SIZE; i++) { @@ -138,7 +135,6 @@ public void testMaxLog10ForLeadingZeros() { } } - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testConstantsHalfPowersOf10() { for (int i = 0; i < IntMath.halfPowersOf10.length; i++) { @@ -165,7 +161,6 @@ public void testConstantsBiggestBinomials() { 2 * IntMath.biggestBinomials.length, IntMath.biggestBinomials.length))); } - @J2ktIncompatible @GwtIncompatible // sqrt public void testPowersSqrtMaxInt() { assertEquals( @@ -186,7 +181,6 @@ public void testLessThanBranchFree() { } } - @J2ktIncompatible @GwtIncompatible // java.math.BigInteger public void testIsPowerOfTwo() { for (int x : ALL_INTEGER_CANDIDATES) { @@ -242,7 +236,6 @@ public void testLog2Exact() { } } - @J2ktIncompatible @GwtIncompatible // log10 public void testLog10ZeroAlwaysThrows() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -254,7 +247,6 @@ public void testLog10ZeroAlwaysThrows() { } } - @J2ktIncompatible @GwtIncompatible // log10 public void testLog10NegativeAlwaysThrows() { for (int x : NEGATIVE_INTEGER_CANDIDATES) { @@ -269,7 +261,6 @@ public void testLog10NegativeAlwaysThrows() { } // Relies on the correctness of BigIntegerMath.log10 for all modes except UNNECESSARY. - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testLog10MatchesBigInteger() { for (int x : POSITIVE_INTEGER_CANDIDATES) { @@ -281,7 +272,6 @@ public void testLog10MatchesBigInteger() { } // Relies on the correctness of log10(int, FLOOR) and of pow(int, int). - @J2ktIncompatible @GwtIncompatible // pow() public void testLog10Exact() { for (int x : POSITIVE_INTEGER_CANDIDATES) { @@ -296,7 +286,6 @@ public void testLog10Exact() { } } - @J2ktIncompatible @GwtIncompatible // log10 public void testLog10TrivialOnPowerOfTen() { int x = 1000000; @@ -306,7 +295,6 @@ public void testLog10TrivialOnPowerOfTen() { } // Simple test to cover sqrt(0) for all types and all modes. - @J2ktIncompatible @GwtIncompatible // sqrt public void testSqrtZeroAlwaysZero() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -314,7 +302,6 @@ public void testSqrtZeroAlwaysZero() { } } - @J2ktIncompatible @GwtIncompatible // sqrt public void testSqrtNegativeAlwaysThrows() { for (int x : NEGATIVE_INTEGER_CANDIDATES) { @@ -329,7 +316,6 @@ public void testSqrtNegativeAlwaysThrows() { } /* Relies on the correctness of BigIntegerMath.sqrt for all modes except UNNECESSARY. */ - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testSqrtMatchesBigInteger() { for (int x : POSITIVE_INTEGER_CANDIDATES) { @@ -343,7 +329,6 @@ public void testSqrtMatchesBigInteger() { } /* Relies on the correctness of sqrt(int, FLOOR). */ - @J2ktIncompatible @GwtIncompatible // sqrt public void testSqrtExactMatchesFloorOrThrows() { for (int x : POSITIVE_INTEGER_CANDIDATES) { @@ -359,7 +344,6 @@ public void testSqrtExactMatchesFloorOrThrows() { } } - @J2ktIncompatible @GwtIncompatible // 2147483646^2 expected=4 public void testPow() { for (int i : ALL_INTEGER_CANDIDATES) { @@ -370,7 +354,6 @@ public void testPow() { } @AndroidIncompatible // slow - @J2ktIncompatible // TODO(b/281519661): Fails 2147483646/-2147483648 expected:<1> but was:<-1> public void testDivNonZero() { for (int p : NONZERO_INTEGER_CANDIDATES) { for (int q : NONZERO_INTEGER_CANDIDATES) { @@ -567,7 +550,6 @@ public void testCheckedPow() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedAdd() { for (int a : ALL_INTEGER_CANDIDATES) { @@ -579,7 +561,6 @@ public void testSaturatedAdd() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedSubtract() { for (int a : ALL_INTEGER_CANDIDATES) { @@ -595,7 +576,6 @@ public void testSaturatedSubtract() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedMultiply() { for (int a : ALL_INTEGER_CANDIDATES) { @@ -610,7 +590,6 @@ public void testSaturatedMultiply() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedPow() { for (int a : ALL_INTEGER_CANDIDATES) { @@ -696,7 +675,6 @@ public void testBinomialNegative() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // java.math.BigInteger public void testMean() { // Odd-sized ranges have an obvious mean @@ -776,7 +754,6 @@ public void testNullPointers() { tester.testAllPublicStaticMethods(IntMath.class); } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrime() { // Defer correctness tests to Long.isPrime diff --git a/android/guava-tests/test/com/google/common/math/LongMathTest.java b/android/guava-tests/test/com/google/common/math/LongMathTest.java index ee6ee1cb824d..25ad1dc325f0 100644 --- a/android/guava-tests/test/com/google/common/math/LongMathTest.java +++ b/android/guava-tests/test/com/google/common/math/LongMathTest.java @@ -55,7 +55,6 @@ public void testMaxSignedPowerOfTwo() { assertFalse(LongMath.isPowerOfTwo(LongMath.MAX_SIGNED_POWER_OF_TWO * 2)); } - @J2ktIncompatible // TODO(b/281519661): expected:<-2147483648> but was:<2147483648> public void testCeilingPowerOfTwo() { for (long x : POSITIVE_LONG_CANDIDATES) { BigInteger expectedResult = BigIntegerMath.ceilingPowerOfTwo(BigInteger.valueOf(x)); @@ -71,7 +70,6 @@ public void testCeilingPowerOfTwo() { } } - @J2ktIncompatible // TODO(b/281519661): expected:<-2147483648> but was:<2147483648> public void testFloorPowerOfTwo() { for (long x : POSITIVE_LONG_CANDIDATES) { BigInteger expectedResult = BigIntegerMath.floorPowerOfTwo(BigInteger.valueOf(x)); @@ -115,7 +113,6 @@ public void testFloorPowerOfTwoZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantMaxPowerOfSqrt2Unsigned() { assertEquals( @@ -124,7 +121,6 @@ public void testConstantMaxPowerOfSqrt2Unsigned() { /*actual=*/ LongMath.MAX_POWER_OF_SQRT2_UNSIGNED); } - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testMaxLog10ForLeadingZeros() { for (int i = 0; i < Long.SIZE; i++) { @@ -134,7 +130,6 @@ public void testMaxLog10ForLeadingZeros() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsPowersOf10() { for (int i = 0; i < LongMath.powersOf10.length; i++) { @@ -147,7 +142,6 @@ public void testConstantsPowersOf10() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsHalfPowersOf10() { for (int i = 0; i < LongMath.halfPowersOf10.length; i++) { @@ -160,7 +154,6 @@ public void testConstantsHalfPowersOf10() { assertTrue(nextBigger.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0); } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsSqrtMaxLong() { assertEquals( @@ -168,7 +161,6 @@ public void testConstantsSqrtMaxLong() { /*actual=*/ LongMath.FLOOR_SQRT_MAX_LONG); } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsFactorials() { long expected = 1; @@ -183,7 +175,6 @@ public void testConstantsFactorials() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsBiggestBinomials() { for (int k = 0; k < LongMath.biggestBinomials.length; k++) { @@ -199,7 +190,6 @@ public void testConstantsBiggestBinomials() { // 2 * k is the smallest value for which we don't replace k with (n-k). } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsBiggestSimpleBinomials() { for (int k = 0; k < LongMath.biggestSimpleBinomials.length; k++) { @@ -238,7 +228,6 @@ public void testLessThanBranchFree() { } // Throws an ArithmeticException if "the simple implementation" of binomial coefficients overflows - @J2ktIncompatible @GwtIncompatible // TODO private long simpleBinomial(int n, int k) { long accum = 1; @@ -249,7 +238,6 @@ private long simpleBinomial(int n, int k) { return accum; } - @J2ktIncompatible @GwtIncompatible // java.math.BigInteger public void testIsPowerOfTwo() { for (long x : ALL_LONG_CANDIDATES) { @@ -306,7 +294,6 @@ public void testLog2Exact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10ZeroAlwaysThrows() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -318,7 +305,6 @@ public void testLog10ZeroAlwaysThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10NegativeAlwaysThrows() { for (long x : NEGATIVE_LONG_CANDIDATES) { @@ -333,7 +319,6 @@ public void testLog10NegativeAlwaysThrows() { } // Relies on the correctness of BigIntegerMath.log10 for all modes except UNNECESSARY. - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10MatchesBigInteger() { for (long x : POSITIVE_LONG_CANDIDATES) { @@ -344,7 +329,6 @@ public void testLog10MatchesBigInteger() { } // Relies on the correctness of log10(long, FLOOR) and of pow(long, int). - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10Exact() { for (long x : POSITIVE_LONG_CANDIDATES) { @@ -361,7 +345,6 @@ public void testLog10Exact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10TrivialOnPowerOf10() { long x = 1000000000000L; @@ -370,7 +353,6 @@ public void testLog10TrivialOnPowerOf10() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtNegativeAlwaysThrows() { for (long x : NEGATIVE_LONG_CANDIDATES) { @@ -385,7 +367,6 @@ public void testSqrtNegativeAlwaysThrows() { } // Relies on the correctness of BigIntegerMath.sqrt for all modes except UNNECESSARY. - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtMatchesBigInteger() { for (long x : POSITIVE_LONG_CANDIDATES) { @@ -398,7 +379,6 @@ public void testSqrtMatchesBigInteger() { } /* Relies on the correctness of sqrt(long, FLOOR). */ - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtExactMatchesFloorOrThrows() { for (long x : POSITIVE_LONG_CANDIDATES) { @@ -414,7 +394,6 @@ public void testSqrtExactMatchesFloorOrThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testPow() { for (long i : ALL_LONG_CANDIDATES) { @@ -424,7 +403,7 @@ public void testPow() { } } - @J2ktIncompatible + @J2ktIncompatible // J2kt BigDecimal.divide also has the rounding bug @GwtIncompatible // TODO @AndroidIncompatible // TODO(cpovirk): File BigDecimal.divide() rounding bug. public void testDivNonZero() { @@ -442,7 +421,6 @@ public void testDivNonZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO @AndroidIncompatible // Bug in older versions of Android we test against, since fixed. public void testDivNonZeroExact() { @@ -463,7 +441,6 @@ public void testDivNonZeroExact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testZeroDivIsAlwaysZero() { for (long q : NONZERO_LONG_CANDIDATES) { @@ -473,7 +450,6 @@ public void testZeroDivIsAlwaysZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testDivByZeroAlwaysFails() { for (long p : ALL_LONG_CANDIDATES) { @@ -487,7 +463,6 @@ public void testDivByZeroAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testIntMod() { for (long x : ALL_LONG_CANDIDATES) { @@ -497,7 +472,6 @@ public void testIntMod() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testIntModNegativeModulusFails() { for (long x : ALL_LONG_CANDIDATES) { @@ -511,7 +485,6 @@ public void testIntModNegativeModulusFails() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testIntModZeroModulusFails() { for (long x : ALL_LONG_CANDIDATES) { @@ -524,7 +497,6 @@ public void testIntModZeroModulusFails() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testMod() { for (long x : ALL_LONG_CANDIDATES) { @@ -534,7 +506,6 @@ public void testMod() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testModNegativeModulusFails() { for (long x : ALL_LONG_CANDIDATES) { @@ -548,7 +519,6 @@ public void testModNegativeModulusFails() { } } - @J2ktIncompatible // TODO(b/281519661): expected:<14> but was:<2> public void testGCDExhaustive() { for (long a : POSITIVE_LONG_CANDIDATES) { for (long b : POSITIVE_LONG_CANDIDATES) { @@ -557,7 +527,6 @@ public void testGCDExhaustive() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testGCDZero() { for (long a : POSITIVE_LONG_CANDIDATES) { @@ -567,7 +536,6 @@ public void testGCDZero() { assertEquals(0, LongMath.gcd(0, 0)); } - @J2ktIncompatible @GwtIncompatible // TODO public void testGCDNegativePositiveThrows() { for (long a : NEGATIVE_LONG_CANDIDATES) { @@ -584,7 +552,6 @@ public void testGCDNegativePositiveThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testGCDNegativeZeroThrows() { for (long a : NEGATIVE_LONG_CANDIDATES) { @@ -620,7 +587,6 @@ public void testCheckedAdd() { } } - @J2ktIncompatible @GwtIncompatible // TODO @AndroidIncompatible // slow public void testCheckedSubtract() { @@ -673,7 +639,6 @@ public void testCheckedMultiply() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testCheckedPow() { for (long b : ALL_LONG_CANDIDATES) { @@ -695,7 +660,6 @@ public void testCheckedPow() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedAdd() { for (long a : ALL_LONG_CANDIDATES) { @@ -707,7 +671,6 @@ public void testSaturatedAdd() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedSubtract() { for (long a : ALL_LONG_CANDIDATES) { @@ -723,7 +686,6 @@ public void testSaturatedSubtract() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedMultiply() { for (long a : ALL_LONG_CANDIDATES) { @@ -738,7 +700,6 @@ public void testSaturatedMultiply() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedPow() { for (long a : ALL_LONG_CANDIDATES) { @@ -756,7 +717,6 @@ private void assertOperationEquals(long a, long b, String op, long expected, lon } // Depends on the correctness of BigIntegerMath.factorial. - @J2ktIncompatible @GwtIncompatible // TODO public void testFactorial() { for (int n = 0; n <= 50; n++) { @@ -766,7 +726,6 @@ public void testFactorial() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testFactorialNegative() { for (int n : NEGATIVE_INTEGER_CANDIDATES) { @@ -779,7 +738,6 @@ public void testFactorialNegative() { } // Depends on the correctness of BigIntegerMath.binomial. - @J2ktIncompatible // TODO(b/281519661): expected:<-2091005866> but was:<2203961430> public void testBinomial() { for (int n = 0; n <= 70; n++) { for (int k = 0; k <= n; k++) { @@ -791,7 +749,6 @@ public void testBinomial() { } - @J2ktIncompatible @GwtIncompatible // Slow public void testBinomial_exhaustiveNotOverflowing() { // Tests all of the inputs to LongMath.binomial that won't cause it to overflow, that weren't @@ -829,7 +786,6 @@ public void testBinomialNegative() { } - @J2ktIncompatible @GwtIncompatible // far too slow public void testSqrtOfPerfectSquareAsDoubleIsPerfect() { // This takes just over a minute on my machine. @@ -845,7 +801,6 @@ public void testSqrtOfLongIsAtMostFloorSqrtMaxLong() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // java.math.BigInteger public void testMean() { // Odd-sized ranges have an obvious mean @@ -939,7 +894,6 @@ public void testNullPointers() { tester.testAllPublicStaticMethods(LongMath.class); } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeSmall() { // Check the first 1000 integers @@ -948,7 +902,6 @@ public void testIsPrimeSmall() { } } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeManyConstants() { // Test the thorough test inputs, which also includes special constants in the Miller-Rabin @@ -958,7 +911,6 @@ public void testIsPrimeManyConstants() { } } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeOnUniformRandom() { Random rand = new Random(1); @@ -971,7 +923,6 @@ public void testIsPrimeOnUniformRandom() { } } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeOnRandomPrimes() { Random rand = new Random(1); @@ -983,7 +934,6 @@ public void testIsPrimeOnRandomPrimes() { } } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeOnRandomComposites() { Random rand = new Random(1); @@ -996,7 +946,6 @@ public void testIsPrimeOnRandomComposites() { } } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeThrowsOnNegative() { try { @@ -1042,7 +991,7 @@ public void testIsPrimeThrowsOnNegative() { Long.MIN_VALUE }; - @J2ktIncompatible + @J2ktIncompatible // EnumSet.complementOf @GwtIncompatible public void testRoundToDoubleAgainstBigInteger() { for (RoundingMode roundingMode : EnumSet.complementOf(EnumSet.of(UNNECESSARY))) { @@ -1053,7 +1002,6 @@ public void testRoundToDoubleAgainstBigInteger() { } } - @J2ktIncompatible @GwtIncompatible public void testRoundToDoubleAgainstBigIntegerUnnecessary() { for (long candidate : roundToDoubleTestCandidates) { diff --git a/android/guava/src/com/google/common/math/BigIntegerMath.java b/android/guava/src/com/google/common/math/BigIntegerMath.java index cf943195d242..5f7ce6b57577 100644 --- a/android/guava/src/com/google/common/math/BigIntegerMath.java +++ b/android/guava/src/com/google/common/math/BigIntegerMath.java @@ -21,13 +21,10 @@ import static com.google.common.math.MathPreconditions.checkRoundingUnnecessary; import static java.math.RoundingMode.CEILING; import static java.math.RoundingMode.FLOOR; -import static java.math.RoundingMode.HALF_DOWN; import static java.math.RoundingMode.HALF_EVEN; -import static java.math.RoundingMode.UNNECESSARY; import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.math.BigDecimal; import java.math.BigInteger; @@ -144,7 +141,6 @@ public static int log2(BigInteger x, RoundingMode mode) { * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x} * is not a power of ten */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("fallthrough") public static int log10(BigInteger x, RoundingMode mode) { @@ -223,7 +219,6 @@ public static int log10(BigInteger x, RoundingMode mode) { * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code * sqrt(x)} is not an integer */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("fallthrough") public static BigInteger sqrt(BigInteger x, RoundingMode mode) { @@ -260,7 +255,6 @@ public static BigInteger sqrt(BigInteger x, RoundingMode mode) { } } - @J2ktIncompatible @GwtIncompatible // TODO private static BigInteger sqrtFloor(BigInteger x) { /* @@ -305,7 +299,6 @@ private static BigInteger sqrtFloor(BigInteger x) { return sqrt0; } - @J2ktIncompatible @GwtIncompatible // TODO private static BigInteger sqrtApproxWithDoubles(BigInteger x) { return DoubleMath.roundToBigInteger(Math.sqrt(DoubleUtils.bigToDouble(x)), HALF_EVEN); @@ -332,13 +325,11 @@ private static BigInteger sqrtApproxWithDoubles(BigInteger x) { * is not precisely representable as a {@code double} * @since 30.0 */ - @J2ktIncompatible @GwtIncompatible public static double roundToDouble(BigInteger x, RoundingMode mode) { return BigIntegerToDoubleRounder.INSTANCE.roundToDouble(x, mode); } - @J2ktIncompatible @GwtIncompatible private static class BigIntegerToDoubleRounder extends ToDoubleRounder { static final BigIntegerToDoubleRounder INSTANCE = new BigIntegerToDoubleRounder(); @@ -373,7 +364,6 @@ BigInteger minus(BigInteger a, BigInteger b) { * @throws ArithmeticException if {@code q == 0}, or if {@code mode == UNNECESSARY} and {@code a} * is not an integer multiple of {@code b} */ - @J2ktIncompatible @GwtIncompatible // TODO public static BigInteger divide(BigInteger p, BigInteger q, RoundingMode mode) { BigDecimal pDec = new BigDecimal(p); @@ -526,7 +516,6 @@ public static BigInteger binomial(int n, int k) { } // Returns true if BigInteger.valueOf(x.longValue()).equals(x). - @J2ktIncompatible @GwtIncompatible // TODO static boolean fitsInLong(BigInteger x) { return x.bitLength() <= Long.SIZE - 1; diff --git a/android/guava/src/com/google/common/math/DoubleMath.java b/android/guava/src/com/google/common/math/DoubleMath.java index 36de5378f345..cdd0a4b39e3b 100644 --- a/android/guava/src/com/google/common/math/DoubleMath.java +++ b/android/guava/src/com/google/common/math/DoubleMath.java @@ -32,7 +32,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.primitives.Booleans; import com.google.errorprone.annotations.CanIgnoreReturnValue; @@ -53,7 +52,6 @@ public final class DoubleMath { * This method returns a value y such that rounding y DOWN (towards zero) gives the same result as * rounding x according to the specified mode. */ - @J2ktIncompatible @GwtIncompatible // #isMathematicalInteger, com.google.common.math.DoubleUtils static double roundIntermediate(double x, RoundingMode mode) { if (!isFinite(x)) { @@ -130,7 +128,6 @@ static double roundIntermediate(double x, RoundingMode mode) { * RoundingMode#UNNECESSARY} * */ - @J2ktIncompatible @GwtIncompatible // #roundIntermediate public static int roundToInt(double x, RoundingMode mode) { double z = roundIntermediate(x, mode); @@ -156,7 +153,6 @@ public static int roundToInt(double x, RoundingMode mode) { * RoundingMode#UNNECESSARY} * */ - @J2ktIncompatible @GwtIncompatible // #roundIntermediate public static long roundToLong(double x, RoundingMode mode) { double z = roundIntermediate(x, mode); @@ -184,7 +180,6 @@ public static long roundToLong(double x, RoundingMode mode) { * */ // #roundIntermediate, java.lang.Math.getExponent, com.google.common.math.DoubleUtils - @J2ktIncompatible @GwtIncompatible public static BigInteger roundToBigInteger(double x, RoundingMode mode) { x = roundIntermediate(x, mode); @@ -201,7 +196,6 @@ public static BigInteger roundToBigInteger(double x, RoundingMode mode) { * Returns {@code true} if {@code x} is exactly equal to {@code 2^k} for some finite integer * {@code k}. */ - @J2ktIncompatible @GwtIncompatible // com.google.common.math.DoubleUtils public static boolean isPowerOfTwo(double x) { if (x > 0.0 && isFinite(x)) { @@ -240,7 +234,6 @@ public static double log2(double x) { * @throws IllegalArgumentException if {@code x <= 0.0}, {@code x} is NaN, or {@code x} is * infinite */ - @J2ktIncompatible @GwtIncompatible // java.lang.Math.getExponent, com.google.common.math.DoubleUtils @SuppressWarnings("fallthrough") public static int log2(double x, RoundingMode mode) { @@ -411,7 +404,6 @@ public static int fuzzyCompare(double a, double b, double tolerance) { */ @Deprecated // com.google.common.math.DoubleUtils - @J2ktIncompatible @GwtIncompatible public static double mean(double... values) { checkArgument(values.length > 0, "Cannot take mean of 0 values"); @@ -492,7 +484,6 @@ public static double mean(long... values) { */ @Deprecated // com.google.common.math.DoubleUtils - @J2ktIncompatible @GwtIncompatible public static double mean(Iterable values) { return mean(values.iterator()); @@ -513,7 +504,6 @@ public static double mean(Iterable values) { */ @Deprecated // com.google.common.math.DoubleUtils - @J2ktIncompatible @GwtIncompatible public static double mean(Iterator values) { checkArgument(values.hasNext(), "Cannot take mean of 0 values"); @@ -528,7 +518,6 @@ public static double mean(Iterator values) { return mean; } - @J2ktIncompatible @GwtIncompatible // com.google.common.math.DoubleUtils @CanIgnoreReturnValue private static double checkFinite(double argument) { diff --git a/android/guava/src/com/google/common/math/IntMath.java b/android/guava/src/com/google/common/math/IntMath.java index 3fff5793c126..b349f19df19f 100644 --- a/android/guava/src/com/google/common/math/IntMath.java +++ b/android/guava/src/com/google/common/math/IntMath.java @@ -27,7 +27,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.primitives.Ints; import java.math.BigInteger; @@ -153,7 +152,6 @@ public static int log2(int x, RoundingMode mode) { * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x} * is not a power of ten */ - @J2ktIncompatible @GwtIncompatible // need BigIntegerMath to adequately test @SuppressWarnings("fallthrough") public static int log10(int x, RoundingMode mode) { @@ -223,7 +221,6 @@ private static int log10Floor(int x) { * * @throws IllegalArgumentException if {@code k < 0} */ - @J2ktIncompatible @GwtIncompatible // failing tests public static int pow(int b, int k) { checkNonNegative("exponent", k); @@ -715,7 +712,6 @@ public static int mean(int x, int y) { * @throws IllegalArgumentException if {@code n} is negative * @since 20.0 */ - @J2ktIncompatible @GwtIncompatible // TODO public static boolean isPrime(int n) { return LongMath.isPrime(n); diff --git a/android/guava/src/com/google/common/math/LongMath.java b/android/guava/src/com/google/common/math/LongMath.java index fa8271a1eb67..08e795b49c36 100644 --- a/android/guava/src/com/google/common/math/LongMath.java +++ b/android/guava/src/com/google/common/math/LongMath.java @@ -27,7 +27,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.primitives.Longs; import com.google.common.primitives.UnsignedLongs; @@ -155,7 +154,6 @@ public static int log2(long x, RoundingMode mode) { * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x} * is not a power of ten */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("fallthrough") // TODO(kevinb): remove after this warning is disabled globally @@ -182,7 +180,6 @@ public static int log10(long x, RoundingMode mode) { throw new AssertionError(); } - @J2ktIncompatible @GwtIncompatible // TODO static int log10Floor(long x) { /* @@ -208,7 +205,6 @@ static int log10Floor(long x) { 3, 2, 2, 2, 1, 1, 1, 0, 0, 0 }; - @J2ktIncompatible @GwtIncompatible // TODO @VisibleForTesting static final long[] powersOf10 = { @@ -234,7 +230,6 @@ static int log10Floor(long x) { }; // halfPowersOf10[i] = largest long less than 10^(i + 0.5) - @J2ktIncompatible @GwtIncompatible // TODO @VisibleForTesting static final long[] halfPowersOf10 = { @@ -266,7 +261,6 @@ static int log10Floor(long x) { * * @throws IllegalArgumentException if {@code k < 0} */ - @J2ktIncompatible @GwtIncompatible // TODO public static long pow(long b, int k) { checkNonNegative("exponent", k); @@ -310,7 +304,6 @@ public static long pow(long b, int k) { * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code * sqrt(x)} is not an integer */ - @J2ktIncompatible @GwtIncompatible // TODO public static long sqrt(long x, RoundingMode mode) { checkNonNegative("x", x); @@ -381,7 +374,6 @@ public static long sqrt(long x, RoundingMode mode) { * @throws ArithmeticException if {@code q == 0}, or if {@code mode == UNNECESSARY} and {@code a} * is not an integer multiple of {@code b} */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("fallthrough") public static long divide(long p, long q, RoundingMode mode) { @@ -455,7 +447,6 @@ public static long divide(long p, long q, RoundingMode mode) { * @see * Remainder Operator */ - @J2ktIncompatible @GwtIncompatible // TODO public static int mod(long x, int m) { // Cast is safe because the result is guaranteed in the range [0, m) @@ -480,7 +471,6 @@ public static int mod(long x, int m) { * @see * Remainder Operator */ - @J2ktIncompatible @GwtIncompatible // TODO public static long mod(long x, long m) { if (m <= 0) { @@ -558,7 +548,6 @@ public static long checkedAdd(long a, long b) { * * @throws ArithmeticException if {@code a - b} overflows in signed {@code long} arithmetic */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("ShortCircuitBoolean") public static long checkedSubtract(long a, long b) { @@ -606,7 +595,6 @@ public static long checkedMultiply(long a, long b) { * @throws ArithmeticException if {@code b} to the {@code k}th power overflows in signed {@code * long} arithmetic */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("ShortCircuitBoolean") public static long checkedPow(long b, int k) { @@ -779,7 +767,6 @@ public static long saturatedPow(long b, int k) { * * @throws IllegalArgumentException if {@code n < 0} */ - @J2ktIncompatible @GwtIncompatible // TODO public static long factorial(int n) { checkNonNegative("n", n); @@ -1008,7 +995,6 @@ public static long mean(long x, long y) { * @throws IllegalArgumentException if {@code n} is negative * @since 20.0 */ - @J2ktIncompatible @GwtIncompatible // TODO public static boolean isPrime(long n) { if (n < 2) { @@ -1252,7 +1238,6 @@ private boolean testWitness(long base, long n) { * @since 30.0 */ @SuppressWarnings("deprecation") - @J2ktIncompatible @GwtIncompatible public static double roundToDouble(long x, RoundingMode mode) { // Logic adapted from ToDoubleRounder. diff --git a/android/guava/src/com/google/common/math/ToDoubleRounder.java b/android/guava/src/com/google/common/math/ToDoubleRounder.java index 5bfcd12caa80..2e7e7fae0944 100644 --- a/android/guava/src/com/google/common/math/ToDoubleRounder.java +++ b/android/guava/src/com/google/common/math/ToDoubleRounder.java @@ -18,14 +18,12 @@ import static com.google.common.math.MathPreconditions.checkRoundingUnnecessary; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import java.math.RoundingMode; /** * Helper type to implement rounding {@code X} to a representable {@code double} value according to * a {@link RoundingMode}. */ -@J2ktIncompatible @GwtIncompatible @ElementTypesAreNonnullByDefault abstract class ToDoubleRounder> { diff --git a/guava-tests/test/com/google/common/math/BigIntegerMathTest.java b/guava-tests/test/com/google/common/math/BigIntegerMathTest.java index 2bfe3a325174..bc348230dbd7 100644 --- a/guava-tests/test/com/google/common/math/BigIntegerMathTest.java +++ b/guava-tests/test/com/google/common/math/BigIntegerMathTest.java @@ -113,7 +113,6 @@ public void testFloorPowerOfTwoZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantSqrt2PrecomputedBits() { assertEquals( @@ -217,7 +216,6 @@ public void testLog2HalfEven() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10ZeroAlwaysThrows() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -229,7 +227,6 @@ public void testLog10ZeroAlwaysThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10NegativeAlwaysThrows() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -241,7 +238,6 @@ public void testLog10NegativeAlwaysThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10Floor() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -253,7 +249,6 @@ public void testLog10Floor() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10Ceiling() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -266,7 +261,6 @@ public void testLog10Ceiling() { } // Relies on the correctness of log10(BigInteger, FLOOR). - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10Exact() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -281,7 +275,6 @@ public void testLog10Exact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10HalfUp() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -294,7 +287,6 @@ public void testLog10HalfUp() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10HalfDown() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -308,7 +300,6 @@ public void testLog10HalfDown() { } // Relies on the correctness of log10(BigInteger, {HALF_UP,HALF_DOWN}). - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10HalfEven() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -320,7 +311,6 @@ public void testLog10HalfEven() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10TrivialOnPowerOf10() { BigInteger x = BigInteger.TEN.pow(100); @@ -329,7 +319,6 @@ public void testLog10TrivialOnPowerOf10() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtZeroAlwaysZero() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -337,7 +326,6 @@ public void testSqrtZeroAlwaysZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtNegativeAlwaysThrows() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -349,7 +337,6 @@ public void testSqrtNegativeAlwaysThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtFloor() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -362,7 +349,6 @@ public void testSqrtFloor() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtCeiling() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -376,7 +362,6 @@ public void testSqrtCeiling() { } // Relies on the correctness of sqrt(BigInteger, FLOOR). - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtExact() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -392,7 +377,6 @@ public void testSqrtExact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtHalfUp() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -409,7 +393,6 @@ public void testSqrtHalfUp() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtHalfDown() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -427,7 +410,6 @@ public void testSqrtHalfDown() { } // Relies on the correctness of sqrt(BigInteger, {HALF_UP,HALF_DOWN}). - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtHalfEven() { for (BigInteger x : POSITIVE_BIGINTEGER_CANDIDATES) { @@ -439,7 +421,6 @@ public void testSqrtHalfEven() { } } - @J2ktIncompatible @GwtIncompatible // TODO @AndroidIncompatible // slow public void testDivNonZero() { @@ -460,11 +441,11 @@ public void testDivNonZero() { private static final BigInteger BAD_FOR_GINGERBREAD_P = new BigInteger("-9223372036854775808"); private static final BigInteger BAD_FOR_GINGERBREAD_Q = new BigInteger("-4294967296"); - @J2ktIncompatible @GwtIncompatible // TODO @AndroidIncompatible // slow public void testDivNonZeroExact() { - boolean isAndroid = System.getProperty("java.runtime.name").contains("Android"); + String runtimeName = System.getProperty("java.runtime.name"); + boolean isAndroid = runtimeName != null && runtimeName.contains("Android"); for (BigInteger p : NONZERO_BIGINTEGER_CANDIDATES) { for (BigInteger q : NONZERO_BIGINTEGER_CANDIDATES) { if (isAndroid && p.equals(BAD_FOR_ANDROID_P) && q.equals(BAD_FOR_ANDROID_Q)) { @@ -492,7 +473,6 @@ public void testDivNonZeroExact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testZeroDivIsAlwaysZero() { for (BigInteger q : NONZERO_BIGINTEGER_CANDIDATES) { @@ -502,7 +482,6 @@ public void testZeroDivIsAlwaysZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testDivByZeroAlwaysFails() { for (BigInteger p : ALL_BIGINTEGER_CANDIDATES) { @@ -540,7 +519,6 @@ public void testBinomialSmall() { runBinomialTest(0, 30); } - @J2ktIncompatible @GwtIncompatible // too slow public void testBinomialLarge() { runBinomialTest(31, 100); @@ -575,7 +553,7 @@ public void testBinomialOutside() { } @J2ktIncompatible - @GwtIncompatible + @GwtIncompatible // EnumSet.complementOf private static final class RoundToDoubleTester { private final BigInteger input; private final Map expectedValues = new EnumMap<>(RoundingMode.class); @@ -819,7 +797,6 @@ public void testNullPointers() { tester.testAllPublicStaticMethods(BigIntegerMath.class); } - @J2ktIncompatible @GwtIncompatible // String.format private static void failFormat(String template, Object... args) { fail(String.format(template, args)); diff --git a/guava-tests/test/com/google/common/math/DoubleMathTest.java b/guava-tests/test/com/google/common/math/DoubleMathTest.java index 93de8c716135..08c5fa3967be 100644 --- a/guava-tests/test/com/google/common/math/DoubleMathTest.java +++ b/guava-tests/test/com/google/common/math/DoubleMathTest.java @@ -80,7 +80,6 @@ public void testConstantsEverySixteenthFactorial() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundIntegralDoubleToInt() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -100,7 +99,6 @@ public void testRoundIntegralDoubleToInt() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundFractionalDoubleToInt() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -123,7 +121,6 @@ public void testRoundFractionalDoubleToInt() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundExactIntegralDoubleToInt() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -141,7 +138,6 @@ public void testRoundExactIntegralDoubleToInt() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundExactFractionalDoubleToIntFails() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -153,7 +149,6 @@ public void testRoundExactFractionalDoubleToIntFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundNaNToIntAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -165,7 +160,6 @@ public void testRoundNaNToIntAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToInt(double, RoundingMode) public void testRoundInfiniteToIntAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -182,7 +176,6 @@ public void testRoundInfiniteToIntAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundIntegralDoubleToLong() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -202,7 +195,6 @@ public void testRoundIntegralDoubleToLong() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundFractionalDoubleToLong() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -222,7 +214,6 @@ public void testRoundFractionalDoubleToLong() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundExactIntegralDoubleToLong() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -241,7 +232,6 @@ public void testRoundExactIntegralDoubleToLong() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundExactFractionalDoubleToLongFails() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -253,7 +243,6 @@ public void testRoundExactFractionalDoubleToLongFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundNaNToLongAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -265,7 +254,6 @@ public void testRoundNaNToLongAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToLong(double, RoundingMode) public void testRoundInfiniteToLongAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -282,7 +270,6 @@ public void testRoundInfiniteToLongAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundIntegralDoubleToBigInteger() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -293,7 +280,6 @@ public void testRoundIntegralDoubleToBigInteger() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundFractionalDoubleToBigInteger() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -304,7 +290,6 @@ public void testRoundFractionalDoubleToBigInteger() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundExactIntegralDoubleToBigInteger() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -313,7 +298,6 @@ public void testRoundExactIntegralDoubleToBigInteger() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundExactFractionalDoubleToBigIntegerFails() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -325,7 +309,6 @@ public void testRoundExactFractionalDoubleToBigIntegerFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundNaNToBigIntegerAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -337,7 +320,6 @@ public void testRoundNaNToBigIntegerAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundInfiniteToBigIntegerAlwaysFails() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -354,7 +336,6 @@ public void testRoundInfiniteToBigIntegerAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.roundToBigInteger(double, RoundingMode) public void testRoundLog2Floor() { for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -364,7 +345,6 @@ public void testRoundLog2Floor() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode), StrictMath public void testRoundLog2Ceiling() { for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -375,7 +355,6 @@ public void testRoundLog2Ceiling() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode), StrictMath public void testRoundLog2Down() { for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -392,7 +371,6 @@ public void testRoundLog2Down() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode), StrictMath public void testRoundLog2Up() { for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -409,7 +387,6 @@ public void testRoundLog2Up() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode) public void testRoundLog2Half() { // We don't expect perfect rounding accuracy. @@ -428,7 +405,6 @@ public void testRoundLog2Half() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode) public void testRoundLog2Exact() { for (double x : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -443,7 +419,6 @@ public void testRoundLog2Exact() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode) public void testRoundLog2ThrowsOnZerosInfinitiesAndNaN() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -458,7 +433,6 @@ public void testRoundLog2ThrowsOnZerosInfinitiesAndNaN() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.log2(double, RoundingMode) public void testRoundLog2ThrowsOnNegative() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -472,7 +446,6 @@ public void testRoundLog2ThrowsOnNegative() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.isPowerOfTwo, DoubleMath.log2(double, RoundingMode), StrictMath public void testIsPowerOfTwoYes() { for (int i = -1074; i <= 1023; i++) { @@ -480,7 +453,6 @@ public void testIsPowerOfTwoYes() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.isPowerOfTwo, DoubleMath.log2(double, RoundingMode), StrictMath public void testIsPowerOfTwo() { for (double x : ALL_DOUBLE_CANDIDATES) { @@ -493,7 +465,6 @@ public void testIsPowerOfTwo() { } } - @J2ktIncompatible @GwtIncompatible // #trueLog2, Math.ulp public void testLog2Accuracy() { for (double d : POSITIVE_FINITE_DOUBLE_CANDIDATES) { @@ -526,7 +497,6 @@ public void testLog2NaNInfinity() { assertTrue(Double.isNaN(DoubleMath.log2(Double.NaN))); } - @J2ktIncompatible @GwtIncompatible // StrictMath private strictfp double trueLog2(double d) { double trueLog2 = StrictMath.log(d) / StrictMath.log(2); @@ -545,7 +515,6 @@ private strictfp double trueLog2(double d) { return trueLog2; } - @J2ktIncompatible @GwtIncompatible // DoubleMath.isMathematicalInteger public void testIsMathematicalIntegerIntegral() { for (double d : INTEGRAL_DOUBLE_CANDIDATES) { @@ -553,7 +522,6 @@ public void testIsMathematicalIntegerIntegral() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.isMathematicalInteger public void testIsMathematicalIntegerFractional() { for (double d : FRACTIONAL_DOUBLE_CANDIDATES) { @@ -561,7 +529,6 @@ public void testIsMathematicalIntegerFractional() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.isMathematicalInteger public void testIsMathematicalIntegerNotFinite() { for (double d : Arrays.asList(Double.POSITIVE_INFINITY, Double.NEGATIVE_INFINITY, Double.NaN)) { @@ -569,7 +536,6 @@ public void testIsMathematicalIntegerNotFinite() { } } - @J2ktIncompatible @GwtIncompatible // Math.ulp public void testFactorial() { for (int i = 0; i <= DoubleMath.MAX_FACTORIAL; i++) { @@ -745,7 +711,6 @@ public void testFuzzyCompareBadTolerance() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_doubleVarargs() { assertEquals(-1.375, DoubleMath.mean(1.1, -2.2, 4.4, -8.8), 1.0e-10); @@ -762,21 +727,18 @@ public void testMean_doubleVarargs() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_intVarargs() { assertEquals(-13.75, DoubleMath.mean(11, -22, 44, -88), 1.0e-10); assertEquals(11.0, DoubleMath.mean(11), 1.0e-10); } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_longVarargs() { assertEquals(-13.75, DoubleMath.mean(11L, -22L, 44L, -88L), 1.0e-10); assertEquals(11.0, DoubleMath.mean(11L), 1.0e-10); } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_emptyVarargs() { try { @@ -786,7 +748,6 @@ public void testMean_emptyVarargs() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_doubleIterable() { assertEquals(-1.375, DoubleMath.mean(ImmutableList.of(1.1, -2.2, 4.4, -8.8)), 1.0e-10); @@ -808,7 +769,6 @@ public void testMean_doubleIterable() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_intIterable() { assertEquals(-13.75, DoubleMath.mean(ImmutableList.of(11, -22, 44, -88)), 1.0e-10); @@ -820,7 +780,6 @@ public void testMean_intIterable() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_longIterable() { assertEquals(-13.75, DoubleMath.mean(ImmutableList.of(11L, -22L, 44L, -88L)), 1.0e-10); @@ -832,7 +791,6 @@ public void testMean_longIterable() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_intIterator() { assertEquals(-13.75, DoubleMath.mean(ImmutableList.of(11, -22, 44, -88).iterator()), 1.0e-10); @@ -844,7 +802,6 @@ public void testMean_intIterator() { } } - @J2ktIncompatible @GwtIncompatible // DoubleMath.mean public void testMean_longIterator() { assertEquals( diff --git a/guava-tests/test/com/google/common/math/IntMathTest.java b/guava-tests/test/com/google/common/math/IntMathTest.java index 30588875d3c4..73128e46803f 100644 --- a/guava-tests/test/com/google/common/math/IntMathTest.java +++ b/guava-tests/test/com/google/common/math/IntMathTest.java @@ -111,7 +111,6 @@ public void testFloorPowerOfTwoZero() { } } - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testConstantMaxPowerOfSqrt2Unsigned() { assertEquals( @@ -120,7 +119,6 @@ public void testConstantMaxPowerOfSqrt2Unsigned() { /*actual=*/ IntMath.MAX_POWER_OF_SQRT2_UNSIGNED); } - @J2ktIncompatible @GwtIncompatible // pow() public void testConstantsPowersOf10() { for (int i = 0; i < IntMath.powersOf10.length - 1; i++) { @@ -128,7 +126,6 @@ public void testConstantsPowersOf10() { } } - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testMaxLog10ForLeadingZeros() { for (int i = 0; i < Integer.SIZE; i++) { @@ -138,7 +135,6 @@ public void testMaxLog10ForLeadingZeros() { } } - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testConstantsHalfPowersOf10() { for (int i = 0; i < IntMath.halfPowersOf10.length; i++) { @@ -165,7 +161,6 @@ public void testConstantsBiggestBinomials() { 2 * IntMath.biggestBinomials.length, IntMath.biggestBinomials.length))); } - @J2ktIncompatible @GwtIncompatible // sqrt public void testPowersSqrtMaxInt() { assertEquals( @@ -186,7 +181,6 @@ public void testLessThanBranchFree() { } } - @J2ktIncompatible @GwtIncompatible // java.math.BigInteger public void testIsPowerOfTwo() { for (int x : ALL_INTEGER_CANDIDATES) { @@ -242,7 +236,6 @@ public void testLog2Exact() { } } - @J2ktIncompatible @GwtIncompatible // log10 public void testLog10ZeroAlwaysThrows() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -254,7 +247,6 @@ public void testLog10ZeroAlwaysThrows() { } } - @J2ktIncompatible @GwtIncompatible // log10 public void testLog10NegativeAlwaysThrows() { for (int x : NEGATIVE_INTEGER_CANDIDATES) { @@ -269,7 +261,6 @@ public void testLog10NegativeAlwaysThrows() { } // Relies on the correctness of BigIntegerMath.log10 for all modes except UNNECESSARY. - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testLog10MatchesBigInteger() { for (int x : POSITIVE_INTEGER_CANDIDATES) { @@ -281,7 +272,6 @@ public void testLog10MatchesBigInteger() { } // Relies on the correctness of log10(int, FLOOR) and of pow(int, int). - @J2ktIncompatible @GwtIncompatible // pow() public void testLog10Exact() { for (int x : POSITIVE_INTEGER_CANDIDATES) { @@ -296,7 +286,6 @@ public void testLog10Exact() { } } - @J2ktIncompatible @GwtIncompatible // log10 public void testLog10TrivialOnPowerOfTen() { int x = 1000000; @@ -306,7 +295,6 @@ public void testLog10TrivialOnPowerOfTen() { } // Simple test to cover sqrt(0) for all types and all modes. - @J2ktIncompatible @GwtIncompatible // sqrt public void testSqrtZeroAlwaysZero() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -314,7 +302,6 @@ public void testSqrtZeroAlwaysZero() { } } - @J2ktIncompatible @GwtIncompatible // sqrt public void testSqrtNegativeAlwaysThrows() { for (int x : NEGATIVE_INTEGER_CANDIDATES) { @@ -329,7 +316,6 @@ public void testSqrtNegativeAlwaysThrows() { } /* Relies on the correctness of BigIntegerMath.sqrt for all modes except UNNECESSARY. */ - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testSqrtMatchesBigInteger() { for (int x : POSITIVE_INTEGER_CANDIDATES) { @@ -343,7 +329,6 @@ public void testSqrtMatchesBigInteger() { } /* Relies on the correctness of sqrt(int, FLOOR). */ - @J2ktIncompatible @GwtIncompatible // sqrt public void testSqrtExactMatchesFloorOrThrows() { for (int x : POSITIVE_INTEGER_CANDIDATES) { @@ -359,7 +344,6 @@ public void testSqrtExactMatchesFloorOrThrows() { } } - @J2ktIncompatible @GwtIncompatible // 2147483646^2 expected=4 public void testPow() { for (int i : ALL_INTEGER_CANDIDATES) { @@ -370,7 +354,6 @@ public void testPow() { } @AndroidIncompatible // slow - @J2ktIncompatible // TODO(b/281519661): Fails 2147483646/-2147483648 expected:<1> but was:<-1> public void testDivNonZero() { for (int p : NONZERO_INTEGER_CANDIDATES) { for (int q : NONZERO_INTEGER_CANDIDATES) { @@ -567,7 +550,6 @@ public void testCheckedPow() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedAdd() { for (int a : ALL_INTEGER_CANDIDATES) { @@ -579,7 +561,6 @@ public void testSaturatedAdd() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedSubtract() { for (int a : ALL_INTEGER_CANDIDATES) { @@ -595,7 +576,6 @@ public void testSaturatedSubtract() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedMultiply() { for (int a : ALL_INTEGER_CANDIDATES) { @@ -610,7 +590,6 @@ public void testSaturatedMultiply() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedPow() { for (int a : ALL_INTEGER_CANDIDATES) { @@ -696,7 +675,6 @@ public void testBinomialNegative() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // java.math.BigInteger public void testMean() { // Odd-sized ranges have an obvious mean @@ -776,7 +754,6 @@ public void testNullPointers() { tester.testAllPublicStaticMethods(IntMath.class); } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrime() { // Defer correctness tests to Long.isPrime diff --git a/guava-tests/test/com/google/common/math/LongMathTest.java b/guava-tests/test/com/google/common/math/LongMathTest.java index ee6ee1cb824d..25ad1dc325f0 100644 --- a/guava-tests/test/com/google/common/math/LongMathTest.java +++ b/guava-tests/test/com/google/common/math/LongMathTest.java @@ -55,7 +55,6 @@ public void testMaxSignedPowerOfTwo() { assertFalse(LongMath.isPowerOfTwo(LongMath.MAX_SIGNED_POWER_OF_TWO * 2)); } - @J2ktIncompatible // TODO(b/281519661): expected:<-2147483648> but was:<2147483648> public void testCeilingPowerOfTwo() { for (long x : POSITIVE_LONG_CANDIDATES) { BigInteger expectedResult = BigIntegerMath.ceilingPowerOfTwo(BigInteger.valueOf(x)); @@ -71,7 +70,6 @@ public void testCeilingPowerOfTwo() { } } - @J2ktIncompatible // TODO(b/281519661): expected:<-2147483648> but was:<2147483648> public void testFloorPowerOfTwo() { for (long x : POSITIVE_LONG_CANDIDATES) { BigInteger expectedResult = BigIntegerMath.floorPowerOfTwo(BigInteger.valueOf(x)); @@ -115,7 +113,6 @@ public void testFloorPowerOfTwoZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantMaxPowerOfSqrt2Unsigned() { assertEquals( @@ -124,7 +121,6 @@ public void testConstantMaxPowerOfSqrt2Unsigned() { /*actual=*/ LongMath.MAX_POWER_OF_SQRT2_UNSIGNED); } - @J2ktIncompatible @GwtIncompatible // BigIntegerMath // TODO(cpovirk): GWT-enable BigIntegerMath public void testMaxLog10ForLeadingZeros() { for (int i = 0; i < Long.SIZE; i++) { @@ -134,7 +130,6 @@ public void testMaxLog10ForLeadingZeros() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsPowersOf10() { for (int i = 0; i < LongMath.powersOf10.length; i++) { @@ -147,7 +142,6 @@ public void testConstantsPowersOf10() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsHalfPowersOf10() { for (int i = 0; i < LongMath.halfPowersOf10.length; i++) { @@ -160,7 +154,6 @@ public void testConstantsHalfPowersOf10() { assertTrue(nextBigger.compareTo(BigInteger.valueOf(Long.MAX_VALUE)) > 0); } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsSqrtMaxLong() { assertEquals( @@ -168,7 +161,6 @@ public void testConstantsSqrtMaxLong() { /*actual=*/ LongMath.FLOOR_SQRT_MAX_LONG); } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsFactorials() { long expected = 1; @@ -183,7 +175,6 @@ public void testConstantsFactorials() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsBiggestBinomials() { for (int k = 0; k < LongMath.biggestBinomials.length; k++) { @@ -199,7 +190,6 @@ public void testConstantsBiggestBinomials() { // 2 * k is the smallest value for which we don't replace k with (n-k). } - @J2ktIncompatible @GwtIncompatible // TODO public void testConstantsBiggestSimpleBinomials() { for (int k = 0; k < LongMath.biggestSimpleBinomials.length; k++) { @@ -238,7 +228,6 @@ public void testLessThanBranchFree() { } // Throws an ArithmeticException if "the simple implementation" of binomial coefficients overflows - @J2ktIncompatible @GwtIncompatible // TODO private long simpleBinomial(int n, int k) { long accum = 1; @@ -249,7 +238,6 @@ private long simpleBinomial(int n, int k) { return accum; } - @J2ktIncompatible @GwtIncompatible // java.math.BigInteger public void testIsPowerOfTwo() { for (long x : ALL_LONG_CANDIDATES) { @@ -306,7 +294,6 @@ public void testLog2Exact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10ZeroAlwaysThrows() { for (RoundingMode mode : ALL_ROUNDING_MODES) { @@ -318,7 +305,6 @@ public void testLog10ZeroAlwaysThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10NegativeAlwaysThrows() { for (long x : NEGATIVE_LONG_CANDIDATES) { @@ -333,7 +319,6 @@ public void testLog10NegativeAlwaysThrows() { } // Relies on the correctness of BigIntegerMath.log10 for all modes except UNNECESSARY. - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10MatchesBigInteger() { for (long x : POSITIVE_LONG_CANDIDATES) { @@ -344,7 +329,6 @@ public void testLog10MatchesBigInteger() { } // Relies on the correctness of log10(long, FLOOR) and of pow(long, int). - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10Exact() { for (long x : POSITIVE_LONG_CANDIDATES) { @@ -361,7 +345,6 @@ public void testLog10Exact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testLog10TrivialOnPowerOf10() { long x = 1000000000000L; @@ -370,7 +353,6 @@ public void testLog10TrivialOnPowerOf10() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtNegativeAlwaysThrows() { for (long x : NEGATIVE_LONG_CANDIDATES) { @@ -385,7 +367,6 @@ public void testSqrtNegativeAlwaysThrows() { } // Relies on the correctness of BigIntegerMath.sqrt for all modes except UNNECESSARY. - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtMatchesBigInteger() { for (long x : POSITIVE_LONG_CANDIDATES) { @@ -398,7 +379,6 @@ public void testSqrtMatchesBigInteger() { } /* Relies on the correctness of sqrt(long, FLOOR). */ - @J2ktIncompatible @GwtIncompatible // TODO public void testSqrtExactMatchesFloorOrThrows() { for (long x : POSITIVE_LONG_CANDIDATES) { @@ -414,7 +394,6 @@ public void testSqrtExactMatchesFloorOrThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testPow() { for (long i : ALL_LONG_CANDIDATES) { @@ -424,7 +403,7 @@ public void testPow() { } } - @J2ktIncompatible + @J2ktIncompatible // J2kt BigDecimal.divide also has the rounding bug @GwtIncompatible // TODO @AndroidIncompatible // TODO(cpovirk): File BigDecimal.divide() rounding bug. public void testDivNonZero() { @@ -442,7 +421,6 @@ public void testDivNonZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO @AndroidIncompatible // Bug in older versions of Android we test against, since fixed. public void testDivNonZeroExact() { @@ -463,7 +441,6 @@ public void testDivNonZeroExact() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testZeroDivIsAlwaysZero() { for (long q : NONZERO_LONG_CANDIDATES) { @@ -473,7 +450,6 @@ public void testZeroDivIsAlwaysZero() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testDivByZeroAlwaysFails() { for (long p : ALL_LONG_CANDIDATES) { @@ -487,7 +463,6 @@ public void testDivByZeroAlwaysFails() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testIntMod() { for (long x : ALL_LONG_CANDIDATES) { @@ -497,7 +472,6 @@ public void testIntMod() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testIntModNegativeModulusFails() { for (long x : ALL_LONG_CANDIDATES) { @@ -511,7 +485,6 @@ public void testIntModNegativeModulusFails() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testIntModZeroModulusFails() { for (long x : ALL_LONG_CANDIDATES) { @@ -524,7 +497,6 @@ public void testIntModZeroModulusFails() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testMod() { for (long x : ALL_LONG_CANDIDATES) { @@ -534,7 +506,6 @@ public void testMod() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testModNegativeModulusFails() { for (long x : ALL_LONG_CANDIDATES) { @@ -548,7 +519,6 @@ public void testModNegativeModulusFails() { } } - @J2ktIncompatible // TODO(b/281519661): expected:<14> but was:<2> public void testGCDExhaustive() { for (long a : POSITIVE_LONG_CANDIDATES) { for (long b : POSITIVE_LONG_CANDIDATES) { @@ -557,7 +527,6 @@ public void testGCDExhaustive() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testGCDZero() { for (long a : POSITIVE_LONG_CANDIDATES) { @@ -567,7 +536,6 @@ public void testGCDZero() { assertEquals(0, LongMath.gcd(0, 0)); } - @J2ktIncompatible @GwtIncompatible // TODO public void testGCDNegativePositiveThrows() { for (long a : NEGATIVE_LONG_CANDIDATES) { @@ -584,7 +552,6 @@ public void testGCDNegativePositiveThrows() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testGCDNegativeZeroThrows() { for (long a : NEGATIVE_LONG_CANDIDATES) { @@ -620,7 +587,6 @@ public void testCheckedAdd() { } } - @J2ktIncompatible @GwtIncompatible // TODO @AndroidIncompatible // slow public void testCheckedSubtract() { @@ -673,7 +639,6 @@ public void testCheckedMultiply() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testCheckedPow() { for (long b : ALL_LONG_CANDIDATES) { @@ -695,7 +660,6 @@ public void testCheckedPow() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedAdd() { for (long a : ALL_LONG_CANDIDATES) { @@ -707,7 +671,6 @@ public void testSaturatedAdd() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedSubtract() { for (long a : ALL_LONG_CANDIDATES) { @@ -723,7 +686,6 @@ public void testSaturatedSubtract() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedMultiply() { for (long a : ALL_LONG_CANDIDATES) { @@ -738,7 +700,6 @@ public void testSaturatedMultiply() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testSaturatedPow() { for (long a : ALL_LONG_CANDIDATES) { @@ -756,7 +717,6 @@ private void assertOperationEquals(long a, long b, String op, long expected, lon } // Depends on the correctness of BigIntegerMath.factorial. - @J2ktIncompatible @GwtIncompatible // TODO public void testFactorial() { for (int n = 0; n <= 50; n++) { @@ -766,7 +726,6 @@ public void testFactorial() { } } - @J2ktIncompatible @GwtIncompatible // TODO public void testFactorialNegative() { for (int n : NEGATIVE_INTEGER_CANDIDATES) { @@ -779,7 +738,6 @@ public void testFactorialNegative() { } // Depends on the correctness of BigIntegerMath.binomial. - @J2ktIncompatible // TODO(b/281519661): expected:<-2091005866> but was:<2203961430> public void testBinomial() { for (int n = 0; n <= 70; n++) { for (int k = 0; k <= n; k++) { @@ -791,7 +749,6 @@ public void testBinomial() { } - @J2ktIncompatible @GwtIncompatible // Slow public void testBinomial_exhaustiveNotOverflowing() { // Tests all of the inputs to LongMath.binomial that won't cause it to overflow, that weren't @@ -829,7 +786,6 @@ public void testBinomialNegative() { } - @J2ktIncompatible @GwtIncompatible // far too slow public void testSqrtOfPerfectSquareAsDoubleIsPerfect() { // This takes just over a minute on my machine. @@ -845,7 +801,6 @@ public void testSqrtOfLongIsAtMostFloorSqrtMaxLong() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // java.math.BigInteger public void testMean() { // Odd-sized ranges have an obvious mean @@ -939,7 +894,6 @@ public void testNullPointers() { tester.testAllPublicStaticMethods(LongMath.class); } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeSmall() { // Check the first 1000 integers @@ -948,7 +902,6 @@ public void testIsPrimeSmall() { } } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeManyConstants() { // Test the thorough test inputs, which also includes special constants in the Miller-Rabin @@ -958,7 +911,6 @@ public void testIsPrimeManyConstants() { } } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeOnUniformRandom() { Random rand = new Random(1); @@ -971,7 +923,6 @@ public void testIsPrimeOnUniformRandom() { } } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeOnRandomPrimes() { Random rand = new Random(1); @@ -983,7 +934,6 @@ public void testIsPrimeOnRandomPrimes() { } } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeOnRandomComposites() { Random rand = new Random(1); @@ -996,7 +946,6 @@ public void testIsPrimeOnRandomComposites() { } } - @J2ktIncompatible @GwtIncompatible // isPrime is GWT-incompatible public void testIsPrimeThrowsOnNegative() { try { @@ -1042,7 +991,7 @@ public void testIsPrimeThrowsOnNegative() { Long.MIN_VALUE }; - @J2ktIncompatible + @J2ktIncompatible // EnumSet.complementOf @GwtIncompatible public void testRoundToDoubleAgainstBigInteger() { for (RoundingMode roundingMode : EnumSet.complementOf(EnumSet.of(UNNECESSARY))) { @@ -1053,7 +1002,6 @@ public void testRoundToDoubleAgainstBigInteger() { } } - @J2ktIncompatible @GwtIncompatible public void testRoundToDoubleAgainstBigIntegerUnnecessary() { for (long candidate : roundToDoubleTestCandidates) { diff --git a/guava/src/com/google/common/math/BigIntegerMath.java b/guava/src/com/google/common/math/BigIntegerMath.java index cf943195d242..5f7ce6b57577 100644 --- a/guava/src/com/google/common/math/BigIntegerMath.java +++ b/guava/src/com/google/common/math/BigIntegerMath.java @@ -21,13 +21,10 @@ import static com.google.common.math.MathPreconditions.checkRoundingUnnecessary; import static java.math.RoundingMode.CEILING; import static java.math.RoundingMode.FLOOR; -import static java.math.RoundingMode.HALF_DOWN; import static java.math.RoundingMode.HALF_EVEN; -import static java.math.RoundingMode.UNNECESSARY; import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.math.BigDecimal; import java.math.BigInteger; @@ -144,7 +141,6 @@ public static int log2(BigInteger x, RoundingMode mode) { * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x} * is not a power of ten */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("fallthrough") public static int log10(BigInteger x, RoundingMode mode) { @@ -223,7 +219,6 @@ public static int log10(BigInteger x, RoundingMode mode) { * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code * sqrt(x)} is not an integer */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("fallthrough") public static BigInteger sqrt(BigInteger x, RoundingMode mode) { @@ -260,7 +255,6 @@ public static BigInteger sqrt(BigInteger x, RoundingMode mode) { } } - @J2ktIncompatible @GwtIncompatible // TODO private static BigInteger sqrtFloor(BigInteger x) { /* @@ -305,7 +299,6 @@ private static BigInteger sqrtFloor(BigInteger x) { return sqrt0; } - @J2ktIncompatible @GwtIncompatible // TODO private static BigInteger sqrtApproxWithDoubles(BigInteger x) { return DoubleMath.roundToBigInteger(Math.sqrt(DoubleUtils.bigToDouble(x)), HALF_EVEN); @@ -332,13 +325,11 @@ private static BigInteger sqrtApproxWithDoubles(BigInteger x) { * is not precisely representable as a {@code double} * @since 30.0 */ - @J2ktIncompatible @GwtIncompatible public static double roundToDouble(BigInteger x, RoundingMode mode) { return BigIntegerToDoubleRounder.INSTANCE.roundToDouble(x, mode); } - @J2ktIncompatible @GwtIncompatible private static class BigIntegerToDoubleRounder extends ToDoubleRounder { static final BigIntegerToDoubleRounder INSTANCE = new BigIntegerToDoubleRounder(); @@ -373,7 +364,6 @@ BigInteger minus(BigInteger a, BigInteger b) { * @throws ArithmeticException if {@code q == 0}, or if {@code mode == UNNECESSARY} and {@code a} * is not an integer multiple of {@code b} */ - @J2ktIncompatible @GwtIncompatible // TODO public static BigInteger divide(BigInteger p, BigInteger q, RoundingMode mode) { BigDecimal pDec = new BigDecimal(p); @@ -526,7 +516,6 @@ public static BigInteger binomial(int n, int k) { } // Returns true if BigInteger.valueOf(x.longValue()).equals(x). - @J2ktIncompatible @GwtIncompatible // TODO static boolean fitsInLong(BigInteger x) { return x.bitLength() <= Long.SIZE - 1; diff --git a/guava/src/com/google/common/math/DoubleMath.java b/guava/src/com/google/common/math/DoubleMath.java index 36de5378f345..cdd0a4b39e3b 100644 --- a/guava/src/com/google/common/math/DoubleMath.java +++ b/guava/src/com/google/common/math/DoubleMath.java @@ -32,7 +32,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.primitives.Booleans; import com.google.errorprone.annotations.CanIgnoreReturnValue; @@ -53,7 +52,6 @@ public final class DoubleMath { * This method returns a value y such that rounding y DOWN (towards zero) gives the same result as * rounding x according to the specified mode. */ - @J2ktIncompatible @GwtIncompatible // #isMathematicalInteger, com.google.common.math.DoubleUtils static double roundIntermediate(double x, RoundingMode mode) { if (!isFinite(x)) { @@ -130,7 +128,6 @@ static double roundIntermediate(double x, RoundingMode mode) { * RoundingMode#UNNECESSARY} * */ - @J2ktIncompatible @GwtIncompatible // #roundIntermediate public static int roundToInt(double x, RoundingMode mode) { double z = roundIntermediate(x, mode); @@ -156,7 +153,6 @@ public static int roundToInt(double x, RoundingMode mode) { * RoundingMode#UNNECESSARY} * */ - @J2ktIncompatible @GwtIncompatible // #roundIntermediate public static long roundToLong(double x, RoundingMode mode) { double z = roundIntermediate(x, mode); @@ -184,7 +180,6 @@ public static long roundToLong(double x, RoundingMode mode) { * */ // #roundIntermediate, java.lang.Math.getExponent, com.google.common.math.DoubleUtils - @J2ktIncompatible @GwtIncompatible public static BigInteger roundToBigInteger(double x, RoundingMode mode) { x = roundIntermediate(x, mode); @@ -201,7 +196,6 @@ public static BigInteger roundToBigInteger(double x, RoundingMode mode) { * Returns {@code true} if {@code x} is exactly equal to {@code 2^k} for some finite integer * {@code k}. */ - @J2ktIncompatible @GwtIncompatible // com.google.common.math.DoubleUtils public static boolean isPowerOfTwo(double x) { if (x > 0.0 && isFinite(x)) { @@ -240,7 +234,6 @@ public static double log2(double x) { * @throws IllegalArgumentException if {@code x <= 0.0}, {@code x} is NaN, or {@code x} is * infinite */ - @J2ktIncompatible @GwtIncompatible // java.lang.Math.getExponent, com.google.common.math.DoubleUtils @SuppressWarnings("fallthrough") public static int log2(double x, RoundingMode mode) { @@ -411,7 +404,6 @@ public static int fuzzyCompare(double a, double b, double tolerance) { */ @Deprecated // com.google.common.math.DoubleUtils - @J2ktIncompatible @GwtIncompatible public static double mean(double... values) { checkArgument(values.length > 0, "Cannot take mean of 0 values"); @@ -492,7 +484,6 @@ public static double mean(long... values) { */ @Deprecated // com.google.common.math.DoubleUtils - @J2ktIncompatible @GwtIncompatible public static double mean(Iterable values) { return mean(values.iterator()); @@ -513,7 +504,6 @@ public static double mean(Iterable values) { */ @Deprecated // com.google.common.math.DoubleUtils - @J2ktIncompatible @GwtIncompatible public static double mean(Iterator values) { checkArgument(values.hasNext(), "Cannot take mean of 0 values"); @@ -528,7 +518,6 @@ public static double mean(Iterator values) { return mean; } - @J2ktIncompatible @GwtIncompatible // com.google.common.math.DoubleUtils @CanIgnoreReturnValue private static double checkFinite(double argument) { diff --git a/guava/src/com/google/common/math/IntMath.java b/guava/src/com/google/common/math/IntMath.java index 3fff5793c126..b349f19df19f 100644 --- a/guava/src/com/google/common/math/IntMath.java +++ b/guava/src/com/google/common/math/IntMath.java @@ -27,7 +27,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.primitives.Ints; import java.math.BigInteger; @@ -153,7 +152,6 @@ public static int log2(int x, RoundingMode mode) { * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x} * is not a power of ten */ - @J2ktIncompatible @GwtIncompatible // need BigIntegerMath to adequately test @SuppressWarnings("fallthrough") public static int log10(int x, RoundingMode mode) { @@ -223,7 +221,6 @@ private static int log10Floor(int x) { * * @throws IllegalArgumentException if {@code k < 0} */ - @J2ktIncompatible @GwtIncompatible // failing tests public static int pow(int b, int k) { checkNonNegative("exponent", k); @@ -715,7 +712,6 @@ public static int mean(int x, int y) { * @throws IllegalArgumentException if {@code n} is negative * @since 20.0 */ - @J2ktIncompatible @GwtIncompatible // TODO public static boolean isPrime(int n) { return LongMath.isPrime(n); diff --git a/guava/src/com/google/common/math/LongMath.java b/guava/src/com/google/common/math/LongMath.java index fa8271a1eb67..08e795b49c36 100644 --- a/guava/src/com/google/common/math/LongMath.java +++ b/guava/src/com/google/common/math/LongMath.java @@ -27,7 +27,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.primitives.Longs; import com.google.common.primitives.UnsignedLongs; @@ -155,7 +154,6 @@ public static int log2(long x, RoundingMode mode) { * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code x} * is not a power of ten */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("fallthrough") // TODO(kevinb): remove after this warning is disabled globally @@ -182,7 +180,6 @@ public static int log10(long x, RoundingMode mode) { throw new AssertionError(); } - @J2ktIncompatible @GwtIncompatible // TODO static int log10Floor(long x) { /* @@ -208,7 +205,6 @@ static int log10Floor(long x) { 3, 2, 2, 2, 1, 1, 1, 0, 0, 0 }; - @J2ktIncompatible @GwtIncompatible // TODO @VisibleForTesting static final long[] powersOf10 = { @@ -234,7 +230,6 @@ static int log10Floor(long x) { }; // halfPowersOf10[i] = largest long less than 10^(i + 0.5) - @J2ktIncompatible @GwtIncompatible // TODO @VisibleForTesting static final long[] halfPowersOf10 = { @@ -266,7 +261,6 @@ static int log10Floor(long x) { * * @throws IllegalArgumentException if {@code k < 0} */ - @J2ktIncompatible @GwtIncompatible // TODO public static long pow(long b, int k) { checkNonNegative("exponent", k); @@ -310,7 +304,6 @@ public static long pow(long b, int k) { * @throws ArithmeticException if {@code mode} is {@link RoundingMode#UNNECESSARY} and {@code * sqrt(x)} is not an integer */ - @J2ktIncompatible @GwtIncompatible // TODO public static long sqrt(long x, RoundingMode mode) { checkNonNegative("x", x); @@ -381,7 +374,6 @@ public static long sqrt(long x, RoundingMode mode) { * @throws ArithmeticException if {@code q == 0}, or if {@code mode == UNNECESSARY} and {@code a} * is not an integer multiple of {@code b} */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("fallthrough") public static long divide(long p, long q, RoundingMode mode) { @@ -455,7 +447,6 @@ public static long divide(long p, long q, RoundingMode mode) { * @see * Remainder Operator */ - @J2ktIncompatible @GwtIncompatible // TODO public static int mod(long x, int m) { // Cast is safe because the result is guaranteed in the range [0, m) @@ -480,7 +471,6 @@ public static int mod(long x, int m) { * @see * Remainder Operator */ - @J2ktIncompatible @GwtIncompatible // TODO public static long mod(long x, long m) { if (m <= 0) { @@ -558,7 +548,6 @@ public static long checkedAdd(long a, long b) { * * @throws ArithmeticException if {@code a - b} overflows in signed {@code long} arithmetic */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("ShortCircuitBoolean") public static long checkedSubtract(long a, long b) { @@ -606,7 +595,6 @@ public static long checkedMultiply(long a, long b) { * @throws ArithmeticException if {@code b} to the {@code k}th power overflows in signed {@code * long} arithmetic */ - @J2ktIncompatible @GwtIncompatible // TODO @SuppressWarnings("ShortCircuitBoolean") public static long checkedPow(long b, int k) { @@ -779,7 +767,6 @@ public static long saturatedPow(long b, int k) { * * @throws IllegalArgumentException if {@code n < 0} */ - @J2ktIncompatible @GwtIncompatible // TODO public static long factorial(int n) { checkNonNegative("n", n); @@ -1008,7 +995,6 @@ public static long mean(long x, long y) { * @throws IllegalArgumentException if {@code n} is negative * @since 20.0 */ - @J2ktIncompatible @GwtIncompatible // TODO public static boolean isPrime(long n) { if (n < 2) { @@ -1252,7 +1238,6 @@ private boolean testWitness(long base, long n) { * @since 30.0 */ @SuppressWarnings("deprecation") - @J2ktIncompatible @GwtIncompatible public static double roundToDouble(long x, RoundingMode mode) { // Logic adapted from ToDoubleRounder. diff --git a/guava/src/com/google/common/math/ToDoubleRounder.java b/guava/src/com/google/common/math/ToDoubleRounder.java index 5bfcd12caa80..2e7e7fae0944 100644 --- a/guava/src/com/google/common/math/ToDoubleRounder.java +++ b/guava/src/com/google/common/math/ToDoubleRounder.java @@ -18,14 +18,12 @@ import static com.google.common.math.MathPreconditions.checkRoundingUnnecessary; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import java.math.RoundingMode; /** * Helper type to implement rounding {@code X} to a representable {@code double} value according to * a {@link RoundingMode}. */ -@J2ktIncompatible @GwtIncompatible @ElementTypesAreNonnullByDefault abstract class ToDoubleRounder> { From 476faf9e2cf5dbc77b462b0c11a658c41d617f00 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 7 Feb 2024 10:04:10 -0800 Subject: [PATCH 130/216] Bump gradle/wrapper-validation-action from 2.0.0 to 2.0.1 Bumps [gradle/wrapper-validation-action](https://github.com/gradle/wrapper-validation-action) from 2.0.0 to 2.0.1. - [Release notes](https://github.com/gradle/wrapper-validation-action/releases) - [Commits](https://github.com/gradle/wrapper-validation-action/compare/27152f6fa06a6b8062ef7195c795692e51fc2c81...a494d935f4b56874c4a5a87d19af7afcf3a163d0) Fixes #6967 RELNOTES=n/a PiperOrigin-RevId: 605019012 --- .github/workflows/gradle-wrapper-validation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 9d4b1f4d2b65..02563df66bcb 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -10,4 +10,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: gradle/wrapper-validation-action@27152f6fa06a6b8062ef7195c795692e51fc2c81 + - uses: gradle/wrapper-validation-action@a494d935f4b56874c4a5a87d19af7afcf3a163d0 From 0e1aebf73ec48848b17b402a22f33f55756073e8 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 7 Feb 2024 12:47:29 -0800 Subject: [PATCH 131/216] Roll back [the change that made `LocalCache` avoid `synchronized`](https://github.com/google/guava/commit/1512730820a99e329a475b7143b7295775ef26ba). The `LocalCache` change led to [false reports of recursion during refresh](https://github.com/google/guava/pull/6851#issuecomment-1931276822). This CL keeps the new tests from the `LocalCache` change, which already would have passed before the CL. Ideally we would additionally include [tests that demonstrate the refresh problem](https://github.com/google/guava/pull/6851#issuecomment-1931276822), but we'll need to see if the contributor can sign a CLA. This rollback un-fixes https://github.com/google/guava/issues/6845. Users of `common.cache` and virtual threads will likely have to wait until `synchronized` no longer pins threads. (And at that point, if not earlier, they should migrate to [Caffeine](https://github.com/ben-manes/caffeine) :)) RELNOTES=`cache`: Fixed a bug that could cause [false "recursive load" reports during refresh](https://github.com/google/guava/pull/6851#issuecomment-1931276822). PiperOrigin-RevId: 605069776 --- .../com/google/common/cache/LocalCache.java | 31 +++++-------------- .../com/google/common/cache/LocalCache.java | 31 +++++-------------- 2 files changed, 14 insertions(+), 48 deletions(-) diff --git a/android/guava/src/com/google/common/cache/LocalCache.java b/android/guava/src/com/google/common/cache/LocalCache.java index 6fb3945df7ee..f0a7699e0700 100644 --- a/android/guava/src/com/google/common/cache/LocalCache.java +++ b/android/guava/src/com/google/common/cache/LocalCache.java @@ -2180,7 +2180,12 @@ V lockedGetOrLoad(K key, int hash, CacheLoader loader) throws Exec if (createNewEntry) { try { - return loadSync(key, hash, loadingValueReference, loader); + // Synchronizes on the entry to allow failing fast when a recursive load is + // detected. This may be circumvented when an entry is copied, but will fail fast most + // of the time. + synchronized (e) { + return loadSync(key, hash, loadingValueReference, loader); + } } finally { statsCounter.recordMisses(1); } @@ -2196,22 +2201,7 @@ V waitForLoadingValue(ReferenceEntry e, K key, ValueReference valueR throw new AssertionError(); } - // As of this writing, the only prod ValueReference implementation for which isLoading() is - // true is LoadingValueReference. (Note, however, that not all LoadingValueReference instances - // have isLoading()==true: LoadingValueReference has a subclass, ComputingValueReference, for - // which isLoading() is false!) However, that might change, and we already have a *test* - // implementation for which it doesn't hold. So we check instanceof to be safe. - if (valueReference instanceof LoadingValueReference) { - // We check whether the thread that is loading the entry is our current thread, which would - // mean that we are both loading and waiting for the entry. In this case, we fail fast - // instead of deadlocking. - checkState( - ((LoadingValueReference) valueReference).getLoadingThread() - != Thread.currentThread(), - "Recursive load of: %s", - key); - } - + checkState(!Thread.holdsLock(e), "Recursive load of: %s", key); // don't consider expiration as we're concurrent with loading try { V value = valueReference.waitForValue(); @@ -3437,8 +3427,6 @@ static class LoadingValueReference implements ValueReference { final SettableFuture futureValue = SettableFuture.create(); final Stopwatch stopwatch = Stopwatch.createUnstarted(); - final Thread loadingThread; - public LoadingValueReference() { this(LocalCache.unset()); } @@ -3450,7 +3438,6 @@ public LoadingValueReference() { */ public LoadingValueReference(ValueReference oldValue) { this.oldValue = oldValue; - this.loadingThread = Thread.currentThread(); } @Override @@ -3554,10 +3541,6 @@ public ValueReference copyFor( ReferenceQueue queue, @CheckForNull V value, ReferenceEntry entry) { return this; } - - Thread getLoadingThread() { - return this.loadingThread; - } } // Queues diff --git a/guava/src/com/google/common/cache/LocalCache.java b/guava/src/com/google/common/cache/LocalCache.java index dd3590357ed0..a38543dbb7b6 100644 --- a/guava/src/com/google/common/cache/LocalCache.java +++ b/guava/src/com/google/common/cache/LocalCache.java @@ -2184,7 +2184,12 @@ V lockedGetOrLoad(K key, int hash, CacheLoader loader) throws Exec if (createNewEntry) { try { - return loadSync(key, hash, loadingValueReference, loader); + // Synchronizes on the entry to allow failing fast when a recursive load is + // detected. This may be circumvented when an entry is copied, but will fail fast most + // of the time. + synchronized (e) { + return loadSync(key, hash, loadingValueReference, loader); + } } finally { statsCounter.recordMisses(1); } @@ -2200,22 +2205,7 @@ V waitForLoadingValue(ReferenceEntry e, K key, ValueReference valueR throw new AssertionError(); } - // As of this writing, the only prod ValueReference implementation for which isLoading() is - // true is LoadingValueReference. (Note, however, that not all LoadingValueReference instances - // have isLoading()==true: LoadingValueReference has a subclass, ComputingValueReference, for - // which isLoading() is false!) However, that might change, and we already have a *test* - // implementation for which it doesn't hold. So we check instanceof to be safe. - if (valueReference instanceof LoadingValueReference) { - // We check whether the thread that is loading the entry is our current thread, which would - // mean that we are both loading and waiting for the entry. In this case, we fail fast - // instead of deadlocking. - checkState( - ((LoadingValueReference) valueReference).getLoadingThread() - != Thread.currentThread(), - "Recursive load of: %s", - key); - } - + checkState(!Thread.holdsLock(e), "Recursive load of: %s", key); // don't consider expiration as we're concurrent with loading try { V value = valueReference.waitForValue(); @@ -3527,15 +3517,12 @@ static class LoadingValueReference implements ValueReference { final SettableFuture futureValue = SettableFuture.create(); final Stopwatch stopwatch = Stopwatch.createUnstarted(); - final Thread loadingThread; - public LoadingValueReference() { this(null); } public LoadingValueReference(@CheckForNull ValueReference oldValue) { this.oldValue = (oldValue == null) ? LocalCache.unset() : oldValue; - this.loadingThread = Thread.currentThread(); } @Override @@ -3660,10 +3647,6 @@ public ValueReference copyFor( ReferenceQueue queue, @CheckForNull V value, ReferenceEntry entry) { return this; } - - Thread getLoadingThread() { - return this.loadingThread; - } } static class ComputingValueReference extends LoadingValueReference { From 0a1bd172477d75d747f9a7083049c20d017208b0 Mon Sep 17 00:00:00 2001 From: Stefan Haustein Date: Wed, 7 Feb 2024 14:59:58 -0800 Subject: [PATCH 132/216] Enable j2kt tests for escapers; no "actual" code changes. RELNOTES=N/A PiperOrigin-RevId: 605108587 --- .../com/google/common/escape/ArrayBasedCharEscaperTest.java | 5 ++++- .../google/common/escape/ArrayBasedUnicodeEscaperTest.java | 5 ++++- .../com/google/common/escape/ArrayBasedCharEscaperTest.java | 5 ++++- .../google/common/escape/ArrayBasedUnicodeEscaperTest.java | 5 ++++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/android/guava-tests/test/com/google/common/escape/ArrayBasedCharEscaperTest.java b/android/guava-tests/test/com/google/common/escape/ArrayBasedCharEscaperTest.java index f0983ef98cfb..c82d23b517f1 100644 --- a/android/guava-tests/test/com/google/common/escape/ArrayBasedCharEscaperTest.java +++ b/android/guava-tests/test/com/google/common/escape/ArrayBasedCharEscaperTest.java @@ -22,8 +22,11 @@ import java.io.IOException; import junit.framework.TestCase; -/** @author David Beaumont */ +/** + * @author David Beaumont + */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ArrayBasedCharEscaperTest extends TestCase { private static final ImmutableMap NO_REPLACEMENTS = ImmutableMap.of(); private static final ImmutableMap SIMPLE_REPLACEMENTS = diff --git a/android/guava-tests/test/com/google/common/escape/ArrayBasedUnicodeEscaperTest.java b/android/guava-tests/test/com/google/common/escape/ArrayBasedUnicodeEscaperTest.java index 3243240a18cd..31fd27f9489d 100644 --- a/android/guava-tests/test/com/google/common/escape/ArrayBasedUnicodeEscaperTest.java +++ b/android/guava-tests/test/com/google/common/escape/ArrayBasedUnicodeEscaperTest.java @@ -22,8 +22,11 @@ import java.io.IOException; import junit.framework.TestCase; -/** @author David Beaumont */ +/** + * @author David Beaumont + */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ArrayBasedUnicodeEscaperTest extends TestCase { private static final ImmutableMap NO_REPLACEMENTS = ImmutableMap.of(); private static final ImmutableMap SIMPLE_REPLACEMENTS = diff --git a/guava-tests/test/com/google/common/escape/ArrayBasedCharEscaperTest.java b/guava-tests/test/com/google/common/escape/ArrayBasedCharEscaperTest.java index f0983ef98cfb..c82d23b517f1 100644 --- a/guava-tests/test/com/google/common/escape/ArrayBasedCharEscaperTest.java +++ b/guava-tests/test/com/google/common/escape/ArrayBasedCharEscaperTest.java @@ -22,8 +22,11 @@ import java.io.IOException; import junit.framework.TestCase; -/** @author David Beaumont */ +/** + * @author David Beaumont + */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ArrayBasedCharEscaperTest extends TestCase { private static final ImmutableMap NO_REPLACEMENTS = ImmutableMap.of(); private static final ImmutableMap SIMPLE_REPLACEMENTS = diff --git a/guava-tests/test/com/google/common/escape/ArrayBasedUnicodeEscaperTest.java b/guava-tests/test/com/google/common/escape/ArrayBasedUnicodeEscaperTest.java index 3243240a18cd..31fd27f9489d 100644 --- a/guava-tests/test/com/google/common/escape/ArrayBasedUnicodeEscaperTest.java +++ b/guava-tests/test/com/google/common/escape/ArrayBasedUnicodeEscaperTest.java @@ -22,8 +22,11 @@ import java.io.IOException; import junit.framework.TestCase; -/** @author David Beaumont */ +/** + * @author David Beaumont + */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ArrayBasedUnicodeEscaperTest extends TestCase { private static final ImmutableMap NO_REPLACEMENTS = ImmutableMap.of(); private static final ImmutableMap SIMPLE_REPLACEMENTS = From f5ee972110434f732899661ffdf4e8f3229da455 Mon Sep 17 00:00:00 2001 From: lowasser Date: Wed, 7 Feb 2024 15:40:50 -0800 Subject: [PATCH 133/216] Fix typo in Splitter.limit Javadoc. RELNOTES=n/a PiperOrigin-RevId: 605119916 --- android/guava/src/com/google/common/base/Splitter.java | 2 +- guava/src/com/google/common/base/Splitter.java | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/guava/src/com/google/common/base/Splitter.java b/android/guava/src/com/google/common/base/Splitter.java index 828b669a452f..392e6d8e4fde 100644 --- a/android/guava/src/com/google/common/base/Splitter.java +++ b/android/guava/src/com/google/common/base/Splitter.java @@ -332,7 +332,7 @@ public Splitter omitEmptyStrings() { *

    For example, {@code Splitter.on(',').limit(3).split("a,b,c,d")} returns an iterable * containing {@code ["a", "b", "c,d"]}. When omitting empty strings, the omitted strings do not * count. Hence, {@code Splitter.on(',').limit(3).omitEmptyStrings().split("a,,,b,,,c,d")} returns - * an iterable containing {@code ["a", "b", "c,d"}. When trim is requested, all entries are + * an iterable containing {@code ["a", "b", "c,d"]}. When trim is requested, all entries are * trimmed, including the last. Hence {@code Splitter.on(',').limit(3).trimResults().split(" a , b * , c , d ")} results in {@code ["a", "b", "c , d"]}. * diff --git a/guava/src/com/google/common/base/Splitter.java b/guava/src/com/google/common/base/Splitter.java index de8f244419f0..e3924192dd66 100644 --- a/guava/src/com/google/common/base/Splitter.java +++ b/guava/src/com/google/common/base/Splitter.java @@ -334,7 +334,7 @@ public Splitter omitEmptyStrings() { *

    For example, {@code Splitter.on(',').limit(3).split("a,b,c,d")} returns an iterable * containing {@code ["a", "b", "c,d"]}. When omitting empty strings, the omitted strings do not * count. Hence, {@code Splitter.on(',').limit(3).omitEmptyStrings().split("a,,,b,,,c,d")} returns - * an iterable containing {@code ["a", "b", "c,d"}. When trim is requested, all entries are + * an iterable containing {@code ["a", "b", "c,d"]}. When trim is requested, all entries are * trimmed, including the last. Hence {@code Splitter.on(',').limit(3).trimResults().split(" a , b * , c , d ")} results in {@code ["a", "b", "c , d"]}. * From 5c950ae13a03c8029a1f2cf34704c56d67f4ef76 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Thu, 8 Feb 2024 06:24:30 -0800 Subject: [PATCH 134/216] Mark `Sets.complementOf` `@J2ktIncompatible` `EnumSet.complementOf` is always throwing in J2kt Native. If we remove these references to `EnumSet.complementOf`, we can make these calls a compile-time error (j2cl made the same change last year). RELNOTES=n/a PiperOrigin-RevId: 605297563 --- android/guava/src/com/google/common/collect/Sets.java | 6 ++++-- guava/src/com/google/common/collect/Sets.java | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/android/guava/src/com/google/common/collect/Sets.java b/android/guava/src/com/google/common/collect/Sets.java index e9fdc4408f25..014c6f997aa8 100644 --- a/android/guava/src/com/google/common/collect/Sets.java +++ b/android/guava/src/com/google/common/collect/Sets.java @@ -480,7 +480,7 @@ public static TreeSet newTreeSet(Iterable * contains no elements */ @J2ktIncompatible - @GwtIncompatible + @GwtIncompatible // EnumSet.complementOf public static > EnumSet complementOf(Collection collection) { if (collection instanceof EnumSet) { return EnumSet.complementOf((EnumSet) collection); @@ -501,7 +501,8 @@ public static > EnumSet complementOf(Collection collecti * @return a new, modifiable {@code EnumSet} initially containing all the values of the enum not * present in the given collection */ - @GwtIncompatible + @J2ktIncompatible + @GwtIncompatible // EnumSet.complementOf public static > EnumSet complementOf( Collection collection, Class type) { checkNotNull(collection); @@ -510,6 +511,7 @@ public static > EnumSet complementOf( : makeComplementByHand(collection, type); } + @J2ktIncompatible @GwtIncompatible private static > EnumSet makeComplementByHand( Collection collection, Class type) { diff --git a/guava/src/com/google/common/collect/Sets.java b/guava/src/com/google/common/collect/Sets.java index 49df281f2774..9257c0946f03 100644 --- a/guava/src/com/google/common/collect/Sets.java +++ b/guava/src/com/google/common/collect/Sets.java @@ -482,7 +482,7 @@ public static TreeSet newTreeSet(Iterable * contains no elements */ @J2ktIncompatible - @GwtIncompatible + @GwtIncompatible // EnumSet.complementOf public static > EnumSet complementOf(Collection collection) { if (collection instanceof EnumSet) { return EnumSet.complementOf((EnumSet) collection); @@ -503,7 +503,8 @@ public static > EnumSet complementOf(Collection collecti * @return a new, modifiable {@code EnumSet} initially containing all the values of the enum not * present in the given collection */ - @GwtIncompatible + @J2ktIncompatible + @GwtIncompatible // EnumSet.complementOf public static > EnumSet complementOf( Collection collection, Class type) { checkNotNull(collection); @@ -512,6 +513,7 @@ public static > EnumSet complementOf( : makeComplementByHand(collection, type); } + @J2ktIncompatible @GwtIncompatible private static > EnumSet makeComplementByHand( Collection collection, Class type) { From 86c1c517387c786a311df288ad091d83f3dfce80 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 8 Feb 2024 08:44:12 -0800 Subject: [PATCH 135/216] Bump gradle/wrapper-validation-action from 2.0.1 to 2.1.0 Bumps [gradle/wrapper-validation-action](https://github.com/gradle/wrapper-validation-action) from 2.0.1 to 2.1.0. - [Release notes](https://github.com/gradle/wrapper-validation-action/releases) - [Commits](https://github.com/gradle/wrapper-validation-action/compare/a494d935f4b56874c4a5a87d19af7afcf3a163d0...85cde3f5a1033b2adc2442631c24b530f1183a1a) Fixes #6976 RELNOTES=n/a PiperOrigin-RevId: 605328626 --- .github/workflows/gradle-wrapper-validation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 02563df66bcb..cfae32e84f4a 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -10,4 +10,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: gradle/wrapper-validation-action@a494d935f4b56874c4a5a87d19af7afcf3a163d0 + - uses: gradle/wrapper-validation-action@85cde3f5a1033b2adc2442631c24b530f1183a1a From 4ef54a7a79244e2b2d616bf09143d3eed8fc952a Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 8 Feb 2024 09:27:51 -0800 Subject: [PATCH 136/216] Add some missing nullness annotations on `handleInvocation` overrides. The lack of annotations was detected by a forthcoming version of our nullness checker. (While I was in the neighborhood, I also added a small number of other annotations in code that is not `@NullMarked` but that defines, uses, or is used by `handleInvocation` methods.) RELNOTES=n/a PiperOrigin-RevId: 605340017 --- .../src/com/google/common/testing/ClassSanityTester.java | 3 +++ .../src/com/google/common/testing/DummyProxy.java | 3 ++- .../src/com/google/common/testing/ForwardingWrapperTester.java | 2 +- .../src/com/google/common/testing/FreshValueGenerator.java | 3 +++ .../src/com/google/common/testing/ClassSanityTester.java | 3 +++ guava-testlib/src/com/google/common/testing/DummyProxy.java | 3 ++- .../src/com/google/common/testing/ForwardingWrapperTester.java | 2 +- .../src/com/google/common/testing/FreshValueGenerator.java | 3 +++ 8 files changed, 18 insertions(+), 4 deletions(-) diff --git a/android/guava-testlib/src/com/google/common/testing/ClassSanityTester.java b/android/guava-testlib/src/com/google/common/testing/ClassSanityTester.java index 2c80552aed20..00b9b80254b0 100644 --- a/android/guava-testlib/src/com/google/common/testing/ClassSanityTester.java +++ b/android/guava-testlib/src/com/google/common/testing/ClassSanityTester.java @@ -51,6 +51,7 @@ import java.util.List; import java.util.Map.Entry; import java.util.Set; +import javax.annotation.CheckForNull; import junit.framework.Assert; import junit.framework.AssertionFailedError; import org.checkerframework.checker.nullness.qual.Nullable; @@ -664,6 +665,7 @@ private FreshValueGenerator newFreshValueGenerator() { FreshValueGenerator generator = new FreshValueGenerator() { @Override + @CheckForNull Object interfaceMethodCalled(Class interfaceType, Method method) { return getDummyValue(TypeToken.of(interfaceType).method(method).getReturnType()); } @@ -743,6 +745,7 @@ private List getDummyArguments(Invokable invokable) return args; } + @CheckForNull private T getDummyValue(TypeToken type) { Class rawType = type.getRawType(); @SuppressWarnings("unchecked") // Assume all default values are generics safe. diff --git a/android/guava-testlib/src/com/google/common/testing/DummyProxy.java b/android/guava-testlib/src/com/google/common/testing/DummyProxy.java index 7b2525c72c61..3494a66bb2c0 100644 --- a/android/guava-testlib/src/com/google/common/testing/DummyProxy.java +++ b/android/guava-testlib/src/com/google/common/testing/DummyProxy.java @@ -73,7 +73,8 @@ private class DummyHandler extends AbstractInvocationHandler implements Serializ } @Override - protected @Nullable Object handleInvocation(Object proxy, Method method, Object[] args) { + protected @Nullable Object handleInvocation( + Object proxy, Method method, @Nullable Object[] args) { Invokable invokable = interfaceType.method(method); ImmutableList params = invokable.getParameters(); for (int i = 0; i < args.length; i++) { diff --git a/android/guava-testlib/src/com/google/common/testing/ForwardingWrapperTester.java b/android/guava-testlib/src/com/google/common/testing/ForwardingWrapperTester.java index c0d2c6a01217..1e1e4ee539f0 100644 --- a/android/guava-testlib/src/com/google/common/testing/ForwardingWrapperTester.java +++ b/android/guava-testlib/src/com/google/common/testing/ForwardingWrapperTester.java @@ -139,7 +139,7 @@ private static void testExceptionPropagation( interfaceType, new AbstractInvocationHandler() { @Override - protected Object handleInvocation(Object p, Method m, Object[] args) + protected Object handleInvocation(Object p, Method m, @Nullable Object[] args) throws Throwable { throw exception; } diff --git a/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java b/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java index 41c8ee624c56..24d6edd89b3b 100644 --- a/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java +++ b/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java @@ -119,6 +119,7 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Pattern; +import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -289,6 +290,7 @@ private final class FreshInvocationHandler extends AbstractInvocationHandler { } @Override + @CheckForNull protected Object handleInvocation(Object proxy, Method method, @Nullable Object[] args) { return interfaceMethodCalled(interfaceType, method); } @@ -314,6 +316,7 @@ public String toString() { } /** Subclasses can override to provide different return value for proxied interface methods. */ + @CheckForNull Object interfaceMethodCalled(Class interfaceType, Method method) { throw new UnsupportedOperationException(); } diff --git a/guava-testlib/src/com/google/common/testing/ClassSanityTester.java b/guava-testlib/src/com/google/common/testing/ClassSanityTester.java index e0998f0afbf7..163fd3d20c81 100644 --- a/guava-testlib/src/com/google/common/testing/ClassSanityTester.java +++ b/guava-testlib/src/com/google/common/testing/ClassSanityTester.java @@ -51,6 +51,7 @@ import java.util.List; import java.util.Map.Entry; import java.util.Set; +import javax.annotation.CheckForNull; import junit.framework.Assert; import junit.framework.AssertionFailedError; import org.checkerframework.checker.nullness.qual.Nullable; @@ -664,6 +665,7 @@ private FreshValueGenerator newFreshValueGenerator() { FreshValueGenerator generator = new FreshValueGenerator() { @Override + @CheckForNull Object interfaceMethodCalled(Class interfaceType, Method method) { return getDummyValue(TypeToken.of(interfaceType).method(method).getReturnType()); } @@ -743,6 +745,7 @@ private List getDummyArguments(Invokable invokable) return args; } + @CheckForNull private T getDummyValue(TypeToken type) { Class rawType = type.getRawType(); @SuppressWarnings("unchecked") // Assume all default values are generics safe. diff --git a/guava-testlib/src/com/google/common/testing/DummyProxy.java b/guava-testlib/src/com/google/common/testing/DummyProxy.java index 7b2525c72c61..3494a66bb2c0 100644 --- a/guava-testlib/src/com/google/common/testing/DummyProxy.java +++ b/guava-testlib/src/com/google/common/testing/DummyProxy.java @@ -73,7 +73,8 @@ private class DummyHandler extends AbstractInvocationHandler implements Serializ } @Override - protected @Nullable Object handleInvocation(Object proxy, Method method, Object[] args) { + protected @Nullable Object handleInvocation( + Object proxy, Method method, @Nullable Object[] args) { Invokable invokable = interfaceType.method(method); ImmutableList params = invokable.getParameters(); for (int i = 0; i < args.length; i++) { diff --git a/guava-testlib/src/com/google/common/testing/ForwardingWrapperTester.java b/guava-testlib/src/com/google/common/testing/ForwardingWrapperTester.java index c0d2c6a01217..1e1e4ee539f0 100644 --- a/guava-testlib/src/com/google/common/testing/ForwardingWrapperTester.java +++ b/guava-testlib/src/com/google/common/testing/ForwardingWrapperTester.java @@ -139,7 +139,7 @@ private static void testExceptionPropagation( interfaceType, new AbstractInvocationHandler() { @Override - protected Object handleInvocation(Object p, Method m, Object[] args) + protected Object handleInvocation(Object p, Method m, @Nullable Object[] args) throws Throwable { throw exception; } diff --git a/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java b/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java index 0e0d9b13b761..b85fb2826e17 100644 --- a/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java +++ b/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java @@ -123,6 +123,7 @@ import java.util.concurrent.ConcurrentMap; import java.util.concurrent.atomic.AtomicInteger; import java.util.regex.Pattern; +import javax.annotation.CheckForNull; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -293,6 +294,7 @@ private final class FreshInvocationHandler extends AbstractInvocationHandler { } @Override + @CheckForNull protected Object handleInvocation(Object proxy, Method method, @Nullable Object[] args) { return interfaceMethodCalled(interfaceType, method); } @@ -318,6 +320,7 @@ public String toString() { } /** Subclasses can override to provide different return value for proxied interface methods. */ + @CheckForNull Object interfaceMethodCalled(Class interfaceType, Method method) { throw new UnsupportedOperationException(); } From fc6bfb51ecc46c9fcfb7779fdd2e3dec5bc22e9d Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Thu, 8 Feb 2024 10:50:40 -0800 Subject: [PATCH 137/216] Update Public Suffix data. RELNOTES=n/a PiperOrigin-RevId: 605365350 --- .../publicsuffix/PublicSuffixPatterns.java | 16 ++++++++-------- .../publicsuffix/PublicSuffixPatterns.java | 16 ++++++++-------- 2 files changed, 16 insertions(+), 16 deletions(-) diff --git a/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java b/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java index 6cadf1cae19d..cb0650ed4d8b 100644 --- a/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java +++ b/android/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java @@ -42,13 +42,13 @@ private PublicSuffixPatterns() {} /** If a hostname is contained as a key in this map, it is a public suffix. */ public static final ImmutableMap EXACT = TrieParser.parseTrie( - "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&l&buperananab?ohtac??n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?citsalej.piv,drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?irp?orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.xlh,?rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&g&olb,ro??ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.&cb,su,tne,ue,??pib,ten?v", - "og?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&eci&ffoemoh,vres,?ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???u&leiw?rot,?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,tadtsudgniht,v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsohecapsppa,?i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&ht&ron-ue,uos-&em,fa,pa,ue,??lartnec-&ac,li,ue,?ts&ae&-&as,pa,su,vog-su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aeht&ron-pa,uos-pa,?ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,t&ingocnozama.&1-&ht&ron-ue.htua,uos-&em.htua,fa.htua,pa.htua,ue.htua,??lartnec-&ac.htua,li.htua,ue.htua,?ts&ae&-&as.htua,su.&htua,spif-htua,??ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,vog-su.spif-htua,???2-ts&ae&-su.&htua,spif-htua,?ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,??3-ts&aeht&ron-pa.htua,uos-pa.htua,?ew-ue.htua,??tadym,??p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-rettalp,anis:piv,,esaberif,k1,lortnocduolc,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&3s,ht&ron-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??uos-&em&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??fa.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif", - "-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??em.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?li.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ts&ae&-&as&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??su:-etisbew-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,?,vog-su&-&3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,???ht&ron-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??ue&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??vog-su&-&3s,etisbew-3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?????2-&htuos-&pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??lartnec-ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?????3&-ts&aeht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??uos-pa.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???s,?4-tsaehtuos-pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?labolg-3s.tniopssecca.parm,?yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.&rekamegas.1-&htron-nc.&koobeton,oiduts,?tsewhtron-nc.&koobeton,oiduts,??swanozama.&1-&htron-nc.&3s,adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?tsewhtron-nc.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??be.1-&htron-nc,tsewhtron-nc,?????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tednalyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?lov?narts?uas??f&1-&l--nx?s", - "--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vsyt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??snduolc,t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ihsayah??r&abi?ukawaihsin??w", - "i&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&asim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara?ihcat???y&agates?ubihs???", - "e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,n&aecolatigidno,ur:.a,,?poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?e&b?n&igne?oip??rac??gni&arg?rheob??h&sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema???xnal??iws??t&a&eb?ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a!.rekamegas.&1-&ht&ron-ue.&koobeton,oiduts,?uos-&em.&koobeton,oiduts,?fa.&koobeton,oiduts,?pa.&koobeton,oiduts,?ue.&koobeton,oiduts,???lartnec-&ac.&koobeton,oiduts,?em.&koobeton,oiduts,?li.&koobeton,oiduts,?ue.&koobeton,oiduts,??ts&ae&-&as.&koobeton,oiduts,?pa.&koobeton,oiduts,?su.&koobeton,oiduts,spif-koobeton,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,???ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,?ue.&koobeton,oiduts,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,?????2-&htuos-&pa.koobeton,ue.koobeton,?lartnec-ue.koobeton,ts&ae&-su.&koobeton,oiduts,spif-koobeton,?ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,spif-koobeton,?ue.&koobeton,oiduts,????3-ts&aeht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,??ew-ue.&koobeton,oiduts,??4-tsaehtuos-pa.koobeton,??e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l?mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&eiamaka,irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?iamaka,k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,4,5,6,7,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,?t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-&ilrof?ìlrof??ilrof?ìlrof???g&amo", - "r&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,lecrev,o&ned,tpyrctfihs,?ppa-rettalp,s&egap,rekrow,?vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van!dlo??xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&اراما?را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); + "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&lohtac?n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?ci&lcyc,tsalej.piv,?drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?paz,r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,tipkcoc,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,tipkcoc,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,tipkcoc,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,mea,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?irp?orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.&mea,xlh,??rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&gro?ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.", + "&su,tne,ue,??pib,ten?vog?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&ecivres,ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???u&leiw?rot,?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,121sesaila,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,t&adtsudgniht,emta,?v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsoh&2a,ecapsppa,??i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&ht&ron-ue,uos-&em,fa,pa,ue,??lartnec-&ac,li,ue,?ts&ae&-&as,pa,su,vog-su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aeht&ron-pa,uos-pa,?ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,t&ingocnozama.&1-&ht&ron-ue.htua,uos-&em.htua,fa.htua,pa.htua,ue.htua,??lartnec-&ac.htua,li.htua,ue.htua,?ts&ae&-&as.htua,su.&htua,spif-htua,??ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,vog-su.spif-htua,???2-ts&ae&-su.&htua,spif-htua,?ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,??3-ts&aeht&ron-pa.htua,uos-pa.htua,?ew-ue.htua,??tadym,??p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-&cilcyc,rettalp,?anis:piv,,esaberif,k1,lortnocduolc,nuspu,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,pc,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&3s,ht&ron-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??uos-&em&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??fa.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,", + "?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??em.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?li.&3s,9duolc&-swa.stessa-weivbew,.sfv,?adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ts&ae&-&as&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??su:-etisbew-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,?,vog-su&-&3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,???ht&ron-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&ac.&3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??ue&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??vog-su&-&3s,etisbew-3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?????2-&htuos-&pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??lartnec-ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?????3&-ts&aeht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??uos-pa.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???s,?4-tsaehtuos-pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?labolg-3s.tniopssecca.parm,?yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.&rekamegas.1-&htron-nc.&koobeton,oiduts,?tsewhtron-nc.&koobeton,oiduts,??swanozama.&1-&htron-nc.&3s,adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?tsewhtron-nc.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??be.1-&htron-nc,tsewhtron-nc,?????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c!.cilcyc,?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tedna", + "lyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?lov?narts?uas??f&1-&l--nx?s--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vsyt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??s&nduolc,rahc21,?t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?", + "ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ihsayah??r&abi?ukawaihsin??wi&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&asim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?", + "s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara?ihcat???y&agates?ubihs???e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,cilcyc,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,naecolatigidno,poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?wolfrettulf,yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?e&b?n&igne?oip??rac??gni&arg?rheob??h&sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag!.yelp,?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema???xnal??iws??t&a&eb?ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a!.rekamegas.&1-&ht&ron-ue.&koobeton,oiduts,?uos-&em.&koobeton,oiduts,?fa.&koobeton,oiduts,?pa.&koobeton,oiduts,?ue.&koobeton,oiduts,???lartnec-&ac.&koobeton,oiduts,spif-koobeton,?em.&koobeton,oiduts,?li.&koobeton,oiduts,?ue.&koobeton,oiduts,??ts&ae&-&as.&koobeton,oiduts,?pa.&koobeton,oiduts,?su.&koobeton,oiduts,spif-koobeton,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,???ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&ac.&koobeton,spif-koobeton,?su.&koobeton,oiduts,?ue.&koobeton,oiduts,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,?????2-&htuos-&pa.koobeton,ue.koobeton,?lartnec-ue.koobeton,ts&ae&-su.&koobeton,oiduts,spif-koobeton,?ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,spif-koobeton,?ue.&koobeton,oiduts,????3-ts&aeht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,??ew-ue.&koobeton,oiduts,??4-tsaehtuos-pa.koobeton,??e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l?mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?feruza,hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&e&eruza,iamaka,?irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?i&amaka,pa-eruza,?k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&ganamciffart,tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,4,5,6,7,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,wodniw.&eroc.bolb,subecivres,??t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aize", + "nev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-&ilrof?ìlrof??ilrof?ìlrof???g&amor&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??rahc21,s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,le&crev,nap,?o&ned,tpyrctfihs,?ppa-rettalp,s&egap,r&ahc21,ekrow,??vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g!.segap,?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van?xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&اراما?را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); /** * If a hostname is not a key in the EXCLUDE map, and if removing its leftmost component results @@ -56,7 +56,7 @@ private PublicSuffixPatterns() {} */ public static final ImmutableMap UNDER = TrieParser.parseTrie( - "ac.vedwa,d&b?i.ym.ssr,uolc.&etiso&isnes,tnegam,?iaznab,rehcnar-no,scitats,??e&b.lrusnart,d.&ecapsrebu,yksurf,?noz.notirt,t&atse.etupmoc,is.&areduolc,hsmroftalp,tst,???g&oog.tnetnocresu,p??h&c.tenerif:.cvs,,k?trae.sppad:.zzb,,?k&c?f?nil.bewd,rowten.secla,u.hcs??ln.lrusnart,m&f.resu,j?m?oc.&duolcmeaeboda.ved,edo&c.redliub:->s,ved,?,nil.recnalabedon,?ico-remotsuc:.&ico,pco,sco,?,lrihwyap,mme0,osseccandcved,ppayfilpma,rennurppaswa,s&ecapsnaecolatigid,t&cejbo&edonil,rtluv,?nemelepiuq,?wanozama.&1-etupmoc,ble,etupmoc,wolfria.&1-&ht&ron-ue,uos-pa,?lartnec-&ac,ue,?ts&ae&-&as,su,?ht&ron-pa,uos-pa,??ew-ue,??2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-tsew-ue,???t&neyoj.snc,opsppa.r,???n&c.moc.swanozama.&ble,etupmoc,wolfria.1-&htron-nc,tsewhtron-nc,??ur.&dliub,e&doc,sabatad,?noitargim,??o&c.pato,i.&duolciaznab.sdraykcab,elacsnoom,nroca-no,oir-no,reniatnoceruza,s&3k-no,olots,?xcq.sys,y5s,??p&j.&a&mahokoy?yogan??ebok?i&adnes?kasawak??oroppas?uhsuykatik??n?pa.&knalfhtron,repoleved,tegeb,??r&b.mon?e??s&edoc.owo,noitulos.rehid,w.rosivda,?t&a.&ofnistro.&nednuk,xe,?smcerutuf:.&ni,xe,?,?en.&cimonotpyrc,hvo.&gnitsoh,saapbew,???u&e.lrusnart,r.onijym.&gni&dnal,tsoh,?murtceps,spv,??ved.&e&gats>s,lcl,?rahbew,?gts,lcl,treclacol.resu,yawetag,?z&c.murtnecatem.duolc,yx.tibelet,??"); + "ac.vedwa,bup.&di,nik,?d&b?i.ym.ssr,uolc.&etiso&isnes,tnegam,?iaznab,rehcnar-no,scitats,??e&b.lrusnart,d.&ecapsrebu,yksurf,?no&.nik,z.notirt,?t&atse.etupmoc,is.&areduolc,hsmroftalp,tst,???g&oog.tnetnocresu,p??h&c.tenerif:.cvs,,k?trae.sppad:.zzb,,?k&c?f?nil.bewd,rowten.secla,u.hcs??ln.lrusnart,m&f.resu,j?m?oc.&duolcmeaeboda.ved,e&crofselas.mroftalp.gts-redliub-edoc.tset.100,do&c.redliub:->s,ved,?,nil.recnalabedon,?ruza.ppaduolc,?ico-remotsuc:.&ico,pco,sco,?,lrihwyap,mme0,osseccandcved,ppayfilpma,rennurppaswa,s&ecapsnaecolatigid,t&cejbo&edonil,rtluv,?nemelepiuq,?wanozama.&1-etupmoc,ble,etupmoc,wolfria.&1-&ht&ron-ue,uos-pa,?lartnec-&ac,ue,?ts&ae&-&as,su,?ht&ron-pa,uos-pa,??ew-ue,??2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-tsew-ue,???t&neyoj.snc,opsppa.r,???n&c.moc.swanozama.&ble,etupmoc,wolfria.1-&htron-nc,tsewhtron-nc,??ur.&dliub,e&doc,sabatad,?noitargim,??o&c.pato,i.&duolciaznab.sdraykcab,e&lacsnoom,varb.s,?nroca-no,oir-no,reniatnoceruza,s&3k-no,olots,?xcq.sys,y5s,??p&j.&a&mahokoy?yogan??ebok?i&adnes?kasawak??oroppas?uhsuykatik??n?pa.&knalfhtron,nu&r,spu,?repoleved,tegeb,??r&b.mon?e??s&edoc.owo,noitulos.rehid,w&.rosivda,a.tsoper.etavirp,??t&a.&ofnistro.&nednuk,xe,?smcerutuf:.&ni,xe,?,?en.&cimonotpyrc,hvo.&gnitsoh,saapbew,???u&e.lrusnart,r.onijym.&gni&dnal,tsoh,?murtceps,spv,??ved.&e&gats>s,lcl,?rahbew,?gts,lcl,treclacol.resu,yawetag,?z&c.murtnecatem.duolc,yx.tibelet,??"); /** * The elements in this map would pass the UNDER test, but are known not to be public suffixes and diff --git a/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java b/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java index 6cadf1cae19d..cb0650ed4d8b 100644 --- a/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java +++ b/guava/src/com/google/thirdparty/publicsuffix/PublicSuffixPatterns.java @@ -42,13 +42,13 @@ private PublicSuffixPatterns() {} /** If a hostname is contained as a key in this map, it is a public suffix. */ public static final ImmutableMap EXACT = TrieParser.parseTrie( - "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&l&buperananab?ohtac??n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?citsalej.piv,drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?irp?orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.xlh,?rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&g&olb,ro??ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.&cb,su,tne,ue,??pib,ten?v", - "og?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&eci&ffoemoh,vres,?ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???u&leiw?rot,?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,tadtsudgniht,v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsohecapsppa,?i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&ht&ron-ue,uos-&em,fa,pa,ue,??lartnec-&ac,li,ue,?ts&ae&-&as,pa,su,vog-su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aeht&ron-pa,uos-pa,?ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,t&ingocnozama.&1-&ht&ron-ue.htua,uos-&em.htua,fa.htua,pa.htua,ue.htua,??lartnec-&ac.htua,li.htua,ue.htua,?ts&ae&-&as.htua,su.&htua,spif-htua,??ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,vog-su.spif-htua,???2-ts&ae&-su.&htua,spif-htua,?ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,??3-ts&aeht&ron-pa.htua,uos-pa.htua,?ew-ue.htua,??tadym,??p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-rettalp,anis:piv,,esaberif,k1,lortnocduolc,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&3s,ht&ron-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??uos-&em&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??fa.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif", - "-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??em.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?li.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ts&ae&-&as&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??su:-etisbew-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,?,vog-su&-&3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,???ht&ron-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??ue&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??vog-su&-&3s,etisbew-3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?????2-&htuos-&pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??lartnec-ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?????3&-ts&aeht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??uos-pa.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???s,?4-tsaehtuos-pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?labolg-3s.tniopssecca.parm,?yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.&rekamegas.1-&htron-nc.&koobeton,oiduts,?tsewhtron-nc.&koobeton,oiduts,??swanozama.&1-&htron-nc.&3s,adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?tsewhtron-nc.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??be.1-&htron-nc,tsewhtron-nc,?????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tednalyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?lov?narts?uas??f&1-&l--nx?s", - "--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vsyt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??snduolc,t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ihsayah??r&abi?ukawaihsin??w", - "i&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&asim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara?ihcat???y&agates?ubihs???", - "e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,n&aecolatigidno,ur:.a,,?poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?e&b?n&igne?oip??rac??gni&arg?rheob??h&sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema???xnal??iws??t&a&eb?ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a!.rekamegas.&1-&ht&ron-ue.&koobeton,oiduts,?uos-&em.&koobeton,oiduts,?fa.&koobeton,oiduts,?pa.&koobeton,oiduts,?ue.&koobeton,oiduts,???lartnec-&ac.&koobeton,oiduts,?em.&koobeton,oiduts,?li.&koobeton,oiduts,?ue.&koobeton,oiduts,??ts&ae&-&as.&koobeton,oiduts,?pa.&koobeton,oiduts,?su.&koobeton,oiduts,spif-koobeton,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,???ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,?ue.&koobeton,oiduts,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,?????2-&htuos-&pa.koobeton,ue.koobeton,?lartnec-ue.koobeton,ts&ae&-su.&koobeton,oiduts,spif-koobeton,?ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,spif-koobeton,?ue.&koobeton,oiduts,????3-ts&aeht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,??ew-ue.&koobeton,oiduts,??4-tsaehtuos-pa.koobeton,??e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l?mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&eiamaka,irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?iamaka,k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,4,5,6,7,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,?t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-&ilrof?ìlrof??ilrof?ìlrof???g&amo", - "r&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,lecrev,o&ned,tpyrctfihs,?ppa-rettalp,s&egap,rekrow,?vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van!dlo??xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&اراما?را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); + "a&0&0trk9--nx?27qjf--nx?e9ebgn--nx?nbb0c7abgm--nx??1&2oa08--nx?apg6qpcbgm--nx?hbbgm--nx?rdceqa08--nx??2&8ugbgm--nx?eyh3la2ckx--nx?qbd9--nx??3&2wqq1--nx?60a0y8--nx??4x1d77xrck--nx?6&1f4a3abgm--nx?2yqyn--nx?5b06t--nx?axq--nx?ec7q--nx?lbgw--nx??883xnn--nx?9d2c24--nx?a&a?it??b!.&gro?lim?moc?sr,t&en?opsgolb,?ude?vog??abila?c?ihsot?m?n??c!.&b&a?m?n??c&b?g?q??ep?fn?k&s?y??ln?no?oc,p&i-on,ohsdaerpsym,?sn?t&n?opsgolb,?un?ysrab,?i&ma?r&emarp?fa??sroc??naiva??d&ats?n&eit?oh??om?sa?tl??eg?f&c?ob??g!emo?naripi?oy??hskihs?i&dem!.remarf,?hs?k!on??sa!.snduolc,??jnin?k&aso?dov?ede?usto??l!.&c,gro?moc?ofni?r&ep?nb,?t&en?ni??ude?vog??irgnahs?le&nisiuc?rbmuder???m!.&ca?gro?oc?sserp?ten?vog??ahokoy?e00sf7vqn--nx?m??n!.&ac?cc?eman?gro?ibom?loohcs?moc?ni?o&c?fni?rp??r&d?o??s&u?w??vt?xm??av?is?olecrab?tea??p!.&bog?ca?d&em?ls??g&ni?ro??mo&c?n??oba?ten?ude??c?g7hyabgm--nx?ra!.&461e?6pi?iru?nru?rdda-ni?siri???s??q!.&eman?gro?hcs?lim?moc?t&en?opsgolb,?ude?vog???r&az?emac?f4a3abgm--nx?n!d5uhf8le58r4w--nx??u&kas?tan???s!.&bup?dem?gro?hcs?moc?ten?ude?vog??ac!.uban.iu,?iv??t&ad?elhta?led?oyot??u!.&a&cinniv?emirc?i&hzhziropaz?stynniv?ttaprakaz??s&edo?sedo??tlay?vatlop??bs?cc,d&argovorik?o!ro&ghzu?hhzu???tl,?e&hzhziropaz?i,nvir?t??f&i?ni,?g&l?ro??hk?i&stvinrehc?ykstyn&lemhk?vypork???k&c?m?s&na&gul?hul??t&enod?ul??v&iknarf-onavi?orteporp&end?ind?????l&iponret?opotsa&bes?ves??p??m&k?oc?s?yrk??n&c?d?i?osrehk?v?ylov??o&c,nvor??p&d?p,z??r&c?imotihz?k?ymotyhz??sk?t&en?l?z??ude?v:c?e&alokin?ik??i&alokym?hinrehc?krahk?vl?yk??k?l?o&g!inrehc??krahk??r?,xc,y&ikstinlemhk?mus?s&akrehc?sakrehc?tvonrehc???z&ib,u????v!aj?bb?et?iv??waniko?x&a?iacal??yogan?z&.&bew?c&a?i&n?rga???gro?l&im?oohcs??m&on?t??o&c!.topsgolb,?gn??radnorg?sin?t&en?la??ude?vog?wal??zip!.korgn,???b&00ave5a9iabgm--nx?1&25qhx--nx?68quv--nx?e2kc1--nx??2xtbgm--nx?3&b2kcc--nx?jca1d--nx??4&6&1rfz--nx?qif--nx??96rzc--nx??88uvor--nx?a&0dc4xbgm--nx?c?her?n?ra?t??b!.&erots?gro?moc?o&c?fni??ten?ude?v&og?t??zib??a??c&j?s??d&hesa08--nx?mi??g?l!.&gro?moc?ten?ude?vog??m??s!.&gro?moc?ten?ude?vog???tc-retarebsnegmrev--nx?u&lc!.&elej,snduolc,ysrab,?smas??p!.ysrab,??wp-gnutarebsnegmrev--nx??c&1&1q54--nx?hbgw--nx??2e9c2czf--nx?4&4ub1km--nx?a1e--nx?byj9q--nx?erd5a9b1kcb--nx??8&4xx2g--nx?c9jrb2h--nx??9jr&b&2h--nx?54--nx?9s--nx??c&eg--nx?h3--nx?s2--nx???a!.&gro?lim?moc?rrd,ten?ude?vog??3a09--nx!.&ca1o--nx?gva1c--nx?h&ca1o--nx?za09--nx??ta1d--nx?ua08--nx????b&a?b?ci?f76a0c7ylqbgm--nx?sh??c!.&eugaelysatnaf,gnipparcs,liamwt,nwaps.secnatsni,revres-emag,s&nduolc,otohpym,seccaptf,?xsc,?0atf7b45--nx?a1l--nx??e!.&21k?bog?dem?esab,gro?l&aiciffo,im??moc?nif?o&fni?rp??ten?ude?vog??beuq?n?smoc??fdh?i&lohtac?n&agro?ilc?osanap??sum?tic??l!.&gro?moc?oc?ten?ude?vog?yo,?l??m!.&mt?ossa??p1akcq--nx??n!.&mon?ossa??i?p??relcel?s!.&gro?moc?ten?ude?vog???t!.&e&m,w,?hc,?s?w??v!.&e0,gro?lim?moc?ten?ude?v&g:.d,,og????wp?yn??d&2urzc--nx?3&1wrpk--nx?c&4b11--nx?9jrcpf--nx???5xq55--nx?697uto--nx?75yrpk--nx?9ctdvkce--nx?a!.mon?d?er?olnwod??b2babgm--nx?c!.vog?g9a2g2b0ae0chclc--nx??e&m!bulc??r!k??sopxe?timil?w??fc?g!.&ude?vog???h&d3tbgm--nx?p?t??i!.&ased?bew?ca?etrof,hcs?lim?o&c!.topsgolb,?g??palf,ro?sepnop?ten?ym?zib??b?ordna?p?rdam??l&iub?og?row??m!.&ed,ot,pj,t&a,opsgolb,???n&a&b?l!.citats:.&setis,ved,?,raas???ob?uf??o&of?rp??r&a&c&tiderc?yalcrab??ugnav??ef506w4b--nx?k!.&oc,ude,?jh3a1habgm--nx??of??s!.&dem?gro?moc?ofni?ten?ude?v&og?t???m!kcrem???t!.topsgolb,excwkcc--nx?l??uolc!.&a&bura-vnej.&1ti,abura.rue.1ti,?tcepsrep,xo:.&ku,nt,?,?b&dnevar,ewilek:.sc,,?ci&lcyc,tsalej.piv,?drayknil,elej,gnitsohdnert.&ed,hc,?letemirp:.ku,,m&edaid,ialcer.&ac,ku,su,??n&evueluk,woru,?paz,r&epolroov,o&pav,tnemele,??tenraxa.1-se,ululetoj,wcs.&gnilebaltrams,koobelacs,latemerab.&1-&rap-rf,sma-ln,?2-rap-rf,?rap-rf.&3s,cnf:.snoitcnuf,,etisbew-3s,mhw,s8k:.sedon,,tipkcoc,?s&8k,ecnatsni.&bup,virp,?ma-ln.&3s,etisbew-3s,mhw,s8k:.sedon,,tipkcoc,??waw-lp.&3s,etisbew-3s,s8k:.sedon,,tipkcoc,??xelpciffart,yawocne.ue,??za5cbgn--nx??e&1&53wlf--nx?7a1hbbgm--nx?ta3kg--nx??2a6a1b6b1i--nx?3ma0e1cvr--nx?418txh--nx?707b0e3--nx?a!.&ca?gro?hcs?lim?oc?t&en?opsgolb,?vog??09--nx??b!.&ca?etisbew321,gnitsohbew,nevueluk.yxorpze,pohsdaerpsym,snoitulostsohretni.duolc,topsgolb,?ortal?ut!uoy???c&0krbd4--nx!.&a2qbd8--nx?b8adbeh--nx?c6ytdgbd4--nx?d8lhbd5--nx???a&lp!.oc,?ps!.&lla4sx,rebu,tsafym,?artxe??sla??i!ffo??n&a&d?iler?nif?rusni!efil?srelevart???eics!.oby,??rofria??d!.&1sndnyd,42pi-nyd,7erauqs,amil4,b&ow-nrefeilgitsng--nx,rb-ni,vz-nelletsebgitsng--nx,?decalpb,e&daregtmueart,luhcsvresi,mohsnd,nihcamyek,tiesbew321,?hcierebsnoissuksid,keegnietsi,lsd-ni,m&oc,rofttalpluhcs,?n&-i-g-o-l,aw-ym,e&lletsebgitsnüg,sgnutiel,?i&emtsi,lreb-n&i,yd,??norblieh-sh.ti.segap,oitatsksid-ygolonys,pv&-n&i,yd,?nyd,?refeilgitsnüg,?orp-ytinummoc,p&h21,iog:ol,,ohsdaerpsym,?r&e&ntrapdeeps.remotsuc,su&-lautriv,lautriv,?t&adpusnd,tub-ni,uor-ym,?vres&-e&bucl,mohym,?bew-emoh:.nyd,,luhcs,??ogiv-&niem,ym,??s&d-&onys,ygolonys,?nd&-&dd,nufiat,sehcsimanyd,tenretni,yard,?isoc.nyd,ps,yard,?oper-&nvs,tig,?sndd:.&nyd,sndnyd,?,?topsgolb,vresi-&niem,tset,?xi2,y&awetag-&llawerif,ym,?srab,tic-amil,?zten&mitbel,sadtretteuf,??art!.oby,?i&sdoow?ug??on--nx??e!.&bil?dem?eif?gro?irp?kiir?moc!.topsgolb,?pia?ude?vog??ei?ffoc?gg?r&f?ged???f&a&c?s??il??g!.&gro?lim?moc?t&en?vp??ude?vog??a&f?gtrom?p!.&3xlh,detalsnart,grebedoc,kselp,mea,sndp,tengam,xlh,y&cvrp,kcor,???rots?yov??elloc?na&hcxe?ro!.hcet,??roeg?ug??i!.&pohsdaerpsym,topsgolb,vog??tilop?v&bba?om???j!.&fo,gro?oc?ten???k!.&c&a?s??e&m?n??ibom?o&c!.topsgolb,?fni?g??ro??i&b?l?n???l&a&dmrif?s!rof???b&a?i&b?dua???c&aro?ric??dnik?g!oog??i&bom?ms??l&asal?erauqa??ppa?uhcs?yts!efil???m!.&4&32i,p&ct,v,??66c,ailisarb,b&dnevar,g-raegelif,?ca?duolcsd,e&d-raegelif,i&-raegelif,lpad:.tsohlacol,,?pcm,?g&ro?s-raegelif,?hctilg,kcatsegde,noitatsksid,o&bmoy,c?t&nigol,poh,??p&i&on,snart.etis,?j-raegelif,ohbew,?r&aegelif,idcm,ofsnd,?s&dym,ndd,ti?umhol,?t&en?s&acdnuos,ohon,??u&a-raegelif,de??v&irp?og??y&golonys,olpedew,srab,??a&g?n!.&reh.togrof,sih.togrof,???em?irp?orhc?w??n!goloc?i&lno!.&egats-oree,oree,ysrab,??w??o!.&derno:.gnigats,,ecivres,knilemoh,?hp?latipac?ts&der?e&gdirb?rif???z!.&66duolc,amil,sh,???ruoblem??om?p!.&bog?gro?lim?mo&c?n??t&en?opsgolb,?ude??irg?yks??r!.&mo&c?n??ossa?topsgolb,?a&c!htlaeh??pmoc?wtfos??bc?eh?if?ots!.&e&rawpohs,saberots,?yflles,??taeht?u&ces?sni?t&inruf?necca??za???s!.&a!bap.us,disnim321,?b!ibnal?rofmok??c!a??d!b?n&arb?ubroflanummok???e?f!noc,?g!ro??h!f??i!trap??k!shf??l?m!oc,t??n!mygskurbrutan??o?p!ohsdaerpsym,p??r!owebdluocti,?s!serp?yspoi,?t!opsgolb,?u?vhf?w?x!uvmok??y?z??a&c?el?hc??i&er?urc??nesemoh?roh?uoh??t&a&d?ts&e!laer??lla???is!.&e&lej,nilnigol,r&etnim,ocevon,?winmo,?k&rowtenoilof,wnf,?laicosnepo,n&eyb,oyc,?spvtsaf,thrs,xulel,ysrab,?bew!.remarf,??ov?ra?t&ioled?ol??utitsni??u&lb?qi&nilc?tuob???v!.&21e?b&ew?ib?og??ce&r?t??erots?gro?lim?m&o&c?n??rif??o&c?fni??rar?stra?t&en?ni??ude?vog??as?e3gerb2h--nx?i&l!.&mea,xlh,??rd?ssergorp??ol??w&kct--nx?r??xul?y!.&gro?lim?moc?ten?ude?vog????f&0f3rkcg--nx?198xim--nx?280xim--nx?7vqn--nx?a!.&gro?moc?ten?ude?vog???b!.vog?wa9bgm--nx??c!.topsgolb,a1p--nx!.&a14--nx,b8lea1j--nx,c&avc0aaa08--nx,ma09--nx,?f&a1a09--nx,ea1j--nx,?gva1c--nx,nha1h--nx,pda1j--nx,zila1h--nx,??ns??ea1j--nx?g?iam?l&a1d--nx?og??n!.&bew?cer?erots?m&oc?rif??ofni?re&hto?p??stra?ten???orp?p!.&gro?moc?ude???rus?t!.hcs,w??w!.&hcs,zib,???g&2&4wq55--nx?8zrf6--nx??3&44sd3--nx?91w6j--nx!.&a5wqmg--nx?d&22svcw--nx?5xq55--nx??gla0do--nx?m1qtxm--nx?vta0cu--nx????455ses--nx?5mzt5--nx?69vqhr--nx?7&8a4d5a4prebgm--nx?rb2c--nx??a!.&gro?mo&c?n??oc?ten??vd??b!.&0?1?2?3?4?5?6?7?8?9?a?b?c?d?e?f?g?h?i?j?k?l?m?n?o?p?q?r?s?t!opsgolb,?u?v?w?x?y!srab,?z???c!b?za9a0cbgm--nx??e!.&eman?gro?ics?lim?moc!.topsgolb,?nue?ten?ude?vog??a??g!.&ayc,gro?lenap:.nomead,,oc?saak,ten???i&a?v??k!.&gro?ku,lim?moc?oi,pj,su,ten?ude?v&og?t,???m!.&drp?gro?lim?m&o&c?n??t??oc?ude?vog??pk??n!.&dtl,eman?gro?hcs?i!bom??l&im?oc,?m&oc!.topsgolb,?rif,?neg,ogn,ten?ude?vog??aw?i!b!mulp??car?d&art?dew??h&sif?tolc??k&iv?oo&b?c???ls?n&aelc?iart??p!pohs??re&enigne?tac??t&ad?ekram?hgil?lusnoc?neg?ov?soh!.tfarcnepo,??vi&g?l???o!s??u&rehcisrev?smas?tarebsnegömrev???o&d?lb?og!.&duolc,etalsnart,???r&2n084qlj--nx?ebmoolb?o!.&77ndc.c:sr,,a&remacytirucesym,t&neimip,sivretla,?z,?bew-llams,d&ab-yrev-si,e&sufnocsim,vas-si,?nuof-si,oog-yrev-si,uolc&arfniarodef,mw,??e&a,cin-yrev-si,grof&loot,peh,?l&as-4-ffuts,poeparodef,?m&-morf,agevres,ohruoyslles,?n&ozdop,uma.elet,?r&ehwongniogyldlob,iwym,uces-77ndc.nigiro.lss,?t&adidnac-a-si,is&-ybboh,golb,???fehc-a-si,golbymdaer,k&eeg-a&-si,si,?h,nut,?l&i&amwt,ve-yrev-si,?lawerif&-ym,ym,?sd-ni,?m&acssecca,edom-elbac,?n&af&blm,cfu,egelloc,lfn,s&citlec-a-si,niurb-a-si,tap-a-si,?xos-a-si,?ibptth,o&itatsksid,rviop,?p&j,v-ni,??o&jodsnd,tp&az,oh,??p&i&-on,fles,?o&hbew,tksedeerf,?tf&e&moh,vres,?ym,??r&e&gatop,ppepteews,su-xunil-a-si,?gmtrec,vdmac,?s&a&ila&nyd,snd,?nymsd,?b&alfmw,bevres,?d&ikcet.3s,ylimaf,?eirfotatophcuoc,j,koob-daer,ltbup,nd&-won,deerf,emoh,golb,kcud,mood,nyd:.&emoh,og,?,ps,rvd,tog,uolc,?s&a-skcik,ndd,?tnemhcattaomb,u,?t&ce&jorparodef.&duolc,gts.so.ppa,so.ppa,?riderbew,?e&ews-yrev-si,nretni&ehtfodne,fodne,??hgink-a-si,oi-allizom,s&ixetn&od,seod,?o&h-emag,l-si,?rifyam,??ue:.&a&-q,c,?cm,dc,e&b,d,e,i,m,s,?g&b,n,?hc,i&f,s,?k&d,m,s,u,?l&a,i,n,p,?n&c,i,?o&n,r,ssa,?pj,r&f,g,h,k,t,?s&e,i:rap,,u,?t&a,en,i,l,m,ni,p,?u&a,de,h,l,r,?vl,y&c,m,?z&c,n,??,vresnyd,x&inuemoh,unilemoh,?y&limafxut,srab,???ub&mah?oj???s!.&delacsne,gro?moc?rep?t&en?opsgolb,?ude?vog??gb639j43us5--nx??t?u!.&c&a?s??en?gro?moc?o&c?g??ro?topsgolb,??v!.ta,a1c--nx??wsa08--nx??h&0ee5a3ld2ckx--nx?4wc3o--nx!.&a&2xyc3o--nx?3j0hc3m--nx?ve4b3c0oc21--nx??id1kzuc3h--nx?l8bxi8ifc21--nx?rb0ef1c21--nx???8&8yvfe--nx?a7maabgm--nx??b!.&gro?moc?ten?ude?vog??mg??c!.&7erauqs,amil4,duolc-drayknil,etisbew321,gniksnd,p&h21,ohsdaerpsym,?sndtog,topsgolb,wolf.e&a.1pla,nigneppa,?xi2,ytic-amil,?aoc?et?ir!euz??r&aes?uhc??sob?taw!s???d0sbgp--nx?f&2lpbgm--nx?k??g!.&gro?lim?moc?ude?vog???m!a1j--nx??ocir?p!.&gro?i?lim?moc?ogn?ten?ude?vog???s!.&g&nabhsah,ro??l&im?xv,?m&oc?roftalp.", + "&su,tne,ue,??pib,ten?vog?won,yolpedew,?a&c?nom??i&d?f?ri???t!.&ca?enilno,im?ni?o&c?g??pohs,ro?ten??iaf!.oby,?laeh!.arh,?orxer?rae??vo!.lopdren,?zb??i&3tupk--nx?7a0oi--nx?a!.&ffo?gro?moc?ten?uwu,?1p--nx?bud?dnuyh?tnihc??b!.&gro?moc?oc?ro?ude??ahduba?o!m!.&duolcsd,ysrab,???s??c!.&ayb-tropora--nx?ca?d&e?m??esserp?gro?ln,moc?nif,o&c?g?ssa??ro?t&en?ni?roporéa??ude?vuog??cug?t??d&dk?ua??e&bhf--nx?piat??f!.&aw5-nenikkh--nx,dnala?i&ki,spak,?mroftalpduolc.if,nenikkäh,pohsdaerpsym,retnecatad.&omed,saap,?topsgolb,uvisitok321,yd,?onas??g!.&d&om?tl??gro?moc?ude?vog???h&c&atih?ra??s&abodoy?ibustim???juohs?k!.&gro?moc?ofni?ten?ude?vog?zib??b4gc--nx?iw!.remarf,?nisleh?s?uzus??l!.&aac,topsgolb,?drahcir?iamsi??maim?n!.&b&ew?og??ca?gro?lim?mo&c?n??ni?o&c?fni??pp?t&en?ni??ude?zib??airpic?i&hgrobmal?m??re??om?rarref?s!.&egaptig,ppatig,topsgolb,?ed??t&i&c?nifni??rahb??ut?v!.&21k?gro?moc?oc?ten???wik?xa&rp?t??yf??j&6pqgza9iabgm--nx?8da1tabbgl--nx?b!.&acirfa?eto?gro?m&oc?siruot??o&c!e??fni?noce?rga?tser??russa?s&etcetihcra?risiol?tacova??t&en?naruatser?opsgolb,?ude?vinu?yenom???d?f!.&ca?eman?gro?lim?moc?o&fni?rp??ten?vog?zib???nj?s?t!.&bew?c&a?in??eman?gro?lim?moc?o&c?g??t&en?ni?set??ude?vog?zib???yqx94qit--nx??k&8uxp3--nx?924tcf--nx?arfel?c&a&bdeef?lb??ebdnul?ilc?reme??d!.&e&disemmejh321,rots,?ger,mrif,oc,pohsdaerpsym,topsgolb,zib,?t??e&es?samet??h!.&a&4ya0cu--nx?5wqmg--nx??b3qa0do--nx?cni,d&2&2svcw--nx?3rvcl--nx??5xq55--nx?tl,?g&a0nt--nx?la0do--nx?ro??i&050qmg--nx?7a0oi--nx?xa0km--nx??m&1qtxm--nx?oc??npqic--nx?saaces,t&en?opsgolb,?ude?v&di?og?ta0cu--nx??xva0fz--nx?人&个?個?箇??司公?府政?絡&網?网??織&組?组??织&組?组??络&網?网??育&敎?教???n??i&tsob?vdnas??l!.&bew?c&a?os??dtl?gro?hcs?letoh?moc?nssa?ogn?prg?t&en?ni??ude?vog??at?cd?is??m!.&eman?fni?gro?moc?t&en?opsgolb,?ude?vog???n&ab!cfdh?etats?mmoc?t&en?fos??u??i!l!.&noyc,pepym,??p???oob?p!.&b&ew?og??gro?kog?m&af?oc??nog?ofni?pog?sog?ten?ude?vog?zib???row!ten!.&htumiza,nolt,o&c,vra,????s!.topsgolb,?t?u!.&c&a?lp??dtl?e&cilop?m??gro!.&gul:g,,sgul,yr&ettoly&lkeew,tiniffa,?tneelffar,???lenap-tnednepedni,n&noc,oissimmoc-&layor,tnednepedni,??o&c!.&bunsorter.tsuc,en&ilnoysrab,ozgniebllew,?krametyb.&hd,mv,?omida,p&i-on,ohsdaerpsym,?t&fihsreyal.j,opsgolb,?vres-hn,ysrab,??rpoc,?psoh,shn?t&en?nmyp,seuqni-tnednepedni,?vog!.&ecivres,ipa,ngiapmac,??weiver-tnednepedni,y&riuqni-&cilbup,tnednepedni,?srab,????l&04sr4w--nx?a!.&gro?lim?moc?t&en?opsgolb,?ude?vog??bolg?c?ed?g!el??i&c&nanif!.oc,lpl??os??romem?tnedurp??n&if?oitanretni??t&i&gid!.sppaduolc:.nodnol,,?p&ac?soh???ned?ot???c!.&bog?lim?oc?topsgolb,vog???dil?e&datic?n&ahc?nahc!rehtaew???t!ria?tam??vart??f&8f&pbgo--nx?tbgm--nx??a?n??g!.&gro?moc?oc?ten?ude?xx,zib,??h&d?op??i!.&21k?ca?fdi?gro?inum?oc!.&egapvar,redrotibat,t&ibatym,opsgolb,???ten?vog??a&f?m&e?g?toh???m?r??l&a&b&esab?t&eksab!.&sua,zn,??oof???c?mt??e&d?hs??ihmailliw?j??m!.&esserp?gro?moc?ten?ude?v&og?uog????n!.&etisbew321,no&med,rtsic,?oc,pohsdaerpsym,retsulc-gnitsoh,topsgolb,vog,yalphk,?o??o&a?btuf?l!.gmo,?o&c!.&ed,rotnemele,??hcs??rit?u??p!.&a&cin&diws?gel??d&g,ortso?urawon??i&dem?mraw?nydg,?k&elo&guld?rtso??slopolam?tsu?ytsyrut??l&ip?o&kzs?w&-awolats?oksnok????n&erapohs,img?zcel,?rog&-ai&bab?nelej??j?z??syn?tsaim?w&a&l&eib?i?o??zsraw??o&namil?tainop,??z&eiwolaib?mol???c&e&iw&alselob?o&nsos?rtso???le&im?zrogz???orw,p??d&em,ia?ragrats?uolc&inu,sds,??e&c&i&lrog?w&ilg,o&hc&arats?orp??klop?tak????yzreibok??i&csjuoniws?ksromop?saldop??l&ahdop?opo??napokaz,t&atselaer?iselpmis,?z&romop?swozam???g&alble?ezrbo&lok?nrat??ro??hcyzrblaw?i&csomohcurein?grat?klawus??k&e&rut?walcolw??in&byr?diws,sark,?le?o&nas?tsylaib??rob&el?lam??s&als?jazel?nadg,puls?rowezrp???l&colw?e&r?vart??i&am?m???m&o&c?dar?n?tyb??s&g?iruot??t!a???n&a&gaz?nzop,?i&bul?cezczs?lbul,molow?nok?zd&eb?obeiws???u&leiw?rot,?y&tzslo?z&rtek?seic????o&c,fni?k&celo?zdolk??lkan?n&leim?pek?t&uk?yzczs??z&copo?eing?rowaj???rga?tua?w&ejarg?ogarm???p&e&eb,lks!emoh,??klwwortso?ohs!-ecremmoce,daerpsym,??romophcaz?sos?t&aiwop?en?opos,ra,sezc??ude?v&irp?og!.&a&io?p?s!w???bni&p?w??ci?dtiw?e&ko?ss&p?w???fiw?g&imu?u??hiiw?m&igu?rio?u!o???nds!ipz??o&ks?p!pu??s?wtsorats??p&a?sp!mk?pk?wk??u&m?p??wk?z??r&hcso?ksw?p?s??s&i?oiw?u?zu??talusnok?w&gzr?i&p?rg?w??m?o&o?pu??u!imzw???z&kw?ouw?????w&a&l&corw?sizdow??w??o&golg?k&ark,ul?zsurp??r&az?gew??t&rabul,sugua??z&coks?sezr????xes?y&buzsak?d&azczseib?ikseb??hcyt?n&jes?lod-zreimizak??pal?r&ogt?uzam??walup?zutrak??z&am-awar?c&aprak?iwol?zsogdyb??dalezc?ib?s&i&lak?p??uklo????l??r&as?f?s??s!.&gro?moc?ten?ude?vog???t!.vog??ubnatsi?x3b689qq6--nx?yc5rb54--nx??m&00tsb3--nx?1qtxm--nx?981rvj--nx?a!.&aayn,enummoc?gro?moc?o&c?idar,ken,?t&en?opsgolb,??c!bew??dretsma?e&rts?t!.&citsalej,esruocsid,???fma?xq--nx??b!.&gro?moc?ten?ude?vog??i??c!.&moc?oc?ten?vog???d!.&gro?moc?ten?ude?vog???f!.&gro?moc?oidar,ten?ude??i??g!vu96d8syzf--nx??h?i!.&ca?gro?moc?o&c!.&clp?dtl???r,?t&en?t??vt??k?rbg4--nx??k!.&drp?e&rianiretev?sserp??gro?lim?m&o&c?n??t??nicedem?ossa?pooc?s&eriaton?neicamrahp?sa??ude?v&og?uog????l&if?ohkcots??o!.&dem?gro?m&oc?uesum??o&c?rp??ten?ude?vog??b?c!.&0x,121sesaila,2aq,3pmevres,5sndd,a&c&-morf,ir&bafno,fa,??g&-morf,oy-sehcaet,?i-morf,m&-morf,all&-a-si,amai,??p&-morf,c-a-si,?remacytirucesym,s,t&adtsudgniht,emta,?v-morf,w-morf,z,?b&ew&-sndnyd,arukas,draiw.segap,ottad,?ildts.ipa,?c&amytirucesemoh,d-morf,esyrcs,itsalej.omed,n&-morf,vym,?p&kroweht,ytirucesemoh,?q,rievres,s-morf,?d&aerotffuts,e&calpb,ifitrec-&si,ton-si,?llortnocduolc,rewopenignepw:.sj,,tsoh&2a,ecapsppa,??i&-morf,rgevissam.saap,?m-morf,n&-morf,abeht-htiw-si,?s-morf,uolc&-noitatsyalp,hr,iafaw.&d&ej,yr,?nol,?meaeboda,nevia,panqym:-&ahpla,ved,?,smetsystuo,ved&j,pw,??vreser,wetomer,?e&butuoyhtiw,ciffo-sndnyd,d:-morf,o&celgoog,n&il.srebmem,neve.&1-&su,ue,?2-&su,ue,?3-&su,ue,?4-&su,ue,????,erf&-sndnyd,sndd,?filflahevres,g&de-yltsaf,nahcxeevres,?i&hcet-a-si,p-sekil,?k&auqevres,irtsretnuocevres,?l&bitpa-no,googhtiw,?m&agevres,ina-otni-si,oh-&sndnyd,ta-sndnyd,??n&-morf,ilno&-evreser,ysrab,?og-si,?r&alfduolcyrt,ehwynanohtyp:.ue,,ihcec,?srun-a-si,t&i&nuarepo,s&-ybboh,aloy,elpmis,tipohs,xiw,??omer-sndnyd,upmocsma,ysgolb,?v&als-elcibuc-a-si,i&lsndd,tavresnoc-a-si,??z&amkcar,eelg,iig,??fehc-a-si,g&ni&gats-&raeghtua,swennwot,?ksndd,robsikrow,tsoh-bt.etis,?o&fgp,lb&-sndnyd,sihtsetirw,???h&n-morf,o-morf,?i&fiwehtno,h-morf,kiw-sndnyd,m-morf,p&aerocne,detsoh,?r-morf,w-morf,z&ihcppa,nilppa,??jn-morf,k&a&-morf,erfocsic,?cils-si,eeg&-a&-si,si,?sndd,?h,latsnaebcitsale:.&1-&ht&ron-ue,uos-&em,fa,pa,ue,??lartnec-&ac,li,ue,?ts&ae&-&as,pa,su,vog-su,?ht&ron-pa,uos-pa,??ew-&su,ue,vog-su,???2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-ts&aeht&ron-pa,uos-pa,?ew-ue,??,o-morf,r&adhtiwtliub,ow&-&sndnyd,ta-sndnyd,?ten-orehkcats,??sedal,u,?l&a&-morf,colottad,rebil-a-si,?f-morf,i&-morf,am&-sndnyd,detsohpw,??l&ecelffaw,uf-ytnuob:.a&hpla,teb,?,?ppmswa,ru-&elpmis,taen,?ssukoreh,xegap,?m&n-morf,pml.ppa,rofe&pyt.orp,rerac-htlaeh,?sacrasevres,uirarret-yltsaf,?n&a&cilbuper-a-si,f&-sllub-a-si,racsan-a-si,?i&cisum-a-si,ratrebil-a-si,?tarukas,?c,dc&hsums,umpw,xirtrepmi,?eerg-a-si,i&-morf,jod,?m-morf,o&ehtnaptog,isam-al-a-tse,r&italik,tap-el-tse,?s&iam-al-a-tse,replausunu,??pj,t-morf,?o&bordym,c,hce-namtsop,jodsnd,m&-morf,ed-baltlow,?n:iloxip,,t&ingocnozama.&1-&ht&ron-ue.htua,uos-&em.htua,fa.htua,pa.htua,ue.htua,??lartnec-&ac.htua,li.htua,ue.htua,?ts&ae&-&as.htua,su.&htua,spif-htua,??ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,vog-su.spif-htua,???2-ts&ae&-su.&htua,spif-htua,?ht&ron-pa.htua,uos-pa.htua,??ew-&su.&htua,spif-htua,?ue.htua,??3-ts&aeht&ron-pa.htua,uos-pa.htua,?ew-ue.htua,??tadym,??p&2pevres,aelutym,i&-sndnyd,fles,ogol,ruoy&esol,hctid,?ym&eerf,teg,??ohsdaerpsym,pa&-&cilcyc,rettalp,?anis:piv,,esaberif,k1,lortnocduolc,nuspu,oifilauq,r&aegyks,oetem:.ue,,?t&ilmaerts,norfegap,?ukoreh,?t&fevres,thevres,??r&081,a:-morf,tskcor-a-si,,b,e&d&iv&erp-yb-detsoh.saap,orpnwo,?ner&.ppa,no,??e&bevres,nigne-na-si,?ggolb-a-si,h&caet-a-si,pargotohp-a-si,?krow-drah-a-si,n&gised-a-si,ia&rtlanosrep-a-si,tretne-na-si,??p&acsdnal-a-si,eekkoob-a-si,?retac-a-si,subq,tn&ecysrab,iap-a-si,uh-a-si,?vres&-&ki.&cpj-rev-duolcj,duolcj,?s&ndnyd,pvtsaf,??inim,nmad,pc,sak,?y&alp-a-si,wal-a-si,?zilibomdeepsegap,?g,ituob,k,mgrp.nex,o&-morf,sivdalaicnanif-a-si,t&areleccalabolgswa,c&a-na-si,od-a-si,?susaym,??p-morf,u&as-o-nyd,e&tsoh.&duolc-gar,hc-duolc-gar,?ugolb-nom-tse,?omuhevres,??s&a&apod,ila&nyd,snd,?nymsd,vnacremarf,?bbevres,ci&p&-sndnyd,evres,?tcatytiruces,?dylimaf,e&cived-anelab,itilitu3,lahw-eht-sevas,mag-otni-si,t&i&iis,sro,?yskciuq,??fpi-&eralfduolc,fc,?i&ht2tniop,pa&elgoog,tneltneg,??jfac,k&-morf,aerf-ten,colb&egrof,pohsym,??m&-morf,cxolb,?n&d&-pmet,dyard,golb,htiwssem,mood,tog,?kselp,nyd,ootrac-otni-si,?o&-xobeerf,xobeerf,?ppa&-avnac,raeghtua,t&ikria,neg,??r&ac-otni-si,e&ntrap-paelut,tsohmaerd,??s&e&l-rof-slles,rtca-na-si,?ibodym,?tsaeb-cihtym.&a&llicno,zno,?ilay,lacarac,re&gitnef,motsuc,?sv,toleco,x:n&ihps,yl,?,?u,wanozama.&1-&3s,ht&ron-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??uos-&em&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??fa.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???la&nretxe-3s,rtnec-&ac&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,", + "?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??em.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?li.&3s,9duolc&-swa.stessa-weivbew,.sfv,?adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ts&ae&-&as&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??su:-etisbew-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,?,vog-su&-&3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,???ht&ron-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&ac.&3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,??ue&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??vog-su&-&3s,etisbew-3s,spif-3s,?.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,?????2-&htuos-&pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??lartnec-ue.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?ts&ae&-su&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??uos-pa&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,????ew-&su&-&3s,etisbew-3s,?.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,spif-&3s,tniopssecca-3s,?tniopssecca-3s,?spif-&3s,tniopssecca-3s,?tniopssecca-3s,yawetag-scitylana,??ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?????3&-ts&aeht&ron-pa&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,??uos-pa.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??ew-ue&-3s,.&3s,9duolc&-swa.stessa-weivbew,.s&fv,tessa-weivbew,??adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,???s,?4-tsaehtuos-pa.&3s,adbmal-tcejbo-3s,etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,?labolg-3s.tniopssecca.parm,?yasdrocsid,?t&arcomed-a-si,c&-morf,etedatad.&ecnatsni,omed,??eel&-si,rebu-si,?hgilfhtiwletoh,i:batym,,m-morf,n&atnuocca-na-si,e&duts-a-si,r-ot-ecaps,tnocresu&buhtig,e&capsppa,donil.pi,lbavresbo.citats,?pl,???ops&edoc,golb,ppa,?s&i&hcrana-&a-si,na-si,?laicos-a-si,pareht-a-si,tra-na-si,xetn&od,seod,??oh&piym,sfn,??u&-morf,nyekcoh-asi,?v-morf,?u&-rof-slles,4,a-sppatikria,e,h,oynahtretramssi,r:ug-a-si,,?v&n-morf,rdlf,w-morf,?w&o&lpwons-yrt,zok,?ww100,?x&bsbf.sppa,em,i&nuemoh,rtrepmi,?obaniateb,t-morf,unilemoh,?y&a&bnx:.&2u,lacol-2u,?,l&erottad,pezam,?wetag-llawerif,?dnacsekil,fipohsym,k&-morf,niksisnd,?rot&ceridevitcaym,sitk,?u:goo,,w-morf,x&alagkeeg,orp&hsilbup,mapson.duolc,???zesdrocsid,?inu??m?or?tsla??p!.&eman,nwo,??raf!.jrots,etats??s?t!.&gro?lim?mo&c?n??oc?ten?ude?vog???u&esum?rof??z!.&ca?gro?hcs?lim?moc?o&c?fni??ten?ude?vog?zib????n&315rmi--nx?a&brud?cilbuper?f?grompj?hkaga?idraug?m?ol?ssin?u&hix?qna??varac?yalo??b!.&gro?moc?oc,ten?ude?vog??c??c!.&ah?bh?c&a?s??d&5xq55--nx?g?s?uolctnatsni,?eh?g&la0do--nx?ro??h&a?q?s??i&7a0oi--nx?h??j&b?f?t?x?z??kh?l&h?im?j??m&n?oc!.&rekamegas.1-&htron-nc.&koobeton,oiduts,?tsewhtron-nc.&koobeton,oiduts,??swanozama.&1-&htron-nc.&3s,adbmal-tcejbo-3s,d&etacerped-3s,orp-&iupparme,oidutsrme,skoobetonrme,??etisbew-3s,ipa-etucexe,kcatslaud.&3s,etisbew-3s,tniopssecca-3s,?tniopssecca-3s,?tsewhtron-nc.&3s,adbmal-tcejbo-3s,dorp-&iupparme,oidutsrme,skoobetonrme,?etisbew-3s,ipa-etucexe,kcatslaud.&3s,tniopssecca-3s,?tniopssecca-3s,??be.1-&htron-nc,tsewhtron-nc,?????n&h?l?s?y??om?qc?s&g?j?ppa-avnac,?t&cennockciuq.tcerid,en??ude?vog?wt?x&g?j?n?s??z&g?x??司公?絡網?络网??b??d&g!.ypnc,?ka??e&drag?erg?fuak?hctik?i&libommi?w??m?po?r!ednaalv??sier?ves??g!.&ca?gro?moc?ten?ude?vog??is&ed!.ssb,?irev???h!.&bog?cc,gro?lim?moc?ten?ude???i!.&ac?bew,c&a?in??dni?e&m?sabapus,?g&5?6?p?ro??i&a?hled??ku?l&evart?im??m&a?oc?rif??n&c?eg??o&c!.cilcyc,?fni?i?rp??p&ooc?u??r&ahib?d?e??s&c?er?nduolc,senisub?u??t&arajug?en!retni??ni?opsgolb,sop??ude?v&og?t??ysrab,zib??elknivlac?griv?ks?lreb?p?v?w?x??k!.&gro?ten?ude?vog???l&eok?ocnil??m!.&cyn,gro?ude?vog???o&dnol?i&hsaf?n&o?utiderc??siv!orue??t&a&cude!.oc,?dnuof?tsyalp??c&etorp?u&a?rtsnoc?????kin?las?mrom?nac?p&q?uoc??s&iam?pe?scire??t&ron?sob??zama??p!.&gro?oc?ten?ude?vog??k??r&e&c?yab??op!.eidni,??s!.&gro?moc?osrep?t&opsgolb,ra??ude?v&inu?uog????t!.&d&ni?uolcegnaro,?gro?ltni?m&oc!nim??siruot??nif?o&fni?srep??sne?t&an?en??vog??m??u&f?r!.&bdnevar,lper,retropno,s&h,revres,?tnempoleved,xiw,??stad?xamay?y??v!.&a&lnos?ohhnah&k?t???c&a?ouhphnib?uhphniv??di?e&man?rtneb?uhneihtauht??g&n&a&boac?ig&ah?cab?n&a?ei&k?t???uah??nad?rtcos?uqneyut??o&dmal?hpiah?lhniv?nkad?ud&hnib?iah????ro??h&ni&b&aoh?gnauq?hnin?iaht??d&hnib?man??mihcohohphnaht?n&cab?gnauq?yat??tah?vart??tlaeh??i&a!bney?coal?gngnauq?laig?ngnod??onah?rtgnauq??kalkad?m&an&ah?gnauq??oc?utnok??n&a&ehgn?gnol?kcab?uhthni&b?n???e&ibneid?y&gnuh?u&gniaht?hp????osgnal??o&fni?ht&nac?uhp??i?rp??pahtgnod?t&en?ni?opsgolb,?u&a&hcial?mac?tgnuv-airab??de?eilcab??vog?zib???wo&rc?t!epac????o&76i4orfy--nx?a!.&bp?de?go?oc?ti?vg??boat??b!.&a&ci&sum?tilop??i&c&arcomed?neic??golo&ce?ncet??m&edaca?onoce??rt&ap?sudni??vilob??n&egidni?icidem??serpme?tsiver?vitarepooc??b&ew?og??dulas?e&rbmon?tr&a?op&ed?snart????g&olb?ro??ikiw?l&a&noi&canirulp?seforp??rutan??im??moc?o&fni?lbeup?rga?tneimivom??saiciton?t&askt?en?ni??ude?vt??h?iew?olg??c!.&bew?cer?dr&c,rac,?esabapus,gro?ipym,l&im?per:.di,,?m&o&c!.topsgolb,?n??rif??ofni?s&egap&dael,l,?tra??t&4n,en?ilperdellawerif:.di,,ni??ude?vog??a?e?in?mara?s&edarb?ic???d!.&b&ew?og??dls?gro?lim?moc?t&en?ra??ude?vog??agoba?if?zd7acbgm--nx??e&c?d&iv?or???f!ni!.&e&g&delwonk-fo-l&errab,lerrab,?ellocevoli,?ht-skorg,rom-rof-ereh,tadpusn:d,,?llatiswonk,macrvd,ofni-v,p&i&-on,fles,?ohbew,?ruo-rof,s&iht-skorg,nd&-cimanyd,nyd,uolc,??tsrifyam,ysrab,zmurof,???g&el?n!am?ib???hwsohw?i!.&35nyd,8302,a&minifed,tad-b,?b&altig,uhtig,?czh,d&in,raobelgaeb,u&olc&iaznab.ppa,ropav,?rd,??e&c&apsinu.1rf-duolc,ivedniser,?donppad.sndnyd,egipa,lej,nilnigol,sufxob,t&i&beulb,snoehtnap,?newtu,ybeeb.saap,??gni&gatsniser.secived,tsohytsoh,?ilpu,k&coregrof.di,orgn:.&as,ni,p&a,j,?su,u&a,e,??,ramytefasresworb,?moc?n&aicisum,mtsp:.kcom,,yded,?o&idutsxiw,t&oq,pyrctfihs,??p&opilol,pa&-arusah,e&nalpkcab,tybeeb.1dkes,???r&e&tsneum-hf,vres&cisab,lautriv,??ial.sppa,?s&codehtdaer,gnihtbew,nemeis-om,pparevelc,t&acdnas,ekcit,??t&e&kcubtib,notorp,?i&belet,detfihs,gude,kecaps,?raedon.egats,s&ohg,udgniht.&cersid.&dvreser,tsuc,?dorp.tsuc,gnitset.&dvreser,tsuc,?ved.&dvreser,tsuc,????vgib.0ku,whs,x&bslprbv.g,cq,rotide,?y&olpedew,srab,??b?d&ar?u&a?ts???j?r?syhp??j!.&eman?gro?hcs?lim?moc?ten?ude?vog???ll&ag?o??m!.&gro?moc?ten?ude?vog??g?il?mi?orp??n!.&a&0&b-ekhgnark--nx?c-iehsrgev--nx?g-lksedlig--nx?k-negnanvk--nx??1&p-nedragy--nx?q-&asierrs--nx?grebsnt--nx?lado-rs--nx?n&egnidl--nx?orf-rs--nx??regnayh--nx?ssofenh--nx??r-datsgrt--nx?s-ladrjts--nx?v-y&senner--nx?vrejks--nx???3g-datsobegh--nx?4&5-&dnaleprj--nx?goksnerl--nx?tedna", + "lyh--nx??6-neladnjm--nx?s-&antouvachb--nx?impouvtalm--nx??y-&agrjnevvad--nx?ikhvlaraeb--nx???7k-antouvacchb--nx?8&k-rekie-erv--nx?l-ladrua-rs--nx?m-darehsdrk--nx??a!.sg??bct-eimeuvejsemn--nx?d&do?iisevvad?lov?narts?uas??f&1-&l--nx?s--nx??2-h--nx??g&10aq0-ineve--nx?av?ev?lot?r&ajn&evvad?u??ájn&evvad?u????h?iz-lf--nx?j&ddadab?sel??k&el?hoj&sarak?šárák??iiv&ag&na&el?g??ŋ&ael?ág???ran???l&f?lahrevo?o&ms?s??sennev?t-&ilm--nx?tom--nx??u&-edr--nx?s??øms??muar?n&0-tsr--nx?2-dob--nx?5-&asir--nx?tals--nx??a&r!-i-om?f?t??t??douvsatvid?kiv?m&os?øs??n&od?ød??ra?sen?t&aouvatheig?ouv&a&c&ch&ab?áb??h&ab?áb???n??i&ag?ág??sa&mo?ttvid??án???z-rey--nx?ær&f?t???o&p-&ladr--nx?sens--nx??q-nagv--nx?r-asns--nx?s-kjks--nx?v-murb--nx?w-&anr&f--nx?t--nx??ublk--nx???ppol?q&0-t&baol--nx?soum--nx?veib--nx??x-&ipphl--nx?r&embh--nx?imph--nx???y-tinks--nx??r&f-atsr--nx?g-&an&ms--nx?nd--nx??e&drf--nx?ngs--nx??murs--nx?netl--nx?olmb--nx?sorr--nx??h-&a&lms--nx?yrf--nx??emjt--nx??i&-&lboh--nx?rsir--nx?y&d&ar--nx?na--nx??ksa--nx?lem--nx?r&ul--nx?yd--nx????stu??j-&drav--nx?rolf--nx?sdav--nx??kua?l-&drojf--nx?lares--nx??m-tlohr--nx?n-esans--nx?olf?p-sdnil--nx?s-ladrl--nx?tih?v-rvsyt--nx??s&a&ns?ons??i&ar?er&dron?r&os?øs???ár??la&g?h??mor!t??sir?uf?åns??t&koulo&nka?ŋká??la?p-raddjb--nx?r-agrjnu--nx?s&aefr&ammah?ámmáh??orf?r&o?ø???u-vreiks--nx??u&h-dnusel--nx?i-&drojfk--nx?vleslm--nx??j-ekerom--nx?k-rekrem--nx?u-&dnalr--nx?goksr--nx?sensk--nx??v-nekyr--nx?w-&k&abrd--nx?ivjg--nx??oryso--nx??y-y&dnas--nx?mrak--nx?n&art--nx?nif--nx??reva--nx??z-smort--nx??v!.sg?ledatskork?reiks??wh-antouvn--nx?x&9-dlofts--nx.aoq-relv--nx?d-nmaherk--nx?f-dnalnks--nx?h-neltloh--nx?i-drgeppo--nx?j-gve&gnal--nx?lreb--nx??m-negnilr--nx?n-drojfvk--nx??y&7-ujdaehal--nx?8-antouvig--nx?b-&dlofrs--nx?goksmr--nx?kivryr--nx?retslj--nx??e-nejsom--nx?f-y&krajb--nx?re&dni--nx?tso--nx??stivk--nx??g-regark--nx?orf?ørf??z9-drojfstb--nx??b&25-akiivagael--nx?53ay7-olousech--nx?a&iy-gv--nx?le-tl&b--nx?s--nx??n0-ydr--nx??c&0-dnal-erdns--nx?z-netot-erts--nx??g&g-regnarav-rs--nx?o-nejssendnas--nx??ju-erdils-ertsy--nx?nj-dnalh-goksrua--nx?q&q-ladsmor-go-erm--nx.&ari-yreh--nx?ednas??s-neslahsladrjts--nx???ca&4s-atsaefrmmh--nx?8m-dnusynnrb--nx?il-tl--nx?le-slg--nx?n5-rdib--nx?op-drgl--nx?uw-ynnrb--nx??d&a&qx-tggrv--nx?reh!nnivk?sd&ork?ørk??uas??ts&e&bi?kkar?llyh?nnan??g&ort?ørt??k&alf?irderf??levev?mirg?obeg&ah?æh??r&ah?ejg????barm-jdddb--nx?ie!rah?s&etivk?ladman???lof&r&os?øs??ts&ev.ednas?o.relav?ø.relåv???n&a&l&-erd&n&os?øs??ron??adroh.so?dron.&a&g5-b--nx?ri-yreh--nx??ob?y&oreh?øreh??øb??e&m!lejh??pr&oj?øj??vi??gyb?n&aks?åks??o&h-goksrua?rf??r&o?ua?ø??tros?øh-goksrua??rts!e&devt?lab?mloh???s&ellil?naitsirk?rof???u&l!os??s!d&im?lejt??e&guah?l&a?å???kkoh?lavk?naitsirk?r&af?eg&e?ie???tef?y&onnorb?ønnørb?????r&a&blavs!.sg??g&eppo?la???o&j&f&a!dniv?k?vk??die?e&dnas?kkelf??llins?r&iel?ots??s&lab?t&ab?åb??yt??å!k??ævk??les??ts??åg&eppo?lå???ureksub.sen??e&ayb-yrettn--nx?d&ar?isemmejh321,lom?r&of?øf??år??g&gyr?nats??i&meuv&ejsem&aan?åån??sekaal??rjea??j&d&ef?oks??les??k&er&aom?åom??hgna&ark?årk??iregnir?kot!s??s&ig?uaf???l&bmab?kyb?l&av?ehtats??oh??m&it?ojt?øjt??n&arg?g&os?øs??meh?reil?te?ummok?yrb??r&dils-erts&ev?y&o?ø???ua?vod??sa&ans?åns??t&robraa?spaav??urg??f&62ats-ugsrop--nx?a&10-ujvrekkhr--nx?7k-tajjrv-attm--nx??o!.sg?h??s!.sg??v!.sg???g&5aly-yr&n--nx?v--nx??a&llor?ve&gnal?lreb???n&av!snellu??org??oks&die?m&or?ør??ner&ol?øl??r&o?ø???r&eb!adnar?edyps?s&die?elf?gnok?n&ot?øt????obspras??uahatsla?åve&gnal?lreb???h&0alu-ysm--nx?7&4ay8-akiivagg--nx?5ay7-atkoulok--nx??a!.sg???i&e&hsr&agev?ågev??rf??k&h&avlaraeb?ávlaraeb??s??lm&a?å??mpouvtal&am?ám??pph&al?ál??rrounaddleid?ssaneve?ššáneve??j&0aoq-ysgv--nx?94bawh-akhojrk--nx??k&a&b&ord?ørd??jks?lleis??iv!aklejps?l&am?evs?u??mag?nel?ojg?r&a&l?n??epok?iel?y&or?ør???s&ah?kel?om??øjg??kabene?ojsarak?ram&deh.&aoq-relv--nx?rel&av?åv??so??e&let.&ag5-b--nx?ob?øb??ra???åjks??l&a!d&anrus?d&numurb?ron??e&gnard?nte?s&meh?sin??ttin??g&is?nyl??kro?l&em?l&ejfttah?of??u&ag-ertdim?s???n&am?era?gos?i&b?nroh?r??kos?nus?oj??o-&dron?r&os?øs???ppo?r&a!l?nram??e&gne?l?v??is?o&jts?ts??u&a-&dron?r&os?øs???h??å?æl?øjts??s&e&jg?nivk?ryf??kav?mor-go-er&om.&ednas?yoreh??øm.&ednas?yøreh???uag??t&las?rajh?suan??v&l&a?e-rots??u-go-eron??yt??ksedlig?res&a?å???bib&eklof?seklyf??es!dah??h!.sg??i&m?syrt??l&ejf?ov&etsua?gnit?ksa?sdie???n!.sg??o!.sg?boh?g?h??r!.sg??å!ksedlig??øboh??m&a&rah?vk??f!.sg??h!.sg??i&e&h&dnort?rtsua?ssej??rkrejb??ksa??ol?t!.sg??u&dom?esum?r&ab?drejg?evle?os?uh?æb?øs??ttals???n&a&g&av?okssman?åv??jlis?or?r&g?rev???e&d&do&sen?ton??lah?r&agy&o?ø??ojfsam???g&iets?n&a&l&as?lab??n&avk?ævk??t&arg?ddosen??v&al?essov???i&d&ol?øl??l&ar?ær???yl??reb??iks?k&srot?y&or?ør???l&a&d&gnos?n&er?ojm?øjm??om??tloh??ug?åtloh??mmard?ojs&om?sendnas??ppolg?s&lahsladr&ojts?øjts??o??t&o&l?t-erts&ev?o?ø???roh?øl??vly&kkys?nav??yam-naj!.sg??øjs&om?sendnas???g&orf?ujb??i&dnaort?vnarg??kob?ladendua?maherk&a?å??n&it?urgsrop??orf-&dron?r&os?øs???r&aieb?evats??sfev?uaks?yrts??o&6axi-ygvtsev--nx?c,d&ob?rav??ievs?kssouf?l&m&ob?øb??ous&adna?ech&ac?áč???so!.sg???msdeks?niekotuak?r&egark?olf?y&oso?øso???s&dav?mort???p&ed?ohsdaerpsym,p&akdron?elk???r&a&d&dj&ab?áb??iab??jtif?luag?mah?vsyt??e&gn&a&k&iel?ro??merb?n&at?mas??rav-r&os?øs??srop?talf?v&ats?el??y&oh?øh???ivsgnok??il?jkniets?k&a&nvej?rem?s&gnir?nellu???ie-er&den?v&o?ø???ram?sa?årem??la&jf?vh??m&b&ah?áh??mahellil??nnul?ts&l&oj?øj??ul??y&o?ø???imp&ah?áh??m!.sg??osir?t!.sg??ádiáb?ævsyt?øsir??s&adnil?en&dnas?e&dga?k&ri&b?k??som??ve??me&h?jg??nroh-go-ejve?s&a?ednil?k&o?ø??of?yt?å??tsev??gv?hf?igaval?o&r&or?ør??sman??so&fen&oh?øh??m?v??uh&lem?sreka.sen??å!dnil???t&a&baol?g&aov?grav??jjr&av-attam?áv-attám??l&a&b?s??ás??soum?ts?v&eib?our???e&dnaly&oh?øh??f?s&nyt?rokomsdeks?sen??vtpiks??in&aks?áks??loh&ar?år??n!.sg??o&m&a?å??psgolb,?s!.sg?efremmah?or?ør??terdi?á&baol?ggráv?lá&b?s??soum?veib???u&b!.sg?alk?e&dna?gnir?nner??les?ælk??dra&b?eb??g&nasrop?vi?ŋásrop??j&daehal&a?á??jedub?v&arekkhar?árekkhár???ksiouf?n&diaegadvoug?taed???v&irp?lesl&am?åm???y&b&essen?nart?sebel?tsev??o&d&ar?na!s??or??gavtsev?k&rajb?sa??lem?mrak?n&art?n&if?orb???r&a&mah?n?v??e&dni?t&so?ton??va??ul?yd??s&am?enner?gav?lrak?tivk??vrejks??ø&d&ar?na!s??ør??gåvtsev?k&rajb?sa??lem?mrak?n&art?n&if?ørb???r&e&dni?t&so?tøn??va??ul?yd?æ&n?v???s&enner?gåv?tivk?åm??vrejks???á&slág?tlá?vreiks??å&gåv?h?jddådåb?lf??ø&d&ob?rav??r&egark?olf??s&dav?mort????aki?i&sac?tal??u??o&b?f?g?hay?o?ttat??r!.&cer?erots?gro?m&o&c?n??rif?t??o&c,fni??pohs,stra?t&n?opsgolb,?www?ysrab,?e&a!.&a&ac?cgd?idem??bulc!orea??ci&ffartria?taborea??e&cn&a&l&lievrus-ria?ubma??netniam?rusni??erefnoc??gnahcxe?mordorea?ni&gne?lria?zagam??rawtfos??gni&d&art?ilg!arap?gnah???l&dnahdnuorg?ledom??noollab?retac?sael?t&lusnoc?uhcarap??vidyks??hcraeser?l&anruoj?euf?icnuoc?ortnoc!-ciffart-ria???n&gised?oi&nu?t&a&cifitrec?ercer?gi&tsevni-tnedicca?van??i&cossa!-regnessap??valivic??redef??cudorp?neverp-tnedicca????ograc?p&ihsnoipmahc?uorg!gnikrow???r&e&dart?enigne?korb?niart?trahc??o&htua?tacude???s&citsigol?e&civres?r??krow?serp!xe??tnega??t&farcr&ia?otor??hgil&f?orcim??liubemoh?n&atlusnoc?e&duts?m&esuma?n&iatretne?revog??piuqe????olip?ropria?si&lanruoj?tneics???w&erc?ohs??y&cnegreme?dobper?tefas????rref?z??p!.&a&aa?ca?pc??dem?ecartsnd.icb,gne?r&ab?uj??s&nduolc,rahc21,?t&acova?cca?hcer??wal?ysrab,???s!.&em?gro?hcs,moc?ten?ude?vog???t!.&0x,116,ayo,gro?lim?moc?nayn,sulpnpv,t&cennockciuq.tcerid,en??ude?v&dr,og???o&hp?m?v?yk??tol?ua??v&iv?lov??xas?ykot??p&a&ehc?g?m?s??eej?g!.&gro?ibom?moc?ossa?ppa,ten?ude???i&r!.nalc,?v?z??j!.&0o0o,a&3&5xq6f--nx?xqi0ostn--nx??5wtb6--nx?85uwuu--nx?9xtlk--nx?ad,b&ats,ihc!.&a&bihciakoy?don?ma&him?ye&ragan?tat???r&a&bom?gan?hihci??u&agedos?kas?ustak???s&os?ufomihs??t&amihcay?iran??w&a&g&im&anah?o??omak??kihci?zustum??ihsak??y&agamak?imonihci???e&akas?nagot??i&azni?esohc?h&asa?s&abanuf?ohc???ka&to?zok??musi?orihs?r&akihabihsokoy?o&dim?tak??ukujuk??usihs??nano&hc?yk??o&d&iakustoy?ustam??hsonhot?k&a&rihs?t??iba??nihsaran?sobimanim?tas&arihsimao?imot??uhc?yihcay??u&kujno?s&ayaru?t&imik?tuf???zarasik?????c&cah,ed,?g&as!.&a&gas?m&a&tamah?yik??ihsak??rat?t&a&gatik?hatik??ira!ihsin????e&kaira?nimimak??i&akneg?g&aruyk?o??h&c&amo?uo??siorihs??kaznak?modukuf?ra&gonihsoy?mi???nezih?u&k&at?ohuok??s&ot?tarak?????ihs!.&a&kok?m&a&hagan?yirom??ihsakat??rabiam?wagoton??e&miharot?nokih??houyr?i&azaihsin?esok?kustakat?moihsagih??na&mihcahimo?nok??o&hsia?mag?t&asoyot?ok?tir???us&ay?t&asuk?o??????k&aso!.&a&d&awihsik?eki??k&a&noyot?s&akaayahihc?oihsagih???oadat?uziak??m&ayas!akaso??odak??r&a&bustam?wihsak??ediijuf??t&akarih?i&k?us???wag&ayen?odoyihsagih???e&son?tawanojihs??honim?i&akas?h&cugirom?s&ayabadnot?i&a&kat?t??n??oyimusihsagih???k&a&rabi?sim??ustakat??muzi?r&ijat?otamuk???nan&ak?n&ah?es???o&ay?n&a&ganihcawak?simuzi?tak??eba?ikibah?oyot??t&anim?iad?omamihs??uhc??ust&oimuzi?tes????ou&kuf!.&a&d&amay?eos??g&no?ok?usak??hiku?k&awayim?uzii??ma&kan?y&asih?im???rawak?t&a&gon?ka&h?num?t???umo??wa&g&a&kan?nay?t??ias??ko!rih???y&ihsa?usak???e&m&ay?uruk??taruk?us??i&a&nohs?raihcat??goruk?h&cukuf?s&a&gih?hukuy??in???k&a&gako?muzim??iust?o?ustani??m&anim?otihsoynihs?u??r&ogo?ugasas??usu??ne&siek?zu&b?kihc???o&gukihc?h&ak?ot?ukihc??j&ono?ukihc??kayim?nihsukihc?to?uhc??u&fiazad?gnihs?stoyot????zihs!.&a&bmetog?d&amihs?eijuf?ihsoy?omihs??kouzihs?mihsim?ra&biah?honikam??tawi?wa&g&ekak?ukik??kijuf??yimonijuf??i&a&ra?sok??hcamirom?juf?kaz&eamo?ustam??ma&nnak?ta??nukonuzi?orukuf??nohenawak?o&nosus?ti??u&stamamah?z&a&mun?wak??i!ay?i&hs&agih?in??manim??mihs????????m&a&tias!.&a&d&ihsoy?ot?usah??k&a&dih?sa??o&arihs?s???m&a&tias?y&as?o&rom?tah??ustamihsagih???i&hsagurust?jawak??uri??ni?wa&g&e&ko?man??ikot?o??k&ara?i&hsoy?mak???ru?zorokot??y&a&g&amuk?ihsok?otah??kuf??imo??ziin??e&bakusak?ogawak?sogo?ttas?zokoy??i&baraw?h&cugawak?s&oyim?ubustam???iroy?k&ato?ihs?u&k?stawi???m&akoyr?i&hsoy?juf??uziimak???naznar?o&dakas?ihsay?jnoh?n&a&go?nim??imijuf?nah?oy??r&ihsayim?otagan??t&asim!ak??igus?omatik??zak??u&bihcihc!ihsagih??sonuok?ynah????y&ak&aw!.&a&d&ira?notimak??kadih?", + "ma&h&arihs?im??y&a&kaw?tik??oduk???ru&ustakihcan?y??sauy?wa&g&a&dira?zok??orih??konik??yok?zok??e&banat?dawi??i&garustak?jiat?mani??naniak?o&bog?nimik?t&asim?omihs&ah?uk????ugnihs???o!.&a&jos?koasak?m&ay&ako?ust??ihsayah??r&abi?ukawaihsin??wi&aka?nam???e&gakay?kaw??i&gan?h&cu&kasa?otes??sahakat??k&asim?ihsaruk??miin??n&anemuk?ezib??o&hsotas?jnihs?n&amat?imagak??ohs?uhcibik?????ot!.&a&damay?got?koakat?may&etat?ot??nahoj?riat?waki&inakan?reman???eb&ayo?oruk??i&h&asa?ciimak?sahanuf??kuzanu?m&an&i?ot??ih???nezuyn?otnan?u&hcuf?stimukuf?z&imi?ou???????ihs&o&gak!.&a&m&ayuok?ihsogak??si?yonak??e&banawak?n&at&akan?imanim??uka??tomoonihsin??i&adnesamustas?k&azarukam?oih??m&ama?uzi??usuy??nesi?o&knik?os?tomustam??uzimurat???rih!.&a&ka&n?s??m&ayukuf?i&hsorihihsagih?j&ate?imakikaso????r&a&bohs?h&ekat?im???es??tiak?wiad??e&kato?ruk??i&h&ci&akustah?mono?nihs??s&inares?oyim???manimasa?uk??negokikesnij?o&gnoh?namuk??uhcuf????uk&ot!.&a&bihci?mi&hsu&kot?stamok??m??wagakan??egihsustam?i&gum?h&coganas?soyim??kijaw?m&anim?uzia??ukihsihs??nan&a?iak??o&nati?turan????uf!.&a&batuf?m&a&to?y&enak?irok???ihs&im?ukuf??os?uko??r&aboihsatik?uganat??ta&katik?mawak?rih??w&a&g&akus?emas?uy??k&a&mat?rihs?sa??ihsi??nah??ohs???e&gnabuzia?iman?ta&d?tii???i&adnab?enet?hs&agih?iimagak??k&a&wi?zimuzi??ubay??minuk?r&ook?ustamay???nihsiat?o&g&etomo?ihsin?nan?omihs??no!duruf?rih??rihsawani?ta&may?simuzia???u&rahim?stamakawuzia?zia&ihsin?nay???????nug!.&a&bawak?doyihc?k&anna?oi&hsoy?juf?mot???m&ayakat?ustagaihsagih??n&ihsatak?nak??r&ahonagan?nak?o?u&kati?mamat???t&amun?inomihs?o??w&akubihs?iem?ohs???i&hsa&beam?yabetat??kas&akat?esi??m&akanim?uzio??ogamust?rodim??o&jonakan?n&eu?oyikust??tnihs??u&komnan?stasuk?yrik????rep,?n&ibmab,nog,ob,?ppacihc,ra&n!.&a&bihsak?d&akatotamay?u!o???guraki?m&ay&atik&imak?omihs??irokotamay??oki??ra&hihsak?n??wa&geson?knet???e&kayim?ozamay?sog?ustim??i&a&rukas?wak??garustak?h&ciomihs?sinawak??jo?ka&mnak?toruk??makawak?nos?r&net?otakat?ugeh???o&d&na?oyo??gnas?jnihs?nihsoy!ihsagih??tomarawat?yrok????rikik,?t&ag&amay!.&a&dihsio?k&atarihs?ourust??may&a&kan?rum??enak?onimak??rukho?ta&ga&may?nuf??hakat?kas??wa&g&ekas?orumam??ki&hsin?m??z&anabo?enoy?ot???zuy??e&agas?bonamay?dii?nihsagih?o??i&a&gan?nohs??h&asa?sinawak??nugo??o&dnet?jnihs?ynan??ukohak???iin!.&a&ga?k&ium?oagan??munou!imanim??t&a&bihs?giin??ioy??w&a&gioti?kikes?zuy??irak??yijo??e&kustim?mabust??i&aniat?hcamakot?kaz&awihsak?omuzi??m&a&gat?karum??o???n&anust?esog??o&das?ihcot?jnas?k&ihay?oym??mak?naga?ries??u&ories?steoj?????i&k&a!.&a&go?k&asok?oimak??t&ago!rihcah??ika!atik???w&aki?oyk???e&mojog?natim?suranihsagih?t&ado?okoy???i&hsoyirom?magatak?naokimak??nesiad?o&hakin?jnoh!iruy??nuzak?rihson?tasi&juf?m??yjnoh??u&kobmes?oppah????in,?o!.&a&dakatognub?m&asah?ihsemih??su?t&ekat?i&h?o????e&onokok?ustimak??i&jih?k&asinuk?ias?usu??mukust??onoognub?u&fuy?juk?ppeb?suk?????nayn,?wa&ga&k!.&a&mihsoan?rihotok?waga&kihsagih?ya???emaguram?i&j&nonak?ustnez??kunas?monihcu??o&hsonot?nnam?yotim??u&st&amakat?odat??zatu????nak!.&a&dustam?kus&okoy?tarih??maz?nibe?r&a&gihsaimanim?h&esi?imagas??wa&do?guy???u&im?kamak???tikamay?wa&k&ia?oyik?umas??sijuf??yimonin??e&nokah?saya??i&akan?esiak?gusta?hsuz?kasagihc?o?ukust??o&nadah?sio?tamay?????kihsi!.&a&danihcu?gak?kihs?mijaw?t&abust?ikawak??wazanak??i&gurust?hcionon?mon?ukah??nasukah?o&anan?ton!akan???u&kohak?stamok?z&imana?us?????niko!.&a&han?m&arat?ijemuk?uru??n&e&dak?zi??no??ra&hihsin?rih??wa&kihsi?niko??yehi?zonig??e&osaru?seay??i&hsagih?jomihs?k&a&gihsi?not??ihsakot??m&a&ginuk?kihsug?maz??igo?otekat??nuga!noy???n&a&moti?timoy?wonig??i&jikan?k???o&gan?jnan?tiad&atik?imanim???u&botom?kusug&akan!atik??imot??rab&anoy?eah??????yp,zomim,?bus,c&204ugv--nx?462a0t7--nx?678z7vq5d--nx?94ptr5--nx?a?mpopilol,?d&-2,17sql1--nx?3thr--nx?5&20xbz--nx?40sj5--nx??7&87tlk--nx?ptlk--nx??861ti4--nx?a?e!tfarcdnah,?n&eirf&lrig,yob,?om,?ooftac,?e&16thr--nx?5&1a4m2--nx?9ny7k--nx??damydaer,eweep,garotsarukas.&10ksi.3s,20ksi.3s,?i&bmoz,m!.&a&bot?k&asustam?uzus??m&a&him?y&emak?im???ihs??nawuk?wi&em?k???e&bani?ogawak?si!imanim???i&arataw?gusim?h&asa?ciakkoy??k&a&mat?sosik?t??iat??raban??o&dat?hik?n&amuk?ihseru?o&du?mok????ust????kilbew,lasrepus,mihe!.&a&m&a&h&ataway?iin??yustam??ij&awu?imak???taki!man???ebot?i&anoh?kasam?rabami??n&ania?egokamuk?oot??o&jias?kihcu?nustam?uhcukokihs?yi!es???u&kohik?zo????n!.&arukas,lapo,n&erukom,riheg,?omomus,stnim,teniesa.resu,xob-liam,yrovi,zapot,?amihs!.&a&d&amah?ho?usam??kustay?m&a?ihsoni&hsin?ko???wakih??e&namihs?ustam??i&g&aka?usay??konikak?mikih??nannu?o&mu&kay?zi!ihsagih?uko???nawust?tasim??u&stog?yamat????nep,?rotsnoihsaf,srev,t&awi!.&a&bahay?d&amay?on??koirom?t&a&honat?katnezukir??imus??w&as&ijuf?uzim??ihs???e&hon&i&hci?n??uk??tawi??i&a&duf?murak?wak??h&custo?si&amak?ukuzihs???j&oboj?uk??k&a&m&anah?uzuk??sagenak??esonihci??m&akatik?uzia&rih?wi????o&kayim?no&rih?t??tanufo??uhso???isarap,saman,tococ,?ulbybab,?g&3zsiu--nx?71qstn--nx?l?olblooc,?h&03pv23--nx?13ynr--nx?22tsiu--nx?61qqle--nx?o-hu,sulb,?i&54urkm--nx?azosbew,ced,g&ayim!.&a&dukak?m&a&goihs?kihs??ihsustam!ihsagih??unawi??r&awago?iho??ta&bihs?rum??w&a&gano?kuruf??iat??y&imot?ukaw???e&mot?nimes??i&hsiorihs?ka&monihsi?s&awak?o???mak?r&ataw?o&muram?tan????o&az?jagat?t&asim?omamay???u&fir?k&irnasimanim?uhsakihcihs?????ihcot!.&a&g&a&h?kihsa??ust??kom?m&ay&o?usarak??unak??r&a&boihsusan?watho??iho?ukas??t&akihsin?iay??wa&konimak?zenakat??y&imonustu?oihs???e&iiju?kustomihs?nufawi??i&akihci?g&etom?ihcot?on???o&k&ihsam?kin??nas?sioruk?tab??u&bim?san?????h&c&ia!.&a&dnah?m&a!h&akat?im??yuni??ihs&ibot?ust???r&a&hat?tihs??ik?u&ihsagih?kawi???t&ihc?o&k?yot???wa&koyot?zani??yi&monihci?rak???e&inak?k&aoyot?usa??manokot?noyot??i&a&gusak?kot?sia??eot?h&asairawo?cugo?s&ahoyot?oyim???k&a&mok?zako??ihssi??motay?rogamag??n&an&ikeh?ok??ihssin??o&got?ihsin?jna?rihsnihs?suf?tes??u&bo?raho?s&oyik?takihs??yrihc?zah????ok!.&a&dusay?kadih?mayotom?r&ah&im?usuy??umakan??sot!ihsin??wa&g&atik?odoyin??k&as?o????i&esieg?hco!k??jamu?k&a!sus??usto??ma&gak?k??rahan??o&mukus?n&i?ust!ihsagih???torum?yot!o???u&koknan?zimihsasot????ugamay!.&a&m&ayukot?ihso??toyot??e&bu?subat??i&gah?kesonomihs?nukawi?rakih??nanuhs?otagan?u&ba?foh?otim?stamaduk?uy?????s&anamay!.&a&dihsoyijuf?mayabat?r&ahoneu?ustakihsin??w&a&k&ayah?ijuf??suran??ohs???egusok?i&ak?h&cimakan?s&anamay?od???k&asarin?u&feuf?sto????o&k&akanamay?ihcugawakijuf??nihso?t&asimawakihci?ukoh??uhc??spla-imanim?u&b&nan?onim??fok?hsok?rust????ubon,??ix,ka&rabi!.&a&bukust?gok?kan!ihcatih??m&a&sak?timo?wi??ihsak?ustomihs??ni?r&a&hihcu?way??u&agimusak?ihcust???t&ag&amay?eman??oihcatih??w&ag&arukas?o??os??yi&moihcatih?rom???e&bomot?dirot?not?tadomihs??i&a&k&as?ot??rao??esukihc?gahakat?h&asa?catih??k&a&rabi?saguyr??ihsani?uy??ma?rukustamat??o&dnab?giad?him?kati?rihsijuf?soj?t&asorihs?im??yihcay??u&fius?kihsu?simak????sagan!.&a&m&abo?ihsust??natawak?r&abamihs?u&mo?ustam???wijihc?yahasi??i&akias?hies?k&asagan?i??masah??neznu?o&besas?darih?t&eso?og!imaknihs????ust&igot?onihcuk?uf????zayim!.&a&biihs?guyh?k&oebon?ustorom??mihsuk?r&emihsin?uatik??ta&katik?mim??wag&atik?odak??ya??e&banakat?sakog??i&hsayabok?kaza&kat?yim??m&animawak?ot&inuk?nihs????nanihcin?o&j&ik?onokayim??n&ibe?ust??tias??urahakat????ro&cep,moa!.&a&dawot?turust?wasim??e&hon&ihc&ah?ihs??nas?og?ukor??sario??i&anarih?ganayati?hsioruk?jehon?kasorih?makihsah?nawo?r&amodakan?omoa???o&gnihs?kkat??u&ragust?stum????ttot!.&a&r&ahawak?uotok??sa&kaw?sim???egok?irottot?nanihcin?o&ganoy?nih?tanimiakas??u&bnan?z&ay?ihc??????ukuf!.&a&deki?gurust?ma&bo?h&akat?im??yustak??sakaw??eabas?i&akas?ho?jiehie?ukuf??nezihce!imanim??ono????k&26rtl8--nx?4&3qtr5--nx?ytjd--nx??522tin--nx?797ti4--nx?ci&gid,ht,sevol,?ee,limybab,n&at,upatilol,??l&33ussp--nx?e&ccabew.&resu,sr,?llarap,?lik,oof,rigetuc,?m&11tqqq--nx?41s3c--nx?ef,sioge,?n&30sql1--nx?65zqhe--nx?a&ebyllej,i&lognom,viv,??iam,n7p7qrt0--nx?o&o&las,mflah,?ruk,staw,??o&131rot--nx?7qrbk--nx?aic,c?d&iakkoh!.&a&deki?gakihset?hcebihs?k&adih?u&fib?narihs???m&ayiruk?hot?ihs&orihatik?ukuf??oras?usta??r&ib&a!ka??o?uruf??ozo?u&gakihsagih?oyot???sakim?ta&gikust?mun??w&a&ga&k&an?uf??nus!imak???k&aru?i&h&asa?sagih??kat?mak??omihs?um??zimawi??ine?oyk??yot??e&a&mustam?nan??b&a&kihs?yak??o&noroh?to???ian?k&ihsam?ufoto??nakami?ppoko!ihsin??sotihc?tad!okah??uonikat??i&a&bib?mokamot?n&a&k&kaw?oroh??wi??eomak?ihsatu?okik?usta&moruk?sakan????eib?h&c&ioy?u&bmek?irihs???s&ase?ekka?oknar?uesom???jufirihsir?k&amamihs?i&at?n???m&atik?otoyot??oa&kihs?rihs??r&a&hs?kihsi?mot??ihs&aba?ir??otarib???n&a&hctuk?rorum?se?tokahs??uber??o&kayot?m&ire?ukay??naruf!ima&k?nim???orih?r&ih&ibo?suk??o&bah?h&i&b?hsimak??sa??pnan?yan??umen??t&asoyik?eko?ukoh???u&bassa?kotnihs?m&assaw?uo??pp&akiin?en&ioto?nuk??ip??rato?s&akat?t&eb&e?i&a?hs!a??robon??m&e?o&m?takan???no&h?tamah??o&mik?s?t??u&kir?ppihc?st???onihsnihs?ufuras??uaru??yru!koh??zimihs!ok?????nu,?g!iti,oyh!.&a&bmat?dnas?gusak?k&at?o&oyot?y??uzarakat??m&ayasas?irah??wa&g&ani?okak??k&i&hci?mak??oy???yi&hsa?monihsin???i&asak?hs&aka?i&at?nawak???j&awa!imanim??emih??k&a&goa?s&agama?ukuf??wihsin??i&hsog?m???mati?oia?rogimak??n&annas?esnonihs??o&gasa!kat??ka?n&ikat?o?ustat??rihsay?sihs?tomus?yas??u&bay?gnihs?????hih,konip,l&bs,ik,?mol,nagan!.&a&bukah?d&a&w?yim??e&ki?u??ii??k&a&s&ay?uki??zus??ihsoo?ousay??m&ay&akat?ii??i&hsukufosik?jii??ukihc??n&i!hsetat??uzii??r&ah?ugot??saim?t&agamay?oyim??w&a&g&a&kan?n??o??kustam?ziurak??onim!imanim??u&koo?s!omihs????ya&ko?rih???e&akas?nagamok?subo??i&gakat?h&asa?c&a!mo!nanihs???uonamay??sukagot??k&a&kas?mimanim?to??ia&atik?imanim??oa?uzihcom??m&akawak?ijuf?o!t???r&ato?ijoihs?omakat???n&ana?esnoawazon??o&hukas?n&a&gan?kan??i&hc?muza??ustat??romok?si&gan?k??tomustam??u&k&as?ohukihc??stamega????o&b,m,pac,?to&mamuk!.&a&gamay?rahihsin?sukama!imak??tamanim??enufim?i&hcukik?k&ihsam?u??nugo!imanim??romakat??o&ara?rihsustay?sa?t&amay?om&amuk?us??u!koyg???yohc??u&sagan?zo????yk!.&a&bmatoyk?k&ies?oemak?uzaw??mayi&h&cukuf?sagih??muk??nihsamay?rawatiju?t&away?ik???e&ba&nat!oyk??ya??di?ni??i&ju?kazamayo?manim??natnan?o&gnatoyk?kum?mak?rihsamayimanim?y&gakan?ka&koagan?", + "s??oj???u&ruziam?z&ayim?ik??????wtc1--nx?ykot!.&a&d&i&hcam?mus??oyihc??k&atim?ihsustak??m&a&t!uko??yarumihsa&gih?sum???i&hs&agoa?ika?o!t??uzuok??ren???r&a&honih?wasago??iadok?umah??ssuf?t&ik?o??wa&g&anihs?ode??k&ara?ihcat???y&agates?ubihs???e&amok?donih?m&o?urukihsagih??soyik??i&enagok?gani?h&ca&da?tinuk??sabati??j&nubukok?oihcah??manigus??o&huzim?jihcah?n&akan?ih!sasum??urika??rugem?t&a&mayihsagih?nim??iat?ok??uhc?yknub??u&fohc?hcuf?kujnihs?????p&a&ehc,rc,?o&hs&eht,iiawak,yub,?lf,p&evol,ydnac,?rd&kcab,niar,???r&2xro6--nx?atselttil,e&d&nu,wohc,?h,ilf,pp&ep,irts,u,?t&aerg,tib,??g!r,?ks,o!on,?ufekaf,?s&9nvfe--nx?dom,p&ihc,oo,?remagten,sikhcnerf,u&bloohcs,ruci,srev,?xvp4--nx??t&a&cyssup,obgip,?e&rces,vlev,?hginyad,netnocresu,opsgolb,sidas,u&b,ollihc,??u&4rvp8--nx?fig!.&a&d&eki?ih??kimot?m&ayakat?ihsah??ne?raha&gi&kes?makak??sak??taga&may?tik??wa&g&ibi?ustakan??karihs!ihsagih????e&katim?uawak??i&gohakas?hc&apna?uonaw??k&ago?es?ot??m&anuzim?ijat??nak?urat??nanig?o&dog?jug?makonim?nim?roy?sihcih??u&fig?s&otom?t&amasak?oay??????hc,pup,stoknot,ynup,?wonsetihw,x&5ytlk--nx?irtam,?y&adynnus,dr,knarc,l&oh,rig,?moolg,ob,pp&ih,olf,?rgn&a,uh,?u6d27srjd--nx?vaeh,?z&72thr--nx?e&ej,lur,??井福?京東?分大?取鳥?口山?城&宮?茨??媛愛?山&富?岡?歌和??岡&福?静??島&児鹿?広?徳?福??崎&宮?長??川&奈神?石?香??庫兵?形山?手岩?木栃?本熊?根島?梨山?森青?潟新?玉埼?田秋?知&愛?高??縄沖?良奈?葉千?賀&佐?滋??道海北?都京?重三?野長?阜岐?阪大?馬群???k!.&art?gro?moc?per?ude?vog???l&eh?l??m!.uj,ac?j??nd?o&g?h&pih?s!.&esab,xilpoh,ysrab,???lnud?oc?t!.&lldtn,snd-won,???pa!.&0mroftalp,a&rusah,ted,?bew:erif,,cilcyc,e&erf-korgn,gatskrelc,kalfwons:.kniletavirp,,niln&igol,okoob,?tupmocegde,virdhsalfno,?ilressem,k&orgn,relc,?le&crev,napysae,?maerdepyt,naecolatigidno,poon,r&cne,emarf,?sserpirots,t&i&belet,lmaerts,?xenw,?wolfrettulf,yfilten,??ra&a?hs??u&ekam?llag?org!.esruocsid,cts?kouk?nayalo???vsr?xece4ibgm--nx??q&a!3a9y--nx??g?i!.&gro?lim?moc?ten?ude?vog???m?se??r&a!.&a&cisum?sanes??bog?gro?l&autum?im??moc!.topsgolb,?pooc?rut?t&e&b?n??ni??ude?vog??4d5a4prebgm--nx?b?c?eydoog?los?t&at?s!uen???ugaj??b!.&21g?a&b&a&coros?iuc??itiruc??cnogoas?dicerapa?gniram?i&naiog?ramatnas??n&erom?irdnol??op?p&acam?irolf?ma&j?s???rief?tsivaob??b!aj?ib?mi?sb??c&ba?e&r?t??js?sp?t!e???d&em?mb?n&f?i??rt??e&dnarganipmac?ficer?ht?llivnioj?rdnaotnas??f&dj?ed?gg?n&e?i???g&e&l!.&a&b,m,p,?bp,c&a,s,?e&c,p,s,?fd,gm,ip,jr,la,ma,nr,o&g,r,t,?p&a,s,?r&p,r,?s&e,m,r,?tm,??s??l&s?z??n&c?e?o??ol!b?f?v??pp?ro??hvp?i&du?kiw?nana?oretin?r&c?eurab??sp?te?xat??l&at&an?rof??el?im?sq??m&a?da?e&gatnoc?leb??f?ic?oc!.&etiselpmis,topsgolb,???nce?o&ariebir?c&e?narboir?saso??d&o?ranreboas??e&g?t??i&b?dar?ecam?r??rp?t&a?erpoir???p&er?m!e?t??ooc?pa?se??qra?r&af?ga?o&davlas?j??tn?ut??s&a&ixac?mlap?nipmac??ed?u&anam?j?m???t&am?e&d?n?v??nc?o&f?n??ra?sf??u&caug9?de?ja?rg??v&da?ed?og!.&a&b?m?p??bp?c&a?s??e&c?p?s??fd?gm?ip?jr?la?ma?nr?o&g?r?t??p&a?s??r&p?r??s&e?m?r??tm???rs?t??xiv?z&hb?ls?o&c?f?????c!.&as?ca?de?if?o&c?g??ro???e&bew?ccos?e&b?n&igne?oip??rac??gni&arg?rheob??h&sok?t&aew?orb???itnorf?k&col?o&p?rb???l&aed?ffeahcs??mal?nes?pinuj?t&a&eht?rebsnegömrev??law?nec?s&acnal?nom?ubkcolb??upmoc??v&o&csid?rdnal??resbo??wulksretlow?ywal?zifp??f!.&aterg?bew&-no,etis321,?drp?e&c&itsuj-reissiuh?narf-ne-setsitned-sneigrurihc,?lipuog,rianiretev,?hny,i&cc?rgabmahc,?m&o&c?n??t??n&eicamrahp,icedem,?ossa?pohsdaerpsym,s&e&lbatpmoc-strepxe,riaton,tsitned-sneigrurihc,uova??o&-x&bf,obeerf,?x&bf,obeerf,???t&acova,o&or-ne,psgolb,?rop:orea,,?vuog?xobided,?avc7ylqbgm--nx?s??g!.&etiselpmis,gro?moc?t&en?opsgolb,?ude?vog???h!.&e&erf,man??mo&c?rf??topsgolb,zi??ur??i!.&a&61f4a3abgm--nx?rf4a3abgm--nx??ca?di?gro?hcs?oc?ten?vog?نار&يا?یا???a&h?per??ew?lf??k!.&c&a?s??e&n?p?r??gk?iggnoeyg?kub&gn&oeyg?uhc??noej??l&im?uoes??man&gn&oeyg?uhc??noej??n&as&lu?ub??o&e&hcni?jead??wgnag???o&c?g??ro?s&e?h?m??topsgolb,u&gead?j&ej?gnawg????cilf??l!.&gro?moc?ten?ude?vog???m!.&topsgolb,vog???n!.&gro?moc?ofni?ten?ude?vog?zib???o&htua?t&c&a?od??laer???p!.&alsi?ca?eman?forp?gro?moc?o&fni?rp??t&en?se??ude?vog?zib???s?t!.&21k?bew?cn!.vog??eman?gro?kst?l&e&b?t??im?op??moc!.topsgolb,?neg?ofni?pek?rd?sbb?ten?ude?v&a?og?t??zib??f?m??ubad?vd??s&8sqif--nx?9zqif--nx?a!.vog?birappnb?gev?lliv?mtsirhc?s??b!.&ew,gro?moc?ten?ude?vog??oj?s?u??c&i&hparg?p?t&sigolyrrek?ylana???od??d&a?d?ik?l?n&iwriaf?omaid??oogemoh?rac??e!.&b&ewim321,og??gro?mo&c!.topsgolb,?n??pohsdaerpsym,ude??civres!.enilnigol,?d&d2bgm--nx?oc??h&ctaw?guh??i&lppus?rtsudni?treporp!yrrek???jaiv?l&aw?cycrotom?gnis?pats??m&ag!.yelp,?oh?reh??nut?ohs?picer?r&it?ut&cip!.7331,?nev???s&i&rpretne?urc??ruoc??taicossa?vig??g!nidloh??h5c822qif--nx?i!.&ekacpuc,gro?moc?t&en?ni?opsgolb,?ude?vog??a09--nx?nnet?rap?targ??k&c&or!.&ecapsbew,snddym,ytic-amil,??us??hxda08--nx?row??l!.&c&a?s??ed,gro?o&c?fni??ten?ude?vog?zib??a&ed?tner??e&ssurb?toh!yrrek???lahsram?m?oot??m!.&bal,etisinim,gro?moc?ten?ude?vog??b?etsys!.tniopthgink,?ialc??n&a&f?gorf?ol??i&a&grab?mod??giro??o&it&acav?cudorp?ulos??puoc???o&dnoc?geuj?ppaz?t&ohp!.remarf,?ua???p!.&ces?gro?moc?olp?ten?ude?vog??i&hsralohcs?lihp?t??u??r!.&au,ca?gro?ni?oc?topsgolb,ude?vog?xo,yldnerb.pohs,?a&c?p?tiug??c?e&dliub!.etisduolc,?erac?gor?levart?mraf?n&niw?trap??wolf??ot&cartnoc?omatat??pj?uot??s!.&em?gro?hcs?moc?ten?ude?vog?zib??alg?e&n&isub!.oc,?tif??rp!xe!nacirema???xnal??iws??t&a&eb?ob??ek&cit?ram??fig?h&cay?gilf??n&atnuocca?e&mt&rapa?sevni??ve!.&nibook,oc,????rap??u!.&a&c!.&21k?bil?cc???g!.&21k?bil?cc???i!.&21k?bil?cc???l!.&21k?bil?cc???m!.&21k!.&hcorap?rthc?tvp???bil?cc???p!.&21k?bil?cc???si?v!.&21k?bil?cc???w!.&21k?bil?cc????c&d!.&21k?bil?cc???n!.&21k?bil?cc???s!.&21k?bil?cc????d&e&f?lacsne.xhp,?i!.&21k?bil?cc???m!.&21k?bil?cc???n!.&bil?cc???s!.&bil?cc???u&olcrim,rd,??e&d!.&bil,cc???las-4-&dnal,ffuts,?m!.&21k?bil?cc???n!.&21k?bil?cc????h&n!.&21k?bil?cc???o!.&21k?bil?cc????i&h!.&bil?cc???m!.&21k?bil?c&c?et??goc?n&eg?otae??robra-nna?sum?tsd?wanethsaw???nd?r!.&bil?cc???v!.&21k?bil?cc???w!.&21k?bil?cc????jn!.&21k?bil?cc???k&a!.&21k?bil?cc???o!.&21k?bil?cc????l&a!.&21k?bil?cc???f!.&21k?bil?cc???i!.&21k?bil?cc????mn!.&21k?bil?cc???n&afflog,i!.&21k?bil?cc???m!.&21k?bil?cc???sn?t!.&21k?bil?cc????o&c!.&21k?bil?cc???m!.&21k?bil?cc???ttniop,?p&ion,rettalp,?r&a!.&21k?bil?cc???o!.&21k?bil?cc???p!.&21k?bil?cc????s&a!.&21k?bil?cc???dik?k!.&21k?bil?cc???m!.&21k?bil?cc???nd&deerf,uolc,??t&c!.&21k?bil?cc???m!.&21k?bil?cc???u!.&21k?bil?cc???v!.&21k?bil?cc????ug!.&21k?bil?cc???v&n!.&21k?bil?cc???w!.cc???x&ohparg,t!.&21k?bil?cc????y&b-si,k!.&21k?bil?cc???n!.&21k?bil?cc???w!.&21k?bil?cc????za!.&21k?bil?cc????ah!uab??bria?col?e!.ytrap.resu,?ineserf?lp?xe&l?n???vt?w!.&66duolc,gro?moc?s&ndnyd,tepym,?ten?ude?vog??a!.rekamegas.&1-&ht&ron-ue.&koobeton,oiduts,?uos-&em.&koobeton,oiduts,?fa.&koobeton,oiduts,?pa.&koobeton,oiduts,?ue.&koobeton,oiduts,???lartnec-&ac.&koobeton,oiduts,spif-koobeton,?em.&koobeton,oiduts,?li.&koobeton,oiduts,?ue.&koobeton,oiduts,??ts&ae&-&as.&koobeton,oiduts,?pa.&koobeton,oiduts,?su.&koobeton,oiduts,spif-koobeton,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,???ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&ac.&koobeton,spif-koobeton,?su.&koobeton,oiduts,?ue.&koobeton,oiduts,?vog-su.&koobeton,oiduts,spif-&koobeton,oiduts,?????2-&htuos-&pa.koobeton,ue.koobeton,?lartnec-ue.koobeton,ts&ae&-su.&koobeton,oiduts,spif-koobeton,?ht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,???ew-&su.&koobeton,oiduts,spif-koobeton,?ue.&koobeton,oiduts,????3-ts&aeht&ron-pa.&koobeton,oiduts,?uos-pa.&koobeton,oiduts,??ew-ue.&koobeton,oiduts,??4-tsaehtuos-pa.koobeton,??e&iver?n!.elbaeciton,??odniw??y&alcrab?ot???t&0srzc--nx?a!.&amil4,ca!.hts??etiesbew321,gni&liamerutuf,tsoherutuf,?o&c!.topsgolb,?fni,?p&h21,ohsdaerpsym,?r&euefknuf.neiw,o??v&g?irp,?xi2,ytic-amil,zib,?c?e!s??hc?l?mami?rcomed??b!.&gro?moc?ten?ude?vog??b?gl??c&atnoc?e&les?rid!txen????dimhcs?e!.&eman?gro?moc?ofni?ten?ude?vog?zib??b?em?grat?id?k&circ?ram??n!.&0rab,1rab,2rab,5inu,6vnyd,7&7ndc.r,erauqs,?a&l&-morf,moob,?minifed,remacytirucesym,tadsyawla,z,?b&boi,g,lyltsaf:.pam,,?c&i&nagro-gnitae,tats-oieboda,?paidemym,?d&e&calpb,ziamaka,?feruza,hiamaka,irgevissam.saap.&1-&gs,nol,rf,yn,?2-&nol,yn,??nab-eht-ni,uolc&meaeboda,nievas.c&di-etsedron,itsalej,?xednay:.e&garots,tisbew,?,??e&c&narusnihtlaehezitavirp,rofelacs.j,?gd&e&eruza,iamaka,?irbtib,?ht-no-eciffo,l&acs&liat.ateb,noom,?ibom-eruza,?m&ecnuob,itnuroieboda,ohtanyd,tcerider,?n&ilno-evreser,ozdop,?rehurht,s:abapus,,ti&s-repparcs,usegde,?zam&aym,kcar,??f&aeletis,crs.&cos,resu,?ehc-a-si,?g&ni&gats-&d&eziamaka,hiamaka,?e&gdeiamaka,tiusegde,?iamaka,nigiroiamaka,yekegde,?reesnes,sirkcilc,tsohnnylf,?olbevres,?i&amaka,pa-eruza,?k&catsvano,eeg-a&-si,si,?u,?l&acolottad,iamwt,meteh,s&d-ni,s-77ndc,??m&ac&asac,ih,?urofniem,?n&a&f&agp,lhn,?i&bed,llerk,??dcduabkcalb,i:giroiamaka,,pv-ni,?o&c-morf,duppa,jodsnd,rp-ytinummoc,ttadym,?p&i&-&etsef,on,?emoh,fles,nwo,?j,mac-dnab-ta,o&-oidar-mah,h&bew,sdaerpsym,??pa&duolc,egde,?tfe&moh,vres,?usnd,?r&e&ganamciffart,tsulcyduolc,vres-xnk,?vdslennahc:.u,,?s&a&ila&nyd,snd,?nymsd,?bbevres,dylimaf,e&gde-ndc,rauqs,suohsyub,t&isbeweruza,ys,??k&catstsaf,ekokohcs,?n&d&-won,aka,d,golb,npv,?oitcnufduolc,?ppacitatseruza:.&1,2:suts&ae,ew,?,3,4,5,6,7,aisatsae,eporuetsew,sulartnec,?,s&a-skcik,ecca&-citats,duolc,??t,wodniw.&eroc.bolb,subecivres,??t&adies,ce&ffeym,jorprot:.segap,,lespohs,?e&nretnifodne,smem,?farcenimevres,i-&ekorb,s&eod,lles,teg,??n&essidym,orfduolc,?r0p3l3t,s&ixetnod,oh&-spv:.citsalej.&cir,lta,sjn,?,gnik,???u&h,nyd,r:eakust.citsalej,,?ved-naissalta.dorp.ndc,x&inuemoh,spym,tsale.&1ots-slj,2ots-slj,3ots-slj,?unilemoh,?y&awetag-llawerif,ekegde,ffijduolc:.&ed-1arf,su-1tsew,?,ltsaf.&dorp.&a,labolg,?lss.&a,b,labolg,?pam,slteerf,?n&-morf,ofipi,?srab,?z&a-morf,tirfym,???p?tcip?v??f&ig?osorcim??g!.&bog?dni?ed,g&olb,ro??lim?moc?ot,ten?ude???h!.&dem?gro?l&er?op??m&oc?rif??o&fni?rp?s&rep?sa???po&hs?oc??t&en?luda?ra??ude?vuog???i!.&a&2n-loritds--nx?7e-etsoaellav--nx?8&c-aneseclrof--nx?i-lrofanesec--nx??at?b?c!cul??dv?i&blo&-oipmet?oipmet??cserb?drabmol?g&gof?urep??l&gup?i&cis?me&-oigger?oigger???uig&-&aizenev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf???aize", + "nev&-iluirf?iluirf??ev&-iluirf?iluirf??v&-iluirf?iluirf????n&a&brev?cul?pmac?tac??idras?obrac&-saiselgi?saiselgi??resi??otsip?r&b&alac!-oigger?oigger??mu??dna&-&attelrab-inart?inart-attelrab??attelrabinart?inartattelrab?ssela??epmi?ugil??tnelav&-obiv?obiv??vap?z&e&nev?ps&-al?al???irog???l&iuqa!l??leib??m&or?rap??n!acsot?e&dom?is?sec&-&ilrof?ìlrof??ilrof?ìlrof???g&amor&-ailime?ailime??edras?olob??i&ssem?tal??ne!var??o&cna?merc?rev?vas???oneg?p?r!a&csep?rr&ac&-assam?assam??ef??von??etam?tsailgo!-lled?lled???s!ip?sam&-ararrac?ararrac??u&caris?gar???t!a&cilisab?recam??resac?soa!-&d&-&ellav?lav??ellav?lav??ellav??d&-&ellav?lav??ellav?lav??ellav??te&lrab&-&airdna-inart?inart-airdna??airdnainart?inartairdna??ssinatlac???udap?v!o&dap?neg?tnam???zn&airb&-a&lled-e-aznom?znom??a&lledeaznom?znom??eaznom??e&c&aip?iv??soc?top??om???b&-&23,46,61,?3c-lorit-ds-onitnert--nx?be-etsoa&-ellav--nx?dellav--nx??c!f-anesec-lrof--nx?m-lrof-anesec--nx??he-etsoa-d-ellav--nx?m!u??o2-loritds-nezob--nx?sn-loritds&-nasl&ab--nx?ub--nx??nitnert--nx??v!6-lorit-dsnitnert--nx?7-loritds&-nitnert--nx?onitnert--nx???z&r-lorit-ds&-nitnert--nx?onitnert--nx??s-loritds-onitnert--nx???c&f?is?l?m?p?r?v??d&p?u!olcnys,??e&c!cel?inev?nerolf??f?g!apemoh321,ida&-&a&-onitnert?onitnert??otla!-onitnert?onitnert???a&-onitnert?onitnert??otla!-on&azlob?itnert??onitnert????hcram?l?m!or??n&idu?o&n&edrop?isorf??torc???p?r?s&erav?ilom??t!nomeip?s&eirt?oa!-&d-e&ellav?éllav??e&ellav?éllav???de&ellav?éllav??e&ellav?éllav?????v?znerif??g&a?b?f?il?o?p?r?up?vf??hc?i&b?c?dol?f?l!lecrev?opan?rof&-anesec?anesec???m?n&a&part?rt&-attelrab-airdna?attelrabairdna???imir?ret??p?r!a&b?ilgac?ssas???s!idnirb??t&ei&hc?r??sa??v??l&a!c??b?c?o&m?rit&-&d&eus&-&nitnert?onitnert??nitnert?onitnert??us&-&nitnert?onitnert??nitnert?onitnert??üs&-&nitnert?onitnert??nitnert?onitnert???s&-onitnert?onitnert???d&eus!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??us&-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert??üs!-&n&asl&ab?ub??ezob?itnert??onitnert??nitnert?onitnert???s&-onitnert?onitnert?????m&ac?f?i!t.nepo.citsalej.duolc,?ol?r??n&a!lim?sl&ab?ub???b?c?e!en.cj,v?zob??irut?m!p??p?r?t??o&a!v??b!retiv??c!cel??enuc?g!ivor??i&dem&-onadipmac?onadipmac??pmet&-aiblo?aiblo??rdnos?zal??l?m!a&greb?ret??oc?re&f?lap???n!a&dipmac&-oidem?oidem??lim?tsiro?zlob??ecip&-ilocsa?ilocsa??i&bru&-orasep?orasep??lleva?rot?tnert??r&elas?ovil??ulleb??p?r!a&sep&-onibru?onibru??znatac??oun??s!ivert?sabopmac??t!arp?e&nev?ssorg??n&arat?e&girga?rt?veneb????zz&era?urba???p&a?ohsdaerpsym,s?t??qa?r&a!m?s??b!a??c?f?g?k?me?o?p?s?t?v??s&a&b?iselgi&-ainobrac?ainobrac???b?c?elpan?i?m?o&t?x&bi,obdaili,??rahc21,s?t?v??t&a?b?c?l?m?nomdeip?o!psgolb,?p?v??u&de?l?n?p??v&a?og?p?s?t?v??y&drabmol?ellav&-atsoa?atsoa??licis?nacsut??z&al?b?c?p??ìlrof&-anesec?anesec???derc?er?f?m?utni??je3a3abgm--nx?kh?l!.&topsgolb,vog??uda??m!.&gro?moc!.topsgolb,?ten?ude???n&a&morockivdnas?ruatser?tnuocca??e&g?m&eganam!.retuor,?piuqe??r??i!.ue?m?opdlog??opud?uocsid??o&b?cs!.&ude,vog:.ecivres,,??d?g?h?j?oferab?p&edemoh?s???p!.&bewanigap321,emon?gro?lbup?moc?t&en?ni?opsgolb,?ude?vog???r&a!m&law?s???epxe?op&er?pus!.ysrab,?s???s!.&a&daxiabme?rarik,?e&motoas?picnirp?rots??gro?lim?moc?o&c?dalusnoc?hon,?ten?ude??a&cmoc?f??e&b?r?uq??i!rolf?tned??o&h!.&duolc&p,rim,?e&lej,tiseerf,?flah,l&enapysae,rupmet,?s&pvtsaf,seccaduolc,?tsafym,vedumpw,??p!sua???urt??t!.&eman?gro?ibom?levart?m&oc?uesum??o&c?fni?r&ea?p???pooc?sboj?t&en?ni??ude?vog?zib??ayh?n?o!bba?irram???uognah?xen?y!.gro,?ztej??u&2&5te9--nx?yssp--nx??a!.&a&s?w??civ?d&i?lq??fnoc?gro?moc!.&pohsdaerpsym,stelduolc.lem,topsgolb,??nsa?ofni?sat?t&ca?en?n??ude!.&a&s?w??ci&lohtac?v??dlq?sat?t&ca?n??wsn!.sloohcs????vog!.&a&s?w??civ?dlq?sat???wsn?zo??ti??c!.&fni?gro?moc?ten?ude?vog??i??d&e!.tir.segap-tig,?iab??e!.&dcym,enozgniebllew,noitatsksid,odagod.citsalej,s&nd&ps,uolc,?ppatikria,?ysrab,??g!.&bew?gro?m&aug?oc??ofni?ten?ude?vog???h!.&0002?a&citore?idem?kitore??edszot?gro?ilus?letoh?m&alker?lif?t?urof??naltagni?o&c?ediv?fni?levynok?nisac??pohs?rarga?s&a&kal?zatu??emag?wen??t&lob?opsgolb,rops??virp?xe&s?zs??ytic?zsagoj??os?sut??l!.&etisbew321,topsgolb,??m!.&ca?gro?moc?oc?ro?ten?vog???n!.&duolcesirpretne,eni&esrem,m,?tenkcahs,?em!.ysrab,??o&ggnaw?y!c???r!.&3kl,a&i&kymlak,rikhsab,vodrom,?yegyda,?bps,ca,duolcrim,e&niram,rpcm,?g&bc,nitsohurger.citsalej,ro,?ianatsuk,k&ihclan,s&m,rogitayp,??li&amdlc.bh,m,?moc,natsegad,onijym,pp,ri&b,d&cm:.spv,,orue,?midalv,?s&ar,itym,?t&en,ias321,ni,opsgolb,set,?u&4an,de,?vo&g,n,?ynzorg,zakvakidalv,?myc?p?ug??s!.&a&d&golov,nagarak,?gulak,i&groeg,kymlak,lerak,nemra,rikhsab,ssakahk,vodrom,zahkba,?lut,rahkub,vut,yegyda,znep,?bps,da&baghsa,rgonilest,?gunel,i&anatsuk,hcos,ovan,ttailgot,?k&alhsygnam,ihclan,s&legnahkra,m,n&a&mrum,yrb,?i&buytka,nbo,??tiort,vorkop,??l&ocarak,ybmaj,?na&gruk,jiabreza,ts&egad,hkazak-&htron,tsae,???ovonavi,r&adonsark,imidalv,?t&enxe,nek&hsat,mihc,??vo&hsalab,n,?ynzorg,z&akvakidalv,emret,??t&amok?i&juf?masih????v!.&em,g&olb,ro??moc?nc,ten?ude?ved,??ykuyr??v&b?c!.&emon?gro?moc?t&ni?opsgolb,?ude???ed!.&2r,ated,e&docotua,erf-korgn,nilnigol,?gnigats-oned,hcetaidem,korgn,le&crev,nap,?o&ned,tpyrctfihs,?ppa-rettalp,s&egap,r&ahc21,ekrow,??vr&esi,uc,?weiverpbuhtig,ylf,??ih?l!.&di?fnoc?gro?lim?moc?nsa?ten?ude?vog???m!.&eman?gro?lim?m&oc?uesum??o&fni?r&ea?p???pooc?t&en?ni??ude?vog?zib???o&g?m??rt?s!.&bog?der?gro?moc?ude???t!.&arukas,bew-eht-no,morf,naht-&esrow,retteb,?sndnyd,?d?i?won??uqhv--nx??w&a!.moc?hs?l??b!.&gro?oc???c!.&gro?moc?ten?ude??cp??e&iver!.oby,?n?s??g?k!.&bme?dni?gro?moc?ten?ude?vog???m!.&ca?gro?m&oc?uesum??oc?pooc?t&en?ni??ude?vog?zib??b??o&csom?h!s??n?w??p!.&344x,de?en?o&c?g??ro?snduolc,ualeb???r!.&ca?gro?lim?oc?pooc?ten?vog??n??t!.&a46oa0fz--nx?b&82wrzc--nx?ulc??emag?gro?l&im?ru,?moc!.reliamym,?t&en?opsgolb,?ude?v&di?og?ta0cu--nx??zibe?業商?織組?路網???z!.&ca?gro?lim?oc?vog????x&a!.&cm,eb,gg,s&e,u,?tac,ue,yx,?t??c!.&hta,ofni,vog???e&d&ef?nay??ma!nab??rof?s??ilften?jt?m!.&bog?gro?moc?t&en?opsgolb,?ude??g?ma2ibgy--nx??o&b!x??f?rex??rbgn--nx?s!.vog??x&am&jt?kt??x???y&4punu--nx?7rr03--nx?a&d!i&loh?rfkcalb??ot!.emyfilauqerp,??g!.segap,?lp?p!ila??rot?ssin?wdaorb??b!.&duolcym,fo?hcetaidem,lim?moc!.topsgolb,?vog??ab?gur??c!.&ca?dtl?gro?lim?m&oc!.&ecrofelacs.j,topsgolb,??t??orp?s&egolke?serp??ten?vog?zib??amrahp?nega??d&dadog?uts??e&kcoh?ltneb?n&dys?om?rotta??snikcm??g!.&eb,gro?moc?oc?ten?ude?vog??olonhcet!.oc,?rene??hpargotohp?id?k!.&gro?moc?ten?ude??s??l!.&clp?d&em?i??gro?hcs?moc?ten?ude?vog??f?imaf!nacirema??l&a?il??ppus??m!.&eman?gro?lim?moc?t&en?opsgolb,?ude?vog?zib??edaca!.laiciffo,?ra??n&apmoc?os??o&j?s??p!.&gro?lim?moc?pooc?ten?ude?vog???r&e&corg?grus?llag?viled??lewej?otcerid?tnuoc?uxul??s!.&gro?lim?moc?ten?ude?vog??pil??t&efas?i&c?ledif?n&ifx?ummoc!.&bdnevar,gon,murofym,???r&ahc?uces??srevinu??laer?r&ap!.oby,?eporp??uaeb??u!.&bug?gro?lim?moc!.topsgolb,?ten?ude??b!tseb???van?xes??z&a!.&eman?gro?lim?moc?o&fni?rp??pp?t&en?ni??ude?vog?zib???b!.&az,gro?jsg,moc?ten?ude?vog???c!.&4e,inum.duolc.&rsu,tlf,?m&laer,urtnecatem.motsuc,?oc,topsgolb,??d!.&cos?gro?lop?m&oc?t??ossa?t&en?ra??ude?vog???ib!.&duolcsd,e&ht-rof,mos-rof,rom-rof,?izoj,liartevitca,nafamm,p&i&-on,fles,?ohbew,tfym,?retteb-rof,snd&nyd,uolc,?xro,?g??k!.&duolcj,gro?lim?moc?t&en?ropeletzak.saapu,?ude?vog???m!.&ca?gro?lim?oc?ten?ude?v&da?og????n!.&asq-irom--nx?ca?gro?htlaeh?i&r&c?o&am?ām???wi!k???keeg?l&im?oohcs??neg?oc!.topsgolb,?t&en?nemailrap?vog???a!niflla???rawhcs?s!.&ca?gro?oc???t!.&c&a?s??e&m?n??ibom?l&etoh?im??o&c?fni?g??ro?vt???u!.&gro?moc?oc?ten??rwon??yx!.&e&nozlacol,tisgolb,?gnitfarc,otpaz,??zub??λε?υε?авксом?брс!.&гро?до?ка?р&бо?п!у?????г&б?ро??дкм?зақ?итед?килотак?леб?мок?н&йално?ом??рку?сур!.&арамас,бпс,гро,зиб,ичос,ксм,м&ок,ырк,?рим,я,??тйас?фр?юе?յահ?לארשי!.&בושי?הימדקא?ל&הצ?שממ????םוק?اي&روس?سيلم?ناتيروم??بر&ع?غملا??ة&كبش?ي&دوعسلا?روس??یدوعسلا??ت&اراما?را&ب?ڀ?ھب???ر&ئازجلا?ازاب?صم?طق??سنوت?عقوم?قارع?ك&تيب?يلوثاك??موك?ن&ا&تس&كاپ?کاپ??دوس?ر&يا?یا??مع?يلعلا??درالا?ميلا?ي&رحبلا?طسلف???ه&ارمه?يدوعسلا??وكمارا?يبظوبا?ۃیدوعسلا?टेन?त&राभ?ोराभ??नठगंस?मॉक?्मतराभ?ত&রাভ?ৰাভ??ালংাব?ਤਰਾਭ?તરાભ?ତରାଭ?ாயித்நஇ?ைக்ஙலஇ?்ரூப்பக்ஙிச?్తరాభ?ತರಾಭ?ംതരാഭ?ාකංල?มอค?ยทไ!.&จิกรุธ?ต็นเ?ร&ก์คงอ?าหท??ลาบฐัร?าษกึศ???ວາລ?ეგ?なんみ?アトス?トンイポ?ドウラク?ムコ?ル&グーグ?ーセ??ン&ゾマア?ョシッァフ??业企?东广?乐娱?你爱我?信中?务政?动移?博微?卦八?厅餐?司公?品食?善慈?团集?国中?國中?址网?坡加新?城商?尚时?山佛?店&商?网?酒大里嘉??府政?康健?息信?戏游?拉里格香?拿大?教主天?机手?构机!织组??标商?歌谷?浦利飞?港香!.&人個?司公?府政?絡網?織組?育教???湾台?灣&台?臺??物购?界世?益公?看点?科盈訊電?站网?籍書?线在?络网?网文中?聘招?販通?逊马亚?通联?里嘉?锡马淡?門澳?门澳?闻新?電家?국한?넷닷?성삼?컴닷??"); /** * If a hostname is not a key in the EXCLUDE map, and if removing its leftmost component results @@ -56,7 +56,7 @@ private PublicSuffixPatterns() {} */ public static final ImmutableMap UNDER = TrieParser.parseTrie( - "ac.vedwa,d&b?i.ym.ssr,uolc.&etiso&isnes,tnegam,?iaznab,rehcnar-no,scitats,??e&b.lrusnart,d.&ecapsrebu,yksurf,?noz.notirt,t&atse.etupmoc,is.&areduolc,hsmroftalp,tst,???g&oog.tnetnocresu,p??h&c.tenerif:.cvs,,k?trae.sppad:.zzb,,?k&c?f?nil.bewd,rowten.secla,u.hcs??ln.lrusnart,m&f.resu,j?m?oc.&duolcmeaeboda.ved,edo&c.redliub:->s,ved,?,nil.recnalabedon,?ico-remotsuc:.&ico,pco,sco,?,lrihwyap,mme0,osseccandcved,ppayfilpma,rennurppaswa,s&ecapsnaecolatigid,t&cejbo&edonil,rtluv,?nemelepiuq,?wanozama.&1-etupmoc,ble,etupmoc,wolfria.&1-&ht&ron-ue,uos-pa,?lartnec-&ac,ue,?ts&ae&-&as,su,?ht&ron-pa,uos-pa,??ew-ue,??2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-tsew-ue,???t&neyoj.snc,opsppa.r,???n&c.moc.swanozama.&ble,etupmoc,wolfria.1-&htron-nc,tsewhtron-nc,??ur.&dliub,e&doc,sabatad,?noitargim,??o&c.pato,i.&duolciaznab.sdraykcab,elacsnoom,nroca-no,oir-no,reniatnoceruza,s&3k-no,olots,?xcq.sys,y5s,??p&j.&a&mahokoy?yogan??ebok?i&adnes?kasawak??oroppas?uhsuykatik??n?pa.&knalfhtron,repoleved,tegeb,??r&b.mon?e??s&edoc.owo,noitulos.rehid,w.rosivda,?t&a.&ofnistro.&nednuk,xe,?smcerutuf:.&ni,xe,?,?en.&cimonotpyrc,hvo.&gnitsoh,saapbew,???u&e.lrusnart,r.onijym.&gni&dnal,tsoh,?murtceps,spv,??ved.&e&gats>s,lcl,?rahbew,?gts,lcl,treclacol.resu,yawetag,?z&c.murtnecatem.duolc,yx.tibelet,??"); + "ac.vedwa,bup.&di,nik,?d&b?i.ym.ssr,uolc.&etiso&isnes,tnegam,?iaznab,rehcnar-no,scitats,??e&b.lrusnart,d.&ecapsrebu,yksurf,?no&.nik,z.notirt,?t&atse.etupmoc,is.&areduolc,hsmroftalp,tst,???g&oog.tnetnocresu,p??h&c.tenerif:.cvs,,k?trae.sppad:.zzb,,?k&c?f?nil.bewd,rowten.secla,u.hcs??ln.lrusnart,m&f.resu,j?m?oc.&duolcmeaeboda.ved,e&crofselas.mroftalp.gts-redliub-edoc.tset.100,do&c.redliub:->s,ved,?,nil.recnalabedon,?ruza.ppaduolc,?ico-remotsuc:.&ico,pco,sco,?,lrihwyap,mme0,osseccandcved,ppayfilpma,rennurppaswa,s&ecapsnaecolatigid,t&cejbo&edonil,rtluv,?nemelepiuq,?wanozama.&1-etupmoc,ble,etupmoc,wolfria.&1-&ht&ron-ue,uos-pa,?lartnec-&ac,ue,?ts&ae&-&as,su,?ht&ron-pa,uos-pa,??ew-ue,??2-ts&ae&-su,ht&ron-pa,uos-pa,??ew-&su,ue,??3-tsew-ue,???t&neyoj.snc,opsppa.r,???n&c.moc.swanozama.&ble,etupmoc,wolfria.1-&htron-nc,tsewhtron-nc,??ur.&dliub,e&doc,sabatad,?noitargim,??o&c.pato,i.&duolciaznab.sdraykcab,e&lacsnoom,varb.s,?nroca-no,oir-no,reniatnoceruza,s&3k-no,olots,?xcq.sys,y5s,??p&j.&a&mahokoy?yogan??ebok?i&adnes?kasawak??oroppas?uhsuykatik??n?pa.&knalfhtron,nu&r,spu,?repoleved,tegeb,??r&b.mon?e??s&edoc.owo,noitulos.rehid,w&.rosivda,a.tsoper.etavirp,??t&a.&ofnistro.&nednuk,xe,?smcerutuf:.&ni,xe,?,?en.&cimonotpyrc,hvo.&gnitsoh,saapbew,???u&e.lrusnart,r.onijym.&gni&dnal,tsoh,?murtceps,spv,??ved.&e&gats>s,lcl,?rahbew,?gts,lcl,treclacol.resu,yawetag,?z&c.murtnecatem.duolc,yx.tibelet,??"); /** * The elements in this map would pass the UNDER test, but are known not to be public suffixes and From 5ddc67be6bac41585e19a9b2f0f225547bf9d6e3 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Fri, 9 Feb 2024 07:33:34 -0800 Subject: [PATCH 138/216] Remove two more obsolete `@J2ktIncompatible` from `primitives` tests RELNOTES=n/a PiperOrigin-RevId: 605625435 --- .../test/com/google/common/primitives/UnsignedLongsTest.java | 2 -- .../test/com/google/common/primitives/UnsignedLongsTest.java | 2 -- 2 files changed, 4 deletions(-) diff --git a/android/guava-tests/test/com/google/common/primitives/UnsignedLongsTest.java b/android/guava-tests/test/com/google/common/primitives/UnsignedLongsTest.java index faa8ec72a4be..ecb80951a87c 100644 --- a/android/guava-tests/test/com/google/common/primitives/UnsignedLongsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/UnsignedLongsTest.java @@ -195,7 +195,6 @@ public void testRemainder() { assertThat(UnsignedLongs.remainder(0xfffffffffffffffeL, 5)).isEqualTo(4); } - @J2ktIncompatible @GwtIncompatible // Too slow in GWT (~3min fully optimized) public void testDivideRemainderEuclideanProperty() { // Use a seed so that the test is deterministic: @@ -333,7 +332,6 @@ public void testParseLongThrowsExceptionForInvalidRadix() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt public void testToString() { String[] tests = { "0", diff --git a/guava-tests/test/com/google/common/primitives/UnsignedLongsTest.java b/guava-tests/test/com/google/common/primitives/UnsignedLongsTest.java index faa8ec72a4be..ecb80951a87c 100644 --- a/guava-tests/test/com/google/common/primitives/UnsignedLongsTest.java +++ b/guava-tests/test/com/google/common/primitives/UnsignedLongsTest.java @@ -195,7 +195,6 @@ public void testRemainder() { assertThat(UnsignedLongs.remainder(0xfffffffffffffffeL, 5)).isEqualTo(4); } - @J2ktIncompatible @GwtIncompatible // Too slow in GWT (~3min fully optimized) public void testDivideRemainderEuclideanProperty() { // Use a seed so that the test is deterministic: @@ -333,7 +332,6 @@ public void testParseLongThrowsExceptionForInvalidRadix() { } } - @J2ktIncompatible // TODO(b/285562794): Wrong result for j2kt public void testToString() { String[] tests = { "0", From 4937bf8203d0659d75a216523b4fa63b40819903 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Fri, 9 Feb 2024 07:47:15 -0800 Subject: [PATCH 139/216] Enable more `com.google.common.base` unit tests for J2kt native MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In some cases that also involved removing unnecessary `@J2ktIncompatible` from production code (`CharMatcher`, `Predicates`, `Splitter`, `Throwables`). Fixes in tests included: - adding `@Nullable` to test data collections when tests include `null` in test data. - predicate test nullness annotations were changed to generally declare Predicates as if `null` was handled, even if applying to `null` throws. This is done to preserve tests that verify consistent exception behavior across different predicates. (This is useful even for Kotlin because even in production code, predicates with correct nullness could be accidentally turned into predicates with incorrect nullness using unchecked casts.) - explicit type parameters were added in some places where J2kt’s type inference currently produces incorrect nullness - note that the nullness annotations are only sufficient to make Kotlin transpiler output type-check and not cause NPEs from transpiler-generated null checks. The annotations are not necessarily good enough for Java static analysis. - when testing identity of Integer, avoid small numbers because Kotlin has no portable equivalent of `new Integer` so J2kt has to use the equivalent of `Integer.valueOf` which reuses pre-boxed/cached objects for small numbers - tests that require passing arrays by reference to vararg callees (or null arrays) remain disabled. - some `CharMatcher` tests are disabled because Kotlin Native does not return the original input string for no-op `subSequence` or `replace` calls, breaking tests meant to verify that CharMatcher doesn’t make unnecessary copies. RELNOTES=n/a PiperOrigin-RevId: 605627910 --- .../com/google/common/base/AsciiTest.java | 2 - .../google/common/base/CharMatcherTest.java | 7 +- .../google/common/base/EquivalenceTest.java | 25 ++++-- .../com/google/common/base/FunctionsTest.java | 20 ++--- .../com/google/common/base/JoinerTest.java | 18 ++-- .../google/common/base/MoreObjectsTest.java | 24 ----- .../com/google/common/base/OptionalTest.java | 4 +- .../google/common/base/PreconditionsTest.java | 2 +- .../google/common/base/PredicatesTest.java | 90 +++++++++---------- .../com/google/common/base/SplitterTest.java | 26 +----- .../com/google/common/base/StopwatchTest.java | 2 +- .../com/google/common/base/StringsTest.java | 8 +- .../com/google/common/base/SuppliersTest.java | 3 +- .../google/common/base/ThrowablesTest.java | 18 ++-- .../common/base/ToStringHelperTest.java | 25 ------ .../test/com/google/common/base/Utf8Test.java | 6 -- .../com/google/common/base/CharMatcher.java | 15 ---- .../com/google/common/base/JdkPattern.java | 2 - .../google/common/base/PatternCompiler.java | 2 - .../com/google/common/base/Preconditions.java | 3 +- .../com/google/common/base/Predicates.java | 4 - .../google/common/base/SmallCharMatcher.java | 2 - .../src/com/google/common/base/Splitter.java | 3 - .../com/google/common/base/Throwables.java | 2 - .../com/google/common/base/AsciiTest.java | 2 - .../google/common/base/CharMatcherTest.java | 7 +- .../google/common/base/EquivalenceTest.java | 25 ++++-- .../com/google/common/base/FunctionsTest.java | 20 ++--- .../com/google/common/base/JoinerTest.java | 18 ++-- .../google/common/base/MoreObjectsTest.java | 24 ----- .../com/google/common/base/OptionalTest.java | 4 +- .../google/common/base/PreconditionsTest.java | 2 +- .../google/common/base/PredicatesTest.java | 90 +++++++++---------- .../com/google/common/base/SplitterTest.java | 26 +----- .../com/google/common/base/StopwatchTest.java | 2 +- .../com/google/common/base/StringsTest.java | 8 +- .../com/google/common/base/SuppliersTest.java | 3 +- .../google/common/base/ThrowablesTest.java | 18 ++-- .../common/base/ToStringHelperTest.java | 25 ------ .../test/com/google/common/base/Utf8Test.java | 6 -- .../com/google/common/base/CharMatcher.java | 15 ---- .../com/google/common/base/JdkPattern.java | 2 - .../google/common/base/PatternCompiler.java | 2 - .../com/google/common/base/Preconditions.java | 3 +- .../com/google/common/base/Predicates.java | 4 - .../google/common/base/SmallCharMatcher.java | 2 - .../src/com/google/common/base/Splitter.java | 3 - .../com/google/common/base/Throwables.java | 2 - 48 files changed, 212 insertions(+), 414 deletions(-) diff --git a/android/guava-tests/test/com/google/common/base/AsciiTest.java b/android/guava-tests/test/com/google/common/base/AsciiTest.java index 371a6a304eda..9e6b0e41ab86 100644 --- a/android/guava-tests/test/com/google/common/base/AsciiTest.java +++ b/android/guava-tests/test/com/google/common/base/AsciiTest.java @@ -18,7 +18,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import junit.framework.TestCase; /** @@ -139,7 +138,6 @@ public void testEqualsIgnoreCase() { assertFalse(Ascii.equalsIgnoreCase("[", "{")); } - @J2ktIncompatible @GwtIncompatible // String.toUpperCase() has browser semantics public void testEqualsIgnoreCaseUnicodeEquivalence() { // Note that it's possible in future that the JDK's idea to toUpperCase() or equalsIgnoreCase() diff --git a/android/guava-tests/test/com/google/common/base/CharMatcherTest.java b/android/guava-tests/test/com/google/common/base/CharMatcherTest.java index d78327ef08dc..b6131b52c263 100644 --- a/android/guava-tests/test/com/google/common/base/CharMatcherTest.java +++ b/android/guava-tests/test/com/google/common/base/CharMatcherTest.java @@ -112,7 +112,6 @@ public void testJavaIsoControl() { // method, but by overall "scenario". Also, the variety of actual tests we // do borders on absurd overkill. Better safe than sorry, though? - @J2ktIncompatible @GwtIncompatible // java.util.BitSet public void testSetBits() { doTestSetBits(CharMatcher.any()); @@ -133,7 +132,6 @@ public void testSetBits() { doTestSetBits(inRange('A', 'Z').and(inRange('F', 'K').negate())); } - @J2ktIncompatible @GwtIncompatible // java.util.BitSet private void doTestSetBits(CharMatcher matcher) { BitSet bitset = new BitSet(); @@ -311,6 +309,8 @@ private void reallyTestAllMatches(CharMatcher matcher, CharSequence s) { assertEquals(s.length(), matcher.countIn(s)); } + // Kotlin subSequence()/replace() always return new strings, violating expectations of this test + @J2ktIncompatible public void testGeneral() { doTestGeneral(is('a'), 'a', 'b'); doTestGeneral(isNot('a'), 'b', 'a'); @@ -680,13 +680,11 @@ public void testPrecomputedOptimizations() { assertSame(CharMatcher.any(), CharMatcher.any().precomputed()); } - @J2ktIncompatible @GwtIncompatible // java.util.BitSet private static BitSet bitSet(String chars) { return bitSet(chars.toCharArray()); } - @J2ktIncompatible @GwtIncompatible // java.util.BitSet private static BitSet bitSet(char[] chars) { BitSet tmp = new BitSet(); @@ -696,7 +694,6 @@ private static BitSet bitSet(char[] chars) { return tmp; } - @J2ktIncompatible @GwtIncompatible // java.util.Random, java.util.BitSet public void testSmallCharMatcher() { CharMatcher len1 = SmallCharMatcher.from(bitSet("#"), "#"); diff --git a/android/guava-tests/test/com/google/common/base/EquivalenceTest.java b/android/guava-tests/test/com/google/common/base/EquivalenceTest.java index 46b191a22cde..bb1d9ca76d87 100644 --- a/android/guava-tests/test/com/google/common/base/EquivalenceTest.java +++ b/android/guava-tests/test/com/google/common/base/EquivalenceTest.java @@ -26,6 +26,7 @@ import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link Equivalence}. @@ -71,9 +72,11 @@ public void testWrap() { LENGTH_EQUIVALENCE.wrap("hello"), LENGTH_EQUIVALENCE.wrap("world")) .addEqualityGroup(LENGTH_EQUIVALENCE.wrap("hi"), LENGTH_EQUIVALENCE.wrap("yo")) - .addEqualityGroup(LENGTH_EQUIVALENCE.wrap(null), LENGTH_EQUIVALENCE.wrap(null)) + .addEqualityGroup( + LENGTH_EQUIVALENCE.<@Nullable String>wrap(null), + LENGTH_EQUIVALENCE.<@Nullable String>wrap(null)) .addEqualityGroup(Equivalence.equals().wrap("hello")) - .addEqualityGroup(Equivalence.equals().wrap(null)) + .addEqualityGroup(Equivalence.equals().<@Nullable Object>wrap(null)) .testEquals(); } @@ -122,11 +125,11 @@ public void testOnResultOf_equals() { } public void testEquivalentTo() { - Predicate equalTo1 = Equivalence.equals().equivalentTo("1"); + Predicate<@Nullable Object> equalTo1 = Equivalence.equals().equivalentTo("1"); assertTrue(equalTo1.apply("1")); assertFalse(equalTo1.apply("2")); assertFalse(equalTo1.apply(null)); - Predicate isNull = Equivalence.equals().equivalentTo(null); + Predicate<@Nullable Object> isNull = Equivalence.equals().equivalentTo(null); assertFalse(isNull.apply("1")); assertFalse(isNull.apply("2")); assertTrue(isNull.apply(null)); @@ -138,17 +141,25 @@ public void testEquivalentTo() { .testEquals(); } + /* + * We use large numbers to avoid the integer cache. Normally, we'd accomplish that merely by using + * `new Integer` (as we do) instead of `Integer.valueOf`. However, under J2KT, `new Integer` + * gets translated back to `Integer.valueOf` because that is the only thing J2KT can support. And + * anyway, it's nice to avoid `Integer.valueOf` because the Android toolchain optimizes multiple + * `Integer.valueOf` calls into one! So we stick with the deprecated `Integer` constructor. + */ + public void testEqualsEquivalent() { EquivalenceTester.of(Equivalence.equals()) - .addEquivalenceGroup(new Integer(42), 42) + .addEquivalenceGroup(new Integer(42_000_000), 42_000_000) .addEquivalenceGroup("a") .test(); } public void testIdentityEquivalent() { EquivalenceTester.of(Equivalence.identity()) - .addEquivalenceGroup(new Integer(42)) - .addEquivalenceGroup(new Integer(42)) + .addEquivalenceGroup(new Integer(42_000_000)) + .addEquivalenceGroup(new Integer(42_000_000)) .addEquivalenceGroup("a") .test(); } diff --git a/android/guava-tests/test/com/google/common/base/FunctionsTest.java b/android/guava-tests/test/com/google/common/base/FunctionsTest.java index 75b7a9d56d2b..952f73e1b281 100644 --- a/android/guava-tests/test/com/google/common/base/FunctionsTest.java +++ b/android/guava-tests/test/com/google/common/base/FunctionsTest.java @@ -41,7 +41,7 @@ public class FunctionsTest extends TestCase { public void testIdentity_same() { - Function identity = Functions.identity(); + Function<@Nullable String, @Nullable String> identity = Functions.identity(); assertNull(identity.apply(null)); assertSame("foo", identity.apply("foo")); } @@ -91,11 +91,11 @@ public void testNullPointerExceptions() { } public void testForMapWithoutDefault() { - Map map = Maps.newHashMap(); + Map map = Maps.newHashMap(); map.put("One", 1); map.put("Three", 3); map.put("Null", null); - Function function = Functions.forMap(map); + Function function = Functions.forMap(map); assertEquals(1, function.apply("One").intValue()); assertEquals(3, function.apply("Three").intValue()); @@ -120,11 +120,11 @@ public void testForMapWithoutDefaultSerializable() { } public void testForMapWithDefault() { - Map map = Maps.newHashMap(); + Map map = Maps.newHashMap(); map.put("One", 1); map.put("Three", 3); map.put("Null", null); - Function function = Functions.forMap(map, 42); + Function function = Functions.forMap(map, 42); assertEquals(1, function.apply("One").intValue()); assertEquals(42, function.apply("Two").intValue()); @@ -168,7 +168,7 @@ public void testForMapWithDefaultSerializable() { public void testForMapWithDefault_null() { ImmutableMap map = ImmutableMap.of("One", 1); - Function function = Functions.forMap(map, null); + Function function = Functions.forMap(map, null); assertEquals((Integer) 1, function.apply("One")); assertNull(function.apply("Two")); @@ -350,11 +350,11 @@ public void testForPredicateSerializable() { } public void testConstant() { - Function f = Functions.constant("correct"); + Function<@Nullable Object, Object> f = Functions.constant("correct"); assertEquals("correct", f.apply(new Object())); assertEquals("correct", f.apply(null)); - Function g = Functions.constant(null); + Function<@Nullable Object, @Nullable String> g = Functions.constant(null); assertEquals(null, g.apply(2)); assertEquals(null, g.apply(null)); @@ -366,7 +366,7 @@ public void testConstant() { .testEquals(); new EqualsTester() - .addEqualityGroup(g, Functions.constant(null)) + .addEqualityGroup(g, Functions.<@Nullable Object>constant(null)) .addEqualityGroup(Functions.constant("incorrect")) .addEqualityGroup(Functions.toStringFunction()) .addEqualityGroup(f) @@ -406,7 +406,7 @@ public int hashCode() { public void testForSupplier() { Supplier supplier = new CountingSupplier(); - Function function = Functions.forSupplier(supplier); + Function<@Nullable Object, Integer> function = Functions.forSupplier(supplier); assertEquals(1, (int) function.apply(null)); assertEquals(2, (int) function.apply("foo")); diff --git a/android/guava-tests/test/com/google/common/base/JoinerTest.java b/android/guava-tests/test/com/google/common/base/JoinerTest.java index c5eb73d53aba..babc3d6e5b80 100644 --- a/android/guava-tests/test/com/google/common/base/JoinerTest.java +++ b/android/guava-tests/test/com/google/common/base/JoinerTest.java @@ -51,12 +51,13 @@ public class JoinerTest extends TestCase { private static final Iterable ITERABLE_1 = Arrays.asList(1); private static final Iterable ITERABLE_12 = Arrays.asList(1, 2); private static final Iterable ITERABLE_123 = Arrays.asList(1, 2, 3); - private static final Iterable ITERABLE_NULL = Arrays.asList((Integer) null); - private static final Iterable ITERABLE_NULL_NULL = Arrays.asList((Integer) null, null); - private static final Iterable ITERABLE_NULL_1 = Arrays.asList(null, 1); - private static final Iterable ITERABLE_1_NULL = Arrays.asList(1, null); - private static final Iterable ITERABLE_1_NULL_2 = Arrays.asList(1, null, 2); - private static final Iterable ITERABLE_FOUR_NULLS = + private static final Iterable<@Nullable Integer> ITERABLE_NULL = Arrays.asList((Integer) null); + private static final Iterable<@Nullable Integer> ITERABLE_NULL_NULL = + Arrays.asList((Integer) null, null); + private static final Iterable<@Nullable Integer> ITERABLE_NULL_1 = Arrays.asList(null, 1); + private static final Iterable<@Nullable Integer> ITERABLE_1_NULL = Arrays.asList(1, null); + private static final Iterable<@Nullable Integer> ITERABLE_1_NULL_2 = Arrays.asList(1, null, 2); + private static final Iterable<@Nullable Integer> ITERABLE_FOUR_NULLS = Arrays.asList((Integer) null, null, null, null); public void testNoSpecialNullBehavior() { @@ -247,7 +248,7 @@ public void testMap() { assertEquals("", j.join(ImmutableMap.of())); assertEquals(":", j.join(ImmutableMap.of("", ""))); - Map mapWithNulls = Maps.newLinkedHashMap(); + Map<@Nullable String, @Nullable String> mapWithNulls = Maps.newLinkedHashMap(); mapWithNulls.put("a", null); mapWithNulls.put(null, "b"); @@ -273,7 +274,7 @@ public void testEntries() { assertEquals("1:a;1:b", j.join(ImmutableMultimap.of("1", "a", "1", "b").entries())); assertEquals("1:a;1:b", j.join(ImmutableMultimap.of("1", "a", "1", "b").entries().iterator())); - Map mapWithNulls = Maps.newLinkedHashMap(); + Map<@Nullable String, @Nullable String> mapWithNulls = Maps.newLinkedHashMap(); mapWithNulls.put("a", null); mapWithNulls.put(null, "b"); Set> entriesWithNulls = mapWithNulls.entrySet(); @@ -363,7 +364,6 @@ public void remove() { } } - @J2ktIncompatible @GwtIncompatible // StringBuilder.append in GWT invokes Object.toString(), unlike the JRE version. public void testDontConvertCharSequenceToString() { assertEquals("foo,foo", Joiner.on(",").join(new DontStringMeBro(), new DontStringMeBro())); diff --git a/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java b/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java index 6a7149d174f9..eabfdb656cad 100644 --- a/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java +++ b/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java @@ -69,7 +69,6 @@ public void testToStringHelperWithArrays() { toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_instance() { String toTest = MoreObjects.toStringHelper(this).toString(); @@ -81,7 +80,6 @@ public void testConstructorLenient_instance() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_innerClass() { String toTest = MoreObjects.toStringHelper(new TestClass()).toString(); @@ -93,7 +91,6 @@ public void testConstructorLenient_innerClass() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_anonymousClass() { String toTest = MoreObjects.toStringHelper(new Object() {}).toString(); @@ -105,7 +102,6 @@ public void testConstructorLenient_anonymousClass() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_classObject() { String toTest = MoreObjects.toStringHelper(TestClass.class).toString(); @@ -122,7 +118,6 @@ public void testConstructor_stringObject() { assertEquals("FooBar{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_localInnerClass() { // Local inner classes have names ending like "Outer.$1Inner" @@ -137,7 +132,6 @@ class LocalInnerClass {} assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_localInnerNestedClass() { class LocalInnerClass { @@ -157,7 +151,6 @@ class LocalInnerNestedClass {} assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_moreThanNineAnonymousClasses() { // The nth anonymous class has a name ending like "Outer.$n" @@ -192,14 +185,12 @@ public void testToStringHelperLenient_moreThanNineAnonymousClasses() { } // all remaining test are on an inner class with various fields - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneField() { String toTest = MoreObjects.toStringHelper(new TestClass()).add("field1", "Hello").toString(); assertEquals("TestClass{field1=Hello}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneIntegerField() { String toTest = @@ -207,7 +198,6 @@ public void testToString_oneIntegerField() { assertEquals("TestClass{field1=42}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_nullInteger() { String toTest = @@ -232,7 +222,6 @@ public void testToStringLenient_nullInteger() { assertTrue(toTest, toTest.matches(".*\\{field1\\=null\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_complexFields() { Map map = @@ -277,7 +266,6 @@ public void testToString_addWithNullName() { } } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addWithNullValue() { final String result = MoreObjects.toStringHelper(new TestClass()).add("Hello", null).toString(); @@ -290,7 +278,6 @@ public void testToStringLenient_addWithNullValue() { assertTrue(result, result.matches(".*\\{Hello\\=null\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_ToStringTwice() { MoreObjects.ToStringHelper helper = @@ -310,7 +297,6 @@ public void testToString_ToStringTwice() { assertEquals(expected2, helper.toString()); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addValue() { String toTest = @@ -338,7 +324,6 @@ public void testToStringLenient_addValue() { assertTrue(toTest, toTest.matches(expected)); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addValueWithNullValue() { final String result = @@ -364,7 +349,6 @@ public void testToStringLenient_addValueWithNullValue() { assertTrue(result, result.matches(expected)); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_oneField() { String toTest = @@ -372,7 +356,6 @@ public void testToStringOmitNullValues_oneField() { assertEquals("TestClass{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsFirstNull() { String toTest = @@ -385,7 +368,6 @@ public void testToStringOmitNullValues_manyFieldsFirstNull() { assertEquals("TestClass{field2=Googley, field3=World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsOmitAfterNull() { String toTest = @@ -398,7 +380,6 @@ public void testToStringOmitNullValues_manyFieldsOmitAfterNull() { assertEquals("TestClass{field2=Googley, field3=World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsLastNull() { String toTest = @@ -411,7 +392,6 @@ public void testToStringOmitNullValues_manyFieldsLastNull() { assertEquals("TestClass{field1=Hello, field2=Googley}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_oneValue() { String toTest = @@ -419,7 +399,6 @@ public void testToStringOmitNullValues_oneValue() { assertEquals("TestClass{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyValuesFirstNull() { String toTest = @@ -432,7 +411,6 @@ public void testToStringOmitNullValues_manyValuesFirstNull() { assertEquals("TestClass{Googley, World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyValuesLastNull() { String toTest = @@ -445,7 +423,6 @@ public void testToStringOmitNullValues_manyValuesLastNull() { assertEquals("TestClass{Hello, Googley}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_differentOrder() { String expected = "TestClass{field1=Hello, field2=Googley, field3=World}"; @@ -467,7 +444,6 @@ public void testToStringOmitNullValues_differentOrder() { assertEquals(expected, toTest2); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_canBeCalledManyTimes() { String toTest = diff --git a/android/guava-tests/test/com/google/common/base/OptionalTest.java b/android/guava-tests/test/com/google/common/base/OptionalTest.java index ea930dc2177d..2694a1a0fb00 100644 --- a/android/guava-tests/test/com/google/common/base/OptionalTest.java +++ b/android/guava-tests/test/com/google/common/base/OptionalTest.java @@ -108,7 +108,7 @@ public void testOr_supplier_absent() { } public void testOr_nullSupplier_absent() { - Supplier nullSupplier = Suppliers.ofInstance(null); + Supplier nullSupplier = (Supplier) Suppliers.<@Nullable Object>ofInstance(null); Optional absentOptional = Optional.absent(); try { absentOptional.or(nullSupplier); @@ -119,7 +119,7 @@ public void testOr_nullSupplier_absent() { @SuppressWarnings("OptionalOfRedundantMethod") // Unit tests for Optional public void testOr_nullSupplier_present() { - Supplier nullSupplier = Suppliers.ofInstance(null); + Supplier nullSupplier = (Supplier) Suppliers.<@Nullable String>ofInstance(null); assertEquals("a", Optional.of("a").or(nullSupplier)); } diff --git a/android/guava-tests/test/com/google/common/base/PreconditionsTest.java b/android/guava-tests/test/com/google/common/base/PreconditionsTest.java index acbd7cfd1d48..61776d1f84ed 100644 --- a/android/guava-tests/test/com/google/common/base/PreconditionsTest.java +++ b/android/guava-tests/test/com/google/common/base/PreconditionsTest.java @@ -42,7 +42,6 @@ * @author Jared Levy */ @ElementTypesAreNonnullByDefault -@J2ktIncompatible // TODO(b/278877942): Enable @SuppressWarnings("LenientFormatStringValidation") // Intentional for testing @GwtCompatible(emulated = true) public class PreconditionsTest extends TestCase { @@ -125,6 +124,7 @@ public void testCheckArgument_singleNullArg_failure() { } } + @J2ktIncompatible // TODO(b/319404022): Allow passing null array as varargs public void testCheckArgument_singleNullArray_failure() { try { Preconditions.checkArgument(false, "A %s C", (Object[]) null); diff --git a/android/guava-tests/test/com/google/common/base/PredicatesTest.java b/android/guava-tests/test/com/google/common/base/PredicatesTest.java index ed017d00fafd..2f91da1665bb 100644 --- a/android/guava-tests/test/com/google/common/base/PredicatesTest.java +++ b/android/guava-tests/test/com/google/common/base/PredicatesTest.java @@ -46,25 +46,24 @@ * @author Kevin Bourrillion */ @ElementTypesAreNonnullByDefault -@J2ktIncompatible // TODO(b/278877942): Enable @GwtCompatible(emulated = true) public class PredicatesTest extends TestCase { - private static final Predicate TRUE = Predicates.alwaysTrue(); - private static final Predicate FALSE = Predicates.alwaysFalse(); - private static final Predicate NEVER_REACHED = - new Predicate() { + private static final Predicate<@Nullable Integer> TRUE = Predicates.alwaysTrue(); + private static final Predicate<@Nullable Integer> FALSE = Predicates.alwaysFalse(); + private static final Predicate<@Nullable Integer> NEVER_REACHED = + new Predicate<@Nullable Integer>() { @Override - public boolean apply(Integer i) { + public boolean apply(@Nullable Integer i) { throw new AssertionFailedError("This predicate should never have been evaluated"); } }; /** Instantiable predicate with reasonable hashCode() and equals() methods. */ - static class IsOdd implements Predicate, Serializable { + static class IsOdd implements Predicate<@Nullable Integer>, Serializable { private static final long serialVersionUID = 0x150ddL; @Override - public boolean apply(Integer i) { + public boolean apply(@Nullable Integer i) { return (i.intValue() & 1) == 1; } @@ -288,7 +287,7 @@ public void testAnd_serializationTernary() { @SuppressWarnings("unchecked") // varargs public void testAnd_applyIterable() { - Collection> empty = Arrays.asList(); + Collection> empty = Arrays.asList(); assertEvalsToTrue(Predicates.and(empty)); assertEvalsLikeOdd(Predicates.and(Arrays.asList(isOdd()))); assertEvalsLikeOdd(Predicates.and(Arrays.asList(TRUE, isOdd()))); @@ -396,9 +395,9 @@ public void testOr_serializationOneArg() { } public void testOr_applyBinary() { - Predicate falseOrFalse = Predicates.or(FALSE, FALSE); - Predicate falseOrTrue = Predicates.or(FALSE, TRUE); - Predicate trueOrAnything = Predicates.or(TRUE, NEVER_REACHED); + Predicate<@Nullable Integer> falseOrFalse = Predicates.or(FALSE, FALSE); + Predicate<@Nullable Integer> falseOrTrue = Predicates.or(FALSE, TRUE); + Predicate<@Nullable Integer> trueOrAnything = Predicates.or(TRUE, NEVER_REACHED); assertEvalsToFalse(falseOrFalse); assertEvalsToTrue(falseOrTrue); @@ -449,13 +448,14 @@ public void testOr_serializationTernary() { @SuppressWarnings("unchecked") // varargs public void testOr_applyIterable() { - Predicate vacuouslyFalse = Predicates.or(Collections.>emptyList()); - Predicate troo = Predicates.or(Collections.singletonList(TRUE)); + Predicate<@Nullable Integer> vacuouslyFalse = + Predicates.or(Collections.>emptyList()); + Predicate<@Nullable Integer> troo = Predicates.or(Collections.singletonList(TRUE)); /* * newLinkedList() takes varargs. TRUE and FALSE are both instances of * Predicate, so the call is safe. */ - Predicate trueAndFalse = Predicates.or(Arrays.asList(TRUE, FALSE)); + Predicate<@Nullable Integer> trueAndFalse = Predicates.or(Arrays.asList(TRUE, FALSE)); assertEvalsToFalse(vacuouslyFalse); assertEvalsToTrue(troo); @@ -520,7 +520,7 @@ public Iterator> iterator() { */ public void testIsEqualTo_apply() { - Predicate isOne = Predicates.equalTo(1); + Predicate<@Nullable Integer> isOne = Predicates.equalTo(1); assertTrue(isOne.apply(1)); assertFalse(isOne.apply(2)); @@ -531,7 +531,7 @@ public void testIsEqualTo_equality() { new EqualsTester() .addEqualityGroup(Predicates.equalTo(1), Predicates.equalTo(1)) .addEqualityGroup(Predicates.equalTo(2)) - .addEqualityGroup(Predicates.equalTo(null)) + .addEqualityGroup(Predicates.<@Nullable Integer>equalTo(null)) .testEquals(); } @@ -542,14 +542,16 @@ public void testIsEqualTo_serialization() { } public void testIsEqualToNull_apply() { - Predicate isNull = Predicates.equalTo(null); + Predicate<@Nullable Integer> isNull = Predicates.equalTo(null); assertTrue(isNull.apply(null)); assertFalse(isNull.apply(1)); } public void testIsEqualToNull_equality() { new EqualsTester() - .addEqualityGroup(Predicates.equalTo(null), Predicates.equalTo(null)) + .addEqualityGroup( + Predicates.<@Nullable Integer>equalTo(null), + Predicates.<@Nullable Integer>equalTo(null)) .addEqualityGroup(Predicates.equalTo(1)) .addEqualityGroup(Predicates.equalTo("null")) .testEquals(); @@ -566,10 +568,9 @@ public void testIsEqualToNull_serialization() { * stripper to remove comments properly. Currently, all tests before the comments are removed as * well. */ - @J2ktIncompatible @GwtIncompatible // Predicates.instanceOf public void testIsInstanceOf_apply() { - Predicate isInteger = Predicates.instanceOf(Integer.class); + Predicate<@Nullable Object> isInteger = Predicates.instanceOf(Integer.class); assertTrue(isInteger.apply(1)); assertFalse(isInteger.apply(2.0f)); @@ -577,10 +578,9 @@ public void testIsInstanceOf_apply() { assertFalse(isInteger.apply(null)); } - @J2ktIncompatible @GwtIncompatible // Predicates.instanceOf public void testIsInstanceOf_subclass() { - Predicate isNumber = Predicates.instanceOf(Number.class); + Predicate<@Nullable Object> isNumber = Predicates.instanceOf(Number.class); assertTrue(isNumber.apply(1)); assertTrue(isNumber.apply(2.0f)); @@ -588,10 +588,9 @@ public void testIsInstanceOf_subclass() { assertFalse(isNumber.apply(null)); } - @J2ktIncompatible @GwtIncompatible // Predicates.instanceOf public void testIsInstanceOf_interface() { - Predicate isComparable = Predicates.instanceOf(Comparable.class); + Predicate<@Nullable Object> isComparable = Predicates.instanceOf(Comparable.class); assertTrue(isComparable.apply(1)); assertTrue(isComparable.apply(2.0f)); @@ -599,7 +598,6 @@ public void testIsInstanceOf_interface() { assertFalse(isComparable.apply(null)); } - @J2ktIncompatible @GwtIncompatible // Predicates.instanceOf public void testIsInstanceOf_equality() { new EqualsTester() @@ -671,7 +669,7 @@ public void testSubtypeOf_serialization() { */ public void testIsNull_apply() { - Predicate isNull = Predicates.isNull(); + Predicate<@Nullable Integer> isNull = Predicates.isNull(); assertTrue(isNull.apply(null)); assertFalse(isNull.apply(1)); } @@ -693,7 +691,7 @@ public void testIsNull_serialization() { } public void testNotNull_apply() { - Predicate notNull = Predicates.notNull(); + Predicate<@Nullable Integer> notNull = Predicates.notNull(); assertFalse(notNull.apply(null)); assertTrue(notNull.apply(1)); } @@ -713,7 +711,7 @@ public void testNotNull_serialization() { public void testIn_apply() { Collection nums = Arrays.asList(1, 5); - Predicate isOneOrFive = Predicates.in(nums); + Predicate<@Nullable Integer> isOneOrFive = Predicates.in(nums); assertTrue(isOneOrFive.apply(1)); assertTrue(isOneOrFive.apply(5)); @@ -745,25 +743,27 @@ public void testIn_serialization() { public void testIn_handlesNullPointerException() { class CollectionThatThrowsNPE extends ArrayList { + @J2ktIncompatible // Kotlin doesn't support companions for inner classes private static final long serialVersionUID = 1L; @Override - public boolean contains(Object element) { + public boolean contains(@Nullable Object element) { Preconditions.checkNotNull(element); return super.contains(element); } } Collection nums = new CollectionThatThrowsNPE<>(); - Predicate isFalse = Predicates.in(nums); + Predicate<@Nullable Integer> isFalse = Predicates.in(nums); assertFalse(isFalse.apply(null)); } public void testIn_handlesClassCastException() { class CollectionThatThrowsCCE extends ArrayList { + @J2ktIncompatible // Kotlin doesn't support companions for inner classes private static final long serialVersionUID = 1L; @Override - public boolean contains(Object element) { + public boolean contains(@Nullable Object element) { throw new ClassCastException(""); } } @@ -860,7 +860,6 @@ public void testComposeSerialization() { * works, so there are only trivial tests of that aspect. TODO: Fix comment style once annotation * stripper is fixed. */ - @J2ktIncompatible @GwtIncompatible // Predicates.containsPattern public void testContainsPattern_apply() { Predicate isFoobar = Predicates.containsPattern("^Fo.*o.*bar$"); @@ -868,7 +867,6 @@ public void testContainsPattern_apply() { assertFalse(isFoobar.apply("Foobarx")); } - @J2ktIncompatible @GwtIncompatible // Predicates.containsPattern public void testContains_apply() { Predicate isFoobar = Predicates.contains(Pattern.compile("^Fo.*o.*bar$")); @@ -903,7 +901,6 @@ public void testContainsPattern_serialization() { assertEquals(pre.apply("foo"), post.apply("foo")); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testContains_equals() { new EqualsTester() @@ -915,13 +912,13 @@ public void testContains_equals() { } public void assertEqualHashCode( - Predicate expected, Predicate actual) { + Predicate expected, Predicate actual) { assertEquals(actual + " should hash like " + expected, expected.hashCode(), actual.hashCode()); } public void testHashCodeForBooleanOperations() { - Predicate p1 = Predicates.isNull(); - Predicate p2 = isOdd(); + Predicate<@Nullable Integer> p1 = Predicates.isNull(); + Predicate<@Nullable Integer> p2 = isOdd(); // Make sure that hash codes are not computed per-instance. assertEqualHashCode(Predicates.not(p1), Predicates.not(p1)); @@ -948,30 +945,30 @@ public void testEqualsAndSerializable() throws Exception { new ClassSanityTester().forAllPublicStaticMethods(Predicates.class).testEqualsAndSerializable(); } - private static void assertEvalsToTrue(Predicate predicate) { + private static void assertEvalsToTrue(Predicate predicate) { assertTrue(predicate.apply(0)); assertTrue(predicate.apply(1)); assertTrue(predicate.apply(null)); } - private static void assertEvalsToFalse(Predicate predicate) { + private static void assertEvalsToFalse(Predicate predicate) { assertFalse(predicate.apply(0)); assertFalse(predicate.apply(1)); assertFalse(predicate.apply(null)); } - private static void assertEvalsLikeOdd(Predicate predicate) { + private static void assertEvalsLikeOdd(Predicate predicate) { assertEvalsLike(isOdd(), predicate); } private static void assertEvalsLike( - Predicate expected, Predicate actual) { + Predicate expected, Predicate actual) { assertEvalsLike(expected, actual, 0); assertEvalsLike(expected, actual, 1); - assertEvalsLike(expected, actual, null); + PredicatesTest.<@Nullable Integer>assertEvalsLike(expected, actual, null); } - private static void assertEvalsLike( + private static void assertEvalsLike( Predicate expected, Predicate actual, T input) { Boolean expectedResult = null; RuntimeException expectedRuntimeException = null; @@ -998,8 +995,9 @@ private static void assertEvalsLike( @J2ktIncompatible @GwtIncompatible // SerializableTester - private static void checkSerialization(Predicate predicate) { - Predicate reserialized = SerializableTester.reserializeAndAssert(predicate); + private static void checkSerialization(Predicate predicate) { + Predicate reserialized = + SerializableTester.reserializeAndAssert(predicate); assertEvalsLike(predicate, reserialized); } } diff --git a/android/guava-tests/test/com/google/common/base/SplitterTest.java b/android/guava-tests/test/com/google/common/base/SplitterTest.java index 42f820f0197d..fc617d2586ca 100644 --- a/android/guava-tests/test/com/google/common/base/SplitterTest.java +++ b/android/guava-tests/test/com/google/common/base/SplitterTest.java @@ -292,7 +292,6 @@ public void testStringSplitWithTrim() { .inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSimpleSplit() { String simple = "a,b,c"; @@ -300,7 +299,6 @@ public void testPatternSimpleSplit() { assertThat(letters).containsExactly("a", "b", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSimpleSplitWithNoDelimiter() { String simple = "a,b,c"; @@ -308,7 +306,6 @@ public void testPatternSimpleSplitWithNoDelimiter() { assertThat(letters).containsExactly("a,b,c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSplitWithDoubleDelimiter() { String doubled = "a,,b,c"; @@ -316,7 +313,6 @@ public void testPatternSplitWithDoubleDelimiter() { assertThat(letters).containsExactly("a", "", "b", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSplitWithDoubleDelimiterAndSpace() { String doubled = "a,, b,c"; @@ -324,7 +320,6 @@ public void testPatternSplitWithDoubleDelimiterAndSpace() { assertThat(letters).containsExactly("a", "", " b", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSplitWithTrailingDelimiter() { String trailing = "a,b,c,"; @@ -332,7 +327,6 @@ public void testPatternSplitWithTrailingDelimiter() { assertThat(letters).containsExactly("a", "b", "c", "").inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSplitWithLeadingDelimiter() { String leading = ",a,b,c"; @@ -342,7 +336,6 @@ public void testPatternSplitWithLeadingDelimiter() { // TODO(kevinb): the name of this method suggests it might not actually be testing what it // intends to be testing? - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSplitWithMultipleLetters() { Iterable testPatterningMotto = @@ -352,13 +345,11 @@ public void testPatternSplitWithMultipleLetters() { .inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern private static Pattern literalDotPattern() { return Pattern.compile("\\."); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWithDoubleDelimiterOmitEmptyStrings() { String doubled = "a..b.c"; @@ -366,7 +357,7 @@ public void testPatternSplitWithDoubleDelimiterOmitEmptyStrings() { assertThat(letters).containsExactly("a", "b", "c").inOrder(); } - @J2ktIncompatible + @J2ktIncompatible // Kotlin Native's regex is based on Apache Harmony, like old Android @GwtIncompatible // java.util.regex.Pattern @AndroidIncompatible // Bug in older versions of Android we test against, since fixed. public void testPatternSplitLookBehind() { @@ -380,7 +371,7 @@ public void testPatternSplitLookBehind() { // splits into chunks ending in : } - @J2ktIncompatible + @J2ktIncompatible // Kotlin Native's regex is based on Apache Harmony, like old Android @GwtIncompatible // java.util.regex.Pattern @AndroidIncompatible // Bug in older versions of Android we test against, since fixed. public void testPatternSplitWordBoundary() { @@ -389,7 +380,6 @@ public void testPatternSplitWordBoundary() { assertThat(words).containsExactly("foo", "<", "bar", ">", "bletch").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWordBoundary_singleCharInput() { String string = "f"; @@ -398,7 +388,7 @@ public void testPatternSplitWordBoundary_singleCharInput() { } @AndroidIncompatible // Apparently Gingerbread's regex API is buggy. - @J2ktIncompatible + @J2ktIncompatible // Kotlin Native's regex is based on Apache Harmony, like old Android @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWordBoundary_singleWordInput() { String string = "foo"; @@ -406,7 +396,6 @@ public void testPatternSplitWordBoundary_singleWordInput() { assertThat(words).containsExactly("foo").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitEmptyToken() { String emptyToken = "a. .c"; @@ -414,7 +403,6 @@ public void testPatternSplitEmptyToken() { assertThat(letters).containsExactly("a", "", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitEmptyTokenOmitEmptyStrings() { String emptyToken = "a. .c"; @@ -423,7 +411,6 @@ public void testPatternSplitEmptyTokenOmitEmptyStrings() { assertThat(letters).containsExactly("a", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitOnOnlyDelimiter() { Iterable blankblank = Splitter.on(literalDotPattern()).split("."); @@ -431,14 +418,12 @@ public void testPatternSplitOnOnlyDelimiter() { assertThat(blankblank).containsExactly("", "").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitOnOnlyDelimitersOmitEmptyStrings() { Iterable empty = Splitter.on(literalDotPattern()).omitEmptyStrings().split("..."); assertThat(empty).isEmpty(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitMatchingIsGreedy() { String longDelimiter = "a, b, c"; @@ -446,7 +431,6 @@ public void testPatternSplitMatchingIsGreedy() { assertThat(letters).containsExactly("a", "b", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWithLongLeadingDelimiter() { String longDelimiter = ", a, b, c"; @@ -454,7 +438,6 @@ public void testPatternSplitWithLongLeadingDelimiter() { assertThat(letters).containsExactly("", "a", "b", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWithLongTrailingDelimiter() { String longDelimiter = "a, b, c/ "; @@ -462,13 +445,11 @@ public void testPatternSplitWithLongTrailingDelimiter() { assertThat(letters).containsExactly("a", "b", "c", "").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitInvalidPattern() { assertThrows(IllegalArgumentException.class, () -> Splitter.on(Pattern.compile("a*"))); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWithTrim() { String jacksons = @@ -490,7 +471,6 @@ public void testSplitterIterableIsUnmodifiable_string() { assertIteratorIsUnmodifiable(Splitter.on(",").split("a,b").iterator()); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testSplitterIterableIsUnmodifiable_pattern() { assertIteratorIsUnmodifiable(Splitter.on(Pattern.compile(",")).split("a,b").iterator()); diff --git a/android/guava-tests/test/com/google/common/base/StopwatchTest.java b/android/guava-tests/test/com/google/common/base/StopwatchTest.java index 21d36d65c087..99e4998d6865 100644 --- a/android/guava-tests/test/com/google/common/base/StopwatchTest.java +++ b/android/guava-tests/test/com/google/common/base/StopwatchTest.java @@ -167,7 +167,7 @@ public void testElapsed_millis() { assertEquals(1, stopwatch.elapsed(MILLISECONDS)); } - @J2ktIncompatible // TODO(b/259213718): Enable + @J2ktIncompatible // TODO(b/259213718): Switch J2kt to String.format("%.4g") once that's supported public void testToString() { stopwatch.start(); assertEquals("0.000 ns", stopwatch.toString()); diff --git a/android/guava-tests/test/com/google/common/base/StringsTest.java b/android/guava-tests/test/com/google/common/base/StringsTest.java index c495ff5bf0b4..72e441ef8729 100644 --- a/android/guava-tests/test/com/google/common/base/StringsTest.java +++ b/android/guava-tests/test/com/google/common/base/StringsTest.java @@ -232,15 +232,19 @@ public void testLenientFormat() { assertEquals("null [null, null]", Strings.lenientFormat("%s", null, null, null)); assertEquals("null [5, 6]", Strings.lenientFormat(null, 5, 6)); assertEquals("null", Strings.lenientFormat("%s", (Object) null)); + } + + @J2ktIncompatible // TODO(b/319404022): Allow passing null array as varargs + public void testLenientFormat_nullArrayVarargs() { assertEquals("(Object[])null", Strings.lenientFormat("%s", (Object[]) null)); } - @J2ktIncompatible @GwtIncompatible // GWT reflection includes less data public void testLenientFormat_badArgumentToString() { assertThat(Strings.lenientFormat("boiler %s plate", new ThrowsOnToString())) .matches( - "boiler plate"); } diff --git a/android/guava-tests/test/com/google/common/base/SuppliersTest.java b/android/guava-tests/test/com/google/common/base/SuppliersTest.java index 82b84819945e..04c837d78205 100644 --- a/android/guava-tests/test/com/google/common/base/SuppliersTest.java +++ b/android/guava-tests/test/com/google/common/base/SuppliersTest.java @@ -35,6 +35,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests com.google.common.base.Suppliers. @@ -326,7 +327,7 @@ public void testOfInstanceSuppliesSameInstance() { } public void testOfInstanceSuppliesNull() { - Supplier nullSupplier = Suppliers.ofInstance(null); + Supplier<@Nullable Integer> nullSupplier = Suppliers.ofInstance(null); assertNull(nullSupplier.get()); } diff --git a/android/guava-tests/test/com/google/common/base/ThrowablesTest.java b/android/guava-tests/test/com/google/common/base/ThrowablesTest.java index 194b435a3289..fe39b032e4f3 100644 --- a/android/guava-tests/test/com/google/common/base/ThrowablesTest.java +++ b/android/guava-tests/test/com/google/common/base/ThrowablesTest.java @@ -395,19 +395,16 @@ public void noneDeclared() { assertThat(expected).hasCauseThat().isInstanceOf(SomeCheckedException.class); } - @J2ktIncompatible @GwtIncompatible // throwIfInstanceOf public void testThrowIfInstanceOf_Unchecked() throws SomeCheckedException { throwIfInstanceOf(new SomeUncheckedException(), SomeCheckedException.class); } - @J2ktIncompatible @GwtIncompatible // throwIfInstanceOf public void testThrowIfInstanceOf_CheckedDifferent() throws SomeCheckedException { throwIfInstanceOf(new SomeOtherCheckedException(), SomeCheckedException.class); } - @J2ktIncompatible @GwtIncompatible // throwIfInstanceOf public void testThrowIfInstanceOf_CheckedSame() { assertThrows( @@ -415,7 +412,6 @@ public void testThrowIfInstanceOf_CheckedSame() { () -> throwIfInstanceOf(new SomeCheckedException(), SomeCheckedException.class)); } - @J2ktIncompatible @GwtIncompatible // throwIfInstanceOf public void testThrowIfInstanceOf_CheckedSubclass() { assertThrows( @@ -424,7 +420,7 @@ public void testThrowIfInstanceOf_CheckedSubclass() { } @J2ktIncompatible - @GwtIncompatible // throwIfInstanceOf + @GwtIncompatible // propagate]IfInstanceOf public void testPropagateIfInstanceOf_NoneThrown() throws SomeCheckedException { Sample sample = new Sample() { @@ -444,7 +440,7 @@ public void oneDeclared() throws SomeCheckedException { } @J2ktIncompatible - @GwtIncompatible // throwIfInstanceOf + @GwtIncompatible // propagateIfInstanceOf public void testPropagateIfInstanceOf_DeclaredThrown() { Sample sample = new Sample() { @@ -464,7 +460,7 @@ public void oneDeclared() throws SomeCheckedException { } @J2ktIncompatible - @GwtIncompatible // throwIfInstanceOf + @GwtIncompatible // propagateIfInstanceOf public void testPropagateIfInstanceOf_UncheckedThrown() throws SomeCheckedException { Sample sample = new Sample() { @@ -484,7 +480,7 @@ public void oneDeclared() throws SomeCheckedException { } @J2ktIncompatible - @GwtIncompatible // throwIfInstanceOf + @GwtIncompatible // propagateIfInstanceOf public void testPropagateIfInstanceOf_UndeclaredThrown() throws SomeCheckedException { Sample sample = new Sample() { @@ -504,7 +500,6 @@ public void oneDeclared() throws SomeCheckedException { assertThat(expected).hasCauseThat().isInstanceOf(SomeOtherCheckedException.class); } - @J2ktIncompatible @GwtIncompatible // throwIfInstanceOf public void testThrowIfInstanceOf_null() throws SomeCheckedException { assertThrows( @@ -512,7 +507,7 @@ public void testThrowIfInstanceOf_null() throws SomeCheckedException { } @J2ktIncompatible - @GwtIncompatible // throwIfInstanceOf + @GwtIncompatible // propagateIfInstanceOf public void testPropageIfInstanceOf_null() throws SomeCheckedException { Throwables.propagateIfInstanceOf(null, SomeCheckedException.class); } @@ -592,7 +587,7 @@ static void methodThatThrowsUndeclaredChecked() throws SomeUndeclaredCheckedExce throw new SomeUndeclaredCheckedException(); } - @J2ktIncompatible + @J2ktIncompatible // Format does not match @GwtIncompatible // getStackTraceAsString(Throwable) public void testGetStackTraceAsString() { class StackTraceException extends Exception { @@ -648,7 +643,6 @@ public void testGetCasualChainLoop() { } } - @J2ktIncompatible @GwtIncompatible // Throwables.getCauseAs(Throwable, Class) public void testGetCauseAs() { SomeCheckedException cause = new SomeCheckedException(); diff --git a/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java b/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java index 62ee891918a9..db15f2ef811c 100644 --- a/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java +++ b/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java @@ -18,7 +18,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableMap; import java.util.Arrays; import java.util.Map; @@ -32,7 +31,6 @@ @GwtCompatible public class ToStringHelperTest extends TestCase { - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_instance() { String toTest = MoreObjects.toStringHelper(this).toString(); @@ -44,7 +42,6 @@ public void testConstructorLenient_instance() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_innerClass() { String toTest = MoreObjects.toStringHelper(new TestClass()).toString(); @@ -56,7 +53,6 @@ public void testConstructorLenient_innerClass() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_anonymousClass() { String toTest = MoreObjects.toStringHelper(new Object() {}).toString(); @@ -68,7 +64,6 @@ public void testConstructorLenient_anonymousClass() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_classObject() { String toTest = MoreObjects.toStringHelper(TestClass.class).toString(); @@ -85,7 +80,6 @@ public void testConstructor_stringObject() { assertEquals("FooBar{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_localInnerClass() { // Local inner classes have names ending like "Outer.$1Inner" @@ -100,7 +94,6 @@ class LocalInnerClass {} assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_localInnerNestedClass() { class LocalInnerClass { @@ -120,7 +113,6 @@ class LocalInnerNestedClass {} assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_moreThanNineAnonymousClasses() { // The nth anonymous class has a name ending like "Outer.$n" @@ -155,14 +147,12 @@ public void testToStringHelperLenient_moreThanNineAnonymousClasses() { } // all remaining test are on an inner class with various fields - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneField() { String toTest = MoreObjects.toStringHelper(new TestClass()).add("field1", "Hello").toString(); assertEquals("TestClass{field1=Hello}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneIntegerField() { String toTest = @@ -170,7 +160,6 @@ public void testToString_oneIntegerField() { assertEquals("TestClass{field1=42}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_nullInteger() { String toTest = @@ -195,7 +184,6 @@ public void testToStringLenient_nullInteger() { assertTrue(toTest, toTest.matches(".*\\{field1\\=null\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_complexFields() { @@ -242,7 +230,6 @@ public void testToString_addWithNullName() { } } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addWithNullValue() { final String result = MoreObjects.toStringHelper(new TestClass()).add("Hello", null).toString(); @@ -255,7 +242,6 @@ public void testToStringLenient_addWithNullValue() { assertTrue(result, result.matches(".*\\{Hello\\=null\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_ToStringTwice() { MoreObjects.ToStringHelper helper = @@ -275,7 +261,6 @@ public void testToString_ToStringTwice() { assertEquals(expected2, helper.toString()); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addValue() { String toTest = @@ -303,7 +288,6 @@ public void testToStringLenient_addValue() { assertTrue(toTest, toTest.matches(expected)); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addValueWithNullValue() { final String result = @@ -329,7 +313,6 @@ public void testToStringLenient_addValueWithNullValue() { assertTrue(result, result.matches(expected)); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_oneField() { String toTest = @@ -337,7 +320,6 @@ public void testToStringOmitNullValues_oneField() { assertEquals("TestClass{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsFirstNull() { String toTest = @@ -350,7 +332,6 @@ public void testToStringOmitNullValues_manyFieldsFirstNull() { assertEquals("TestClass{field2=Googley, field3=World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsOmitAfterNull() { String toTest = @@ -363,7 +344,6 @@ public void testToStringOmitNullValues_manyFieldsOmitAfterNull() { assertEquals("TestClass{field2=Googley, field3=World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsLastNull() { String toTest = @@ -376,7 +356,6 @@ public void testToStringOmitNullValues_manyFieldsLastNull() { assertEquals("TestClass{field1=Hello, field2=Googley}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitEmptyValues_oneValue() { String toTest = @@ -384,7 +363,6 @@ public void testToStringOmitEmptyValues_oneValue() { assertEquals("TestClass{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyValuesFirstNull() { String toTest = @@ -397,7 +375,6 @@ public void testToStringOmitNullValues_manyValuesFirstNull() { assertEquals("TestClass{Googley, World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyValuesLastNull() { String toTest = @@ -410,7 +387,6 @@ public void testToStringOmitNullValues_manyValuesLastNull() { assertEquals("TestClass{Hello, Googley}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_differentOrder() { String expected = "TestClass{field1=Hello, field2=Googley, field3=World}"; @@ -432,7 +408,6 @@ public void testToStringOmitNullValues_differentOrder() { assertEquals(expected, toTest2); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_canBeCalledManyTimes() { String toTest = diff --git a/android/guava-tests/test/com/google/common/base/Utf8Test.java b/android/guava-tests/test/com/google/common/base/Utf8Test.java index 57464a9ee55e..049e8d2abf5a 100644 --- a/android/guava-tests/test/com/google/common/base/Utf8Test.java +++ b/android/guava-tests/test/com/google/common/base/Utf8Test.java @@ -26,7 +26,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableList; import java.util.Arrays; import java.util.HashMap; @@ -188,21 +187,18 @@ private static void testEncodedLengthFails(String invalidString, int invalidCode FOUR_BYTE_ROUNDTRIPPABLE_CHARACTERS; /** Tests that round tripping of all two byte permutations work. */ - @J2ktIncompatible @GwtIncompatible // java.nio.charset.Charset public void testIsWellFormed_1Byte() { testBytes(1, EXPECTED_ONE_BYTE_ROUNDTRIPPABLE_COUNT); } /** Tests that round tripping of all two byte permutations work. */ - @J2ktIncompatible @GwtIncompatible // java.nio.charset.Charset public void testIsWellFormed_2Bytes() { testBytes(2, EXPECTED_TWO_BYTE_ROUNDTRIPPABLE_COUNT); } /** Tests that round tripping of all three byte permutations work. */ - @J2ktIncompatible @GwtIncompatible // java.nio.charset.Charset public void testIsWellFormed_3Bytes() { @@ -306,7 +302,6 @@ private static long[] generateFourByteShardsExpectedRunnables() { * @param numBytes the number of bytes in the byte array * @param expectedCount the expected number of roundtrippable permutations */ - @J2ktIncompatible @GwtIncompatible // java.nio.charset.Charset private static void testBytes(int numBytes, long expectedCount) { testBytes(numBytes, expectedCount, 0, -1); @@ -322,7 +317,6 @@ private static void testBytes(int numBytes, long expectedCount) { * @param lim the limit of bytes to process encoded as a long as big-endian, or -1 to mean the max * limit for numBytes */ - @J2ktIncompatible @GwtIncompatible // java.nio.charset.Charset private static void testBytes(int numBytes, long expectedCount, long start, long lim) { byte[] bytes = new byte[numBytes]; diff --git a/android/guava/src/com/google/common/base/CharMatcher.java b/android/guava/src/com/google/common/base/CharMatcher.java index d945806840ee..c6416e93a858 100644 --- a/android/guava/src/com/google/common/base/CharMatcher.java +++ b/android/guava/src/com/google/common/base/CharMatcher.java @@ -20,7 +20,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.util.Arrays; import java.util.BitSet; @@ -412,7 +411,6 @@ public CharMatcher precomputed() { * constructs an eight-kilobyte bit array and queries that. In many situations this produces a * matcher which is faster to query than the original. */ - @J2ktIncompatible @GwtIncompatible // SmallCharMatcher CharMatcher precomputedInternal() { final BitSet table = new BitSet(); @@ -443,7 +441,6 @@ public String toString() { /** * Helper method for {@link #precomputedInternal} that doesn't test if the negation is cheaper. */ - @J2ktIncompatible @GwtIncompatible // SmallCharMatcher private static CharMatcher precomputedPositive( int totalCharacters, BitSet table, String description) { @@ -463,7 +460,6 @@ private static CharMatcher precomputedPositive( } } - @J2ktIncompatible @GwtIncompatible // SmallCharMatcher private static boolean isSmall(int totalCharacters, int tableLength) { return totalCharacters <= SmallCharMatcher.MAX_SIZE @@ -472,7 +468,6 @@ private static boolean isSmall(int totalCharacters, int tableLength) { } /** Sets bits in {@code table} matched by this matcher. */ - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code void setBits(BitSet table) { for (int c = Character.MAX_VALUE; c >= Character.MIN_VALUE; c--) { @@ -983,7 +978,6 @@ public final CharMatcher precomputed() { } /** Fast matcher using a {@link BitSet} table of matching characters. */ - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code private static final class BitSetMatcher extends NamedFastMatcher { @@ -1238,7 +1232,6 @@ public boolean matches(char c) { return TABLE.charAt((MULTIPLIER * c) >>> SHIFT) == c; } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1525,7 +1518,6 @@ public int countIn(CharSequence sequence) { return sequence.length() - original.countIn(sequence); } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1562,7 +1554,6 @@ public boolean matches(char c) { return first.matches(c) && second.matches(c); } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1591,7 +1582,6 @@ private static final class Or extends CharMatcher { second = checkNotNull(b); } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1646,7 +1636,6 @@ public CharMatcher negate() { return isNot(match); } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1683,7 +1672,6 @@ public CharMatcher or(CharMatcher other) { return other.matches(match) ? any() : this; } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1722,7 +1710,6 @@ public boolean matches(char c) { return c == match1 || c == match2; } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1752,7 +1739,6 @@ public boolean matches(char c) { } @Override - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code void setBits(BitSet table) { for (char c : chars) { @@ -1788,7 +1774,6 @@ public boolean matches(char c) { return startInclusive <= c && c <= endInclusive; } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { diff --git a/android/guava/src/com/google/common/base/JdkPattern.java b/android/guava/src/com/google/common/base/JdkPattern.java index a259d0061daa..4788398b7c20 100644 --- a/android/guava/src/com/google/common/base/JdkPattern.java +++ b/android/guava/src/com/google/common/base/JdkPattern.java @@ -15,14 +15,12 @@ package com.google.common.base; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import java.io.Serializable; import java.util.regex.Matcher; import java.util.regex.Pattern; /** A regex pattern implementation which is backed by the {@link Pattern}. */ @ElementTypesAreNonnullByDefault -@J2ktIncompatible @GwtIncompatible final class JdkPattern extends CommonPattern implements Serializable { private final Pattern pattern; diff --git a/android/guava/src/com/google/common/base/PatternCompiler.java b/android/guava/src/com/google/common/base/PatternCompiler.java index 32505217fbc7..f33d38ba06d4 100644 --- a/android/guava/src/com/google/common/base/PatternCompiler.java +++ b/android/guava/src/com/google/common/base/PatternCompiler.java @@ -15,7 +15,6 @@ package com.google.common.base; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.RestrictedApi; /** @@ -23,7 +22,6 @@ * java.util.regex} library, but an alternate implementation can be supplied using the {@link * java.util.ServiceLoader} mechanism. */ -@J2ktIncompatible @GwtIncompatible @ElementTypesAreNonnullByDefault interface PatternCompiler { diff --git a/android/guava/src/com/google/common/base/Preconditions.java b/android/guava/src/com/google/common/base/Preconditions.java index 1e9ac39cb40c..6d00d46ff365 100644 --- a/android/guava/src/com/google/common/base/Preconditions.java +++ b/android/guava/src/com/google/common/base/Preconditions.java @@ -438,7 +438,8 @@ public static void checkArgument( */ public static void checkArgument( boolean expression, - String errorMessageTemplate, + // TODO: cl/604933487 - Make errorMessageTemplate consistently @CheckForNull across overloads. + @CheckForNull String errorMessageTemplate, @CheckForNull Object p1, @CheckForNull Object p2) { if (!expression) { diff --git a/android/guava/src/com/google/common/base/Predicates.java b/android/guava/src/com/google/common/base/Predicates.java index 30d2ac7dc8f5..17c2bf5c5baf 100644 --- a/android/guava/src/com/google/common/base/Predicates.java +++ b/android/guava/src/com/google/common/base/Predicates.java @@ -235,7 +235,6 @@ public static Predicate> subtypeOf(Class clazz) { * @throws IllegalArgumentException if the pattern is invalid * @since 3.0 */ - @J2ktIncompatible @GwtIncompatible // Only used by other GWT-incompatible code. public static Predicate containsPattern(String pattern) { return new ContainsPatternFromStringPredicate(pattern); @@ -248,7 +247,6 @@ public static Predicate containsPattern(String pattern) { * * @since 3.0 */ - @J2ktIncompatible @GwtIncompatible(value = "java.util.regex.Pattern") public static Predicate contains(Pattern pattern) { return new ContainsPatternPredicate(new JdkPattern(pattern)); @@ -648,7 +646,6 @@ public String toString() { /** * @see Predicates#contains(Pattern) */ - @J2ktIncompatible @GwtIncompatible // Only used by other GWT-incompatible code. private static class ContainsPatternPredicate implements Predicate, Serializable { final CommonPattern pattern; @@ -699,7 +696,6 @@ public String toString() { /** * @see Predicates#containsPattern(String) */ - @J2ktIncompatible @GwtIncompatible // Only used by other GWT-incompatible code. private static class ContainsPatternFromStringPredicate extends ContainsPatternPredicate { diff --git a/android/guava/src/com/google/common/base/SmallCharMatcher.java b/android/guava/src/com/google/common/base/SmallCharMatcher.java index 81682564143d..f0e801b67118 100644 --- a/android/guava/src/com/google/common/base/SmallCharMatcher.java +++ b/android/guava/src/com/google/common/base/SmallCharMatcher.java @@ -15,7 +15,6 @@ package com.google.common.base; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.CharMatcher.NamedFastMatcher; import java.util.BitSet; @@ -26,7 +25,6 @@ * * @author Christopher Swenson */ -@J2ktIncompatible @GwtIncompatible // no precomputation is done in GWT @ElementTypesAreNonnullByDefault final class SmallCharMatcher extends NamedFastMatcher { diff --git a/android/guava/src/com/google/common/base/Splitter.java b/android/guava/src/com/google/common/base/Splitter.java index 392e6d8e4fde..383425346ed9 100644 --- a/android/guava/src/com/google/common/base/Splitter.java +++ b/android/guava/src/com/google/common/base/Splitter.java @@ -19,7 +19,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; @@ -212,7 +211,6 @@ public int separatorEnd(int separatorPosition) { * @return a splitter, with default settings, that uses this pattern * @throws IllegalArgumentException if {@code separatorPattern} matches the empty string */ - @J2ktIncompatible @GwtIncompatible // java.util.regex public static Splitter on(Pattern separatorPattern) { return onPatternInternal(new JdkPattern(separatorPattern)); @@ -257,7 +255,6 @@ public int separatorEnd(int separatorPosition) { * @throws IllegalArgumentException if {@code separatorPattern} matches the empty string or is a * malformed expression */ - @J2ktIncompatible @GwtIncompatible // java.util.regex public static Splitter onPattern(String separatorPattern) { return onPatternInternal(Platform.compilePattern(separatorPattern)); diff --git a/android/guava/src/com/google/common/base/Throwables.java b/android/guava/src/com/google/common/base/Throwables.java index e37a3d99deb2..a35b1344e950 100644 --- a/android/guava/src/com/google/common/base/Throwables.java +++ b/android/guava/src/com/google/common/base/Throwables.java @@ -70,7 +70,6 @@ private Throwables() {} * * @since 20.0 */ - @J2ktIncompatible @GwtIncompatible // Class.cast, Class.isInstance public static void throwIfInstanceOf( Throwable throwable, Class declaredType) throws X { @@ -317,7 +316,6 @@ public static List getCausalChain(Throwable throwable) { * ClassCastException}'s cause is {@code throwable}. * @since 22.0 */ - @J2ktIncompatible @GwtIncompatible // Class.cast(Object) @CheckForNull public static X getCauseAs( diff --git a/guava-tests/test/com/google/common/base/AsciiTest.java b/guava-tests/test/com/google/common/base/AsciiTest.java index 371a6a304eda..9e6b0e41ab86 100644 --- a/guava-tests/test/com/google/common/base/AsciiTest.java +++ b/guava-tests/test/com/google/common/base/AsciiTest.java @@ -18,7 +18,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import junit.framework.TestCase; /** @@ -139,7 +138,6 @@ public void testEqualsIgnoreCase() { assertFalse(Ascii.equalsIgnoreCase("[", "{")); } - @J2ktIncompatible @GwtIncompatible // String.toUpperCase() has browser semantics public void testEqualsIgnoreCaseUnicodeEquivalence() { // Note that it's possible in future that the JDK's idea to toUpperCase() or equalsIgnoreCase() diff --git a/guava-tests/test/com/google/common/base/CharMatcherTest.java b/guava-tests/test/com/google/common/base/CharMatcherTest.java index d78327ef08dc..b6131b52c263 100644 --- a/guava-tests/test/com/google/common/base/CharMatcherTest.java +++ b/guava-tests/test/com/google/common/base/CharMatcherTest.java @@ -112,7 +112,6 @@ public void testJavaIsoControl() { // method, but by overall "scenario". Also, the variety of actual tests we // do borders on absurd overkill. Better safe than sorry, though? - @J2ktIncompatible @GwtIncompatible // java.util.BitSet public void testSetBits() { doTestSetBits(CharMatcher.any()); @@ -133,7 +132,6 @@ public void testSetBits() { doTestSetBits(inRange('A', 'Z').and(inRange('F', 'K').negate())); } - @J2ktIncompatible @GwtIncompatible // java.util.BitSet private void doTestSetBits(CharMatcher matcher) { BitSet bitset = new BitSet(); @@ -311,6 +309,8 @@ private void reallyTestAllMatches(CharMatcher matcher, CharSequence s) { assertEquals(s.length(), matcher.countIn(s)); } + // Kotlin subSequence()/replace() always return new strings, violating expectations of this test + @J2ktIncompatible public void testGeneral() { doTestGeneral(is('a'), 'a', 'b'); doTestGeneral(isNot('a'), 'b', 'a'); @@ -680,13 +680,11 @@ public void testPrecomputedOptimizations() { assertSame(CharMatcher.any(), CharMatcher.any().precomputed()); } - @J2ktIncompatible @GwtIncompatible // java.util.BitSet private static BitSet bitSet(String chars) { return bitSet(chars.toCharArray()); } - @J2ktIncompatible @GwtIncompatible // java.util.BitSet private static BitSet bitSet(char[] chars) { BitSet tmp = new BitSet(); @@ -696,7 +694,6 @@ private static BitSet bitSet(char[] chars) { return tmp; } - @J2ktIncompatible @GwtIncompatible // java.util.Random, java.util.BitSet public void testSmallCharMatcher() { CharMatcher len1 = SmallCharMatcher.from(bitSet("#"), "#"); diff --git a/guava-tests/test/com/google/common/base/EquivalenceTest.java b/guava-tests/test/com/google/common/base/EquivalenceTest.java index 46b191a22cde..bb1d9ca76d87 100644 --- a/guava-tests/test/com/google/common/base/EquivalenceTest.java +++ b/guava-tests/test/com/google/common/base/EquivalenceTest.java @@ -26,6 +26,7 @@ import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link Equivalence}. @@ -71,9 +72,11 @@ public void testWrap() { LENGTH_EQUIVALENCE.wrap("hello"), LENGTH_EQUIVALENCE.wrap("world")) .addEqualityGroup(LENGTH_EQUIVALENCE.wrap("hi"), LENGTH_EQUIVALENCE.wrap("yo")) - .addEqualityGroup(LENGTH_EQUIVALENCE.wrap(null), LENGTH_EQUIVALENCE.wrap(null)) + .addEqualityGroup( + LENGTH_EQUIVALENCE.<@Nullable String>wrap(null), + LENGTH_EQUIVALENCE.<@Nullable String>wrap(null)) .addEqualityGroup(Equivalence.equals().wrap("hello")) - .addEqualityGroup(Equivalence.equals().wrap(null)) + .addEqualityGroup(Equivalence.equals().<@Nullable Object>wrap(null)) .testEquals(); } @@ -122,11 +125,11 @@ public void testOnResultOf_equals() { } public void testEquivalentTo() { - Predicate equalTo1 = Equivalence.equals().equivalentTo("1"); + Predicate<@Nullable Object> equalTo1 = Equivalence.equals().equivalentTo("1"); assertTrue(equalTo1.apply("1")); assertFalse(equalTo1.apply("2")); assertFalse(equalTo1.apply(null)); - Predicate isNull = Equivalence.equals().equivalentTo(null); + Predicate<@Nullable Object> isNull = Equivalence.equals().equivalentTo(null); assertFalse(isNull.apply("1")); assertFalse(isNull.apply("2")); assertTrue(isNull.apply(null)); @@ -138,17 +141,25 @@ public void testEquivalentTo() { .testEquals(); } + /* + * We use large numbers to avoid the integer cache. Normally, we'd accomplish that merely by using + * `new Integer` (as we do) instead of `Integer.valueOf`. However, under J2KT, `new Integer` + * gets translated back to `Integer.valueOf` because that is the only thing J2KT can support. And + * anyway, it's nice to avoid `Integer.valueOf` because the Android toolchain optimizes multiple + * `Integer.valueOf` calls into one! So we stick with the deprecated `Integer` constructor. + */ + public void testEqualsEquivalent() { EquivalenceTester.of(Equivalence.equals()) - .addEquivalenceGroup(new Integer(42), 42) + .addEquivalenceGroup(new Integer(42_000_000), 42_000_000) .addEquivalenceGroup("a") .test(); } public void testIdentityEquivalent() { EquivalenceTester.of(Equivalence.identity()) - .addEquivalenceGroup(new Integer(42)) - .addEquivalenceGroup(new Integer(42)) + .addEquivalenceGroup(new Integer(42_000_000)) + .addEquivalenceGroup(new Integer(42_000_000)) .addEquivalenceGroup("a") .test(); } diff --git a/guava-tests/test/com/google/common/base/FunctionsTest.java b/guava-tests/test/com/google/common/base/FunctionsTest.java index 75b7a9d56d2b..952f73e1b281 100644 --- a/guava-tests/test/com/google/common/base/FunctionsTest.java +++ b/guava-tests/test/com/google/common/base/FunctionsTest.java @@ -41,7 +41,7 @@ public class FunctionsTest extends TestCase { public void testIdentity_same() { - Function identity = Functions.identity(); + Function<@Nullable String, @Nullable String> identity = Functions.identity(); assertNull(identity.apply(null)); assertSame("foo", identity.apply("foo")); } @@ -91,11 +91,11 @@ public void testNullPointerExceptions() { } public void testForMapWithoutDefault() { - Map map = Maps.newHashMap(); + Map map = Maps.newHashMap(); map.put("One", 1); map.put("Three", 3); map.put("Null", null); - Function function = Functions.forMap(map); + Function function = Functions.forMap(map); assertEquals(1, function.apply("One").intValue()); assertEquals(3, function.apply("Three").intValue()); @@ -120,11 +120,11 @@ public void testForMapWithoutDefaultSerializable() { } public void testForMapWithDefault() { - Map map = Maps.newHashMap(); + Map map = Maps.newHashMap(); map.put("One", 1); map.put("Three", 3); map.put("Null", null); - Function function = Functions.forMap(map, 42); + Function function = Functions.forMap(map, 42); assertEquals(1, function.apply("One").intValue()); assertEquals(42, function.apply("Two").intValue()); @@ -168,7 +168,7 @@ public void testForMapWithDefaultSerializable() { public void testForMapWithDefault_null() { ImmutableMap map = ImmutableMap.of("One", 1); - Function function = Functions.forMap(map, null); + Function function = Functions.forMap(map, null); assertEquals((Integer) 1, function.apply("One")); assertNull(function.apply("Two")); @@ -350,11 +350,11 @@ public void testForPredicateSerializable() { } public void testConstant() { - Function f = Functions.constant("correct"); + Function<@Nullable Object, Object> f = Functions.constant("correct"); assertEquals("correct", f.apply(new Object())); assertEquals("correct", f.apply(null)); - Function g = Functions.constant(null); + Function<@Nullable Object, @Nullable String> g = Functions.constant(null); assertEquals(null, g.apply(2)); assertEquals(null, g.apply(null)); @@ -366,7 +366,7 @@ public void testConstant() { .testEquals(); new EqualsTester() - .addEqualityGroup(g, Functions.constant(null)) + .addEqualityGroup(g, Functions.<@Nullable Object>constant(null)) .addEqualityGroup(Functions.constant("incorrect")) .addEqualityGroup(Functions.toStringFunction()) .addEqualityGroup(f) @@ -406,7 +406,7 @@ public int hashCode() { public void testForSupplier() { Supplier supplier = new CountingSupplier(); - Function function = Functions.forSupplier(supplier); + Function<@Nullable Object, Integer> function = Functions.forSupplier(supplier); assertEquals(1, (int) function.apply(null)); assertEquals(2, (int) function.apply("foo")); diff --git a/guava-tests/test/com/google/common/base/JoinerTest.java b/guava-tests/test/com/google/common/base/JoinerTest.java index c5eb73d53aba..babc3d6e5b80 100644 --- a/guava-tests/test/com/google/common/base/JoinerTest.java +++ b/guava-tests/test/com/google/common/base/JoinerTest.java @@ -51,12 +51,13 @@ public class JoinerTest extends TestCase { private static final Iterable ITERABLE_1 = Arrays.asList(1); private static final Iterable ITERABLE_12 = Arrays.asList(1, 2); private static final Iterable ITERABLE_123 = Arrays.asList(1, 2, 3); - private static final Iterable ITERABLE_NULL = Arrays.asList((Integer) null); - private static final Iterable ITERABLE_NULL_NULL = Arrays.asList((Integer) null, null); - private static final Iterable ITERABLE_NULL_1 = Arrays.asList(null, 1); - private static final Iterable ITERABLE_1_NULL = Arrays.asList(1, null); - private static final Iterable ITERABLE_1_NULL_2 = Arrays.asList(1, null, 2); - private static final Iterable ITERABLE_FOUR_NULLS = + private static final Iterable<@Nullable Integer> ITERABLE_NULL = Arrays.asList((Integer) null); + private static final Iterable<@Nullable Integer> ITERABLE_NULL_NULL = + Arrays.asList((Integer) null, null); + private static final Iterable<@Nullable Integer> ITERABLE_NULL_1 = Arrays.asList(null, 1); + private static final Iterable<@Nullable Integer> ITERABLE_1_NULL = Arrays.asList(1, null); + private static final Iterable<@Nullable Integer> ITERABLE_1_NULL_2 = Arrays.asList(1, null, 2); + private static final Iterable<@Nullable Integer> ITERABLE_FOUR_NULLS = Arrays.asList((Integer) null, null, null, null); public void testNoSpecialNullBehavior() { @@ -247,7 +248,7 @@ public void testMap() { assertEquals("", j.join(ImmutableMap.of())); assertEquals(":", j.join(ImmutableMap.of("", ""))); - Map mapWithNulls = Maps.newLinkedHashMap(); + Map<@Nullable String, @Nullable String> mapWithNulls = Maps.newLinkedHashMap(); mapWithNulls.put("a", null); mapWithNulls.put(null, "b"); @@ -273,7 +274,7 @@ public void testEntries() { assertEquals("1:a;1:b", j.join(ImmutableMultimap.of("1", "a", "1", "b").entries())); assertEquals("1:a;1:b", j.join(ImmutableMultimap.of("1", "a", "1", "b").entries().iterator())); - Map mapWithNulls = Maps.newLinkedHashMap(); + Map<@Nullable String, @Nullable String> mapWithNulls = Maps.newLinkedHashMap(); mapWithNulls.put("a", null); mapWithNulls.put(null, "b"); Set> entriesWithNulls = mapWithNulls.entrySet(); @@ -363,7 +364,6 @@ public void remove() { } } - @J2ktIncompatible @GwtIncompatible // StringBuilder.append in GWT invokes Object.toString(), unlike the JRE version. public void testDontConvertCharSequenceToString() { assertEquals("foo,foo", Joiner.on(",").join(new DontStringMeBro(), new DontStringMeBro())); diff --git a/guava-tests/test/com/google/common/base/MoreObjectsTest.java b/guava-tests/test/com/google/common/base/MoreObjectsTest.java index 6a7149d174f9..eabfdb656cad 100644 --- a/guava-tests/test/com/google/common/base/MoreObjectsTest.java +++ b/guava-tests/test/com/google/common/base/MoreObjectsTest.java @@ -69,7 +69,6 @@ public void testToStringHelperWithArrays() { toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_instance() { String toTest = MoreObjects.toStringHelper(this).toString(); @@ -81,7 +80,6 @@ public void testConstructorLenient_instance() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_innerClass() { String toTest = MoreObjects.toStringHelper(new TestClass()).toString(); @@ -93,7 +91,6 @@ public void testConstructorLenient_innerClass() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_anonymousClass() { String toTest = MoreObjects.toStringHelper(new Object() {}).toString(); @@ -105,7 +102,6 @@ public void testConstructorLenient_anonymousClass() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_classObject() { String toTest = MoreObjects.toStringHelper(TestClass.class).toString(); @@ -122,7 +118,6 @@ public void testConstructor_stringObject() { assertEquals("FooBar{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_localInnerClass() { // Local inner classes have names ending like "Outer.$1Inner" @@ -137,7 +132,6 @@ class LocalInnerClass {} assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_localInnerNestedClass() { class LocalInnerClass { @@ -157,7 +151,6 @@ class LocalInnerNestedClass {} assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_moreThanNineAnonymousClasses() { // The nth anonymous class has a name ending like "Outer.$n" @@ -192,14 +185,12 @@ public void testToStringHelperLenient_moreThanNineAnonymousClasses() { } // all remaining test are on an inner class with various fields - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneField() { String toTest = MoreObjects.toStringHelper(new TestClass()).add("field1", "Hello").toString(); assertEquals("TestClass{field1=Hello}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneIntegerField() { String toTest = @@ -207,7 +198,6 @@ public void testToString_oneIntegerField() { assertEquals("TestClass{field1=42}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_nullInteger() { String toTest = @@ -232,7 +222,6 @@ public void testToStringLenient_nullInteger() { assertTrue(toTest, toTest.matches(".*\\{field1\\=null\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_complexFields() { Map map = @@ -277,7 +266,6 @@ public void testToString_addWithNullName() { } } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addWithNullValue() { final String result = MoreObjects.toStringHelper(new TestClass()).add("Hello", null).toString(); @@ -290,7 +278,6 @@ public void testToStringLenient_addWithNullValue() { assertTrue(result, result.matches(".*\\{Hello\\=null\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_ToStringTwice() { MoreObjects.ToStringHelper helper = @@ -310,7 +297,6 @@ public void testToString_ToStringTwice() { assertEquals(expected2, helper.toString()); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addValue() { String toTest = @@ -338,7 +324,6 @@ public void testToStringLenient_addValue() { assertTrue(toTest, toTest.matches(expected)); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addValueWithNullValue() { final String result = @@ -364,7 +349,6 @@ public void testToStringLenient_addValueWithNullValue() { assertTrue(result, result.matches(expected)); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_oneField() { String toTest = @@ -372,7 +356,6 @@ public void testToStringOmitNullValues_oneField() { assertEquals("TestClass{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsFirstNull() { String toTest = @@ -385,7 +368,6 @@ public void testToStringOmitNullValues_manyFieldsFirstNull() { assertEquals("TestClass{field2=Googley, field3=World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsOmitAfterNull() { String toTest = @@ -398,7 +380,6 @@ public void testToStringOmitNullValues_manyFieldsOmitAfterNull() { assertEquals("TestClass{field2=Googley, field3=World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsLastNull() { String toTest = @@ -411,7 +392,6 @@ public void testToStringOmitNullValues_manyFieldsLastNull() { assertEquals("TestClass{field1=Hello, field2=Googley}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_oneValue() { String toTest = @@ -419,7 +399,6 @@ public void testToStringOmitNullValues_oneValue() { assertEquals("TestClass{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyValuesFirstNull() { String toTest = @@ -432,7 +411,6 @@ public void testToStringOmitNullValues_manyValuesFirstNull() { assertEquals("TestClass{Googley, World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyValuesLastNull() { String toTest = @@ -445,7 +423,6 @@ public void testToStringOmitNullValues_manyValuesLastNull() { assertEquals("TestClass{Hello, Googley}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_differentOrder() { String expected = "TestClass{field1=Hello, field2=Googley, field3=World}"; @@ -467,7 +444,6 @@ public void testToStringOmitNullValues_differentOrder() { assertEquals(expected, toTest2); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_canBeCalledManyTimes() { String toTest = diff --git a/guava-tests/test/com/google/common/base/OptionalTest.java b/guava-tests/test/com/google/common/base/OptionalTest.java index cdb9b7fa6f3a..f3c4a861d68f 100644 --- a/guava-tests/test/com/google/common/base/OptionalTest.java +++ b/guava-tests/test/com/google/common/base/OptionalTest.java @@ -125,7 +125,7 @@ public void testOr_supplier_absent() { } public void testOr_nullSupplier_absent() { - Supplier nullSupplier = Suppliers.ofInstance(null); + Supplier nullSupplier = (Supplier) Suppliers.<@Nullable Object>ofInstance(null); Optional absentOptional = Optional.absent(); try { absentOptional.or(nullSupplier); @@ -136,7 +136,7 @@ public void testOr_nullSupplier_absent() { @SuppressWarnings("OptionalOfRedundantMethod") // Unit tests for Optional public void testOr_nullSupplier_present() { - Supplier nullSupplier = Suppliers.ofInstance(null); + Supplier nullSupplier = (Supplier) Suppliers.<@Nullable String>ofInstance(null); assertEquals("a", Optional.of("a").or(nullSupplier)); } diff --git a/guava-tests/test/com/google/common/base/PreconditionsTest.java b/guava-tests/test/com/google/common/base/PreconditionsTest.java index acbd7cfd1d48..61776d1f84ed 100644 --- a/guava-tests/test/com/google/common/base/PreconditionsTest.java +++ b/guava-tests/test/com/google/common/base/PreconditionsTest.java @@ -42,7 +42,6 @@ * @author Jared Levy */ @ElementTypesAreNonnullByDefault -@J2ktIncompatible // TODO(b/278877942): Enable @SuppressWarnings("LenientFormatStringValidation") // Intentional for testing @GwtCompatible(emulated = true) public class PreconditionsTest extends TestCase { @@ -125,6 +124,7 @@ public void testCheckArgument_singleNullArg_failure() { } } + @J2ktIncompatible // TODO(b/319404022): Allow passing null array as varargs public void testCheckArgument_singleNullArray_failure() { try { Preconditions.checkArgument(false, "A %s C", (Object[]) null); diff --git a/guava-tests/test/com/google/common/base/PredicatesTest.java b/guava-tests/test/com/google/common/base/PredicatesTest.java index ed017d00fafd..2f91da1665bb 100644 --- a/guava-tests/test/com/google/common/base/PredicatesTest.java +++ b/guava-tests/test/com/google/common/base/PredicatesTest.java @@ -46,25 +46,24 @@ * @author Kevin Bourrillion */ @ElementTypesAreNonnullByDefault -@J2ktIncompatible // TODO(b/278877942): Enable @GwtCompatible(emulated = true) public class PredicatesTest extends TestCase { - private static final Predicate TRUE = Predicates.alwaysTrue(); - private static final Predicate FALSE = Predicates.alwaysFalse(); - private static final Predicate NEVER_REACHED = - new Predicate() { + private static final Predicate<@Nullable Integer> TRUE = Predicates.alwaysTrue(); + private static final Predicate<@Nullable Integer> FALSE = Predicates.alwaysFalse(); + private static final Predicate<@Nullable Integer> NEVER_REACHED = + new Predicate<@Nullable Integer>() { @Override - public boolean apply(Integer i) { + public boolean apply(@Nullable Integer i) { throw new AssertionFailedError("This predicate should never have been evaluated"); } }; /** Instantiable predicate with reasonable hashCode() and equals() methods. */ - static class IsOdd implements Predicate, Serializable { + static class IsOdd implements Predicate<@Nullable Integer>, Serializable { private static final long serialVersionUID = 0x150ddL; @Override - public boolean apply(Integer i) { + public boolean apply(@Nullable Integer i) { return (i.intValue() & 1) == 1; } @@ -288,7 +287,7 @@ public void testAnd_serializationTernary() { @SuppressWarnings("unchecked") // varargs public void testAnd_applyIterable() { - Collection> empty = Arrays.asList(); + Collection> empty = Arrays.asList(); assertEvalsToTrue(Predicates.and(empty)); assertEvalsLikeOdd(Predicates.and(Arrays.asList(isOdd()))); assertEvalsLikeOdd(Predicates.and(Arrays.asList(TRUE, isOdd()))); @@ -396,9 +395,9 @@ public void testOr_serializationOneArg() { } public void testOr_applyBinary() { - Predicate falseOrFalse = Predicates.or(FALSE, FALSE); - Predicate falseOrTrue = Predicates.or(FALSE, TRUE); - Predicate trueOrAnything = Predicates.or(TRUE, NEVER_REACHED); + Predicate<@Nullable Integer> falseOrFalse = Predicates.or(FALSE, FALSE); + Predicate<@Nullable Integer> falseOrTrue = Predicates.or(FALSE, TRUE); + Predicate<@Nullable Integer> trueOrAnything = Predicates.or(TRUE, NEVER_REACHED); assertEvalsToFalse(falseOrFalse); assertEvalsToTrue(falseOrTrue); @@ -449,13 +448,14 @@ public void testOr_serializationTernary() { @SuppressWarnings("unchecked") // varargs public void testOr_applyIterable() { - Predicate vacuouslyFalse = Predicates.or(Collections.>emptyList()); - Predicate troo = Predicates.or(Collections.singletonList(TRUE)); + Predicate<@Nullable Integer> vacuouslyFalse = + Predicates.or(Collections.>emptyList()); + Predicate<@Nullable Integer> troo = Predicates.or(Collections.singletonList(TRUE)); /* * newLinkedList() takes varargs. TRUE and FALSE are both instances of * Predicate, so the call is safe. */ - Predicate trueAndFalse = Predicates.or(Arrays.asList(TRUE, FALSE)); + Predicate<@Nullable Integer> trueAndFalse = Predicates.or(Arrays.asList(TRUE, FALSE)); assertEvalsToFalse(vacuouslyFalse); assertEvalsToTrue(troo); @@ -520,7 +520,7 @@ public Iterator> iterator() { */ public void testIsEqualTo_apply() { - Predicate isOne = Predicates.equalTo(1); + Predicate<@Nullable Integer> isOne = Predicates.equalTo(1); assertTrue(isOne.apply(1)); assertFalse(isOne.apply(2)); @@ -531,7 +531,7 @@ public void testIsEqualTo_equality() { new EqualsTester() .addEqualityGroup(Predicates.equalTo(1), Predicates.equalTo(1)) .addEqualityGroup(Predicates.equalTo(2)) - .addEqualityGroup(Predicates.equalTo(null)) + .addEqualityGroup(Predicates.<@Nullable Integer>equalTo(null)) .testEquals(); } @@ -542,14 +542,16 @@ public void testIsEqualTo_serialization() { } public void testIsEqualToNull_apply() { - Predicate isNull = Predicates.equalTo(null); + Predicate<@Nullable Integer> isNull = Predicates.equalTo(null); assertTrue(isNull.apply(null)); assertFalse(isNull.apply(1)); } public void testIsEqualToNull_equality() { new EqualsTester() - .addEqualityGroup(Predicates.equalTo(null), Predicates.equalTo(null)) + .addEqualityGroup( + Predicates.<@Nullable Integer>equalTo(null), + Predicates.<@Nullable Integer>equalTo(null)) .addEqualityGroup(Predicates.equalTo(1)) .addEqualityGroup(Predicates.equalTo("null")) .testEquals(); @@ -566,10 +568,9 @@ public void testIsEqualToNull_serialization() { * stripper to remove comments properly. Currently, all tests before the comments are removed as * well. */ - @J2ktIncompatible @GwtIncompatible // Predicates.instanceOf public void testIsInstanceOf_apply() { - Predicate isInteger = Predicates.instanceOf(Integer.class); + Predicate<@Nullable Object> isInteger = Predicates.instanceOf(Integer.class); assertTrue(isInteger.apply(1)); assertFalse(isInteger.apply(2.0f)); @@ -577,10 +578,9 @@ public void testIsInstanceOf_apply() { assertFalse(isInteger.apply(null)); } - @J2ktIncompatible @GwtIncompatible // Predicates.instanceOf public void testIsInstanceOf_subclass() { - Predicate isNumber = Predicates.instanceOf(Number.class); + Predicate<@Nullable Object> isNumber = Predicates.instanceOf(Number.class); assertTrue(isNumber.apply(1)); assertTrue(isNumber.apply(2.0f)); @@ -588,10 +588,9 @@ public void testIsInstanceOf_subclass() { assertFalse(isNumber.apply(null)); } - @J2ktIncompatible @GwtIncompatible // Predicates.instanceOf public void testIsInstanceOf_interface() { - Predicate isComparable = Predicates.instanceOf(Comparable.class); + Predicate<@Nullable Object> isComparable = Predicates.instanceOf(Comparable.class); assertTrue(isComparable.apply(1)); assertTrue(isComparable.apply(2.0f)); @@ -599,7 +598,6 @@ public void testIsInstanceOf_interface() { assertFalse(isComparable.apply(null)); } - @J2ktIncompatible @GwtIncompatible // Predicates.instanceOf public void testIsInstanceOf_equality() { new EqualsTester() @@ -671,7 +669,7 @@ public void testSubtypeOf_serialization() { */ public void testIsNull_apply() { - Predicate isNull = Predicates.isNull(); + Predicate<@Nullable Integer> isNull = Predicates.isNull(); assertTrue(isNull.apply(null)); assertFalse(isNull.apply(1)); } @@ -693,7 +691,7 @@ public void testIsNull_serialization() { } public void testNotNull_apply() { - Predicate notNull = Predicates.notNull(); + Predicate<@Nullable Integer> notNull = Predicates.notNull(); assertFalse(notNull.apply(null)); assertTrue(notNull.apply(1)); } @@ -713,7 +711,7 @@ public void testNotNull_serialization() { public void testIn_apply() { Collection nums = Arrays.asList(1, 5); - Predicate isOneOrFive = Predicates.in(nums); + Predicate<@Nullable Integer> isOneOrFive = Predicates.in(nums); assertTrue(isOneOrFive.apply(1)); assertTrue(isOneOrFive.apply(5)); @@ -745,25 +743,27 @@ public void testIn_serialization() { public void testIn_handlesNullPointerException() { class CollectionThatThrowsNPE extends ArrayList { + @J2ktIncompatible // Kotlin doesn't support companions for inner classes private static final long serialVersionUID = 1L; @Override - public boolean contains(Object element) { + public boolean contains(@Nullable Object element) { Preconditions.checkNotNull(element); return super.contains(element); } } Collection nums = new CollectionThatThrowsNPE<>(); - Predicate isFalse = Predicates.in(nums); + Predicate<@Nullable Integer> isFalse = Predicates.in(nums); assertFalse(isFalse.apply(null)); } public void testIn_handlesClassCastException() { class CollectionThatThrowsCCE extends ArrayList { + @J2ktIncompatible // Kotlin doesn't support companions for inner classes private static final long serialVersionUID = 1L; @Override - public boolean contains(Object element) { + public boolean contains(@Nullable Object element) { throw new ClassCastException(""); } } @@ -860,7 +860,6 @@ public void testComposeSerialization() { * works, so there are only trivial tests of that aspect. TODO: Fix comment style once annotation * stripper is fixed. */ - @J2ktIncompatible @GwtIncompatible // Predicates.containsPattern public void testContainsPattern_apply() { Predicate isFoobar = Predicates.containsPattern("^Fo.*o.*bar$"); @@ -868,7 +867,6 @@ public void testContainsPattern_apply() { assertFalse(isFoobar.apply("Foobarx")); } - @J2ktIncompatible @GwtIncompatible // Predicates.containsPattern public void testContains_apply() { Predicate isFoobar = Predicates.contains(Pattern.compile("^Fo.*o.*bar$")); @@ -903,7 +901,6 @@ public void testContainsPattern_serialization() { assertEquals(pre.apply("foo"), post.apply("foo")); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testContains_equals() { new EqualsTester() @@ -915,13 +912,13 @@ public void testContains_equals() { } public void assertEqualHashCode( - Predicate expected, Predicate actual) { + Predicate expected, Predicate actual) { assertEquals(actual + " should hash like " + expected, expected.hashCode(), actual.hashCode()); } public void testHashCodeForBooleanOperations() { - Predicate p1 = Predicates.isNull(); - Predicate p2 = isOdd(); + Predicate<@Nullable Integer> p1 = Predicates.isNull(); + Predicate<@Nullable Integer> p2 = isOdd(); // Make sure that hash codes are not computed per-instance. assertEqualHashCode(Predicates.not(p1), Predicates.not(p1)); @@ -948,30 +945,30 @@ public void testEqualsAndSerializable() throws Exception { new ClassSanityTester().forAllPublicStaticMethods(Predicates.class).testEqualsAndSerializable(); } - private static void assertEvalsToTrue(Predicate predicate) { + private static void assertEvalsToTrue(Predicate predicate) { assertTrue(predicate.apply(0)); assertTrue(predicate.apply(1)); assertTrue(predicate.apply(null)); } - private static void assertEvalsToFalse(Predicate predicate) { + private static void assertEvalsToFalse(Predicate predicate) { assertFalse(predicate.apply(0)); assertFalse(predicate.apply(1)); assertFalse(predicate.apply(null)); } - private static void assertEvalsLikeOdd(Predicate predicate) { + private static void assertEvalsLikeOdd(Predicate predicate) { assertEvalsLike(isOdd(), predicate); } private static void assertEvalsLike( - Predicate expected, Predicate actual) { + Predicate expected, Predicate actual) { assertEvalsLike(expected, actual, 0); assertEvalsLike(expected, actual, 1); - assertEvalsLike(expected, actual, null); + PredicatesTest.<@Nullable Integer>assertEvalsLike(expected, actual, null); } - private static void assertEvalsLike( + private static void assertEvalsLike( Predicate expected, Predicate actual, T input) { Boolean expectedResult = null; RuntimeException expectedRuntimeException = null; @@ -998,8 +995,9 @@ private static void assertEvalsLike( @J2ktIncompatible @GwtIncompatible // SerializableTester - private static void checkSerialization(Predicate predicate) { - Predicate reserialized = SerializableTester.reserializeAndAssert(predicate); + private static void checkSerialization(Predicate predicate) { + Predicate reserialized = + SerializableTester.reserializeAndAssert(predicate); assertEvalsLike(predicate, reserialized); } } diff --git a/guava-tests/test/com/google/common/base/SplitterTest.java b/guava-tests/test/com/google/common/base/SplitterTest.java index 2f9ea2532e1c..06617fc32558 100644 --- a/guava-tests/test/com/google/common/base/SplitterTest.java +++ b/guava-tests/test/com/google/common/base/SplitterTest.java @@ -299,7 +299,6 @@ public void testStringSplitWithTrim() { .inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSimpleSplit() { String simple = "a,b,c"; @@ -307,7 +306,6 @@ public void testPatternSimpleSplit() { assertThat(letters).containsExactly("a", "b", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSimpleSplitWithNoDelimiter() { String simple = "a,b,c"; @@ -315,7 +313,6 @@ public void testPatternSimpleSplitWithNoDelimiter() { assertThat(letters).containsExactly("a,b,c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSplitWithDoubleDelimiter() { String doubled = "a,,b,c"; @@ -323,7 +320,6 @@ public void testPatternSplitWithDoubleDelimiter() { assertThat(letters).containsExactly("a", "", "b", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSplitWithDoubleDelimiterAndSpace() { String doubled = "a,, b,c"; @@ -331,7 +327,6 @@ public void testPatternSplitWithDoubleDelimiterAndSpace() { assertThat(letters).containsExactly("a", "", " b", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSplitWithTrailingDelimiter() { String trailing = "a,b,c,"; @@ -339,7 +334,6 @@ public void testPatternSplitWithTrailingDelimiter() { assertThat(letters).containsExactly("a", "b", "c", "").inOrder(); } - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSplitWithLeadingDelimiter() { String leading = ",a,b,c"; @@ -349,7 +343,6 @@ public void testPatternSplitWithLeadingDelimiter() { // TODO(kevinb): the name of this method suggests it might not actually be testing what it // intends to be testing? - @J2ktIncompatible @GwtIncompatible // Splitter.onPattern public void testPatternSplitWithMultipleLetters() { Iterable testPatterningMotto = @@ -359,13 +352,11 @@ public void testPatternSplitWithMultipleLetters() { .inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern private static Pattern literalDotPattern() { return Pattern.compile("\\."); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWithDoubleDelimiterOmitEmptyStrings() { String doubled = "a..b.c"; @@ -373,7 +364,7 @@ public void testPatternSplitWithDoubleDelimiterOmitEmptyStrings() { assertThat(letters).containsExactly("a", "b", "c").inOrder(); } - @J2ktIncompatible + @J2ktIncompatible // Kotlin Native's regex is based on Apache Harmony, like old Android @GwtIncompatible // java.util.regex.Pattern @AndroidIncompatible // Bug in older versions of Android we test against, since fixed. public void testPatternSplitLookBehind() { @@ -387,7 +378,7 @@ public void testPatternSplitLookBehind() { // splits into chunks ending in : } - @J2ktIncompatible + @J2ktIncompatible // Kotlin Native's regex is based on Apache Harmony, like old Android @GwtIncompatible // java.util.regex.Pattern @AndroidIncompatible // Bug in older versions of Android we test against, since fixed. public void testPatternSplitWordBoundary() { @@ -396,7 +387,6 @@ public void testPatternSplitWordBoundary() { assertThat(words).containsExactly("foo", "<", "bar", ">", "bletch").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWordBoundary_singleCharInput() { String string = "f"; @@ -405,7 +395,7 @@ public void testPatternSplitWordBoundary_singleCharInput() { } @AndroidIncompatible // Apparently Gingerbread's regex API is buggy. - @J2ktIncompatible + @J2ktIncompatible // Kotlin Native's regex is based on Apache Harmony, like old Android @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWordBoundary_singleWordInput() { String string = "foo"; @@ -413,7 +403,6 @@ public void testPatternSplitWordBoundary_singleWordInput() { assertThat(words).containsExactly("foo").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitEmptyToken() { String emptyToken = "a. .c"; @@ -421,7 +410,6 @@ public void testPatternSplitEmptyToken() { assertThat(letters).containsExactly("a", "", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitEmptyTokenOmitEmptyStrings() { String emptyToken = "a. .c"; @@ -430,7 +418,6 @@ public void testPatternSplitEmptyTokenOmitEmptyStrings() { assertThat(letters).containsExactly("a", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitOnOnlyDelimiter() { Iterable blankblank = Splitter.on(literalDotPattern()).split("."); @@ -438,14 +425,12 @@ public void testPatternSplitOnOnlyDelimiter() { assertThat(blankblank).containsExactly("", "").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitOnOnlyDelimitersOmitEmptyStrings() { Iterable empty = Splitter.on(literalDotPattern()).omitEmptyStrings().split("..."); assertThat(empty).isEmpty(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitMatchingIsGreedy() { String longDelimiter = "a, b, c"; @@ -453,7 +438,6 @@ public void testPatternSplitMatchingIsGreedy() { assertThat(letters).containsExactly("a", "b", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWithLongLeadingDelimiter() { String longDelimiter = ", a, b, c"; @@ -461,7 +445,6 @@ public void testPatternSplitWithLongLeadingDelimiter() { assertThat(letters).containsExactly("", "a", "b", "c").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWithLongTrailingDelimiter() { String longDelimiter = "a, b, c/ "; @@ -469,13 +452,11 @@ public void testPatternSplitWithLongTrailingDelimiter() { assertThat(letters).containsExactly("a", "b", "c", "").inOrder(); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitInvalidPattern() { assertThrows(IllegalArgumentException.class, () -> Splitter.on(Pattern.compile("a*"))); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testPatternSplitWithTrim() { String jacksons = @@ -497,7 +478,6 @@ public void testSplitterIterableIsUnmodifiable_string() { assertIteratorIsUnmodifiable(Splitter.on(",").split("a,b").iterator()); } - @J2ktIncompatible @GwtIncompatible // java.util.regex.Pattern public void testSplitterIterableIsUnmodifiable_pattern() { assertIteratorIsUnmodifiable(Splitter.on(Pattern.compile(",")).split("a,b").iterator()); diff --git a/guava-tests/test/com/google/common/base/StopwatchTest.java b/guava-tests/test/com/google/common/base/StopwatchTest.java index 21d36d65c087..99e4998d6865 100644 --- a/guava-tests/test/com/google/common/base/StopwatchTest.java +++ b/guava-tests/test/com/google/common/base/StopwatchTest.java @@ -167,7 +167,7 @@ public void testElapsed_millis() { assertEquals(1, stopwatch.elapsed(MILLISECONDS)); } - @J2ktIncompatible // TODO(b/259213718): Enable + @J2ktIncompatible // TODO(b/259213718): Switch J2kt to String.format("%.4g") once that's supported public void testToString() { stopwatch.start(); assertEquals("0.000 ns", stopwatch.toString()); diff --git a/guava-tests/test/com/google/common/base/StringsTest.java b/guava-tests/test/com/google/common/base/StringsTest.java index c495ff5bf0b4..72e441ef8729 100644 --- a/guava-tests/test/com/google/common/base/StringsTest.java +++ b/guava-tests/test/com/google/common/base/StringsTest.java @@ -232,15 +232,19 @@ public void testLenientFormat() { assertEquals("null [null, null]", Strings.lenientFormat("%s", null, null, null)); assertEquals("null [5, 6]", Strings.lenientFormat(null, 5, 6)); assertEquals("null", Strings.lenientFormat("%s", (Object) null)); + } + + @J2ktIncompatible // TODO(b/319404022): Allow passing null array as varargs + public void testLenientFormat_nullArrayVarargs() { assertEquals("(Object[])null", Strings.lenientFormat("%s", (Object[]) null)); } - @J2ktIncompatible @GwtIncompatible // GWT reflection includes less data public void testLenientFormat_badArgumentToString() { assertThat(Strings.lenientFormat("boiler %s plate", new ThrowsOnToString())) .matches( - "boiler plate"); } diff --git a/guava-tests/test/com/google/common/base/SuppliersTest.java b/guava-tests/test/com/google/common/base/SuppliersTest.java index 82b84819945e..04c837d78205 100644 --- a/guava-tests/test/com/google/common/base/SuppliersTest.java +++ b/guava-tests/test/com/google/common/base/SuppliersTest.java @@ -35,6 +35,7 @@ import java.util.concurrent.atomic.AtomicInteger; import java.util.concurrent.atomic.AtomicReference; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests com.google.common.base.Suppliers. @@ -326,7 +327,7 @@ public void testOfInstanceSuppliesSameInstance() { } public void testOfInstanceSuppliesNull() { - Supplier nullSupplier = Suppliers.ofInstance(null); + Supplier<@Nullable Integer> nullSupplier = Suppliers.ofInstance(null); assertNull(nullSupplier.get()); } diff --git a/guava-tests/test/com/google/common/base/ThrowablesTest.java b/guava-tests/test/com/google/common/base/ThrowablesTest.java index 194b435a3289..fe39b032e4f3 100644 --- a/guava-tests/test/com/google/common/base/ThrowablesTest.java +++ b/guava-tests/test/com/google/common/base/ThrowablesTest.java @@ -395,19 +395,16 @@ public void noneDeclared() { assertThat(expected).hasCauseThat().isInstanceOf(SomeCheckedException.class); } - @J2ktIncompatible @GwtIncompatible // throwIfInstanceOf public void testThrowIfInstanceOf_Unchecked() throws SomeCheckedException { throwIfInstanceOf(new SomeUncheckedException(), SomeCheckedException.class); } - @J2ktIncompatible @GwtIncompatible // throwIfInstanceOf public void testThrowIfInstanceOf_CheckedDifferent() throws SomeCheckedException { throwIfInstanceOf(new SomeOtherCheckedException(), SomeCheckedException.class); } - @J2ktIncompatible @GwtIncompatible // throwIfInstanceOf public void testThrowIfInstanceOf_CheckedSame() { assertThrows( @@ -415,7 +412,6 @@ public void testThrowIfInstanceOf_CheckedSame() { () -> throwIfInstanceOf(new SomeCheckedException(), SomeCheckedException.class)); } - @J2ktIncompatible @GwtIncompatible // throwIfInstanceOf public void testThrowIfInstanceOf_CheckedSubclass() { assertThrows( @@ -424,7 +420,7 @@ public void testThrowIfInstanceOf_CheckedSubclass() { } @J2ktIncompatible - @GwtIncompatible // throwIfInstanceOf + @GwtIncompatible // propagate]IfInstanceOf public void testPropagateIfInstanceOf_NoneThrown() throws SomeCheckedException { Sample sample = new Sample() { @@ -444,7 +440,7 @@ public void oneDeclared() throws SomeCheckedException { } @J2ktIncompatible - @GwtIncompatible // throwIfInstanceOf + @GwtIncompatible // propagateIfInstanceOf public void testPropagateIfInstanceOf_DeclaredThrown() { Sample sample = new Sample() { @@ -464,7 +460,7 @@ public void oneDeclared() throws SomeCheckedException { } @J2ktIncompatible - @GwtIncompatible // throwIfInstanceOf + @GwtIncompatible // propagateIfInstanceOf public void testPropagateIfInstanceOf_UncheckedThrown() throws SomeCheckedException { Sample sample = new Sample() { @@ -484,7 +480,7 @@ public void oneDeclared() throws SomeCheckedException { } @J2ktIncompatible - @GwtIncompatible // throwIfInstanceOf + @GwtIncompatible // propagateIfInstanceOf public void testPropagateIfInstanceOf_UndeclaredThrown() throws SomeCheckedException { Sample sample = new Sample() { @@ -504,7 +500,6 @@ public void oneDeclared() throws SomeCheckedException { assertThat(expected).hasCauseThat().isInstanceOf(SomeOtherCheckedException.class); } - @J2ktIncompatible @GwtIncompatible // throwIfInstanceOf public void testThrowIfInstanceOf_null() throws SomeCheckedException { assertThrows( @@ -512,7 +507,7 @@ public void testThrowIfInstanceOf_null() throws SomeCheckedException { } @J2ktIncompatible - @GwtIncompatible // throwIfInstanceOf + @GwtIncompatible // propagateIfInstanceOf public void testPropageIfInstanceOf_null() throws SomeCheckedException { Throwables.propagateIfInstanceOf(null, SomeCheckedException.class); } @@ -592,7 +587,7 @@ static void methodThatThrowsUndeclaredChecked() throws SomeUndeclaredCheckedExce throw new SomeUndeclaredCheckedException(); } - @J2ktIncompatible + @J2ktIncompatible // Format does not match @GwtIncompatible // getStackTraceAsString(Throwable) public void testGetStackTraceAsString() { class StackTraceException extends Exception { @@ -648,7 +643,6 @@ public void testGetCasualChainLoop() { } } - @J2ktIncompatible @GwtIncompatible // Throwables.getCauseAs(Throwable, Class) public void testGetCauseAs() { SomeCheckedException cause = new SomeCheckedException(); diff --git a/guava-tests/test/com/google/common/base/ToStringHelperTest.java b/guava-tests/test/com/google/common/base/ToStringHelperTest.java index 62ee891918a9..db15f2ef811c 100644 --- a/guava-tests/test/com/google/common/base/ToStringHelperTest.java +++ b/guava-tests/test/com/google/common/base/ToStringHelperTest.java @@ -18,7 +18,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableMap; import java.util.Arrays; import java.util.Map; @@ -32,7 +31,6 @@ @GwtCompatible public class ToStringHelperTest extends TestCase { - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_instance() { String toTest = MoreObjects.toStringHelper(this).toString(); @@ -44,7 +42,6 @@ public void testConstructorLenient_instance() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_innerClass() { String toTest = MoreObjects.toStringHelper(new TestClass()).toString(); @@ -56,7 +53,6 @@ public void testConstructorLenient_innerClass() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_anonymousClass() { String toTest = MoreObjects.toStringHelper(new Object() {}).toString(); @@ -68,7 +64,6 @@ public void testConstructorLenient_anonymousClass() { assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testConstructor_classObject() { String toTest = MoreObjects.toStringHelper(TestClass.class).toString(); @@ -85,7 +80,6 @@ public void testConstructor_stringObject() { assertEquals("FooBar{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_localInnerClass() { // Local inner classes have names ending like "Outer.$1Inner" @@ -100,7 +94,6 @@ class LocalInnerClass {} assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_localInnerNestedClass() { class LocalInnerClass { @@ -120,7 +113,6 @@ class LocalInnerNestedClass {} assertTrue(toTest, toTest.matches(".*\\{\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringHelper_moreThanNineAnonymousClasses() { // The nth anonymous class has a name ending like "Outer.$n" @@ -155,14 +147,12 @@ public void testToStringHelperLenient_moreThanNineAnonymousClasses() { } // all remaining test are on an inner class with various fields - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneField() { String toTest = MoreObjects.toStringHelper(new TestClass()).add("field1", "Hello").toString(); assertEquals("TestClass{field1=Hello}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneIntegerField() { String toTest = @@ -170,7 +160,6 @@ public void testToString_oneIntegerField() { assertEquals("TestClass{field1=42}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_nullInteger() { String toTest = @@ -195,7 +184,6 @@ public void testToStringLenient_nullInteger() { assertTrue(toTest, toTest.matches(".*\\{field1\\=null\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_complexFields() { @@ -242,7 +230,6 @@ public void testToString_addWithNullName() { } } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addWithNullValue() { final String result = MoreObjects.toStringHelper(new TestClass()).add("Hello", null).toString(); @@ -255,7 +242,6 @@ public void testToStringLenient_addWithNullValue() { assertTrue(result, result.matches(".*\\{Hello\\=null\\}")); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_ToStringTwice() { MoreObjects.ToStringHelper helper = @@ -275,7 +261,6 @@ public void testToString_ToStringTwice() { assertEquals(expected2, helper.toString()); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addValue() { String toTest = @@ -303,7 +288,6 @@ public void testToStringLenient_addValue() { assertTrue(toTest, toTest.matches(expected)); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToString_addValueWithNullValue() { final String result = @@ -329,7 +313,6 @@ public void testToStringLenient_addValueWithNullValue() { assertTrue(result, result.matches(expected)); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_oneField() { String toTest = @@ -337,7 +320,6 @@ public void testToStringOmitNullValues_oneField() { assertEquals("TestClass{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsFirstNull() { String toTest = @@ -350,7 +332,6 @@ public void testToStringOmitNullValues_manyFieldsFirstNull() { assertEquals("TestClass{field2=Googley, field3=World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsOmitAfterNull() { String toTest = @@ -363,7 +344,6 @@ public void testToStringOmitNullValues_manyFieldsOmitAfterNull() { assertEquals("TestClass{field2=Googley, field3=World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyFieldsLastNull() { String toTest = @@ -376,7 +356,6 @@ public void testToStringOmitNullValues_manyFieldsLastNull() { assertEquals("TestClass{field1=Hello, field2=Googley}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitEmptyValues_oneValue() { String toTest = @@ -384,7 +363,6 @@ public void testToStringOmitEmptyValues_oneValue() { assertEquals("TestClass{}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyValuesFirstNull() { String toTest = @@ -397,7 +375,6 @@ public void testToStringOmitNullValues_manyValuesFirstNull() { assertEquals("TestClass{Googley, World}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_manyValuesLastNull() { String toTest = @@ -410,7 +387,6 @@ public void testToStringOmitNullValues_manyValuesLastNull() { assertEquals("TestClass{Hello, Googley}", toTest); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_differentOrder() { String expected = "TestClass{field1=Hello, field2=Googley, field3=World}"; @@ -432,7 +408,6 @@ public void testToStringOmitNullValues_differentOrder() { assertEquals(expected, toTest2); } - @J2ktIncompatible @GwtIncompatible // Class names are obfuscated in GWT public void testToStringOmitNullValues_canBeCalledManyTimes() { String toTest = diff --git a/guava-tests/test/com/google/common/base/Utf8Test.java b/guava-tests/test/com/google/common/base/Utf8Test.java index 57464a9ee55e..049e8d2abf5a 100644 --- a/guava-tests/test/com/google/common/base/Utf8Test.java +++ b/guava-tests/test/com/google/common/base/Utf8Test.java @@ -26,7 +26,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableList; import java.util.Arrays; import java.util.HashMap; @@ -188,21 +187,18 @@ private static void testEncodedLengthFails(String invalidString, int invalidCode FOUR_BYTE_ROUNDTRIPPABLE_CHARACTERS; /** Tests that round tripping of all two byte permutations work. */ - @J2ktIncompatible @GwtIncompatible // java.nio.charset.Charset public void testIsWellFormed_1Byte() { testBytes(1, EXPECTED_ONE_BYTE_ROUNDTRIPPABLE_COUNT); } /** Tests that round tripping of all two byte permutations work. */ - @J2ktIncompatible @GwtIncompatible // java.nio.charset.Charset public void testIsWellFormed_2Bytes() { testBytes(2, EXPECTED_TWO_BYTE_ROUNDTRIPPABLE_COUNT); } /** Tests that round tripping of all three byte permutations work. */ - @J2ktIncompatible @GwtIncompatible // java.nio.charset.Charset public void testIsWellFormed_3Bytes() { @@ -306,7 +302,6 @@ private static long[] generateFourByteShardsExpectedRunnables() { * @param numBytes the number of bytes in the byte array * @param expectedCount the expected number of roundtrippable permutations */ - @J2ktIncompatible @GwtIncompatible // java.nio.charset.Charset private static void testBytes(int numBytes, long expectedCount) { testBytes(numBytes, expectedCount, 0, -1); @@ -322,7 +317,6 @@ private static void testBytes(int numBytes, long expectedCount) { * @param lim the limit of bytes to process encoded as a long as big-endian, or -1 to mean the max * limit for numBytes */ - @J2ktIncompatible @GwtIncompatible // java.nio.charset.Charset private static void testBytes(int numBytes, long expectedCount, long start, long lim) { byte[] bytes = new byte[numBytes]; diff --git a/guava/src/com/google/common/base/CharMatcher.java b/guava/src/com/google/common/base/CharMatcher.java index 42dfca3d840e..39681c7fd3a1 100644 --- a/guava/src/com/google/common/base/CharMatcher.java +++ b/guava/src/com/google/common/base/CharMatcher.java @@ -20,7 +20,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import java.util.Arrays; import java.util.BitSet; @@ -413,7 +412,6 @@ public CharMatcher precomputed() { * constructs an eight-kilobyte bit array and queries that. In many situations this produces a * matcher which is faster to query than the original. */ - @J2ktIncompatible @GwtIncompatible // SmallCharMatcher CharMatcher precomputedInternal() { final BitSet table = new BitSet(); @@ -444,7 +442,6 @@ public String toString() { /** * Helper method for {@link #precomputedInternal} that doesn't test if the negation is cheaper. */ - @J2ktIncompatible @GwtIncompatible // SmallCharMatcher private static CharMatcher precomputedPositive( int totalCharacters, BitSet table, String description) { @@ -464,7 +461,6 @@ private static CharMatcher precomputedPositive( } } - @J2ktIncompatible @GwtIncompatible // SmallCharMatcher private static boolean isSmall(int totalCharacters, int tableLength) { return totalCharacters <= SmallCharMatcher.MAX_SIZE @@ -473,7 +469,6 @@ private static boolean isSmall(int totalCharacters, int tableLength) { } /** Sets bits in {@code table} matched by this matcher. */ - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code void setBits(BitSet table) { for (int c = Character.MAX_VALUE; c >= Character.MIN_VALUE; c--) { @@ -984,7 +979,6 @@ public final CharMatcher precomputed() { } /** Fast matcher using a {@link BitSet} table of matching characters. */ - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code private static final class BitSetMatcher extends NamedFastMatcher { @@ -1239,7 +1233,6 @@ public boolean matches(char c) { return TABLE.charAt((MULTIPLIER * c) >>> SHIFT) == c; } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1526,7 +1519,6 @@ public int countIn(CharSequence sequence) { return sequence.length() - original.countIn(sequence); } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1563,7 +1555,6 @@ public boolean matches(char c) { return first.matches(c) && second.matches(c); } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1592,7 +1583,6 @@ private static final class Or extends CharMatcher { second = checkNotNull(b); } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1647,7 +1637,6 @@ public CharMatcher negate() { return isNot(match); } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1684,7 +1673,6 @@ public CharMatcher or(CharMatcher other) { return other.matches(match) ? any() : this; } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1723,7 +1711,6 @@ public boolean matches(char c) { return c == match1 || c == match2; } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { @@ -1753,7 +1740,6 @@ public boolean matches(char c) { } @Override - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code void setBits(BitSet table) { for (char c : chars) { @@ -1789,7 +1775,6 @@ public boolean matches(char c) { return startInclusive <= c && c <= endInclusive; } - @J2ktIncompatible @GwtIncompatible // used only from other GwtIncompatible code @Override void setBits(BitSet table) { diff --git a/guava/src/com/google/common/base/JdkPattern.java b/guava/src/com/google/common/base/JdkPattern.java index a259d0061daa..4788398b7c20 100644 --- a/guava/src/com/google/common/base/JdkPattern.java +++ b/guava/src/com/google/common/base/JdkPattern.java @@ -15,14 +15,12 @@ package com.google.common.base; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import java.io.Serializable; import java.util.regex.Matcher; import java.util.regex.Pattern; /** A regex pattern implementation which is backed by the {@link Pattern}. */ @ElementTypesAreNonnullByDefault -@J2ktIncompatible @GwtIncompatible final class JdkPattern extends CommonPattern implements Serializable { private final Pattern pattern; diff --git a/guava/src/com/google/common/base/PatternCompiler.java b/guava/src/com/google/common/base/PatternCompiler.java index 32505217fbc7..f33d38ba06d4 100644 --- a/guava/src/com/google/common/base/PatternCompiler.java +++ b/guava/src/com/google/common/base/PatternCompiler.java @@ -15,7 +15,6 @@ package com.google.common.base; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.errorprone.annotations.RestrictedApi; /** @@ -23,7 +22,6 @@ * java.util.regex} library, but an alternate implementation can be supplied using the {@link * java.util.ServiceLoader} mechanism. */ -@J2ktIncompatible @GwtIncompatible @ElementTypesAreNonnullByDefault interface PatternCompiler { diff --git a/guava/src/com/google/common/base/Preconditions.java b/guava/src/com/google/common/base/Preconditions.java index 1e9ac39cb40c..6d00d46ff365 100644 --- a/guava/src/com/google/common/base/Preconditions.java +++ b/guava/src/com/google/common/base/Preconditions.java @@ -438,7 +438,8 @@ public static void checkArgument( */ public static void checkArgument( boolean expression, - String errorMessageTemplate, + // TODO: cl/604933487 - Make errorMessageTemplate consistently @CheckForNull across overloads. + @CheckForNull String errorMessageTemplate, @CheckForNull Object p1, @CheckForNull Object p2) { if (!expression) { diff --git a/guava/src/com/google/common/base/Predicates.java b/guava/src/com/google/common/base/Predicates.java index 30d2ac7dc8f5..17c2bf5c5baf 100644 --- a/guava/src/com/google/common/base/Predicates.java +++ b/guava/src/com/google/common/base/Predicates.java @@ -235,7 +235,6 @@ public static Predicate> subtypeOf(Class clazz) { * @throws IllegalArgumentException if the pattern is invalid * @since 3.0 */ - @J2ktIncompatible @GwtIncompatible // Only used by other GWT-incompatible code. public static Predicate containsPattern(String pattern) { return new ContainsPatternFromStringPredicate(pattern); @@ -248,7 +247,6 @@ public static Predicate containsPattern(String pattern) { * * @since 3.0 */ - @J2ktIncompatible @GwtIncompatible(value = "java.util.regex.Pattern") public static Predicate contains(Pattern pattern) { return new ContainsPatternPredicate(new JdkPattern(pattern)); @@ -648,7 +646,6 @@ public String toString() { /** * @see Predicates#contains(Pattern) */ - @J2ktIncompatible @GwtIncompatible // Only used by other GWT-incompatible code. private static class ContainsPatternPredicate implements Predicate, Serializable { final CommonPattern pattern; @@ -699,7 +696,6 @@ public String toString() { /** * @see Predicates#containsPattern(String) */ - @J2ktIncompatible @GwtIncompatible // Only used by other GWT-incompatible code. private static class ContainsPatternFromStringPredicate extends ContainsPatternPredicate { diff --git a/guava/src/com/google/common/base/SmallCharMatcher.java b/guava/src/com/google/common/base/SmallCharMatcher.java index 81682564143d..f0e801b67118 100644 --- a/guava/src/com/google/common/base/SmallCharMatcher.java +++ b/guava/src/com/google/common/base/SmallCharMatcher.java @@ -15,7 +15,6 @@ package com.google.common.base; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; import com.google.common.base.CharMatcher.NamedFastMatcher; import java.util.BitSet; @@ -26,7 +25,6 @@ * * @author Christopher Swenson */ -@J2ktIncompatible @GwtIncompatible // no precomputation is done in GWT @ElementTypesAreNonnullByDefault final class SmallCharMatcher extends NamedFastMatcher { diff --git a/guava/src/com/google/common/base/Splitter.java b/guava/src/com/google/common/base/Splitter.java index e3924192dd66..47c4f2bf34b4 100644 --- a/guava/src/com/google/common/base/Splitter.java +++ b/guava/src/com/google/common/base/Splitter.java @@ -19,7 +19,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import java.util.ArrayList; import java.util.Collections; import java.util.Iterator; @@ -214,7 +213,6 @@ public int separatorEnd(int separatorPosition) { * @return a splitter, with default settings, that uses this pattern * @throws IllegalArgumentException if {@code separatorPattern} matches the empty string */ - @J2ktIncompatible @GwtIncompatible // java.util.regex public static Splitter on(Pattern separatorPattern) { return onPatternInternal(new JdkPattern(separatorPattern)); @@ -259,7 +257,6 @@ public int separatorEnd(int separatorPosition) { * @throws IllegalArgumentException if {@code separatorPattern} matches the empty string or is a * malformed expression */ - @J2ktIncompatible @GwtIncompatible // java.util.regex public static Splitter onPattern(String separatorPattern) { return onPatternInternal(Platform.compilePattern(separatorPattern)); diff --git a/guava/src/com/google/common/base/Throwables.java b/guava/src/com/google/common/base/Throwables.java index e37a3d99deb2..a35b1344e950 100644 --- a/guava/src/com/google/common/base/Throwables.java +++ b/guava/src/com/google/common/base/Throwables.java @@ -70,7 +70,6 @@ private Throwables() {} * * @since 20.0 */ - @J2ktIncompatible @GwtIncompatible // Class.cast, Class.isInstance public static void throwIfInstanceOf( Throwable throwable, Class declaredType) throws X { @@ -317,7 +316,6 @@ public static List getCausalChain(Throwable throwable) { * ClassCastException}'s cause is {@code throwable}. * @since 22.0 */ - @J2ktIncompatible @GwtIncompatible // Class.cast(Object) @CheckForNull public static X getCauseAs( From 345cd115ac59a47f463c1acad1693ba8b107ce88 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Mon, 12 Feb 2024 10:48:48 -0800 Subject: [PATCH 140/216] Bump gradle/wrapper-validation-action from 2.1.0 to 2.1.1 Bumps [gradle/wrapper-validation-action](https://github.com/gradle/wrapper-validation-action) from 2.1.0 to 2.1.1. - [Release notes](https://github.com/gradle/wrapper-validation-action/releases) - [Commits](https://github.com/gradle/wrapper-validation-action/compare/85cde3f5a1033b2adc2442631c24b530f1183a1a...699bb18358f12c5b78b37bb0111d3a0e2276e0e2) Fixes #6984 RELNOTES=n/a PiperOrigin-RevId: 606299586 --- .github/workflows/gradle-wrapper-validation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index cfae32e84f4a..3a198d0b17a9 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -10,4 +10,4 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: gradle/wrapper-validation-action@85cde3f5a1033b2adc2442631c24b530f1183a1a + - uses: gradle/wrapper-validation-action@699bb18358f12c5b78b37bb0111d3a0e2276e0e2 From afb35a5d1be4a9718376098ef991496d5548dc4d Mon Sep 17 00:00:00 2001 From: lowasser Date: Mon, 12 Feb 2024 13:48:46 -0800 Subject: [PATCH 141/216] Optimize checksum-based hash functions on non-array ByteBuffers by at least an order of magnitude, at least for Java 9+. RELNOTES=`hash`: Optimized `Checksum`-based hash functions for Java 9+. PiperOrigin-RevId: 606354141 --- .../common/hash/ChecksumHashFunction.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/guava/src/com/google/common/hash/ChecksumHashFunction.java b/guava/src/com/google/common/hash/ChecksumHashFunction.java index 159adbb8194b..454f3098e3ee 100644 --- a/guava/src/com/google/common/hash/ChecksumHashFunction.java +++ b/guava/src/com/google/common/hash/ChecksumHashFunction.java @@ -18,8 +18,14 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.errorprone.annotations.Immutable; +import com.google.j2objc.annotations.J2ObjCIncompatible; import java.io.Serializable; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.nio.ByteBuffer; import java.util.zip.Checksum; +import org.checkerframework.checker.nullness.qual.Nullable; /** * {@link HashFunction} adapter for {@link Checksum} instances. @@ -74,6 +80,14 @@ protected void update(byte[] bytes, int off, int len) { checksum.update(bytes, off, len); } + @Override + @J2ObjCIncompatible + protected void update(ByteBuffer b) { + if (!ChecksumMethodHandles.updateByteBuffer(checksum, b)) { + super.update(b); + } + } + @Override public HashCode hash() { long value = checksum.getValue(); @@ -90,5 +104,47 @@ public HashCode hash() { } } + @J2ObjCIncompatible + @SuppressWarnings("unused") + private static final class ChecksumMethodHandles { + private static final @Nullable MethodHandle UPDATE_BB = updateByteBuffer(); + + @IgnoreJRERequirement // https://github.com/mojohaus/animal-sniffer/issues/67 + static boolean updateByteBuffer(Checksum cs, ByteBuffer bb) { + if (UPDATE_BB != null) { + try { + UPDATE_BB.invokeExact(cs, bb); + } catch (Error t) { + throw t; + } catch (Throwable t) { + throw new AssertionError(t); + } + return true; + } else { + return false; + } + } + + private static @Nullable MethodHandle updateByteBuffer() { + try { + Class clazz = Class.forName("java.util.zip.Checksum"); + return MethodHandles.lookup() + .findVirtual(clazz, "update", MethodType.methodType(void.class, ByteBuffer.class)); + } catch (ClassNotFoundException e) { + throw new AssertionError(e); + } catch (IllegalAccessException e) { + // That API is public. + throw newLinkageError(e); + } catch (NoSuchMethodException e) { + // Only introduced in Java 9. + return null; + } + } + + private static LinkageError newLinkageError(Throwable cause) { + return new LinkageError(cause.toString(), cause); + } + } + private static final long serialVersionUID = 0L; } From 98c8b997acd9d083c2c759ba5f5c9febb12f2b90 Mon Sep 17 00:00:00 2001 From: Stefan Haustein Date: Tue, 13 Feb 2024 06:25:06 -0800 Subject: [PATCH 142/216] Enable c/g/c/u/concurrent tests for j2kt-native PiperOrigin-RevId: 606600311 --- .../AbstractAbstractFutureTest.java | 3 + .../util/concurrent/AbstractFutureTest.java | 2 + .../concurrent/AtomicLongMapBasherTest.java | 2 + .../util/concurrent/AtomicLongMapTest.java | 2 + .../common/util/concurrent/CallablesTest.java | 7 ++ .../concurrent/ExecutionSequencerTest.java | 3 + .../util/concurrent/FluentFutureTest.java | 14 +++- .../util/concurrent/FuturesGetDoneTest.java | 3 +- .../concurrent/FuturesGetUncheckedTest.java | 2 + .../common/util/concurrent/FuturesTest.java | 75 +++++++++++++++++++ .../TrustedListenableFutureTaskTest.java | 6 ++ .../AbstractAbstractFutureTest.java | 3 + .../util/concurrent/AbstractFutureTest.java | 2 + .../concurrent/AtomicDoubleArrayTest.java | 2 + .../concurrent/AtomicLongMapBasherTest.java | 2 + .../util/concurrent/AtomicLongMapTest.java | 2 + .../common/util/concurrent/CallablesTest.java | 7 ++ .../concurrent/ExecutionSequencerTest.java | 3 + .../util/concurrent/FluentFutureTest.java | 14 +++- .../util/concurrent/FuturesGetDoneTest.java | 3 +- .../concurrent/FuturesGetUncheckedTest.java | 2 + .../common/util/concurrent/FuturesTest.java | 75 +++++++++++++++++++ .../TrustedListenableFutureTaskTest.java | 6 ++ 23 files changed, 230 insertions(+), 10 deletions(-) diff --git a/android/guava-tests/test/com/google/common/util/concurrent/AbstractAbstractFutureTest.java b/android/guava-tests/test/com/google/common/util/concurrent/AbstractAbstractFutureTest.java index 8e94f174f865..a467a6b7d762 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/AbstractAbstractFutureTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/AbstractAbstractFutureTest.java @@ -29,6 +29,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.util.concurrent.AbstractFutureTest.TimedWaiterThread; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; @@ -359,6 +360,7 @@ public void testNegativeTimeout() throws Exception { assertEquals(1, future.get(-1, SECONDS).intValue()); } + @J2ktIncompatible @GwtIncompatible // threads public void testOverflowTimeout() throws Exception { // First, sanity check that naive multiplication would really overflow to a negative number: @@ -374,6 +376,7 @@ public void testOverflowTimeout() throws Exception { waiter.join(); } + @J2ktIncompatible // TODO(b/324550390): Enable public void testSetNull() throws Exception { future.set(null); assertSuccessful(future, null); diff --git a/android/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java b/android/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java index 6bf4c99d1b32..c5c4b05795d3 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java @@ -24,6 +24,7 @@ import static org.junit.Assert.assertThrows; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.Iterables; import com.google.common.collect.Range; import com.google.common.collect.Sets; @@ -841,6 +842,7 @@ public void testSetFuture_stackOverflow() { // Verify that StackOverflowError in a long chain of SetFuture doesn't cause the entire toString // call to fail + @J2ktIncompatible @GwtIncompatible @AndroidIncompatible public void testSetFutureToString_stackOverflow() { diff --git a/android/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapBasherTest.java b/android/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapBasherTest.java index b1e741a68118..44212922a0a1 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapBasherTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapBasherTest.java @@ -19,6 +19,7 @@ import static java.util.concurrent.TimeUnit.SECONDS; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.ArrayList; import java.util.Random; import java.util.concurrent.Callable; @@ -32,6 +33,7 @@ * * @author mike nonemacher */ +@J2ktIncompatible // threads @GwtIncompatible // threads public class AtomicLongMapBasherTest extends TestCase { private final Random random = new Random(301); diff --git a/android/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapTest.java b/android/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapTest.java index 878ea5ec87ac..aa37eae1898c 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; import com.google.common.testing.NullPointerTester; @@ -39,6 +40,7 @@ public class AtomicLongMapTest extends TestCase { private final Random random = new Random(301); + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNulls() { NullPointerTester tester = new NullPointerTester(); diff --git a/android/guava-tests/test/com/google/common/util/concurrent/CallablesTest.java b/android/guava-tests/test/com/google/common/util/concurrent/CallablesTest.java index b4766bc8ca20..78c78e65c395 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/CallablesTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/CallablesTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; import java.security.Permission; @@ -36,6 +37,7 @@ @GwtCompatible(emulated = true) public class CallablesTest extends TestCase { + @J2ktIncompatible // TODO(b/324550390): Enable public void testReturning() throws Exception { assertNull(Callables.returning(null).call()); @@ -46,6 +48,7 @@ public void testReturning() throws Exception { assertSame(value, callable.call()); } + @J2ktIncompatible @GwtIncompatible public void testAsAsyncCallable() throws Exception { final String expected = "MyCallableString"; @@ -64,6 +67,7 @@ public String call() throws Exception { assertSame(expected, future.get()); } + @J2ktIncompatible @GwtIncompatible public void testAsAsyncCallable_exception() throws Exception { final Exception expected = new IllegalArgumentException(); @@ -87,6 +91,7 @@ public String call() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // threads public void testRenaming() throws Exception { String oldName = Thread.currentThread().getName(); @@ -103,6 +108,7 @@ public void testRenaming() throws Exception { assertEquals(oldName, Thread.currentThread().getName()); } + @J2ktIncompatible @GwtIncompatible // threads public void testRenaming_exceptionalReturn() throws Exception { String oldName = Thread.currentThread().getName(); @@ -124,6 +130,7 @@ class MyException extends Exception {} assertEquals(oldName, Thread.currentThread().getName()); } + @J2ktIncompatible @GwtIncompatible // threads public void testRenaming_noPermissions() throws Exception { diff --git a/android/guava-tests/test/com/google/common/util/concurrent/ExecutionSequencerTest.java b/android/guava-tests/test/com/google/common/util/concurrent/ExecutionSequencerTest.java index 1dafb3b0b203..524b8d50d7ff 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/ExecutionSequencerTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/ExecutionSequencerTest.java @@ -21,6 +21,7 @@ import static java.util.concurrent.TimeUnit.SECONDS; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.testing.GcFinalization; import com.google.common.testing.TestLogHandler; @@ -149,6 +150,7 @@ public Boolean call() { assertThat(getDone(future2)).isFalse(); } + @J2ktIncompatible @GwtIncompatible @J2ObjCIncompatible // gc @AndroidIncompatible @@ -326,6 +328,7 @@ private static final class LongHolder { private static final int ITERATION_COUNT = 50_000; private static final int DIRECT_EXECUTIONS_PER_THREAD = 100; + @J2ktIncompatible @GwtIncompatible // threads public void testAvoidsStackOverflow_multipleThreads() throws Exception { final LongHolder holder = new LongHolder(); diff --git a/android/guava-tests/test/com/google/common/util/concurrent/FluentFutureTest.java b/android/guava-tests/test/com/google/common/util/concurrent/FluentFutureTest.java index 48d5c8e5a0fc..309b0029abd3 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/FluentFutureTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/FluentFutureTest.java @@ -27,6 +27,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.util.concurrent.ForwardingListenableFuture.SimpleForwardingListenableFuture; import java.util.concurrent.ExecutionException; @@ -38,6 +39,7 @@ * Tests for {@link FluentFuture}. The tests cover only the basics for the API. The actual logic is * tested in {@link FuturesTest}. */ +@ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) public class FluentFutureTest extends TestCase { public void testFromFluentFuture() { @@ -75,9 +77,12 @@ public void onFailure(Throwable t) {} assertThat(called[0]).isTrue(); } + // Avoid trouble with automatic mapping between JRE and Kotlin runtime classes. + static class CustomRuntimeException extends RuntimeException {} + public void testCatching() throws Exception { FluentFuture f = - FluentFuture.from(immediateFailedFuture(new RuntimeException())) + FluentFuture.from(immediateFailedFuture(new CustomRuntimeException())) .catching( Throwable.class, new Function>() { @@ -87,12 +92,12 @@ public Class apply(Throwable input) { } }, directExecutor()); - assertThat(f.get()).isEqualTo(RuntimeException.class); + assertThat(f.get()).isEqualTo(CustomRuntimeException.class); } public void testCatchingAsync() throws Exception { FluentFuture f = - FluentFuture.from(immediateFailedFuture(new RuntimeException())) + FluentFuture.from(immediateFailedFuture(new CustomRuntimeException())) .catchingAsync( Throwable.class, new AsyncFunction>() { @@ -102,7 +107,7 @@ public ListenableFuture> apply(Throwable input) { } }, directExecutor()); - assertThat(f.get()).isEqualTo(RuntimeException.class); + assertThat(f.get()).isEqualTo(CustomRuntimeException.class); } public void testTransform() throws Exception { @@ -133,6 +138,7 @@ public ListenableFuture apply(Integer input) { assertThat(f.get()).isEqualTo(2); } + @J2ktIncompatible @GwtIncompatible // withTimeout public void testWithTimeout() throws Exception { ScheduledExecutorService executor = newScheduledThreadPool(1); diff --git a/android/guava-tests/test/com/google/common/util/concurrent/FuturesGetDoneTest.java b/android/guava-tests/test/com/google/common/util/concurrent/FuturesGetDoneTest.java index cf9cb9df36b3..e77f9c2a7e0f 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/FuturesGetDoneTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/FuturesGetDoneTest.java @@ -24,6 +24,7 @@ import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** Unit tests for {@link Futures#getDone}. */ @GwtCompatible @@ -33,7 +34,7 @@ public void testSuccessful() throws ExecutionException { } public void testSuccessfulNull() throws ExecutionException { - assertThat(getDone(immediateFuture((String) null))).isEqualTo(null); + assertThat(getDone(Futures.<@Nullable String>immediateFuture(null))).isEqualTo(null); } public void testFailed() { diff --git a/android/guava-tests/test/com/google/common/util/concurrent/FuturesGetUncheckedTest.java b/android/guava-tests/test/com/google/common/util/concurrent/FuturesGetUncheckedTest.java index 93baaf651230..deebc9cb4578 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/FuturesGetUncheckedTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/FuturesGetUncheckedTest.java @@ -30,6 +30,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.concurrent.CancellationException; import java.util.concurrent.Future; import junit.framework.TestCase; @@ -41,6 +42,7 @@ public void testGetUnchecked_success() { assertEquals("foo", getUnchecked(immediateFuture("foo"))); } + @J2ktIncompatible @GwtIncompatible // Thread.interrupt public void testGetUnchecked_interrupted() { Thread.currentThread().interrupt(); diff --git a/android/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java b/android/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java index c46801b99e72..157dcda0a20b 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java @@ -58,6 +58,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Predicate; @@ -97,6 +98,7 @@ * * @author Nishant Thakkar */ +@ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) public class FuturesTest extends TestCase { private static final Logger aggregateFutureLogger = @@ -194,6 +196,7 @@ public void testImmediateCancelledFutureBasic() throws Exception { assertTrue(future.isCancelled()); } + @J2ktIncompatible @GwtIncompatible public void testImmediateCancelledFutureStack() throws Exception { ListenableFuture future = CallerClass1.makeImmediateCancelledFuture(); @@ -215,6 +218,7 @@ public void testImmediateCancelledFutureStack() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static Predicate hasClassName(final Class clazz) { return new Predicate() { @@ -249,12 +253,14 @@ private static class Bar {} private static class BarChild extends Bar {} + @J2ktIncompatible // TODO(b/324550390): Enable public void testTransform_genericsNull() throws Exception { ListenableFuture nullFuture = immediateFuture(null); ListenableFuture transformedFuture = transform(nullFuture, constant(null), directExecutor()); assertNull(getDone(transformedFuture)); } + @J2ktIncompatible // TODO(b/324550390): Enable public void testTransform_genericsHierarchy() throws Exception { ListenableFuture future = immediateFuture(null); final BarChild barChild = new BarChild(); @@ -274,6 +280,7 @@ public BarChild apply(Foo unused) { * stack-overflow tests work. It must depend on the exact place the error occurs. */ @AndroidIncompatible + @J2ktIncompatible @GwtIncompatible // StackOverflowError public void testTransform_StackOverflow() throws Exception { { @@ -300,6 +307,7 @@ public void testTransform_StackOverflow() throws Exception { public void testTransform_ErrorAfterCancellation() throws Exception { class Transformer implements Function { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -320,6 +328,7 @@ public Object apply(Object input) { public void testTransform_ExceptionAfterCancellation() throws Exception { class Transformer implements Function { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -410,6 +419,7 @@ public ListenableFuture apply(Foo unused) { assertTrue(input.wasInterrupted()); } + @J2ktIncompatible @GwtIncompatible // threads public void testTransformAsync_interruptPropagatesToTransformingThread() throws Exception { SettableFuture input = SettableFuture.create(); @@ -504,6 +514,7 @@ public ListenableFuture apply(Foo unused) { * stack-overflow tests work. It must depend on the exact place the error occurs. */ @AndroidIncompatible + @J2ktIncompatible @GwtIncompatible // StackOverflowError public void testTransformAsync_StackOverflow() throws Exception { { @@ -530,6 +541,7 @@ public void testTransformAsync_StackOverflow() throws Exception { public void testTransformAsync_ErrorAfterCancellation() throws Exception { class Transformer implements AsyncFunction { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -550,6 +562,7 @@ public ListenableFuture apply(Object input) { public void testTransformAsync_ExceptionAfterCancellation() throws Exception { class Transformer implements AsyncFunction { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -695,6 +708,7 @@ static class MyRuntimeException extends RuntimeException {} * Test that the function is invoked only once, even if it throws an exception. Also, test that * that function's result is wrapped in an ExecutionException. */ + @J2ktIncompatible @GwtIncompatible // reflection public void testTransformExceptionRemainsMemoized() throws Throwable { // We need to test with two input futures since ExecutionList.execute @@ -727,6 +741,7 @@ public void testTransformExceptionRemainsMemoized() throws Throwable { runGetIdempotencyTest(errorComposedFuture, MyError.class); } + @J2ktIncompatible @GwtIncompatible // reflection private static void runGetIdempotencyTest( Future transformedFuture, Class expectedExceptionClass) @@ -743,6 +758,7 @@ private static void runGetIdempotencyTest( } } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static Function newOneTimeExceptionThrower() { return new Function() { @@ -758,6 +774,7 @@ public Integer apply(Integer from) { }; } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static Function newOneTimeErrorThrower() { return new Function() { @@ -802,6 +819,7 @@ public void testTransform_Executor() throws Exception { assertTrue(spy.wasExecuted); } + @J2ktIncompatible @GwtIncompatible // Threads public void testTransformAsync_functionToString() throws Exception { final CountDownLatch functionCalled = new CountDownLatch(1); @@ -830,6 +848,7 @@ public ListenableFuture apply(Object input) throws Exception { } } + @J2ktIncompatible @GwtIncompatible // lazyTransform public void testLazyTransform() throws Exception { FunctionSpy spy = new FunctionSpy<>(constant("bar")); @@ -842,6 +861,7 @@ public void testLazyTransform() throws Exception { spy.verifyCallCount(2); } + @J2ktIncompatible @GwtIncompatible // lazyTransform public void testLazyTransform_exception() throws Exception { final RuntimeException exception = new RuntimeException("deliberate"); @@ -966,6 +986,7 @@ public ListenableFuture apply(Throwable t) throws Exception { fallback.verifyCallCount(1); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatchingAsync_inputCancelledWithoutFallback() throws Exception { AsyncFunction fallback = unexpectedAsyncFunction(); @@ -1077,6 +1098,7 @@ public void testCatchingAsync_resultCancelledBeforeFallback() throws Exception { assertFalse(primary.wasInterrupted()); } + @J2ktIncompatible @GwtIncompatible // mocks // TODO(cpovirk): eliminate use of mocks @SuppressWarnings("unchecked") @@ -1103,6 +1125,7 @@ public ListenableFuture apply(Throwable t) throws Exception { fallback.verifyCallCount(1); } + @J2ktIncompatible // Nullability public void testCatchingAsync_nullInsteadOfFuture() throws Exception { ListenableFuture inputFuture = immediateFailedFuture(new Exception()); ListenableFuture chainedFuture = @@ -1130,6 +1153,7 @@ public ListenableFuture apply(Throwable t) { } } + @J2ktIncompatible @GwtIncompatible // threads public void testCatchingAsync_interruptPropagatesToTransformingThread() throws Exception { SettableFuture input = SettableFuture.create(); @@ -1169,6 +1193,7 @@ public ListenableFuture apply(Throwable t) throws Exception { // gotException.await(); } + @J2ktIncompatible @GwtIncompatible // Threads public void testCatchingAsync_functionToString() throws Exception { final CountDownLatch functionCalled = new CountDownLatch(1); @@ -1247,6 +1272,7 @@ public Integer apply(Throwable t) { fallback.verifyCallCount(1); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatching_inputCancelledWithoutFallback() throws Exception { Function fallback = unexpectedFunction(); @@ -1349,6 +1375,7 @@ public void testCatching_Throwable() throws Exception { assertEquals(1, (int) getDone(faultTolerantFuture)); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatching_customTypeMatch() throws Exception { Function fallback = functionReturningOne(); @@ -1358,6 +1385,7 @@ public void testCatching_customTypeMatch() throws Exception { assertEquals(1, (int) getDone(faultTolerantFuture)); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatching_customTypeNoMatch() throws Exception { Function fallback = functionReturningOne(); @@ -1372,6 +1400,7 @@ public void testCatching_customTypeNoMatch() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // StackOverflowError public void testCatching_StackOverflow() throws Exception { { @@ -1399,6 +1428,7 @@ public void testCatching_StackOverflow() throws Exception { public void testCatching_ErrorAfterCancellation() throws Exception { class Fallback implements Function { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -1419,6 +1449,7 @@ public Object apply(Throwable input) { public void testCatching_ExceptionAfterCancellation() throws Exception { class Fallback implements Function { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -1484,6 +1515,7 @@ public void testCatchingAsync_Throwable() throws Exception { assertEquals(1, (int) getDone(faultTolerantFuture)); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatchingAsync_customTypeMatch() throws Exception { AsyncFunction fallback = asyncFunctionReturningOne(); @@ -1493,6 +1525,7 @@ public void testCatchingAsync_customTypeMatch() throws Exception { assertEquals(1, (int) getDone(faultTolerantFuture)); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatchingAsync_customTypeNoMatch() throws Exception { AsyncFunction fallback = asyncFunctionReturningOne(); @@ -1507,6 +1540,7 @@ public void testCatchingAsync_customTypeNoMatch() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // StackOverflowError public void testCatchingAsync_StackOverflow() throws Exception { { @@ -1534,6 +1568,7 @@ public void testCatchingAsync_StackOverflow() throws Exception { public void testCatchingAsync_ErrorAfterCancellation() throws Exception { class Fallback implements AsyncFunction { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -1555,6 +1590,7 @@ public ListenableFuture apply(Throwable input) { public void testCatchingAsync_ExceptionAfterCancellation() throws Exception { class Fallback implements AsyncFunction { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -1671,6 +1707,7 @@ public ListenableFuture apply(I input) { }; } + @J2ktIncompatible // Wildcard generics public void testTransformAsync_genericsWildcard_AsyncFunction() throws Exception { ListenableFuture nullFuture = immediateFuture(null); ListenableFuture chainedFuture = @@ -1678,6 +1715,7 @@ public void testTransformAsync_genericsWildcard_AsyncFunction() throws Exception assertNull(getDone(chainedFuture)); } + @J2ktIncompatible // TODO(b/324550390): Enable public void testTransformAsync_genericsHierarchy_AsyncFunction() throws Exception { ListenableFuture future = immediateFuture(null); final BarChild barChild = new BarChild(); @@ -1694,6 +1732,7 @@ public AbstractFuture apply(Foo unused) { assertSame(barChild, bar); } + @J2ktIncompatible @GwtIncompatible // get() timeout public void testTransformAsync_asyncFunction_timeout() throws InterruptedException, ExecutionException { @@ -1728,6 +1767,7 @@ public ListenableFuture apply(String input) { } } + @J2ktIncompatible // Nullability public void testTransformAsync_asyncFunction_nullInsteadOfFuture() throws Exception { ListenableFuture inputFuture = immediateFuture("a"); ListenableFuture chainedFuture = @@ -1745,6 +1785,7 @@ public void testTransformAsync_asyncFunction_nullInsteadOfFuture() throws Except } } + @J2ktIncompatible @GwtIncompatible // threads public void testTransformAsync_asyncFunction_cancelledWhileApplyingFunction() throws InterruptedException, ExecutionException { @@ -1779,6 +1820,7 @@ public ListenableFuture apply(String input) throws Exception { } } + @J2ktIncompatible @GwtIncompatible // threads public void testTransformAsync_asyncFunction_cancelledBeforeApplyingFunction() throws InterruptedException { @@ -1837,6 +1879,7 @@ public ListenableFuture call() { } } + @J2ktIncompatible // TODO(b/324550390): Enable public void testSubmitAsync_asyncCallable_nullInsteadOfFuture() throws Exception { ListenableFuture chainedFuture = submitAsync(constantAsyncCallable(null), directExecutor()); try { @@ -1852,6 +1895,7 @@ public void testSubmitAsync_asyncCallable_nullInsteadOfFuture() throws Exception } } + @J2ktIncompatible @GwtIncompatible // threads public void testSubmitAsync_asyncCallable_cancelledWhileApplyingFunction() throws InterruptedException, ExecutionException { @@ -1885,6 +1929,7 @@ public ListenableFuture call() throws InterruptedException { } } + @J2ktIncompatible @GwtIncompatible // threads public void testSubmitAsync_asyncCallable_cancelledBeforeApplyingFunction() throws InterruptedException { @@ -1918,6 +1963,7 @@ public void run() { assertFalse(callableCalled.get()); } + @J2ktIncompatible @GwtIncompatible // threads public void testSubmitAsync_asyncCallable_returnsInterruptedFuture() throws InterruptedException { assertThat(Thread.interrupted()).isFalse(); @@ -2006,6 +2052,7 @@ public void run() { } } + @J2ktIncompatible @GwtIncompatible // threads public void testScheduleAsync_asyncCallable_error() throws InterruptedException { final Error error = new Error("deliberate"); @@ -2027,6 +2074,7 @@ public ListenableFuture call() { } } + @J2ktIncompatible @GwtIncompatible // threads public void testScheduleAsync_asyncCallable_nullInsteadOfFuture() throws Exception { ListenableFuture chainedFuture = @@ -2045,6 +2093,7 @@ public void testScheduleAsync_asyncCallable_nullInsteadOfFuture() throws Excepti } } + @J2ktIncompatible @GwtIncompatible // threads public void testScheduleAsync_asyncCallable_cancelledWhileApplyingFunction() throws InterruptedException, ExecutionException { @@ -2077,6 +2126,7 @@ public ListenableFuture call() throws InterruptedException { } } + @J2ktIncompatible @GwtIncompatible // threads public void testScheduleAsync_asyncCallable_cancelledBeforeCallingFunction() throws InterruptedException { @@ -2532,6 +2582,7 @@ private static String createCombinedResult(Integer i, Boolean b) { return "-" + i + "-" + b; } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllComplete_noLeakInterruption() throws Exception { final SettableFuture stringFuture = SettableFuture.create(); @@ -2550,6 +2601,7 @@ public ListenableFuture call() throws Exception { assertThat(Thread.interrupted()).isFalse(); } + @J2ktIncompatible // Wildcard generics public void testWhenAllComplete_wildcard() throws Exception { ListenableFuture futureA = immediateFuture("a"); ListenableFuture futureB = immediateFuture("b"); @@ -2575,6 +2627,7 @@ public String call() throws Exception { unused = whenAllComplete(asList(futures)).call(combiner, directExecutor()); } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllComplete_asyncResult() throws Exception { SettableFuture futureInteger = SettableFuture.create(); @@ -2666,6 +2719,7 @@ public ListenableFuture call() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllComplete_cancelledNotInterrupted() throws Exception { SettableFuture stringFuture = SettableFuture.create(); @@ -2704,6 +2758,7 @@ public ListenableFuture call() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllComplete_interrupted() throws Exception { SettableFuture stringFuture = SettableFuture.create(); @@ -2796,6 +2851,7 @@ public void run() { } } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllCompleteRunnable_resultCanceledWithoutInterrupt_doesNotInterruptRunnable() throws Exception { @@ -2836,6 +2892,7 @@ public void run() { combinerCompletedWithoutInterrupt.await(); } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllCompleteRunnable_resultCanceledWithInterrupt_InterruptsRunnable() throws Exception { @@ -2901,6 +2958,7 @@ public ListenableFuture call() throws Exception { } @AndroidIncompatible + @J2ktIncompatible @GwtIncompatible public void testWhenAllSucceed_releasesInputFuturesUponSubmission() throws Exception { SettableFuture future1 = SettableFuture.create(); @@ -2936,6 +2994,7 @@ public Long call() { } @AndroidIncompatible + @J2ktIncompatible @GwtIncompatible public void testWhenAllComplete_releasesInputFuturesUponCancellation() throws Exception { SettableFuture future = SettableFuture.create(); @@ -2959,6 +3018,7 @@ public Long call() { } @AndroidIncompatible + @J2ktIncompatible @GwtIncompatible public void testWhenAllSucceed_releasesCallable() throws Exception { AsyncCallable combiner = @@ -2988,6 +3048,7 @@ public ListenableFuture call() { * finisher}, a task that will complete the future in some fashion when it is called, allowing for * testing both before and after the completion of the future. */ + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static final class TestFuture { @@ -3010,6 +3071,7 @@ private static final class TestFuture { *

    Each test requires a new {@link TestFutureBatch} because we need new delayed futures each * time, as the old delayed futures were completed as part of the old test. */ + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static final class TestFutureBatch { @@ -3195,6 +3257,7 @@ void assertHasImmediateCancel( * {@link Futures#allAsList(Iterable)} or {@link Futures#successfulAsList(Iterable)}, hidden * behind a common interface for testing. */ + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private interface Merger { @@ -3226,6 +3289,7 @@ public ListenableFuture> merged( * forever in the case of failure. */ @CanIgnoreReturnValue + @J2ktIncompatible @GwtIncompatible // threads static V pseudoTimedGetUninterruptibly(final Future input, long timeout, TimeUnit unit) throws ExecutionException, TimeoutException { @@ -3257,6 +3321,7 @@ public V call() throws Exception { * before future completion, and untimed after future completion) return or throw the proper * values. */ + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static void runExtensiveMergerTest(Merger merger) throws InterruptedException { int inputCount = new TestFutureBatch().allFutures.size(); @@ -3336,6 +3401,7 @@ private static void runExtensiveMergerTest(Merger merger) throws InterruptedExce * that is expected to succeed; the fact that the numbers match is only a coincidence.) See the * comment below for how to restore the fast but hang-y version. */ + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static List conditionalPseudoTimedGetUninterruptibly( TestFutureBatch inputs, @@ -3355,11 +3421,13 @@ private static List conditionalPseudoTimedGetUninterruptibly( : pseudoTimedGetUninterruptibly(future, 2500, MILLISECONDS); } + @J2ktIncompatible @GwtIncompatible // threads public void testAllAsList_extensive() throws InterruptedException { runExtensiveMergerTest(Merger.allMerger); } + @J2ktIncompatible @GwtIncompatible // threads public void testSuccessfulAsList_extensive() throws InterruptedException { runExtensiveMergerTest(Merger.successMerger); @@ -3578,6 +3646,7 @@ public void testSuccessfulAsList_mixed() throws Exception { } /** Non-Error exceptions are never logged. */ + @J2ktIncompatible // TODO(b/324550390): Enable @SuppressWarnings("unchecked") public void testSuccessfulAsList_logging_exception() throws Exception { assertEquals( @@ -3601,6 +3670,7 @@ public void testSuccessfulAsList_logging_exception() throws Exception { } /** Ensure that errors are always logged. */ + @J2ktIncompatible // TODO(b/324550390): Enable @SuppressWarnings("unchecked") public void testSuccessfulAsList_logging_error() throws Exception { assertEquals( @@ -3675,6 +3745,7 @@ public void testNonCancellationPropagating_doesNotPropagate() throws Exception { assertFalse(input.isDone()); } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static class TestException extends Exception { @@ -3683,6 +3754,7 @@ private static class TestException extends Exception { } } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private interface MapperFunction extends Function {} @@ -3832,6 +3904,7 @@ public void testCancellingAllDelegatesIsNotQuadratic() throws Exception { } @AndroidIncompatible // reference is never cleared under some versions of the emulator + @J2ktIncompatible @GwtIncompatible public void testInputGCedIfUnreferenced() throws Exception { SettableFuture future1 = SettableFuture.create(); @@ -3856,6 +3929,7 @@ public void testInputGCedIfUnreferenced() throws Exception { } // Mostly an example of how it would look like to use a list of mixed types + @J2ktIncompatible // Wildcard generics public void testCompletionOrderMixedBagOTypes() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); @@ -3874,6 +3948,7 @@ public void testCompletionOrderMixedBagOTypes() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // ClassSanityTester public void testFutures_nullChecks() throws Exception { new ClassSanityTester() diff --git a/android/guava-tests/test/com/google/common/util/concurrent/TrustedListenableFutureTaskTest.java b/android/guava-tests/test/com/google/common/util/concurrent/TrustedListenableFutureTaskTest.java index e58d3eef0de6..12cf178653c9 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/TrustedListenableFutureTaskTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/TrustedListenableFutureTaskTest.java @@ -23,6 +23,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.concurrent.Callable; import java.util.concurrent.CancellationException; import java.util.concurrent.CountDownLatch; @@ -36,6 +37,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; /** Test case for {@link TrustedListenableFutureTask}. */ +@ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) public class TrustedListenableFutureTaskTest extends TestCase { @@ -84,6 +86,7 @@ public Integer call() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // blocking wait public void testCancel_interrupted() throws Exception { final AtomicBoolean interruptedExceptionThrown = new AtomicBoolean(); @@ -134,6 +137,7 @@ public void run() { assertTrue(interruptedExceptionThrown.get()); } + @J2ktIncompatible @GwtIncompatible // blocking wait public void testRunIdempotency() throws Exception { final int numThreads = 10; @@ -169,6 +173,7 @@ public void run() { executor.shutdown(); } + @J2ktIncompatible @GwtIncompatible // blocking wait public void testToString() throws Exception { final CountDownLatch enterLatch = new CountDownLatch(1); @@ -206,6 +211,7 @@ public void run() { exitLatch.await(); } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private void awaitUnchecked(CyclicBarrier barrier) { try { diff --git a/guava-tests/test/com/google/common/util/concurrent/AbstractAbstractFutureTest.java b/guava-tests/test/com/google/common/util/concurrent/AbstractAbstractFutureTest.java index 8e94f174f865..a467a6b7d762 100644 --- a/guava-tests/test/com/google/common/util/concurrent/AbstractAbstractFutureTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/AbstractAbstractFutureTest.java @@ -29,6 +29,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.util.concurrent.AbstractFutureTest.TimedWaiterThread; import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; @@ -359,6 +360,7 @@ public void testNegativeTimeout() throws Exception { assertEquals(1, future.get(-1, SECONDS).intValue()); } + @J2ktIncompatible @GwtIncompatible // threads public void testOverflowTimeout() throws Exception { // First, sanity check that naive multiplication would really overflow to a negative number: @@ -374,6 +376,7 @@ public void testOverflowTimeout() throws Exception { waiter.join(); } + @J2ktIncompatible // TODO(b/324550390): Enable public void testSetNull() throws Exception { future.set(null); assertSuccessful(future, null); diff --git a/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java b/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java index 6bf4c99d1b32..c5c4b05795d3 100644 --- a/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/AbstractFutureTest.java @@ -24,6 +24,7 @@ import static org.junit.Assert.assertThrows; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.Iterables; import com.google.common.collect.Range; import com.google.common.collect.Sets; @@ -841,6 +842,7 @@ public void testSetFuture_stackOverflow() { // Verify that StackOverflowError in a long chain of SetFuture doesn't cause the entire toString // call to fail + @J2ktIncompatible @GwtIncompatible @AndroidIncompatible public void testSetFutureToString_stackOverflow() { diff --git a/guava-tests/test/com/google/common/util/concurrent/AtomicDoubleArrayTest.java b/guava-tests/test/com/google/common/util/concurrent/AtomicDoubleArrayTest.java index ef752cd1de07..1ce431c214ea 100644 --- a/guava-tests/test/com/google/common/util/concurrent/AtomicDoubleArrayTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/AtomicDoubleArrayTest.java @@ -17,6 +17,7 @@ import static org.junit.Assert.assertThrows; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.NullPointerTester; import java.util.Arrays; @@ -53,6 +54,7 @@ static void assertBitEquals(double x, double y) { assertEquals(Double.doubleToRawLongBits(x), Double.doubleToRawLongBits(y)); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNulls() { new NullPointerTester().testAllPublicStaticMethods(AtomicDoubleArray.class); diff --git a/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapBasherTest.java b/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapBasherTest.java index b1e741a68118..44212922a0a1 100644 --- a/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapBasherTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapBasherTest.java @@ -19,6 +19,7 @@ import static java.util.concurrent.TimeUnit.SECONDS; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.ArrayList; import java.util.Random; import java.util.concurrent.Callable; @@ -32,6 +33,7 @@ * * @author mike nonemacher */ +@J2ktIncompatible // threads @GwtIncompatible // threads public class AtomicLongMapBasherTest extends TestCase { private final Random random = new Random(301); diff --git a/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapTest.java b/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapTest.java index 878ea5ec87ac..aa37eae1898c 100644 --- a/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/AtomicLongMapTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableMap; import com.google.common.collect.Sets; import com.google.common.testing.NullPointerTester; @@ -39,6 +40,7 @@ public class AtomicLongMapTest extends TestCase { private final Random random = new Random(301); + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNulls() { NullPointerTester tester = new NullPointerTester(); diff --git a/guava-tests/test/com/google/common/util/concurrent/CallablesTest.java b/guava-tests/test/com/google/common/util/concurrent/CallablesTest.java index b4766bc8ca20..78c78e65c395 100644 --- a/guava-tests/test/com/google/common/util/concurrent/CallablesTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/CallablesTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Supplier; import com.google.common.base.Suppliers; import java.security.Permission; @@ -36,6 +37,7 @@ @GwtCompatible(emulated = true) public class CallablesTest extends TestCase { + @J2ktIncompatible // TODO(b/324550390): Enable public void testReturning() throws Exception { assertNull(Callables.returning(null).call()); @@ -46,6 +48,7 @@ public void testReturning() throws Exception { assertSame(value, callable.call()); } + @J2ktIncompatible @GwtIncompatible public void testAsAsyncCallable() throws Exception { final String expected = "MyCallableString"; @@ -64,6 +67,7 @@ public String call() throws Exception { assertSame(expected, future.get()); } + @J2ktIncompatible @GwtIncompatible public void testAsAsyncCallable_exception() throws Exception { final Exception expected = new IllegalArgumentException(); @@ -87,6 +91,7 @@ public String call() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // threads public void testRenaming() throws Exception { String oldName = Thread.currentThread().getName(); @@ -103,6 +108,7 @@ public void testRenaming() throws Exception { assertEquals(oldName, Thread.currentThread().getName()); } + @J2ktIncompatible @GwtIncompatible // threads public void testRenaming_exceptionalReturn() throws Exception { String oldName = Thread.currentThread().getName(); @@ -124,6 +130,7 @@ class MyException extends Exception {} assertEquals(oldName, Thread.currentThread().getName()); } + @J2ktIncompatible @GwtIncompatible // threads public void testRenaming_noPermissions() throws Exception { diff --git a/guava-tests/test/com/google/common/util/concurrent/ExecutionSequencerTest.java b/guava-tests/test/com/google/common/util/concurrent/ExecutionSequencerTest.java index 1dafb3b0b203..524b8d50d7ff 100644 --- a/guava-tests/test/com/google/common/util/concurrent/ExecutionSequencerTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/ExecutionSequencerTest.java @@ -21,6 +21,7 @@ import static java.util.concurrent.TimeUnit.SECONDS; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.testing.GcFinalization; import com.google.common.testing.TestLogHandler; @@ -149,6 +150,7 @@ public Boolean call() { assertThat(getDone(future2)).isFalse(); } + @J2ktIncompatible @GwtIncompatible @J2ObjCIncompatible // gc @AndroidIncompatible @@ -326,6 +328,7 @@ private static final class LongHolder { private static final int ITERATION_COUNT = 50_000; private static final int DIRECT_EXECUTIONS_PER_THREAD = 100; + @J2ktIncompatible @GwtIncompatible // threads public void testAvoidsStackOverflow_multipleThreads() throws Exception { final LongHolder holder = new LongHolder(); diff --git a/guava-tests/test/com/google/common/util/concurrent/FluentFutureTest.java b/guava-tests/test/com/google/common/util/concurrent/FluentFutureTest.java index 48d5c8e5a0fc..309b0029abd3 100644 --- a/guava-tests/test/com/google/common/util/concurrent/FluentFutureTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/FluentFutureTest.java @@ -27,6 +27,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.util.concurrent.ForwardingListenableFuture.SimpleForwardingListenableFuture; import java.util.concurrent.ExecutionException; @@ -38,6 +39,7 @@ * Tests for {@link FluentFuture}. The tests cover only the basics for the API. The actual logic is * tested in {@link FuturesTest}. */ +@ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) public class FluentFutureTest extends TestCase { public void testFromFluentFuture() { @@ -75,9 +77,12 @@ public void onFailure(Throwable t) {} assertThat(called[0]).isTrue(); } + // Avoid trouble with automatic mapping between JRE and Kotlin runtime classes. + static class CustomRuntimeException extends RuntimeException {} + public void testCatching() throws Exception { FluentFuture f = - FluentFuture.from(immediateFailedFuture(new RuntimeException())) + FluentFuture.from(immediateFailedFuture(new CustomRuntimeException())) .catching( Throwable.class, new Function>() { @@ -87,12 +92,12 @@ public Class apply(Throwable input) { } }, directExecutor()); - assertThat(f.get()).isEqualTo(RuntimeException.class); + assertThat(f.get()).isEqualTo(CustomRuntimeException.class); } public void testCatchingAsync() throws Exception { FluentFuture f = - FluentFuture.from(immediateFailedFuture(new RuntimeException())) + FluentFuture.from(immediateFailedFuture(new CustomRuntimeException())) .catchingAsync( Throwable.class, new AsyncFunction>() { @@ -102,7 +107,7 @@ public ListenableFuture> apply(Throwable input) { } }, directExecutor()); - assertThat(f.get()).isEqualTo(RuntimeException.class); + assertThat(f.get()).isEqualTo(CustomRuntimeException.class); } public void testTransform() throws Exception { @@ -133,6 +138,7 @@ public ListenableFuture apply(Integer input) { assertThat(f.get()).isEqualTo(2); } + @J2ktIncompatible @GwtIncompatible // withTimeout public void testWithTimeout() throws Exception { ScheduledExecutorService executor = newScheduledThreadPool(1); diff --git a/guava-tests/test/com/google/common/util/concurrent/FuturesGetDoneTest.java b/guava-tests/test/com/google/common/util/concurrent/FuturesGetDoneTest.java index cf9cb9df36b3..e77f9c2a7e0f 100644 --- a/guava-tests/test/com/google/common/util/concurrent/FuturesGetDoneTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/FuturesGetDoneTest.java @@ -24,6 +24,7 @@ import java.util.concurrent.CancellationException; import java.util.concurrent.ExecutionException; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** Unit tests for {@link Futures#getDone}. */ @GwtCompatible @@ -33,7 +34,7 @@ public void testSuccessful() throws ExecutionException { } public void testSuccessfulNull() throws ExecutionException { - assertThat(getDone(immediateFuture((String) null))).isEqualTo(null); + assertThat(getDone(Futures.<@Nullable String>immediateFuture(null))).isEqualTo(null); } public void testFailed() { diff --git a/guava-tests/test/com/google/common/util/concurrent/FuturesGetUncheckedTest.java b/guava-tests/test/com/google/common/util/concurrent/FuturesGetUncheckedTest.java index 93baaf651230..deebc9cb4578 100644 --- a/guava-tests/test/com/google/common/util/concurrent/FuturesGetUncheckedTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/FuturesGetUncheckedTest.java @@ -30,6 +30,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.concurrent.CancellationException; import java.util.concurrent.Future; import junit.framework.TestCase; @@ -41,6 +42,7 @@ public void testGetUnchecked_success() { assertEquals("foo", getUnchecked(immediateFuture("foo"))); } + @J2ktIncompatible @GwtIncompatible // Thread.interrupt public void testGetUnchecked_interrupted() { Thread.currentThread().interrupt(); diff --git a/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java b/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java index c46801b99e72..157dcda0a20b 100644 --- a/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java @@ -58,6 +58,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Joiner; import com.google.common.base.Predicate; @@ -97,6 +98,7 @@ * * @author Nishant Thakkar */ +@ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) public class FuturesTest extends TestCase { private static final Logger aggregateFutureLogger = @@ -194,6 +196,7 @@ public void testImmediateCancelledFutureBasic() throws Exception { assertTrue(future.isCancelled()); } + @J2ktIncompatible @GwtIncompatible public void testImmediateCancelledFutureStack() throws Exception { ListenableFuture future = CallerClass1.makeImmediateCancelledFuture(); @@ -215,6 +218,7 @@ public void testImmediateCancelledFutureStack() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static Predicate hasClassName(final Class clazz) { return new Predicate() { @@ -249,12 +253,14 @@ private static class Bar {} private static class BarChild extends Bar {} + @J2ktIncompatible // TODO(b/324550390): Enable public void testTransform_genericsNull() throws Exception { ListenableFuture nullFuture = immediateFuture(null); ListenableFuture transformedFuture = transform(nullFuture, constant(null), directExecutor()); assertNull(getDone(transformedFuture)); } + @J2ktIncompatible // TODO(b/324550390): Enable public void testTransform_genericsHierarchy() throws Exception { ListenableFuture future = immediateFuture(null); final BarChild barChild = new BarChild(); @@ -274,6 +280,7 @@ public BarChild apply(Foo unused) { * stack-overflow tests work. It must depend on the exact place the error occurs. */ @AndroidIncompatible + @J2ktIncompatible @GwtIncompatible // StackOverflowError public void testTransform_StackOverflow() throws Exception { { @@ -300,6 +307,7 @@ public void testTransform_StackOverflow() throws Exception { public void testTransform_ErrorAfterCancellation() throws Exception { class Transformer implements Function { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -320,6 +328,7 @@ public Object apply(Object input) { public void testTransform_ExceptionAfterCancellation() throws Exception { class Transformer implements Function { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -410,6 +419,7 @@ public ListenableFuture apply(Foo unused) { assertTrue(input.wasInterrupted()); } + @J2ktIncompatible @GwtIncompatible // threads public void testTransformAsync_interruptPropagatesToTransformingThread() throws Exception { SettableFuture input = SettableFuture.create(); @@ -504,6 +514,7 @@ public ListenableFuture apply(Foo unused) { * stack-overflow tests work. It must depend on the exact place the error occurs. */ @AndroidIncompatible + @J2ktIncompatible @GwtIncompatible // StackOverflowError public void testTransformAsync_StackOverflow() throws Exception { { @@ -530,6 +541,7 @@ public void testTransformAsync_StackOverflow() throws Exception { public void testTransformAsync_ErrorAfterCancellation() throws Exception { class Transformer implements AsyncFunction { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -550,6 +562,7 @@ public ListenableFuture apply(Object input) { public void testTransformAsync_ExceptionAfterCancellation() throws Exception { class Transformer implements AsyncFunction { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -695,6 +708,7 @@ static class MyRuntimeException extends RuntimeException {} * Test that the function is invoked only once, even if it throws an exception. Also, test that * that function's result is wrapped in an ExecutionException. */ + @J2ktIncompatible @GwtIncompatible // reflection public void testTransformExceptionRemainsMemoized() throws Throwable { // We need to test with two input futures since ExecutionList.execute @@ -727,6 +741,7 @@ public void testTransformExceptionRemainsMemoized() throws Throwable { runGetIdempotencyTest(errorComposedFuture, MyError.class); } + @J2ktIncompatible @GwtIncompatible // reflection private static void runGetIdempotencyTest( Future transformedFuture, Class expectedExceptionClass) @@ -743,6 +758,7 @@ private static void runGetIdempotencyTest( } } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static Function newOneTimeExceptionThrower() { return new Function() { @@ -758,6 +774,7 @@ public Integer apply(Integer from) { }; } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static Function newOneTimeErrorThrower() { return new Function() { @@ -802,6 +819,7 @@ public void testTransform_Executor() throws Exception { assertTrue(spy.wasExecuted); } + @J2ktIncompatible @GwtIncompatible // Threads public void testTransformAsync_functionToString() throws Exception { final CountDownLatch functionCalled = new CountDownLatch(1); @@ -830,6 +848,7 @@ public ListenableFuture apply(Object input) throws Exception { } } + @J2ktIncompatible @GwtIncompatible // lazyTransform public void testLazyTransform() throws Exception { FunctionSpy spy = new FunctionSpy<>(constant("bar")); @@ -842,6 +861,7 @@ public void testLazyTransform() throws Exception { spy.verifyCallCount(2); } + @J2ktIncompatible @GwtIncompatible // lazyTransform public void testLazyTransform_exception() throws Exception { final RuntimeException exception = new RuntimeException("deliberate"); @@ -966,6 +986,7 @@ public ListenableFuture apply(Throwable t) throws Exception { fallback.verifyCallCount(1); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatchingAsync_inputCancelledWithoutFallback() throws Exception { AsyncFunction fallback = unexpectedAsyncFunction(); @@ -1077,6 +1098,7 @@ public void testCatchingAsync_resultCancelledBeforeFallback() throws Exception { assertFalse(primary.wasInterrupted()); } + @J2ktIncompatible @GwtIncompatible // mocks // TODO(cpovirk): eliminate use of mocks @SuppressWarnings("unchecked") @@ -1103,6 +1125,7 @@ public ListenableFuture apply(Throwable t) throws Exception { fallback.verifyCallCount(1); } + @J2ktIncompatible // Nullability public void testCatchingAsync_nullInsteadOfFuture() throws Exception { ListenableFuture inputFuture = immediateFailedFuture(new Exception()); ListenableFuture chainedFuture = @@ -1130,6 +1153,7 @@ public ListenableFuture apply(Throwable t) { } } + @J2ktIncompatible @GwtIncompatible // threads public void testCatchingAsync_interruptPropagatesToTransformingThread() throws Exception { SettableFuture input = SettableFuture.create(); @@ -1169,6 +1193,7 @@ public ListenableFuture apply(Throwable t) throws Exception { // gotException.await(); } + @J2ktIncompatible @GwtIncompatible // Threads public void testCatchingAsync_functionToString() throws Exception { final CountDownLatch functionCalled = new CountDownLatch(1); @@ -1247,6 +1272,7 @@ public Integer apply(Throwable t) { fallback.verifyCallCount(1); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatching_inputCancelledWithoutFallback() throws Exception { Function fallback = unexpectedFunction(); @@ -1349,6 +1375,7 @@ public void testCatching_Throwable() throws Exception { assertEquals(1, (int) getDone(faultTolerantFuture)); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatching_customTypeMatch() throws Exception { Function fallback = functionReturningOne(); @@ -1358,6 +1385,7 @@ public void testCatching_customTypeMatch() throws Exception { assertEquals(1, (int) getDone(faultTolerantFuture)); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatching_customTypeNoMatch() throws Exception { Function fallback = functionReturningOne(); @@ -1372,6 +1400,7 @@ public void testCatching_customTypeNoMatch() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // StackOverflowError public void testCatching_StackOverflow() throws Exception { { @@ -1399,6 +1428,7 @@ public void testCatching_StackOverflow() throws Exception { public void testCatching_ErrorAfterCancellation() throws Exception { class Fallback implements Function { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -1419,6 +1449,7 @@ public Object apply(Throwable input) { public void testCatching_ExceptionAfterCancellation() throws Exception { class Fallback implements Function { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -1484,6 +1515,7 @@ public void testCatchingAsync_Throwable() throws Exception { assertEquals(1, (int) getDone(faultTolerantFuture)); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatchingAsync_customTypeMatch() throws Exception { AsyncFunction fallback = asyncFunctionReturningOne(); @@ -1493,6 +1525,7 @@ public void testCatchingAsync_customTypeMatch() throws Exception { assertEquals(1, (int) getDone(faultTolerantFuture)); } + @J2ktIncompatible @GwtIncompatible // non-Throwable exceptionType public void testCatchingAsync_customTypeNoMatch() throws Exception { AsyncFunction fallback = asyncFunctionReturningOne(); @@ -1507,6 +1540,7 @@ public void testCatchingAsync_customTypeNoMatch() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // StackOverflowError public void testCatchingAsync_StackOverflow() throws Exception { { @@ -1534,6 +1568,7 @@ public void testCatchingAsync_StackOverflow() throws Exception { public void testCatchingAsync_ErrorAfterCancellation() throws Exception { class Fallback implements AsyncFunction { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -1555,6 +1590,7 @@ public ListenableFuture apply(Throwable input) { public void testCatchingAsync_ExceptionAfterCancellation() throws Exception { class Fallback implements AsyncFunction { + @SuppressWarnings("nullness:initialization.field.uninitialized") ListenableFuture output; @Override @@ -1671,6 +1707,7 @@ public ListenableFuture apply(I input) { }; } + @J2ktIncompatible // Wildcard generics public void testTransformAsync_genericsWildcard_AsyncFunction() throws Exception { ListenableFuture nullFuture = immediateFuture(null); ListenableFuture chainedFuture = @@ -1678,6 +1715,7 @@ public void testTransformAsync_genericsWildcard_AsyncFunction() throws Exception assertNull(getDone(chainedFuture)); } + @J2ktIncompatible // TODO(b/324550390): Enable public void testTransformAsync_genericsHierarchy_AsyncFunction() throws Exception { ListenableFuture future = immediateFuture(null); final BarChild barChild = new BarChild(); @@ -1694,6 +1732,7 @@ public AbstractFuture apply(Foo unused) { assertSame(barChild, bar); } + @J2ktIncompatible @GwtIncompatible // get() timeout public void testTransformAsync_asyncFunction_timeout() throws InterruptedException, ExecutionException { @@ -1728,6 +1767,7 @@ public ListenableFuture apply(String input) { } } + @J2ktIncompatible // Nullability public void testTransformAsync_asyncFunction_nullInsteadOfFuture() throws Exception { ListenableFuture inputFuture = immediateFuture("a"); ListenableFuture chainedFuture = @@ -1745,6 +1785,7 @@ public void testTransformAsync_asyncFunction_nullInsteadOfFuture() throws Except } } + @J2ktIncompatible @GwtIncompatible // threads public void testTransformAsync_asyncFunction_cancelledWhileApplyingFunction() throws InterruptedException, ExecutionException { @@ -1779,6 +1820,7 @@ public ListenableFuture apply(String input) throws Exception { } } + @J2ktIncompatible @GwtIncompatible // threads public void testTransformAsync_asyncFunction_cancelledBeforeApplyingFunction() throws InterruptedException { @@ -1837,6 +1879,7 @@ public ListenableFuture call() { } } + @J2ktIncompatible // TODO(b/324550390): Enable public void testSubmitAsync_asyncCallable_nullInsteadOfFuture() throws Exception { ListenableFuture chainedFuture = submitAsync(constantAsyncCallable(null), directExecutor()); try { @@ -1852,6 +1895,7 @@ public void testSubmitAsync_asyncCallable_nullInsteadOfFuture() throws Exception } } + @J2ktIncompatible @GwtIncompatible // threads public void testSubmitAsync_asyncCallable_cancelledWhileApplyingFunction() throws InterruptedException, ExecutionException { @@ -1885,6 +1929,7 @@ public ListenableFuture call() throws InterruptedException { } } + @J2ktIncompatible @GwtIncompatible // threads public void testSubmitAsync_asyncCallable_cancelledBeforeApplyingFunction() throws InterruptedException { @@ -1918,6 +1963,7 @@ public void run() { assertFalse(callableCalled.get()); } + @J2ktIncompatible @GwtIncompatible // threads public void testSubmitAsync_asyncCallable_returnsInterruptedFuture() throws InterruptedException { assertThat(Thread.interrupted()).isFalse(); @@ -2006,6 +2052,7 @@ public void run() { } } + @J2ktIncompatible @GwtIncompatible // threads public void testScheduleAsync_asyncCallable_error() throws InterruptedException { final Error error = new Error("deliberate"); @@ -2027,6 +2074,7 @@ public ListenableFuture call() { } } + @J2ktIncompatible @GwtIncompatible // threads public void testScheduleAsync_asyncCallable_nullInsteadOfFuture() throws Exception { ListenableFuture chainedFuture = @@ -2045,6 +2093,7 @@ public void testScheduleAsync_asyncCallable_nullInsteadOfFuture() throws Excepti } } + @J2ktIncompatible @GwtIncompatible // threads public void testScheduleAsync_asyncCallable_cancelledWhileApplyingFunction() throws InterruptedException, ExecutionException { @@ -2077,6 +2126,7 @@ public ListenableFuture call() throws InterruptedException { } } + @J2ktIncompatible @GwtIncompatible // threads public void testScheduleAsync_asyncCallable_cancelledBeforeCallingFunction() throws InterruptedException { @@ -2532,6 +2582,7 @@ private static String createCombinedResult(Integer i, Boolean b) { return "-" + i + "-" + b; } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllComplete_noLeakInterruption() throws Exception { final SettableFuture stringFuture = SettableFuture.create(); @@ -2550,6 +2601,7 @@ public ListenableFuture call() throws Exception { assertThat(Thread.interrupted()).isFalse(); } + @J2ktIncompatible // Wildcard generics public void testWhenAllComplete_wildcard() throws Exception { ListenableFuture futureA = immediateFuture("a"); ListenableFuture futureB = immediateFuture("b"); @@ -2575,6 +2627,7 @@ public String call() throws Exception { unused = whenAllComplete(asList(futures)).call(combiner, directExecutor()); } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllComplete_asyncResult() throws Exception { SettableFuture futureInteger = SettableFuture.create(); @@ -2666,6 +2719,7 @@ public ListenableFuture call() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllComplete_cancelledNotInterrupted() throws Exception { SettableFuture stringFuture = SettableFuture.create(); @@ -2704,6 +2758,7 @@ public ListenableFuture call() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllComplete_interrupted() throws Exception { SettableFuture stringFuture = SettableFuture.create(); @@ -2796,6 +2851,7 @@ public void run() { } } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllCompleteRunnable_resultCanceledWithoutInterrupt_doesNotInterruptRunnable() throws Exception { @@ -2836,6 +2892,7 @@ public void run() { combinerCompletedWithoutInterrupt.await(); } + @J2ktIncompatible @GwtIncompatible // threads public void testWhenAllCompleteRunnable_resultCanceledWithInterrupt_InterruptsRunnable() throws Exception { @@ -2901,6 +2958,7 @@ public ListenableFuture call() throws Exception { } @AndroidIncompatible + @J2ktIncompatible @GwtIncompatible public void testWhenAllSucceed_releasesInputFuturesUponSubmission() throws Exception { SettableFuture future1 = SettableFuture.create(); @@ -2936,6 +2994,7 @@ public Long call() { } @AndroidIncompatible + @J2ktIncompatible @GwtIncompatible public void testWhenAllComplete_releasesInputFuturesUponCancellation() throws Exception { SettableFuture future = SettableFuture.create(); @@ -2959,6 +3018,7 @@ public Long call() { } @AndroidIncompatible + @J2ktIncompatible @GwtIncompatible public void testWhenAllSucceed_releasesCallable() throws Exception { AsyncCallable combiner = @@ -2988,6 +3048,7 @@ public ListenableFuture call() { * finisher}, a task that will complete the future in some fashion when it is called, allowing for * testing both before and after the completion of the future. */ + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static final class TestFuture { @@ -3010,6 +3071,7 @@ private static final class TestFuture { *

    Each test requires a new {@link TestFutureBatch} because we need new delayed futures each * time, as the old delayed futures were completed as part of the old test. */ + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static final class TestFutureBatch { @@ -3195,6 +3257,7 @@ void assertHasImmediateCancel( * {@link Futures#allAsList(Iterable)} or {@link Futures#successfulAsList(Iterable)}, hidden * behind a common interface for testing. */ + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private interface Merger { @@ -3226,6 +3289,7 @@ public ListenableFuture> merged( * forever in the case of failure. */ @CanIgnoreReturnValue + @J2ktIncompatible @GwtIncompatible // threads static V pseudoTimedGetUninterruptibly(final Future input, long timeout, TimeUnit unit) throws ExecutionException, TimeoutException { @@ -3257,6 +3321,7 @@ public V call() throws Exception { * before future completion, and untimed after future completion) return or throw the proper * values. */ + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static void runExtensiveMergerTest(Merger merger) throws InterruptedException { int inputCount = new TestFutureBatch().allFutures.size(); @@ -3336,6 +3401,7 @@ private static void runExtensiveMergerTest(Merger merger) throws InterruptedExce * that is expected to succeed; the fact that the numbers match is only a coincidence.) See the * comment below for how to restore the fast but hang-y version. */ + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static List conditionalPseudoTimedGetUninterruptibly( TestFutureBatch inputs, @@ -3355,11 +3421,13 @@ private static List conditionalPseudoTimedGetUninterruptibly( : pseudoTimedGetUninterruptibly(future, 2500, MILLISECONDS); } + @J2ktIncompatible @GwtIncompatible // threads public void testAllAsList_extensive() throws InterruptedException { runExtensiveMergerTest(Merger.allMerger); } + @J2ktIncompatible @GwtIncompatible // threads public void testSuccessfulAsList_extensive() throws InterruptedException { runExtensiveMergerTest(Merger.successMerger); @@ -3578,6 +3646,7 @@ public void testSuccessfulAsList_mixed() throws Exception { } /** Non-Error exceptions are never logged. */ + @J2ktIncompatible // TODO(b/324550390): Enable @SuppressWarnings("unchecked") public void testSuccessfulAsList_logging_exception() throws Exception { assertEquals( @@ -3601,6 +3670,7 @@ public void testSuccessfulAsList_logging_exception() throws Exception { } /** Ensure that errors are always logged. */ + @J2ktIncompatible // TODO(b/324550390): Enable @SuppressWarnings("unchecked") public void testSuccessfulAsList_logging_error() throws Exception { assertEquals( @@ -3675,6 +3745,7 @@ public void testNonCancellationPropagating_doesNotPropagate() throws Exception { assertFalse(input.isDone()); } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private static class TestException extends Exception { @@ -3683,6 +3754,7 @@ private static class TestException extends Exception { } } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private interface MapperFunction extends Function {} @@ -3832,6 +3904,7 @@ public void testCancellingAllDelegatesIsNotQuadratic() throws Exception { } @AndroidIncompatible // reference is never cleared under some versions of the emulator + @J2ktIncompatible @GwtIncompatible public void testInputGCedIfUnreferenced() throws Exception { SettableFuture future1 = SettableFuture.create(); @@ -3856,6 +3929,7 @@ public void testInputGCedIfUnreferenced() throws Exception { } // Mostly an example of how it would look like to use a list of mixed types + @J2ktIncompatible // Wildcard generics public void testCompletionOrderMixedBagOTypes() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); @@ -3874,6 +3948,7 @@ public void testCompletionOrderMixedBagOTypes() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // ClassSanityTester public void testFutures_nullChecks() throws Exception { new ClassSanityTester() diff --git a/guava-tests/test/com/google/common/util/concurrent/TrustedListenableFutureTaskTest.java b/guava-tests/test/com/google/common/util/concurrent/TrustedListenableFutureTaskTest.java index e58d3eef0de6..12cf178653c9 100644 --- a/guava-tests/test/com/google/common/util/concurrent/TrustedListenableFutureTaskTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/TrustedListenableFutureTaskTest.java @@ -23,6 +23,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.concurrent.Callable; import java.util.concurrent.CancellationException; import java.util.concurrent.CountDownLatch; @@ -36,6 +37,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; /** Test case for {@link TrustedListenableFutureTask}. */ +@ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) public class TrustedListenableFutureTaskTest extends TestCase { @@ -84,6 +86,7 @@ public Integer call() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // blocking wait public void testCancel_interrupted() throws Exception { final AtomicBoolean interruptedExceptionThrown = new AtomicBoolean(); @@ -134,6 +137,7 @@ public void run() { assertTrue(interruptedExceptionThrown.get()); } + @J2ktIncompatible @GwtIncompatible // blocking wait public void testRunIdempotency() throws Exception { final int numThreads = 10; @@ -169,6 +173,7 @@ public void run() { executor.shutdown(); } + @J2ktIncompatible @GwtIncompatible // blocking wait public void testToString() throws Exception { final CountDownLatch enterLatch = new CountDownLatch(1); @@ -206,6 +211,7 @@ public void run() { exitLatch.await(); } + @J2ktIncompatible @GwtIncompatible // used only in GwtIncompatible tests private void awaitUnchecked(CyclicBarrier barrier) { try { From 0bf03c49077717d481932a535d375cfc5d96297c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 13 Feb 2024 08:20:56 -0800 Subject: [PATCH 143/216] Bump github/codeql-action from 3.24.0 to 3.24.1 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.0 to 3.24.1. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/e8893c57a1f3a2b659b6b55564fdfdbbd2982911...e675ced7a7522a761fc9c8eb26682c8b27c42b2b) Fixes #6990 RELNOTES=n/a PiperOrigin-RevId: 606628282 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 886fae92bda2..ced0ee676072 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@e8893c57a1f3a2b659b6b55564fdfdbbd2982911 # v3.24.0 + uses: github/codeql-action/upload-sarif@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1 with: sarif_file: results.sarif From 4caddb98ea6cb6229ff1f28220ed6d16d5916bf9 Mon Sep 17 00:00:00 2001 From: lowasser Date: Tue, 13 Feb 2024 13:38:49 -0800 Subject: [PATCH 144/216] Roll back CRC32c optimization while we address a versioning problem with a prebuilt build tool. RELNOTES=n/a PiperOrigin-RevId: 606731591 --- .../common/hash/ChecksumHashFunction.java | 56 ------------------- 1 file changed, 56 deletions(-) diff --git a/guava/src/com/google/common/hash/ChecksumHashFunction.java b/guava/src/com/google/common/hash/ChecksumHashFunction.java index 454f3098e3ee..159adbb8194b 100644 --- a/guava/src/com/google/common/hash/ChecksumHashFunction.java +++ b/guava/src/com/google/common/hash/ChecksumHashFunction.java @@ -18,14 +18,8 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.errorprone.annotations.Immutable; -import com.google.j2objc.annotations.J2ObjCIncompatible; import java.io.Serializable; -import java.lang.invoke.MethodHandle; -import java.lang.invoke.MethodHandles; -import java.lang.invoke.MethodType; -import java.nio.ByteBuffer; import java.util.zip.Checksum; -import org.checkerframework.checker.nullness.qual.Nullable; /** * {@link HashFunction} adapter for {@link Checksum} instances. @@ -80,14 +74,6 @@ protected void update(byte[] bytes, int off, int len) { checksum.update(bytes, off, len); } - @Override - @J2ObjCIncompatible - protected void update(ByteBuffer b) { - if (!ChecksumMethodHandles.updateByteBuffer(checksum, b)) { - super.update(b); - } - } - @Override public HashCode hash() { long value = checksum.getValue(); @@ -104,47 +90,5 @@ public HashCode hash() { } } - @J2ObjCIncompatible - @SuppressWarnings("unused") - private static final class ChecksumMethodHandles { - private static final @Nullable MethodHandle UPDATE_BB = updateByteBuffer(); - - @IgnoreJRERequirement // https://github.com/mojohaus/animal-sniffer/issues/67 - static boolean updateByteBuffer(Checksum cs, ByteBuffer bb) { - if (UPDATE_BB != null) { - try { - UPDATE_BB.invokeExact(cs, bb); - } catch (Error t) { - throw t; - } catch (Throwable t) { - throw new AssertionError(t); - } - return true; - } else { - return false; - } - } - - private static @Nullable MethodHandle updateByteBuffer() { - try { - Class clazz = Class.forName("java.util.zip.Checksum"); - return MethodHandles.lookup() - .findVirtual(clazz, "update", MethodType.methodType(void.class, ByteBuffer.class)); - } catch (ClassNotFoundException e) { - throw new AssertionError(e); - } catch (IllegalAccessException e) { - // That API is public. - throw newLinkageError(e); - } catch (NoSuchMethodException e) { - // Only introduced in Java 9. - return null; - } - } - - private static LinkageError newLinkageError(Throwable cause) { - return new LinkageError(cause.toString(), cause); - } - } - private static final long serialVersionUID = 0L; } From 17c032873dc85a6edf614011d5c39586cc2f9961 Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Wed, 14 Feb 2024 07:42:49 -0800 Subject: [PATCH 145/216] Internal change. RELNOTES=n/a PiperOrigin-RevId: 606981828 --- android/guava/src/com/google/common/base/Preconditions.java | 2 ++ guava/src/com/google/common/base/Preconditions.java | 2 ++ 2 files changed, 4 insertions(+) diff --git a/android/guava/src/com/google/common/base/Preconditions.java b/android/guava/src/com/google/common/base/Preconditions.java index 6d00d46ff365..add3288dde39 100644 --- a/android/guava/src/com/google/common/base/Preconditions.java +++ b/android/guava/src/com/google/common/base/Preconditions.java @@ -118,6 +118,8 @@ public final class Preconditions { private Preconditions() {} + private interface Impossible {} + /** * Ensures the truth of an expression involving one or more parameters to the calling method. * diff --git a/guava/src/com/google/common/base/Preconditions.java b/guava/src/com/google/common/base/Preconditions.java index 6d00d46ff365..add3288dde39 100644 --- a/guava/src/com/google/common/base/Preconditions.java +++ b/guava/src/com/google/common/base/Preconditions.java @@ -118,6 +118,8 @@ public final class Preconditions { private Preconditions() {} + private interface Impossible {} + /** * Ensures the truth of an expression involving one or more parameters to the calling method. * From 09e655f6c13bbd6644592552084597d6bce124f1 Mon Sep 17 00:00:00 2001 From: Liam Miller-Cushon Date: Wed, 14 Feb 2024 11:28:42 -0800 Subject: [PATCH 146/216] Change the return types of `transitiveClosure()` and `reachableNodes()` to `Immutable*` types. One of those changes is only a change in the declared return type; the other is a behavior change: - `reachableNodes()` already returned an immutable object, even though that was not reflected in the declared return type. - `transitiveClosure()` used to return a mutable object. RELNOTES=`graph`: Changed the return types of `transitiveClosure()` and `reachableNodes()` to `Immutable*` types. `reachableNodes()` already returned an immutable object (even though that was not reflected in the declared return type); `transitiveClosure()` used to return a mutable object. PiperOrigin-RevId: 607051970 --- .../src/com/google/common/graph/Graphs.java | 14 +++++++---- .../common/graph/GraphsBridgeMethods.java | 23 +++++++++++++++++++ guava/src/com/google/common/graph/Graphs.java | 14 +++++++---- .../common/graph/GraphsBridgeMethods.java | 23 +++++++++++++++++++ 4 files changed, 64 insertions(+), 10 deletions(-) create mode 100644 android/guava/src/com/google/common/graph/GraphsBridgeMethods.java create mode 100644 guava/src/com/google/common/graph/GraphsBridgeMethods.java diff --git a/android/guava/src/com/google/common/graph/Graphs.java b/android/guava/src/com/google/common/graph/Graphs.java index e608eebc002d..06cc0495e6ba 100644 --- a/android/guava/src/com/google/common/graph/Graphs.java +++ b/android/guava/src/com/google/common/graph/Graphs.java @@ -43,7 +43,7 @@ */ @Beta @ElementTypesAreNonnullByDefault -public final class Graphs { +public final class Graphs extends GraphsBridgeMethods { private Graphs() {} @@ -146,10 +146,13 @@ private static boolean canTraverseWithoutReusingEdge( *

    This is a "snapshot" based on the current topology of {@code graph}, rather than a live view * of the transitive closure of {@code graph}. In other words, the returned {@link Graph} will not * be updated after modifications to {@code graph}. + * + * @since NEXT (present with return type {@code Graph} since 20.0) */ // TODO(b/31438252): Consider potential optimizations for this algorithm. - public static Graph transitiveClosure(Graph graph) { - MutableGraph transitiveClosure = GraphBuilder.from(graph).allowsSelfLoops(true).build(); + public static ImmutableGraph transitiveClosure(Graph graph) { + ImmutableGraph.Builder transitiveClosure = + GraphBuilder.from(graph).allowsSelfLoops(true).immutable(); // Every node is, at a minimum, reachable from itself. Since the resulting transitive closure // will have no isolated nodes, we can skip adding nodes explicitly and let putEdge() do it. @@ -178,7 +181,7 @@ public static Graph transitiveClosure(Graph graph) { } } - return transitiveClosure; + return transitiveClosure.build(); } /** @@ -191,8 +194,9 @@ public static Graph transitiveClosure(Graph graph) { * not be updated after modifications to {@code graph}. * * @throws IllegalArgumentException if {@code node} is not present in {@code graph} + * @since NEXT (present with return type {@code Set} since 20.0) */ - public static Set reachableNodes(Graph graph, N node) { + public static ImmutableSet reachableNodes(Graph graph, N node) { checkArgument(graph.nodes().contains(node), NODE_NOT_IN_GRAPH, node); return ImmutableSet.copyOf(Traverser.forGraph(graph).breadthFirst(node)); } diff --git a/android/guava/src/com/google/common/graph/GraphsBridgeMethods.java b/android/guava/src/com/google/common/graph/GraphsBridgeMethods.java new file mode 100644 index 000000000000..fd89a67d81aa --- /dev/null +++ b/android/guava/src/com/google/common/graph/GraphsBridgeMethods.java @@ -0,0 +1,23 @@ +package com.google.common.graph; + +import com.google.common.annotations.Beta; +import java.util.Set; + +/** + * Supertype for {@link Graphs}, containing the old signatures of methods whose signatures we've + * changed. This provides binary compatibility for users who compiled against the old signatures. + */ +@Beta +@ElementTypesAreNonnullByDefault +abstract class GraphsBridgeMethods { + + @SuppressWarnings("PreferredInterfaceType") + public static Graph transitiveClosure(Graph graph) { + return Graphs.transitiveClosure(graph); + } + + @SuppressWarnings("PreferredInterfaceType") + public static Set reachableNodes(Graph graph, N node) { + return Graphs.reachableNodes(graph, node); + } +} diff --git a/guava/src/com/google/common/graph/Graphs.java b/guava/src/com/google/common/graph/Graphs.java index 059bc889a3c5..a754c150f78a 100644 --- a/guava/src/com/google/common/graph/Graphs.java +++ b/guava/src/com/google/common/graph/Graphs.java @@ -44,7 +44,7 @@ */ @Beta @ElementTypesAreNonnullByDefault -public final class Graphs { +public final class Graphs extends GraphsBridgeMethods { private Graphs() {} @@ -147,10 +147,13 @@ private static boolean canTraverseWithoutReusingEdge( *

    This is a "snapshot" based on the current topology of {@code graph}, rather than a live view * of the transitive closure of {@code graph}. In other words, the returned {@link Graph} will not * be updated after modifications to {@code graph}. + * + * @since NEXT (present with return type {@code Graph} since 20.0) */ // TODO(b/31438252): Consider potential optimizations for this algorithm. - public static Graph transitiveClosure(Graph graph) { - MutableGraph transitiveClosure = GraphBuilder.from(graph).allowsSelfLoops(true).build(); + public static ImmutableGraph transitiveClosure(Graph graph) { + ImmutableGraph.Builder transitiveClosure = + GraphBuilder.from(graph).allowsSelfLoops(true).immutable(); // Every node is, at a minimum, reachable from itself. Since the resulting transitive closure // will have no isolated nodes, we can skip adding nodes explicitly and let putEdge() do it. @@ -179,7 +182,7 @@ public static Graph transitiveClosure(Graph graph) { } } - return transitiveClosure; + return transitiveClosure.build(); } /** @@ -192,8 +195,9 @@ public static Graph transitiveClosure(Graph graph) { * not be updated after modifications to {@code graph}. * * @throws IllegalArgumentException if {@code node} is not present in {@code graph} + * @since NEXT (present with return type {@code Set} since 20.0) */ - public static Set reachableNodes(Graph graph, N node) { + public static ImmutableSet reachableNodes(Graph graph, N node) { checkArgument(graph.nodes().contains(node), NODE_NOT_IN_GRAPH, node); return ImmutableSet.copyOf(Traverser.forGraph(graph).breadthFirst(node)); } diff --git a/guava/src/com/google/common/graph/GraphsBridgeMethods.java b/guava/src/com/google/common/graph/GraphsBridgeMethods.java new file mode 100644 index 000000000000..fd89a67d81aa --- /dev/null +++ b/guava/src/com/google/common/graph/GraphsBridgeMethods.java @@ -0,0 +1,23 @@ +package com.google.common.graph; + +import com.google.common.annotations.Beta; +import java.util.Set; + +/** + * Supertype for {@link Graphs}, containing the old signatures of methods whose signatures we've + * changed. This provides binary compatibility for users who compiled against the old signatures. + */ +@Beta +@ElementTypesAreNonnullByDefault +abstract class GraphsBridgeMethods { + + @SuppressWarnings("PreferredInterfaceType") + public static Graph transitiveClosure(Graph graph) { + return Graphs.transitiveClosure(graph); + } + + @SuppressWarnings("PreferredInterfaceType") + public static Set reachableNodes(Graph graph, N node) { + return Graphs.reachableNodes(graph, node); + } +} From 1bb5464a72836b58e22a7bf74c89be53cb776d60 Mon Sep 17 00:00:00 2001 From: Kurt Alfred Kluever Date: Thu, 15 Feb 2024 08:07:01 -0800 Subject: [PATCH 147/216] Standardize on `Java N+` in documentation. RELNOTES=n/a PiperOrigin-RevId: 607336969 --- .../src/com/google/common/base/Charsets.java | 12 ++-- .../src/com/google/common/base/Converter.java | 2 +- .../src/com/google/common/base/Functions.java | 16 ++--- .../src/com/google/common/base/Objects.java | 4 +- .../src/com/google/common/base/Optional.java | 10 +-- .../src/com/google/common/base/Predicate.java | 2 +- .../src/com/google/common/base/Suppliers.java | 4 +- .../com/google/common/cache/CacheBuilder.java | 8 +-- .../google/common/collect/Collections2.java | 8 +-- .../google/common/collect/Comparators.java | 2 +- .../google/common/collect/ImmutableList.java | 4 +- .../google/common/collect/ImmutableMap.java | 3 +- .../com/google/common/collect/Iterables.java | 33 +++++----- .../src/com/google/common/collect/Lists.java | 2 +- .../src/com/google/common/collect/Maps.java | 2 +- .../com/google/common/collect/Ordering.java | 64 +++++++++---------- .../src/com/google/common/collect/Sets.java | 6 +- .../google/common/collect/TreeTraverser.java | 4 +- .../guava/src/com/google/common/io/Files.java | 8 +-- .../src/com/google/common/math/Stats.java | 2 +- .../google/common/primitives/Booleans.java | 6 +- .../com/google/common/primitives/Bytes.java | 2 +- .../com/google/common/primitives/Chars.java | 8 +-- .../com/google/common/primitives/Doubles.java | 6 +- .../com/google/common/primitives/Floats.java | 6 +- .../com/google/common/primitives/Ints.java | 8 +-- .../com/google/common/primitives/Longs.java | 8 +-- .../com/google/common/primitives/Shorts.java | 8 +-- .../common/primitives/UnsignedBytes.java | 2 +- .../common/primitives/UnsignedInts.java | 16 ++--- .../common/primitives/UnsignedLongs.java | 14 ++-- .../src/com/google/common/base/Charsets.java | 12 ++-- .../src/com/google/common/base/Converter.java | 2 +- .../src/com/google/common/base/Functions.java | 16 ++--- guava/src/com/google/common/base/Objects.java | 4 +- .../src/com/google/common/base/Optional.java | 10 +-- .../src/com/google/common/base/Predicate.java | 2 +- .../src/com/google/common/base/Splitter.java | 2 +- .../src/com/google/common/base/Suppliers.java | 4 +- .../com/google/common/cache/CacheBuilder.java | 8 +-- .../google/common/collect/Collections2.java | 8 +-- .../google/common/collect/Comparators.java | 2 +- .../google/common/collect/ImmutableList.java | 4 +- .../google/common/collect/ImmutableMap.java | 3 +- .../com/google/common/collect/Iterables.java | 32 +++++----- .../src/com/google/common/collect/Lists.java | 2 +- guava/src/com/google/common/collect/Maps.java | 2 +- .../com/google/common/collect/Ordering.java | 60 ++++++++--------- guava/src/com/google/common/collect/Sets.java | 6 +- .../google/common/collect/TreeTraverser.java | 4 +- guava/src/com/google/common/io/Files.java | 8 +-- guava/src/com/google/common/math/Stats.java | 2 +- .../google/common/primitives/Booleans.java | 6 +- .../com/google/common/primitives/Bytes.java | 2 +- .../com/google/common/primitives/Chars.java | 8 +-- .../com/google/common/primitives/Doubles.java | 6 +- .../com/google/common/primitives/Floats.java | 6 +- .../com/google/common/primitives/Ints.java | 8 +-- .../com/google/common/primitives/Longs.java | 8 +-- .../com/google/common/primitives/Shorts.java | 8 +-- .../common/primitives/UnsignedBytes.java | 2 +- .../common/primitives/UnsignedInts.java | 16 ++--- .../common/primitives/UnsignedLongs.java | 14 ++-- 63 files changed, 281 insertions(+), 276 deletions(-) diff --git a/android/guava/src/com/google/common/base/Charsets.java b/android/guava/src/com/google/common/base/Charsets.java index 538e604f2dbd..0e38e2777da9 100644 --- a/android/guava/src/com/google/common/base/Charsets.java +++ b/android/guava/src/com/google/common/base/Charsets.java @@ -39,7 +39,7 @@ private Charsets() {} /** * US-ASCII: seven-bit ASCII, the Basic Latin block of the Unicode character set (ISO646-US). * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#US_ASCII} instead. * */ @@ -50,7 +50,7 @@ private Charsets() {} /** * ISO-8859-1: ISO Latin Alphabet Number 1 (ISO-LATIN-1). * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#ISO_8859_1} instead. * */ @@ -59,7 +59,7 @@ private Charsets() {} /** * UTF-8: eight-bit UCS Transformation Format. * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#UTF_8} instead. * */ @@ -68,7 +68,7 @@ private Charsets() {} /** * UTF-16BE: sixteen-bit UCS Transformation Format, big-endian byte order. * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#UTF_16BE} instead. * */ @@ -79,7 +79,7 @@ private Charsets() {} /** * UTF-16LE: sixteen-bit UCS Transformation Format, little-endian byte order. * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#UTF_16LE} instead. * */ @@ -91,7 +91,7 @@ private Charsets() {} * UTF-16: sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order * mark. * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#UTF_16} instead. * */ diff --git a/android/guava/src/com/google/common/base/Converter.java b/android/guava/src/com/google/common/base/Converter.java index a34c734ab47a..789050fd17e1 100644 --- a/android/guava/src/com/google/common/base/Converter.java +++ b/android/guava/src/com/google/common/base/Converter.java @@ -70,7 +70,7 @@ * create a "fake" converter for a unit test. It is unnecessary (and confusing) to mock * the {@code Converter} type using a mocking framework. *

  • Extend this class and implement its {@link #doForward} and {@link #doBackward} methods. - *
  • Java 8 users: you may prefer to pass two lambda expressions or method references to + *
  • Java 8+ users: you may prefer to pass two lambda expressions or method references to * the {@link #from from} factory method. * * diff --git a/android/guava/src/com/google/common/base/Functions.java b/android/guava/src/com/google/common/base/Functions.java index c0091ff7f2c2..67f8abb520e4 100644 --- a/android/guava/src/com/google/common/base/Functions.java +++ b/android/guava/src/com/google/common/base/Functions.java @@ -55,9 +55,9 @@ private Functions() {} * {@code equals}, {@code hashCode} or {@code toString} behavior of the returned function. A * future migration to {@code java.util.function} will not preserve this behavior. * - *

    For Java 8 users: use the method reference {@code Object::toString} instead. In the + *

    Java 8+ users: use the method reference {@code Object::toString} instead. In the * future, when this class requires Java 8, this method will be deprecated. See {@link Function} - * for more important information about the Java 8 transition. + * for more important information about the Java 8+ transition. */ public static Function toStringFunction() { return ToStringFunction.INSTANCE; @@ -116,7 +116,7 @@ public String toString() { * can use {@link com.google.common.collect.Maps#asConverter Maps.asConverter} instead to get a * function that also supports reverse conversion. * - *

    Java 8 users: if you are okay with {@code null} being returned for an unrecognized + *

    Java 8+ users: if you are okay with {@code null} being returned for an unrecognized * key (instead of an exception being thrown), you can use the method reference {@code map::get} * instead. */ @@ -130,7 +130,7 @@ public String toString() { * this method returns {@code defaultValue} for all inputs that do not belong to the map's key * set. See also {@link #forMap(Map)}, which throws an exception in this case. * - *

    Java 8 users: you can just write the lambda expression {@code k -> + *

    Java 8+ users: you can just write the lambda expression {@code k -> * map.getOrDefault(k, defaultValue)} instead. * * @param map source map that determines the function behavior @@ -230,7 +230,7 @@ public String toString() { * Returns the composition of two functions. For {@code f: A->B} and {@code g: B->C}, composition * is defined as the function h such that {@code h(a) == g(f(a))} for each {@code a}. * - *

    Java 8 users: use {@code g.compose(f)} or (probably clearer) {@code f.andThen(g)} + *

    Java 8+ users: use {@code g.compose(f)} or (probably clearer) {@code f.andThen(g)} * instead. * * @param g the second function to apply @@ -289,7 +289,7 @@ public String toString() { *

    The returned function is consistent with equals (as documented at {@link * Function#apply}) if and only if {@code predicate} is itself consistent with equals. * - *

    Java 8 users: use the method reference {@code predicate::test} instead. + *

    Java 8+ users: use the method reference {@code predicate::test} instead. */ public static Function forPredicate( Predicate predicate) { @@ -335,7 +335,7 @@ public String toString() { /** * Returns a function that ignores its input and always returns {@code value}. * - *

    Java 8 users: use the lambda expression {@code o -> value} instead. + *

    Java 8+ users: use the lambda expression {@code o -> value} instead. * * @param value the constant value for the function to return * @return a function that always returns {@code value} @@ -384,7 +384,7 @@ public String toString() { /** * Returns a function that ignores its input and returns the result of {@code supplier.get()}. * - *

    Java 8 users: use the lambda expression {@code o -> supplier.get()} instead. + *

    Java 8+ users: use the lambda expression {@code o -> supplier.get()} instead. * * @since 10.0 */ diff --git a/android/guava/src/com/google/common/base/Objects.java b/android/guava/src/com/google/common/base/Objects.java index bd6b0d94c5f0..16fdd61edaa4 100644 --- a/android/guava/src/com/google/common/base/Objects.java +++ b/android/guava/src/com/google/common/base/Objects.java @@ -47,7 +47,7 @@ private Objects() {} *

    This assumes that any non-null objects passed to this function conform to the {@code * equals()} contract. * - *

    Note for Java 7 and later: This method should be treated as deprecated; use {@link + *

    Java 7+ users: This method should be treated as deprecated; use {@link * java.util.Objects#equals} instead. */ public static boolean equal(@CheckForNull Object a, @CheckForNull Object b) { @@ -72,7 +72,7 @@ public static boolean equal(@CheckForNull Object a, @CheckForNull Object b) { *

    Warning: When a single object is supplied, the returned hash code does not equal the * hash code of that object. * - *

    Note for Java 7 and later: This method should be treated as deprecated; use {@link + *

    Java 7+ users: This method should be treated as deprecated; use {@link * java.util.Objects#hash} instead. */ public static int hashCode(@CheckForNull @Nullable Object... objects) { diff --git a/android/guava/src/com/google/common/base/Optional.java b/android/guava/src/com/google/common/base/Optional.java index 6eac98326686..20d1233fb461 100644 --- a/android/guava/src/com/google/common/base/Optional.java +++ b/android/guava/src/com/google/common/base/Optional.java @@ -133,7 +133,7 @@ public static Optional fromNullable(@CheckForNull T nullableReference) { * {@link #or(Object)} or {@link #orNull} instead. * *

    Comparison to {@code java.util.Optional}: when the value is absent, this method - * throws {@link IllegalStateException}, whereas the Java 8 counterpart throws {@link + * throws {@link IllegalStateException}, whereas the {@code java.util} counterpart throws {@link * java.util.NoSuchElementException NoSuchElementException}. * * @throws IllegalStateException if the instance is absent ({@link #isPresent} returns {@code @@ -194,7 +194,7 @@ public static Optional fromNullable(@CheckForNull T nullableReference) { * *

    Comparison to {@code java.util.Optional}: this method is similar to Java 8's {@code * Optional.orElseGet}, except when {@code supplier} returns {@code null}. In this case this - * method throws an exception, whereas the Java 8 method returns the {@code null} to the caller. + * method throws an exception, whereas the Java 8+ method returns the {@code null} to the caller. * * @throws NullPointerException if this optional's value is absent and the supplier returns {@code * null} @@ -242,7 +242,7 @@ public static Optional fromNullable(@CheckForNull T nullableReference) { * *

    Comparison to {@code java.util.Optional}: this method is similar to Java 8's {@code * Optional.map}, except when {@code function} returns {@code null}. In this case this method - * throws an exception, whereas the Java 8 method returns {@code Optional.absent()}. + * throws an exception, whereas the Java 8+ method returns {@code Optional.absent()}. * * @throws NullPointerException if the function returns {@code null} * @since 12.0 @@ -263,7 +263,7 @@ public static Optional fromNullable(@CheckForNull T nullableReference) { * Returns a hash code for this instance. * *

    Comparison to {@code java.util.Optional}: this class leaves the specific choice of - * hash code unspecified, unlike the Java 8 equivalent. + * hash code unspecified, unlike the Java 8+ equivalent. */ @Override public abstract int hashCode(); @@ -272,7 +272,7 @@ public static Optional fromNullable(@CheckForNull T nullableReference) { * Returns a string representation for this instance. * *

    Comparison to {@code java.util.Optional}: this class leaves the specific string - * representation unspecified, unlike the Java 8 equivalent. + * representation unspecified, unlike the Java 8+ equivalent. */ @Override public abstract String toString(); diff --git a/android/guava/src/com/google/common/base/Predicate.java b/android/guava/src/com/google/common/base/Predicate.java index 983b24307134..dc68b0e6725c 100644 --- a/android/guava/src/com/google/common/base/Predicate.java +++ b/android/guava/src/com/google/common/base/Predicate.java @@ -48,7 +48,7 @@ @ElementTypesAreNonnullByDefault public interface Predicate { /** - * Returns the result of applying this predicate to {@code input} (Java 8 users, see notes in the + * Returns the result of applying this predicate to {@code input} (Java 8+ users, see notes in the * class documentation above). This method is generally expected, but not absolutely * required, to have the following properties: * diff --git a/android/guava/src/com/google/common/base/Suppliers.java b/android/guava/src/com/google/common/base/Suppliers.java index 4460d441cf29..5d628bcb3e1a 100644 --- a/android/guava/src/com/google/common/base/Suppliers.java +++ b/android/guava/src/com/google/common/base/Suppliers.java @@ -254,7 +254,7 @@ public String toString() { * @throws IllegalArgumentException if {@code duration} is not positive * @since NEXT */ - @Beta // only until we're confident that Java 8 APIs are safe for our Android users + @Beta // only until we're confident that Java 8+ APIs are safe for our Android users @J2ktIncompatible @GwtIncompatible // java.time.Duration @SuppressWarnings("Java7ApiChecker") // no more dangerous that wherever the user got the Duration @@ -400,7 +400,7 @@ public String toString() { * Returns a function that accepts a supplier and returns the result of invoking {@link * Supplier#get} on that supplier. * - *

    Java 8 users: use the method reference {@code Supplier::get} instead. + *

    Java 8+ users: use the method reference {@code Supplier::get} instead. * * @since 8.0 */ diff --git a/android/guava/src/com/google/common/cache/CacheBuilder.java b/android/guava/src/com/google/common/cache/CacheBuilder.java index 7e7ea25bb5df..c3fbdac732cb 100644 --- a/android/guava/src/com/google/common/cache/CacheBuilder.java +++ b/android/guava/src/com/google/common/cache/CacheBuilder.java @@ -48,10 +48,10 @@ * *

    The successor to Guava's caching API is Caffeine. Its API is designed to make it a - * nearly drop-in replacement -- though it requires Java 8 APIs, is not available for Android or - * GWT/j2cl, and may have different - * (usually better) behavior when multiple threads attempt concurrent mutations. Its equivalent - * to {@code CacheBuilder} is its different (usually + * better) behavior when multiple threads attempt concurrent mutations. Its equivalent to {@code + * CacheBuilder} is its {@code * Caffeine} class. Caffeine offers better performance, more features (including asynchronous * loading), and fewer Java 8 users: several common uses for this class are now more comprehensively addressed - * by the new {@link java.util.stream.Stream} library. Read the method documentation below for - * comparisons. These methods are not being deprecated, but we gently encourage you to migrate to - * streams. + *

    Java 8+ users: several common uses for this class are now more comprehensively + * addressed by the new {@link java.util.stream.Stream} library. Read the method documentation below + * for comparisons. These methods are not being deprecated, but we gently encourage you to migrate + * to streams. * * @author Chris Povirk * @author Mike Bostock diff --git a/android/guava/src/com/google/common/collect/Comparators.java b/android/guava/src/com/google/common/collect/Comparators.java index 7ada5e538105..3efbf994c601 100644 --- a/android/guava/src/com/google/common/collect/Comparators.java +++ b/android/guava/src/com/google/common/collect/Comparators.java @@ -28,7 +28,7 @@ /** * Provides static methods for working with {@link Comparator} instances. For many other helpful - * comparator utilities, see either {@code Comparator} itself (for Java 8 or later), or {@code + * comparator utilities, see either {@code Comparator} itself (for Java 8+), or {@code * com.google.common.collect.Ordering} (otherwise). * *

    Relationship to {@code Ordering}

    diff --git a/android/guava/src/com/google/common/collect/ImmutableList.java b/android/guava/src/com/google/common/collect/ImmutableList.java index 940bf96c2967..4f95ba7754fb 100644 --- a/android/guava/src/com/google/common/collect/ImmutableList.java +++ b/android/guava/src/com/google/common/collect/ImmutableList.java @@ -301,7 +301,7 @@ public static ImmutableList copyOf(E[] elements) { * ImmutableSortedSet.copyOf(elements)}; if you want a {@code List} you can use its {@code * asList()} view. * - *

    Java 8 users: If you want to convert a {@link java.util.stream.Stream} to a sorted + *

    Java 8+ users: If you want to convert a {@link java.util.stream.Stream} to a sorted * {@code ImmutableList}, use {@code stream.sorted().collect(toImmutableList())}. * * @throws NullPointerException if any element in the input is null @@ -324,7 +324,7 @@ public static > ImmutableList sortedCopyOf( * ImmutableSortedSet.copyOf(comparator, elements)}; if you want a {@code List} you can use its * {@code asList()} view. * - *

    Java 8 users: If you want to convert a {@link java.util.stream.Stream} to a sorted + *

    Java 8+ users: If you want to convert a {@link java.util.stream.Stream} to a sorted * {@code ImmutableList}, use {@code stream.sorted(comparator).collect(toImmutableList())}. * * @throws NullPointerException if any element in the input is null diff --git a/android/guava/src/com/google/common/collect/ImmutableMap.java b/android/guava/src/com/google/common/collect/ImmutableMap.java index 79b39b7ade7f..7b91cafc25ab 100644 --- a/android/guava/src/com/google/common/collect/ImmutableMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableMap.java @@ -884,7 +884,8 @@ public boolean containsValue(@CheckForNull Object value) { * * @since 23.5 (but since 21.0 in the JRE flavor). - * Note that API Level 24 users can call this method with any version of Guava. + * Note, however, that Java 8+ users can call this method with any version and flavor of + * Guava. */ // @Override under Java 8 / API Level 24 @CheckForNull diff --git a/android/guava/src/com/google/common/collect/Iterables.java b/android/guava/src/com/google/common/collect/Iterables.java index 5fc18f8aefc7..61610570f63f 100644 --- a/android/guava/src/com/google/common/collect/Iterables.java +++ b/android/guava/src/com/google/common/collect/Iterables.java @@ -44,9 +44,9 @@ * {@code Iterable}. Except as noted, each method has a corresponding {@link Iterator}-based method * in the {@link Iterators} class. * - *

    Java 8 users: several common uses for this class are now more comprehensively addressed - * by the new {@link java.util.stream.Stream} library. Read the method documentation below for - * comparisons. This class is not being deprecated, but we gently encourage you to migrate to + *

    Java 8+ users: several common uses for this class are now more comprehensively + * addressed by the new {@link java.util.stream.Stream} library. Read the method documentation below + * for comparisons. This class is not being deprecated, but we gently encourage you to migrate to * streams. * *

    Performance notes: Unless otherwise noted, all of the iterables produced in this class @@ -173,6 +173,9 @@ public static boolean retainAll(Iterable removeFrom, Collection elementsTo * The behavior of this method is not specified if {@code predicate} is dependent on {@code * removeFrom}. * + *

    Java 8+ users: if {@code removeFrom} is a {@link Collection}, use {@code + * removeFrom.removeIf(predicate)} instead. + * * @param removeFrom the iterable to (potentially) remove elements from * @param predicate a predicate that determines whether an element should be removed * @return {@code true} if any elements were removed from the iterable @@ -290,7 +293,7 @@ public static String toString(Iterable iterable) { /** * Returns the single element contained in {@code iterable}. * - *

    Java 8 users: the {@code Stream} equivalent to this method is {@code + *

    Java 8+ users: the {@code Stream} equivalent to this method is {@code * stream.collect(MoreCollectors.onlyElement())}. * * @throws NoSuchElementException if the iterable is empty @@ -305,7 +308,7 @@ public static String toString(Iterable iterable) { * Returns the single element contained in {@code iterable}, or {@code defaultValue} if the * iterable is empty. * - *

    Java 8 users: the {@code Stream} equivalent to this method is {@code + *

    Java 8+ users: the {@code Stream} equivalent to this method is {@code * stream.collect(MoreCollectors.toOptional()).orElse(defaultValue)}. * * @throws IllegalArgumentException if the iterator contains multiple elements @@ -375,7 +378,7 @@ public static String toString(Iterable iterable) { * Returns the number of elements in the specified iterable that equal the specified object. This * implementation avoids a full iteration when the iterable is a {@link Multiset} or {@link Set}. * - *

    Java 8 users: In most cases, the {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: In most cases, the {@code Stream} equivalent of this method is {@code * stream.filter(element::equals).count()}. If {@code element} might be null, use {@code * stream.filter(Predicate.isEqual(element)).count()} instead. * @@ -406,7 +409,7 @@ public static int frequency(Iterable iterable, @CheckForNull Object element) *

    To cycle over the iterable {@code n} times, use the following: {@code * Iterables.concat(Collections.nCopies(n, iterable))} * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code * Stream.generate(() -> iterable).flatMap(Streams::stream)}. */ public static Iterable cycle(final Iterable iterable) { @@ -440,8 +443,8 @@ public String toString() { *

    To cycle over the elements {@code n} times, use the following: {@code * Iterables.concat(Collections.nCopies(n, Arrays.asList(elements)))} * - *

    Java 8 users: If passing a single element {@code e}, the {@code Stream} equivalent of - * this method is {@code Stream.generate(() -> e)}. Otherwise, put the elements in a collection + *

    Java 8+ users: If passing a single element {@code e}, the {@code Stream} equivalent + * of this method is {@code Stream.generate(() -> e)}. Otherwise, put the elements in a collection * and use {@code Stream.generate(() -> collection).flatMap(Collection::stream)}. */ @SafeVarargs @@ -457,8 +460,8 @@ public String toString() { *

    The returned iterable's iterator supports {@code remove()} when the corresponding input * iterator supports it. * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code Stream.concat(a, - * b)}. + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code + * Stream.concat(a, b)}. */ public static Iterable concat( Iterable a, Iterable b) { @@ -473,7 +476,7 @@ public String toString() { *

    The returned iterable's iterator supports {@code remove()} when the corresponding input * iterator supports it. * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code * Streams.concat(a, b, c)}. */ public static Iterable concat( @@ -490,7 +493,7 @@ public String toString() { *

    The returned iterable's iterator supports {@code remove()} when the corresponding input * iterator supports it. * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code * Streams.concat(a, b, c, d)}. */ public static Iterable concat( @@ -509,7 +512,7 @@ public String toString() { *

    The returned iterable's iterator supports {@code remove()} when the corresponding input * iterator supports it. * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code * Streams.concat(...)}. * * @throws NullPointerException if any of the provided iterables is null @@ -528,7 +531,7 @@ public String toString() { * iterator supports it. The methods of the returned iterable may throw {@code * NullPointerException} if any of the input iterators is null. * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code * streamOfStreams.flatMap(s -> s)}. */ public static Iterable concat( diff --git a/android/guava/src/com/google/common/collect/Lists.java b/android/guava/src/com/google/common/collect/Lists.java index e79ea14f8197..969b69c9ce0e 100644 --- a/android/guava/src/com/google/common/collect/Lists.java +++ b/android/guava/src/com/google/common/collect/Lists.java @@ -524,7 +524,7 @@ public static List> cartesianProduct(List... lists) { * serialize the copy. Other methods similar to this do not implement serialization at all for * this reason. * - *

    Java 8 users: many use cases for this method are better addressed by {@link + *

    Java 8+ users: many use cases for this method are better addressed by {@link * java.util.stream.Stream#map}. This method is not being deprecated, but we gently encourage you * to migrate to streams. */ diff --git a/android/guava/src/com/google/common/collect/Maps.java b/android/guava/src/com/google/common/collect/Maps.java index 0664f5dabfb3..3030d59e8169 100644 --- a/android/guava/src/com/google/common/collect/Maps.java +++ b/android/guava/src/com/google/common/collect/Maps.java @@ -1267,7 +1267,7 @@ public static ImmutableMap toMap( *

    If your index may associate multiple values with each key, use {@link * Multimaps#index(Iterable, Function) Multimaps.index}. * - *

    Note: on Java 8 and later, it is usually better to use streams. For example: + *

    Note: on Java 8+, it is usually better to use streams. For example: * *

    {@code
        * import static com.google.common.collect.ImmutableMap.toImmutableMap;
    diff --git a/android/guava/src/com/google/common/collect/Ordering.java b/android/guava/src/com/google/common/collect/Ordering.java
    index 3b25c42fa487..d29a3b0d8f79 100644
    --- a/android/guava/src/com/google/common/collect/Ordering.java
    +++ b/android/guava/src/com/google/common/collect/Ordering.java
    @@ -123,12 +123,12 @@
      * {@code function} can themselves be serialized, then {@code ordering.onResultOf(function)} can as
      * well.
      *
    - * 

    For Java 8 users

    + *

    Java 8+ users

    * - *

    If you are using Java 8, this class is now obsolete. Most of its functionality is now provided - * by {@link java.util.stream.Stream Stream} and by {@link Comparator} itself, and the rest can now - * be found as static methods in our new {@link Comparators} class. See each method below for - * further instructions. Whenever possible, you should change any references of type {@code + *

    If you are using Java 8+, this class is now obsolete. Most of its functionality is now + * provided by {@link java.util.stream.Stream Stream} and by {@link Comparator} itself, and the rest + * can now be found as static methods in our new {@link Comparators} class. See each method below + * for further instructions. Whenever possible, you should change any references of type {@code * Ordering} to be of type {@code Comparator} instead. However, at this time we have no plan to * deprecate this class. * @@ -157,7 +157,7 @@ public abstract class Ordering implements Comparator *

    The type specification is {@code }, instead of the technically correct * {@code >}, to support legacy types from before Java 5. * - *

    Java 8 users: use {@link Comparator#naturalOrder} instead. + *

    Java 8+ users: use {@link Comparator#naturalOrder} instead. */ @GwtCompatible(serializable = true) @SuppressWarnings("unchecked") // TODO(kevinb): right way to explain this?? @@ -175,7 +175,7 @@ public static Ordering natural() { * *

    The returned object is serializable if {@code comparator} is serializable. * - *

    Java 8 users: this class is now obsolete as explained in the class documentation, so + *

    Java 8+ users: this class is now obsolete as explained in the class documentation, so * there is no need to use this method. * * @param comparator the comparator that defines the order @@ -276,8 +276,8 @@ public static Ordering explicit(T leastValue, T... remainingValuesInOrder * *

    The returned comparator is serializable. * - *

    Java 8 users: Use the lambda expression {@code (a, b) -> 0} instead (in certain cases - * you may need to cast that to {@code Comparator}). + *

    Java 8+ users: Use the lambda expression {@code (a, b) -> 0} instead (in certain + * cases you may need to cast that to {@code Comparator}). * * @since 13.0 */ @@ -293,7 +293,7 @@ public static Ordering explicit(T leastValue, T... remainingValuesInOrder * *

    The comparator is serializable. * - *

    Java 8 users: Use {@code Comparator.comparing(Object::toString)} instead. + *

    Java 8+ users: Use {@code Comparator.comparing(Object::toString)} instead. */ @GwtCompatible(serializable = true) public static Ordering usingToString() { @@ -404,7 +404,7 @@ protected Ordering() {} * Returns the reverse of this ordering; the {@code Ordering} equivalent to {@link * Collections#reverseOrder(Comparator)}. * - *

    Java 8 users: Use {@code thisComparator.reversed()} instead. + *

    Java 8+ users: Use {@code thisComparator.reversed()} instead. */ // type parameter lets us avoid the extra in statements like: // Ordering o = Ordering.natural().reverse(); @@ -419,7 +419,7 @@ public Ordering reverse() { * *

    The returned object is serializable if this object is serializable. * - *

    Java 8 users: Use {@code Comparator.nullsFirst(thisComparator)} instead. + *

    Java 8+ users: Use {@code Comparator.nullsFirst(thisComparator)} instead. */ // type parameter lets us avoid the extra in statements like: // Ordering o = Ordering.natural().nullsFirst(); @@ -434,7 +434,7 @@ public Ordering reverse() { * *

    The returned object is serializable if this object is serializable. * - *

    Java 8 users: Use {@code Comparator.nullsLast(thisComparator)} instead. + *

    Java 8+ users: Use {@code Comparator.nullsLast(thisComparator)} instead. */ // type parameter lets us avoid the extra in statements like: // Ordering o = Ordering.natural().nullsLast(); @@ -453,8 +453,8 @@ public Ordering reverse() { * .onResultOf(Functions.toStringFunction()) * } * - *

    Java 8 users: Use {@code Comparator.comparing(function, thisComparator)} instead (you - * can omit the comparator if it is the natural order). + *

    Java 8+ users: Use {@code Comparator.comparing(function, thisComparator)} instead + * (you can omit the comparator if it is the natural order). */ @GwtCompatible(serializable = true) public Ordering onResultOf(Function function) { @@ -477,7 +477,7 @@ public Ordering reverse() { *

    The returned object is serializable if this object and {@code secondaryComparator} are both * serializable. * - *

    Java 8 users: Use {@code thisComparator.thenComparing(secondaryComparator)} instead. + *

    Java 8+ users: Use {@code thisComparator.thenComparing(secondaryComparator)} instead. * Depending on what {@code secondaryComparator} is, one of the other overloads of {@code * thenComparing} may be even more useful. */ @@ -500,7 +500,7 @@ public Ordering compound(Comparator secondaryCompara *

    Warning: Supplying an argument with undefined iteration order, such as a {@link * HashSet}, will produce non-deterministic results. * - *

    Java 8 users: Use a chain of calls to {@link Comparator#thenComparing(Comparator)}, + *

    Java 8+ users: Use a chain of calls to {@link Comparator#thenComparing(Comparator)}, * or {@code comparatorCollection.stream().reduce(Comparator::thenComparing).get()} (if the * collection might be empty, also provide a default comparator as the {@code identity} parameter * to {@code reduce}). @@ -524,7 +524,7 @@ public Ordering compound(Comparator secondaryCompara * ordering.reverse().lexicographical()} (consider how each would order {@code [1]} and {@code [1, * 1]}). * - *

    Java 8 users: Use {@link Comparators#lexicographical(Comparator)} instead. + *

    Java 8+ users: Use {@link Comparators#lexicographical(Comparator)} instead. * * @since 2.0 */ @@ -553,7 +553,7 @@ public Ordering> lexicographical() { * least values, the first of those is returned. The iterator will be left exhausted: its {@code * hasNext()} method will return {@code false}. * - *

    Java 8 users: Use {@code Streams.stream(iterator).min(thisComparator).get()} instead + *

    Java 8+ users: Use {@code Streams.stream(iterator).min(thisComparator).get()} instead * (but note that it does not guarantee which tied minimum element is returned). * * @param iterator the iterator whose minimum element is to be determined @@ -578,7 +578,7 @@ public E min(Iterator iterator) { * Returns the least of the specified values according to this ordering. If there are multiple * least values, the first of those is returned. * - *

    Java 8 users: If {@code iterable} is a {@link Collection}, use {@code + *

    Java 8+ users: If {@code iterable} is a {@link Collection}, use {@code * Collections.min(collection, thisComparator)} instead. Otherwise, use {@code * Streams.stream(iterable).min(thisComparator).get()} instead. Note that these alternatives do * not guarantee which tied minimum element is returned. @@ -617,7 +617,7 @@ public E min(@ParametricNullness E a, @ParametricNullness E b) { * Returns the least of the specified values according to this ordering. If there are multiple * least values, the first of those is returned. * - *

    Java 8 users: Use {@code Collections.min(Arrays.asList(a, b, c...), thisComparator)} + *

    Java 8+ users: Use {@code Collections.min(Arrays.asList(a, b, c...), thisComparator)} * instead (but note that it does not guarantee which tied minimum element is returned). * * @param a value to compare, returned if less than or equal to the rest. @@ -644,7 +644,7 @@ public E min( * greatest values, the first of those is returned. The iterator will be left exhausted: its * {@code hasNext()} method will return {@code false}. * - *

    Java 8 users: Use {@code Streams.stream(iterator).max(thisComparator).get()} instead + *

    Java 8+ users: Use {@code Streams.stream(iterator).max(thisComparator).get()} instead * (but note that it does not guarantee which tied maximum element is returned). * * @param iterator the iterator whose maximum element is to be determined @@ -669,7 +669,7 @@ public E max(Iterator iterator) { * Returns the greatest of the specified values according to this ordering. If there are multiple * greatest values, the first of those is returned. * - *

    Java 8 users: If {@code iterable} is a {@link Collection}, use {@code + *

    Java 8+ users: If {@code iterable} is a {@link Collection}, use {@code * Collections.max(collection, thisComparator)} instead. Otherwise, use {@code * Streams.stream(iterable).max(thisComparator).get()} instead. Note that these alternatives do * not guarantee which tied maximum element is returned. @@ -708,7 +708,7 @@ public E max(@ParametricNullness E a, @ParametricNullness E b) { * Returns the greatest of the specified values according to this ordering. If there are multiple * greatest values, the first of those is returned. * - *

    Java 8 users: Use {@code Collections.max(Arrays.asList(a, b, c...), thisComparator)} + *

    Java 8+ users: Use {@code Collections.max(Arrays.asList(a, b, c...), thisComparator)} * instead (but note that it does not guarantee which tied maximum element is returned). * * @param a value to compare, returned if greater than or equal to the rest. @@ -738,8 +738,8 @@ public E max( *

    The implementation does not necessarily use a stable sorting algorithm; when multiple * elements are equivalent, it is undefined which will come first. * - *

    Java 8 users: Continue to use this method for now. After the next release of Guava, - * use {@code Streams.stream(iterable).collect(Comparators.least(k, thisComparator))} instead. + *

    Java 8+ users: Use {@code Streams.stream(iterable).collect(Comparators.least(k, + * thisComparator))} instead. * * @return an immutable {@code RandomAccess} list of the {@code k} least elements in ascending * order @@ -775,7 +775,7 @@ public List leastOf(Iterable iterable, int k) { *

    The implementation does not necessarily use a stable sorting algorithm; when multiple * elements are equivalent, it is undefined which will come first. * - *

    Java 8 users: Use {@code Streams.stream(iterator).collect(Comparators.least(k, + *

    Java 8+ users: Use {@code Streams.stream(iterator).collect(Comparators.least(k, * thisComparator))} instead. * * @return an immutable {@code RandomAccess} list of the {@code k} least elements in ascending @@ -813,8 +813,8 @@ public List leastOf(Iterator iterator, int k) { *

    The implementation does not necessarily use a stable sorting algorithm; when multiple * elements are equivalent, it is undefined which will come first. * - *

    Java 8 users: Continue to use this method for now. After the next release of Guava, - * use {@code Streams.stream(iterable).collect(Comparators.greatest(k, thisComparator))} instead. + *

    Java 8+ users: Use {@code Streams.stream(iterable).collect(Comparators.greatest(k, + * thisComparator))} instead. * * @return an immutable {@code RandomAccess} list of the {@code k} greatest elements in * descending order @@ -835,7 +835,7 @@ public List greatestOf(Iterable iterable, int k) { *

    The implementation does not necessarily use a stable sorting algorithm; when multiple * elements are equivalent, it is undefined which will come first. * - *

    Java 8 users: Use {@code Streams.stream(iterator).collect(Comparators.greatest(k, + *

    Java 8+ users: Use {@code Streams.stream(iterator).collect(Comparators.greatest(k, * thisComparator))} instead. * * @return an immutable {@code RandomAccess} list of the {@code k} greatest elements in @@ -896,7 +896,7 @@ public List sortedCopy(Iterable elements) { * equal to the element that preceded it, according to this ordering. Note that this is always * true when the iterable has fewer than two elements. * - *

    Java 8 users: Use the equivalent {@link Comparators#isInOrder(Iterable, Comparator)} + *

    Java 8+ users: Use the equivalent {@link Comparators#isInOrder(Iterable, Comparator)} * instead, since the rest of {@code Ordering} is mostly obsolete (as explained in the class * documentation). */ @@ -920,7 +920,7 @@ public boolean isOrdered(Iterable iterable) { * greater than the element that preceded it, according to this ordering. Note that this is always * true when the iterable has fewer than two elements. * - *

    Java 8 users: Use the equivalent {@link Comparators#isInStrictOrder(Iterable, + *

    Java 8+ users: Use the equivalent {@link Comparators#isInStrictOrder(Iterable, * Comparator)} instead, since the rest of {@code Ordering} is mostly obsolete (as explained in * the class documentation). */ diff --git a/android/guava/src/com/google/common/collect/Sets.java b/android/guava/src/com/google/common/collect/Sets.java index 014c6f997aa8..17c3752abd1d 100644 --- a/android/guava/src/com/google/common/collect/Sets.java +++ b/android/guava/src/com/google/common/collect/Sets.java @@ -996,7 +996,7 @@ public boolean contains(@CheckForNull Object element) { * Predicates.instanceOf(ArrayList.class)}, which is inconsistent with equals. (See {@link * Iterables#filter(Iterable, Class)} for related functionality.) * - *

    Java 8 users: many use cases for this method are better addressed by {@link + *

    Java 8+ users: many use cases for this method are better addressed by {@link * java.util.stream.Stream#filter}. This method is not being deprecated, but we gently encourage * you to migrate to streams. */ @@ -1767,7 +1767,7 @@ static boolean equalsImpl(Set s, @CheckForNull Object object) { *

    The returned navigable set will be serializable if the specified navigable set is * serializable. * - *

    Java 8 users and later: Prefer {@link Collections#unmodifiableNavigableSet}. + *

    Java 8+ users and later: Prefer {@link Collections#unmodifiableNavigableSet}. * * @param set the navigable set for which an unmodifiable view is to be returned * @return an unmodifiable view of the specified navigable set @@ -1913,7 +1913,7 @@ public NavigableSet tailSet(@ParametricNullness E fromElement, boolean inclus *

    The returned navigable set will be serializable if the specified navigable set is * serializable. * - *

    Java 8 users and later: Prefer {@link Collections#synchronizedNavigableSet}. + *

    Java 8+ users and later: Prefer {@link Collections#synchronizedNavigableSet}. * * @param navigableSet the navigable set to be "wrapped" in a synchronized navigable set. * @return a synchronized view of the specified navigable set. diff --git a/android/guava/src/com/google/common/collect/TreeTraverser.java b/android/guava/src/com/google/common/collect/TreeTraverser.java index 73f8154f2a79..1d017765f2d8 100644 --- a/android/guava/src/com/google/common/collect/TreeTraverser.java +++ b/android/guava/src/com/google/common/collect/TreeTraverser.java @@ -48,8 +48,8 @@ * *

    Null nodes are strictly forbidden. * - *

    For Java 8 users: Because this is an abstract class, not an interface, you can't use a - * lambda expression to extend it: + *

    Because this is an abstract class, not an interface, you can't use a lambda expression to + * implement it: * *

    {@code
      * // won't work
    diff --git a/android/guava/src/com/google/common/io/Files.java b/android/guava/src/com/google/common/io/Files.java
    index 499ea6a20d94..6397135aae87 100644
    --- a/android/guava/src/com/google/common/io/Files.java
    +++ b/android/guava/src/com/google/common/io/Files.java
    @@ -424,10 +424,10 @@ public static boolean equal(File file1, File file2) throws IOException {
        *     context.getCacheDir()}), and create your own directory under that. (For example, you might
        *     use {@code new File(context.getCacheDir(), "directoryname").mkdir()}, or, if you need an
        *     arbitrary number of temporary directories, you might have to generate multiple directory
    -   *     names in a loop until {@code mkdir()} returns {@code true}.) For developers on Java 7 or
    -   *     later, use {@link java.nio.file.Files#createTempDirectory}, transforming it to a {@link
    -   *     File} using {@link java.nio.file.Path#toFile() toFile()} if needed. To restrict permissions
    -   *     as this method does, pass {@code
    +   *     names in a loop until {@code mkdir()} returns {@code true}.) For Java 7+ users, prefer
    +   *     {@link java.nio.file.Files#createTempDirectory}, transforming it to a {@link File} using
    +   *     {@link java.nio.file.Path#toFile() toFile()} if needed. To restrict permissions as this
    +   *     method does, pass {@code
        *     PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwx------"))} to your
        *     call to {@code createTempDirectory}.
        */
    diff --git a/android/guava/src/com/google/common/math/Stats.java b/android/guava/src/com/google/common/math/Stats.java
    index 0650a87f5bbc..9b9941311726 100644
    --- a/android/guava/src/com/google/common/math/Stats.java
    +++ b/android/guava/src/com/google/common/math/Stats.java
    @@ -51,7 +51,7 @@
      * 

    Static convenience methods called {@code meanOf} are also provided for users who wish to * calculate only the mean. * - *

    Java 8 users: If you are not using any of the variance statistics, you may wish to use + *

    Java 8+ users: If you are not using any of the variance statistics, you may wish to use * built-in JDK libraries instead of this class. * * @author Pete Gillin diff --git a/android/guava/src/com/google/common/primitives/Booleans.java b/android/guava/src/com/google/common/primitives/Booleans.java index f96d1062d4e9..61f66caca83f 100644 --- a/android/guava/src/com/google/common/primitives/Booleans.java +++ b/android/guava/src/com/google/common/primitives/Booleans.java @@ -99,7 +99,7 @@ public static Comparator falseFirst() { * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Boolean) * value).hashCode()}. * - *

    Java 8 users: use {@link Boolean#hashCode(boolean)} instead. + *

    Java 8+ users: use {@link Boolean#hashCode(boolean)} instead. * * @param value a primitive {@code boolean} value * @return a hash code for the value @@ -113,8 +113,8 @@ public static int hashCode(boolean value) { * considered less than {@code true}). The sign of the value returned is the same as that of * {@code ((Boolean) a).compareTo(b)}. * - *

    Note for Java 7 and later: this method should be treated as deprecated; use the - * equivalent {@link Boolean#compare} method instead. + *

    Java 7+ users: this method should be treated as deprecated; use the equivalent {@link + * Boolean#compare} method instead. * * @param a the first {@code boolean} to compare * @param b the second {@code boolean} to compare diff --git a/android/guava/src/com/google/common/primitives/Bytes.java b/android/guava/src/com/google/common/primitives/Bytes.java index b32ef8ec9488..9bc30ebc2584 100644 --- a/android/guava/src/com/google/common/primitives/Bytes.java +++ b/android/guava/src/com/google/common/primitives/Bytes.java @@ -52,7 +52,7 @@ private Bytes() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Byte) * value).hashCode()}. * - *

    Java 8 users: use {@link Byte#hashCode(byte)} instead. + *

    Java 8+ users: use {@link Byte#hashCode(byte)} instead. * * @param value a primitive {@code byte} value * @return a hash code for the value diff --git a/android/guava/src/com/google/common/primitives/Chars.java b/android/guava/src/com/google/common/primitives/Chars.java index 728c6e5e9349..7b5f94d80f86 100644 --- a/android/guava/src/com/google/common/primitives/Chars.java +++ b/android/guava/src/com/google/common/primitives/Chars.java @@ -52,7 +52,7 @@ private Chars() {} /** * The number of bytes required to represent a primitive {@code char} value. * - *

    Java 8 users: use {@link Character#BYTES} instead. + *

    Java 8+ users: use {@link Character#BYTES} instead. */ public static final int BYTES = Character.SIZE / Byte.SIZE; @@ -60,7 +60,7 @@ private Chars() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Character) * value).hashCode()}. * - *

    Java 8 users: use {@link Character#hashCode(char)} instead. + *

    Java 8+ users: use {@link Character#hashCode(char)} instead. * * @param value a primitive {@code char} value * @return a hash code for the value @@ -105,8 +105,8 @@ public static char saturatedCast(long value) { * Compares the two specified {@code char} values. The sign of the value returned is the same as * that of {@code ((Character) a).compareTo(b)}. * - *

    Note for Java 7 and later: this method should be treated as deprecated; use the - * equivalent {@link Character#compare} method instead. + *

    Java 7+ users: this method should be treated as deprecated; use the equivalent {@link + * Character#compare} method instead. * * @param a the first {@code char} to compare * @param b the second {@code char} to compare diff --git a/android/guava/src/com/google/common/primitives/Doubles.java b/android/guava/src/com/google/common/primitives/Doubles.java index ce491bc982ee..c10d0f0d2f24 100644 --- a/android/guava/src/com/google/common/primitives/Doubles.java +++ b/android/guava/src/com/google/common/primitives/Doubles.java @@ -54,7 +54,7 @@ private Doubles() {} /** * The number of bytes required to represent a primitive {@code double} value. * - *

    Java 8 users: use {@link Double#BYTES} instead. + *

    Java 8+ users: use {@link Double#BYTES} instead. * * @since 10.0 */ @@ -64,7 +64,7 @@ private Doubles() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Double) * value).hashCode()}. * - *

    Java 8 users: use {@link Double#hashCode(double)} instead. + *

    Java 8+ users: use {@link Double#hashCode(double)} instead. * * @param value a primitive {@code double} value * @return a hash code for the value @@ -98,7 +98,7 @@ public static int compare(double a, double b) { * Returns {@code true} if {@code value} represents a real number. This is equivalent to, but not * necessarily implemented as, {@code !(Double.isInfinite(value) || Double.isNaN(value))}. * - *

    Java 8 users: use {@link Double#isFinite(double)} instead. + *

    Java 8+ users: use {@link Double#isFinite(double)} instead. * * @since 10.0 */ diff --git a/android/guava/src/com/google/common/primitives/Floats.java b/android/guava/src/com/google/common/primitives/Floats.java index c42f2f1eead0..7bb9b848c1db 100644 --- a/android/guava/src/com/google/common/primitives/Floats.java +++ b/android/guava/src/com/google/common/primitives/Floats.java @@ -54,7 +54,7 @@ private Floats() {} /** * The number of bytes required to represent a primitive {@code float} value. * - *

    Java 8 users: use {@link Float#BYTES} instead. + *

    Java 8+ users: use {@link Float#BYTES} instead. * * @since 10.0 */ @@ -64,7 +64,7 @@ private Floats() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Float) * value).hashCode()}. * - *

    Java 8 users: use {@link Float#hashCode(float)} instead. + *

    Java 8+ users: use {@link Float#hashCode(float)} instead. * * @param value a primitive {@code float} value * @return a hash code for the value @@ -95,7 +95,7 @@ public static int compare(float a, float b) { * Returns {@code true} if {@code value} represents a real number. This is equivalent to, but not * necessarily implemented as, {@code !(Float.isInfinite(value) || Float.isNaN(value))}. * - *

    Java 8 users: use {@link Float#isFinite(float)} instead. + *

    Java 8+ users: use {@link Float#isFinite(float)} instead. * * @since 10.0 */ diff --git a/android/guava/src/com/google/common/primitives/Ints.java b/android/guava/src/com/google/common/primitives/Ints.java index 8932af267223..fd4ca7922ddf 100644 --- a/android/guava/src/com/google/common/primitives/Ints.java +++ b/android/guava/src/com/google/common/primitives/Ints.java @@ -50,7 +50,7 @@ private Ints() {} /** * The number of bytes required to represent a primitive {@code int} value. * - *

    Java 8 users: use {@link Integer#BYTES} instead. + *

    Java 8+ users: use {@link Integer#BYTES} instead. */ public static final int BYTES = Integer.SIZE / Byte.SIZE; @@ -65,7 +65,7 @@ private Ints() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Integer) * value).hashCode()}. * - *

    Java 8 users: use {@link Integer#hashCode(int)} instead. + *

    Java 8+ users: use {@link Integer#hashCode(int)} instead. * * @param value a primitive {@code int} value * @return a hash code for the value @@ -110,8 +110,8 @@ public static int saturatedCast(long value) { * Compares the two specified {@code int} values. The sign of the value returned is the same as * that of {@code ((Integer) a).compareTo(b)}. * - *

    Note for Java 7 and later: this method should be treated as deprecated; use the - * equivalent {@link Integer#compare} method instead. + *

    Java 7+ users: this method should be treated as deprecated; use the equivalent {@link + * Integer#compare} method instead. * * @param a the first {@code int} to compare * @param b the second {@code int} to compare diff --git a/android/guava/src/com/google/common/primitives/Longs.java b/android/guava/src/com/google/common/primitives/Longs.java index f50ee01ca1c1..4ef6c7cfa959 100644 --- a/android/guava/src/com/google/common/primitives/Longs.java +++ b/android/guava/src/com/google/common/primitives/Longs.java @@ -49,7 +49,7 @@ private Longs() {} /** * The number of bytes required to represent a primitive {@code long} value. * - *

    Java 8 users: use {@link Long#BYTES} instead. + *

    Java 8+ users: use {@link Long#BYTES} instead. */ public static final int BYTES = Long.SIZE / Byte.SIZE; @@ -68,7 +68,7 @@ private Longs() {} * might be different from {@code ((Long) value).hashCode()} in GWT because {@link * Long#hashCode()} in GWT does not obey the JRE contract. * - *

    Java 8 users: use {@link Long#hashCode(long)} instead. + *

    Java 8+ users: use {@link Long#hashCode(long)} instead. * * @param value a primitive {@code long} value * @return a hash code for the value @@ -81,8 +81,8 @@ public static int hashCode(long value) { * Compares the two specified {@code long} values. The sign of the value returned is the same as * that of {@code ((Long) a).compareTo(b)}. * - *

    Note for Java 7 and later: this method should be treated as deprecated; use the - * equivalent {@link Long#compare} method instead. + *

    Java 7+ users: this method should be treated as deprecated; use the equivalent {@link + * Long#compare} method instead. * * @param a the first {@code long} to compare * @param b the second {@code long} to compare diff --git a/android/guava/src/com/google/common/primitives/Shorts.java b/android/guava/src/com/google/common/primitives/Shorts.java index e7cc8538b491..6e97371141d4 100644 --- a/android/guava/src/com/google/common/primitives/Shorts.java +++ b/android/guava/src/com/google/common/primitives/Shorts.java @@ -50,7 +50,7 @@ private Shorts() {} /** * The number of bytes required to represent a primitive {@code short} value. * - *

    Java 8 users: use {@link Short#BYTES} instead. + *

    Java 8+ users: use {@link Short#BYTES} instead. */ public static final int BYTES = Short.SIZE / Byte.SIZE; @@ -65,7 +65,7 @@ private Shorts() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Short) * value).hashCode()}. * - *

    Java 8 users: use {@link Short#hashCode(short)} instead. + *

    Java 8+ users: use {@link Short#hashCode(short)} instead. * * @param value a primitive {@code short} value * @return a hash code for the value @@ -109,8 +109,8 @@ public static short saturatedCast(long value) { * Compares the two specified {@code short} values. The sign of the value returned is the same as * that of {@code ((Short) a).compareTo(b)}. * - *

    Note for Java 7 and later: this method should be treated as deprecated; use the - * equivalent {@link Short#compare} method instead. + *

    Java 7+ users: this method should be treated as deprecated; use the equivalent {@link + * Short#compare} method instead. * * @param a the first {@code short} to compare * @param b the second {@code short} to compare diff --git a/android/guava/src/com/google/common/primitives/UnsignedBytes.java b/android/guava/src/com/google/common/primitives/UnsignedBytes.java index 0490c6714d47..c8561256b8bf 100644 --- a/android/guava/src/com/google/common/primitives/UnsignedBytes.java +++ b/android/guava/src/com/google/common/primitives/UnsignedBytes.java @@ -69,7 +69,7 @@ private UnsignedBytes() {} * Returns the value of the given byte as an integer, when treated as unsigned. That is, returns * {@code value + 256} if {@code value} is negative; {@code value} itself otherwise. * - *

    Java 8 users: use {@link Byte#toUnsignedInt(byte)} instead. + *

    Java 8+ users: use {@link Byte#toUnsignedInt(byte)} instead. * * @since 6.0 */ diff --git a/android/guava/src/com/google/common/primitives/UnsignedInts.java b/android/guava/src/com/google/common/primitives/UnsignedInts.java index 0d556bab4706..81771dc4c8c2 100644 --- a/android/guava/src/com/google/common/primitives/UnsignedInts.java +++ b/android/guava/src/com/google/common/primitives/UnsignedInts.java @@ -59,7 +59,7 @@ static int flip(int value) { * Compares the two specified {@code int} values, treating them as unsigned values between {@code * 0} and {@code 2^32 - 1} inclusive. * - *

    Java 8 users: use {@link Integer#compareUnsigned(int, int)} instead. + *

    Java 8+ users: use {@link Integer#compareUnsigned(int, int)} instead. * * @param a the first unsigned {@code int} to compare * @param b the second unsigned {@code int} to compare @@ -73,7 +73,7 @@ public static int compare(int a, int b) { /** * Returns the value of the given {@code int} as a {@code long}, when treated as unsigned. * - *

    Java 8 users: use {@link Integer#toUnsignedLong(int)} instead. + *

    Java 8+ users: use {@link Integer#toUnsignedLong(int)} instead. */ public static long toLong(int value) { return value & INT_MASK; @@ -271,7 +271,7 @@ public static void sortDescending(int[] array, int fromIndex, int toIndex) { * Returns dividend / divisor, where the dividend and divisor are treated as unsigned 32-bit * quantities. * - *

    Java 8 users: use {@link Integer#divideUnsigned(int, int)} instead. + *

    Java 8+ users: use {@link Integer#divideUnsigned(int, int)} instead. * * @param dividend the dividend (numerator) * @param divisor the divisor (denominator) @@ -285,7 +285,7 @@ public static int divide(int dividend, int divisor) { * Returns dividend % divisor, where the dividend and divisor are treated as unsigned 32-bit * quantities. * - *

    Java 8 users: use {@link Integer#remainderUnsigned(int, int)} instead. + *

    Java 8+ users: use {@link Integer#remainderUnsigned(int, int)} instead. * * @param dividend the dividend (numerator) * @param divisor the divisor (denominator) @@ -327,7 +327,7 @@ public static int decode(String stringValue) { /** * Returns the unsigned {@code int} value represented by the given decimal string. * - *

    Java 8 users: use {@link Integer#parseUnsignedInt(String)} instead. + *

    Java 8+ users: use {@link Integer#parseUnsignedInt(String)} instead. * * @throws NumberFormatException if the string does not contain a valid unsigned {@code int} value * @throws NullPointerException if {@code s} is null (in contrast to {@link @@ -341,7 +341,7 @@ public static int parseUnsignedInt(String s) { /** * Returns the unsigned {@code int} value represented by a string with the given radix. * - *

    Java 8 users: use {@link Integer#parseUnsignedInt(String, int)} instead. + *

    Java 8+ users: use {@link Integer#parseUnsignedInt(String, int)} instead. * * @param string the string containing the unsigned integer representation to be parsed. * @param radix the radix to use while parsing {@code s}; must be between {@link @@ -365,7 +365,7 @@ public static int parseUnsignedInt(String string, int radix) { /** * Returns a string representation of x, where x is treated as unsigned. * - *

    Java 8 users: use {@link Integer#toUnsignedString(int)} instead. + *

    Java 8+ users: use {@link Integer#toUnsignedString(int)} instead. */ public static String toString(int x) { return toString(x, 10); @@ -375,7 +375,7 @@ public static String toString(int x) { * Returns a string representation of {@code x} for the given radix, where {@code x} is treated as * unsigned. * - *

    Java 8 users: use {@link Integer#toUnsignedString(int, int)} instead. + *

    Java 8+ users: use {@link Integer#toUnsignedString(int, int)} instead. * * @param x the value to convert to a string. * @param radix the radix to use while working with {@code x} diff --git a/android/guava/src/com/google/common/primitives/UnsignedLongs.java b/android/guava/src/com/google/common/primitives/UnsignedLongs.java index 04631ee9d3c7..bb806c0773ed 100644 --- a/android/guava/src/com/google/common/primitives/UnsignedLongs.java +++ b/android/guava/src/com/google/common/primitives/UnsignedLongs.java @@ -67,7 +67,7 @@ private static long flip(long a) { * Compares the two specified {@code long} values, treating them as unsigned values between {@code * 0} and {@code 2^64 - 1} inclusive. * - *

    Java 8 users: use {@link Long#compareUnsigned(long, long)} instead. + *

    Java 8+ users: use {@link Long#compareUnsigned(long, long)} instead. * * @param a the first unsigned {@code long} to compare * @param b the second unsigned {@code long} to compare @@ -237,7 +237,7 @@ public static void sortDescending(long[] array, int fromIndex, int toIndex) { * Returns dividend / divisor, where the dividend and divisor are treated as unsigned 64-bit * quantities. * - *

    Java 8 users: use {@link Long#divideUnsigned(long, long)} instead. + *

    Java 8+ users: use {@link Long#divideUnsigned(long, long)} instead. * * @param dividend the dividend (numerator) * @param divisor the divisor (denominator) @@ -272,7 +272,7 @@ public static long divide(long dividend, long divisor) { * Returns dividend % divisor, where the dividend and divisor are treated as unsigned 64-bit * quantities. * - *

    Java 8 users: use {@link Long#remainderUnsigned(long, long)} instead. + *

    Java 8+ users: use {@link Long#remainderUnsigned(long, long)} instead. * * @param dividend the dividend (numerator) * @param divisor the divisor (denominator) @@ -307,7 +307,7 @@ public static long remainder(long dividend, long divisor) { /** * Returns the unsigned {@code long} value represented by the given decimal string. * - *

    Java 8 users: use {@link Long#parseUnsignedLong(String)} instead. + *

    Java 8+ users: use {@link Long#parseUnsignedLong(String)} instead. * * @throws NumberFormatException if the string does not contain a valid unsigned {@code long} * value @@ -322,7 +322,7 @@ public static long parseUnsignedLong(String string) { /** * Returns the unsigned {@code long} value represented by a string with the given radix. * - *

    Java 8 users: use {@link Long#parseUnsignedLong(String, int)} instead. + *

    Java 8+ users: use {@link Long#parseUnsignedLong(String, int)} instead. * * @param string the string containing the unsigned {@code long} representation to be parsed. * @param radix the radix to use while parsing {@code string} @@ -435,7 +435,7 @@ static boolean overflowInParse(long current, int digit, int radix) { /** * Returns a string representation of x, where x is treated as unsigned. * - *

    Java 8 users: use {@link Long#toUnsignedString(long)} instead. + *

    Java 8+ users: use {@link Long#toUnsignedString(long)} instead. */ public static String toString(long x) { return toString(x, 10); @@ -445,7 +445,7 @@ public static String toString(long x) { * Returns a string representation of {@code x} for the given radix, where {@code x} is treated as * unsigned. * - *

    Java 8 users: use {@link Long#toUnsignedString(long, int)} instead. + *

    Java 8+ users: use {@link Long#toUnsignedString(long, int)} instead. * * @param x the value to convert to a string. * @param radix the radix to use while working with {@code x} diff --git a/guava/src/com/google/common/base/Charsets.java b/guava/src/com/google/common/base/Charsets.java index 538e604f2dbd..0e38e2777da9 100644 --- a/guava/src/com/google/common/base/Charsets.java +++ b/guava/src/com/google/common/base/Charsets.java @@ -39,7 +39,7 @@ private Charsets() {} /** * US-ASCII: seven-bit ASCII, the Basic Latin block of the Unicode character set (ISO646-US). * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#US_ASCII} instead. * */ @@ -50,7 +50,7 @@ private Charsets() {} /** * ISO-8859-1: ISO Latin Alphabet Number 1 (ISO-LATIN-1). * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#ISO_8859_1} instead. * */ @@ -59,7 +59,7 @@ private Charsets() {} /** * UTF-8: eight-bit UCS Transformation Format. * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#UTF_8} instead. * */ @@ -68,7 +68,7 @@ private Charsets() {} /** * UTF-16BE: sixteen-bit UCS Transformation Format, big-endian byte order. * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#UTF_16BE} instead. * */ @@ -79,7 +79,7 @@ private Charsets() {} /** * UTF-16LE: sixteen-bit UCS Transformation Format, little-endian byte order. * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#UTF_16LE} instead. * */ @@ -91,7 +91,7 @@ private Charsets() {} * UTF-16: sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order * mark. * - *

    Note for Java 7 and later: this constant should be treated as deprecated; use {@link + *

    Java 7+ users: this constant should be treated as deprecated; use {@link * java.nio.charset.StandardCharsets#UTF_16} instead. * */ diff --git a/guava/src/com/google/common/base/Converter.java b/guava/src/com/google/common/base/Converter.java index a34c734ab47a..789050fd17e1 100644 --- a/guava/src/com/google/common/base/Converter.java +++ b/guava/src/com/google/common/base/Converter.java @@ -70,7 +70,7 @@ * create a "fake" converter for a unit test. It is unnecessary (and confusing) to mock * the {@code Converter} type using a mocking framework. *

  • Extend this class and implement its {@link #doForward} and {@link #doBackward} methods. - *
  • Java 8 users: you may prefer to pass two lambda expressions or method references to + *
  • Java 8+ users: you may prefer to pass two lambda expressions or method references to * the {@link #from from} factory method. * * diff --git a/guava/src/com/google/common/base/Functions.java b/guava/src/com/google/common/base/Functions.java index c0091ff7f2c2..67f8abb520e4 100644 --- a/guava/src/com/google/common/base/Functions.java +++ b/guava/src/com/google/common/base/Functions.java @@ -55,9 +55,9 @@ private Functions() {} * {@code equals}, {@code hashCode} or {@code toString} behavior of the returned function. A * future migration to {@code java.util.function} will not preserve this behavior. * - *

    For Java 8 users: use the method reference {@code Object::toString} instead. In the + *

    Java 8+ users: use the method reference {@code Object::toString} instead. In the * future, when this class requires Java 8, this method will be deprecated. See {@link Function} - * for more important information about the Java 8 transition. + * for more important information about the Java 8+ transition. */ public static Function toStringFunction() { return ToStringFunction.INSTANCE; @@ -116,7 +116,7 @@ public String toString() { * can use {@link com.google.common.collect.Maps#asConverter Maps.asConverter} instead to get a * function that also supports reverse conversion. * - *

    Java 8 users: if you are okay with {@code null} being returned for an unrecognized + *

    Java 8+ users: if you are okay with {@code null} being returned for an unrecognized * key (instead of an exception being thrown), you can use the method reference {@code map::get} * instead. */ @@ -130,7 +130,7 @@ public String toString() { * this method returns {@code defaultValue} for all inputs that do not belong to the map's key * set. See also {@link #forMap(Map)}, which throws an exception in this case. * - *

    Java 8 users: you can just write the lambda expression {@code k -> + *

    Java 8+ users: you can just write the lambda expression {@code k -> * map.getOrDefault(k, defaultValue)} instead. * * @param map source map that determines the function behavior @@ -230,7 +230,7 @@ public String toString() { * Returns the composition of two functions. For {@code f: A->B} and {@code g: B->C}, composition * is defined as the function h such that {@code h(a) == g(f(a))} for each {@code a}. * - *

    Java 8 users: use {@code g.compose(f)} or (probably clearer) {@code f.andThen(g)} + *

    Java 8+ users: use {@code g.compose(f)} or (probably clearer) {@code f.andThen(g)} * instead. * * @param g the second function to apply @@ -289,7 +289,7 @@ public String toString() { *

    The returned function is consistent with equals (as documented at {@link * Function#apply}) if and only if {@code predicate} is itself consistent with equals. * - *

    Java 8 users: use the method reference {@code predicate::test} instead. + *

    Java 8+ users: use the method reference {@code predicate::test} instead. */ public static Function forPredicate( Predicate predicate) { @@ -335,7 +335,7 @@ public String toString() { /** * Returns a function that ignores its input and always returns {@code value}. * - *

    Java 8 users: use the lambda expression {@code o -> value} instead. + *

    Java 8+ users: use the lambda expression {@code o -> value} instead. * * @param value the constant value for the function to return * @return a function that always returns {@code value} @@ -384,7 +384,7 @@ public String toString() { /** * Returns a function that ignores its input and returns the result of {@code supplier.get()}. * - *

    Java 8 users: use the lambda expression {@code o -> supplier.get()} instead. + *

    Java 8+ users: use the lambda expression {@code o -> supplier.get()} instead. * * @since 10.0 */ diff --git a/guava/src/com/google/common/base/Objects.java b/guava/src/com/google/common/base/Objects.java index bd6b0d94c5f0..16fdd61edaa4 100644 --- a/guava/src/com/google/common/base/Objects.java +++ b/guava/src/com/google/common/base/Objects.java @@ -47,7 +47,7 @@ private Objects() {} *

    This assumes that any non-null objects passed to this function conform to the {@code * equals()} contract. * - *

    Note for Java 7 and later: This method should be treated as deprecated; use {@link + *

    Java 7+ users: This method should be treated as deprecated; use {@link * java.util.Objects#equals} instead. */ public static boolean equal(@CheckForNull Object a, @CheckForNull Object b) { @@ -72,7 +72,7 @@ public static boolean equal(@CheckForNull Object a, @CheckForNull Object b) { *

    Warning: When a single object is supplied, the returned hash code does not equal the * hash code of that object. * - *

    Note for Java 7 and later: This method should be treated as deprecated; use {@link + *

    Java 7+ users: This method should be treated as deprecated; use {@link * java.util.Objects#hash} instead. */ public static int hashCode(@CheckForNull @Nullable Object... objects) { diff --git a/guava/src/com/google/common/base/Optional.java b/guava/src/com/google/common/base/Optional.java index b30cb51e9b6b..0609906b0319 100644 --- a/guava/src/com/google/common/base/Optional.java +++ b/guava/src/com/google/common/base/Optional.java @@ -175,7 +175,7 @@ public java.util.Optional toJavaUtil() { * {@link #or(Object)} or {@link #orNull} instead. * *

    Comparison to {@code java.util.Optional}: when the value is absent, this method - * throws {@link IllegalStateException}, whereas the Java 8 counterpart throws {@link + * throws {@link IllegalStateException}, whereas the {@code java.util} counterpart throws {@link * java.util.NoSuchElementException NoSuchElementException}. * * @throws IllegalStateException if the instance is absent ({@link #isPresent} returns {@code @@ -236,7 +236,7 @@ public java.util.Optional toJavaUtil() { * *

    Comparison to {@code java.util.Optional}: this method is similar to Java 8's {@code * Optional.orElseGet}, except when {@code supplier} returns {@code null}. In this case this - * method throws an exception, whereas the Java 8 method returns the {@code null} to the caller. + * method throws an exception, whereas the Java 8+ method returns the {@code null} to the caller. * * @throws NullPointerException if this optional's value is absent and the supplier returns {@code * null} @@ -284,7 +284,7 @@ public java.util.Optional toJavaUtil() { * *

    Comparison to {@code java.util.Optional}: this method is similar to Java 8's {@code * Optional.map}, except when {@code function} returns {@code null}. In this case this method - * throws an exception, whereas the Java 8 method returns {@code Optional.absent()}. + * throws an exception, whereas the Java 8+ method returns {@code Optional.absent()}. * * @throws NullPointerException if the function returns {@code null} * @since 12.0 @@ -305,7 +305,7 @@ public java.util.Optional toJavaUtil() { * Returns a hash code for this instance. * *

    Comparison to {@code java.util.Optional}: this class leaves the specific choice of - * hash code unspecified, unlike the Java 8 equivalent. + * hash code unspecified, unlike the Java 8+ equivalent. */ @Override public abstract int hashCode(); @@ -314,7 +314,7 @@ public java.util.Optional toJavaUtil() { * Returns a string representation for this instance. * *

    Comparison to {@code java.util.Optional}: this class leaves the specific string - * representation unspecified, unlike the Java 8 equivalent. + * representation unspecified, unlike the Java 8+ equivalent. */ @Override public abstract String toString(); diff --git a/guava/src/com/google/common/base/Predicate.java b/guava/src/com/google/common/base/Predicate.java index 7ec798314943..5877dfe4db4b 100644 --- a/guava/src/com/google/common/base/Predicate.java +++ b/guava/src/com/google/common/base/Predicate.java @@ -45,7 +45,7 @@ @ElementTypesAreNonnullByDefault public interface Predicate extends java.util.function.Predicate { /** - * Returns the result of applying this predicate to {@code input} (Java 8 users, see notes in the + * Returns the result of applying this predicate to {@code input} (Java 8+ users, see notes in the * class documentation above). This method is generally expected, but not absolutely * required, to have the following properties: * diff --git a/guava/src/com/google/common/base/Splitter.java b/guava/src/com/google/common/base/Splitter.java index 47c4f2bf34b4..c775b3553bc4 100644 --- a/guava/src/com/google/common/base/Splitter.java +++ b/guava/src/com/google/common/base/Splitter.java @@ -376,7 +376,7 @@ public Splitter trimResults(CharMatcher trimmer) { /** * Splits {@code sequence} into string components and makes them available through an {@link * Iterator}, which may be lazily evaluated. If you want an eagerly computed {@link List}, use - * {@link #splitToList(CharSequence)}. Java 8 users may prefer {@link #splitToStream} instead. + * {@link #splitToList(CharSequence)}. Java 8+ users may prefer {@link #splitToStream} instead. * * @param sequence the sequence of characters to split * @return an iteration over the segments split from the parameter diff --git a/guava/src/com/google/common/base/Suppliers.java b/guava/src/com/google/common/base/Suppliers.java index 4460d441cf29..5d628bcb3e1a 100644 --- a/guava/src/com/google/common/base/Suppliers.java +++ b/guava/src/com/google/common/base/Suppliers.java @@ -254,7 +254,7 @@ public String toString() { * @throws IllegalArgumentException if {@code duration} is not positive * @since NEXT */ - @Beta // only until we're confident that Java 8 APIs are safe for our Android users + @Beta // only until we're confident that Java 8+ APIs are safe for our Android users @J2ktIncompatible @GwtIncompatible // java.time.Duration @SuppressWarnings("Java7ApiChecker") // no more dangerous that wherever the user got the Duration @@ -400,7 +400,7 @@ public String toString() { * Returns a function that accepts a supplier and returns the result of invoking {@link * Supplier#get} on that supplier. * - *

    Java 8 users: use the method reference {@code Supplier::get} instead. + *

    Java 8+ users: use the method reference {@code Supplier::get} instead. * * @since 8.0 */ diff --git a/guava/src/com/google/common/cache/CacheBuilder.java b/guava/src/com/google/common/cache/CacheBuilder.java index 6a964a29017d..ca0754c83f92 100644 --- a/guava/src/com/google/common/cache/CacheBuilder.java +++ b/guava/src/com/google/common/cache/CacheBuilder.java @@ -49,10 +49,10 @@ * *

    The successor to Guava's caching API is Caffeine. Its API is designed to make it a - * nearly drop-in replacement -- though it requires Java 8 APIs, is not available for Android or - * GWT/j2cl, and may have different - * (usually better) behavior when multiple threads attempt concurrent mutations. Its equivalent - * to {@code CacheBuilder} is its different (usually + * better) behavior when multiple threads attempt concurrent mutations. Its equivalent to {@code + * CacheBuilder} is its {@code * Caffeine} class. Caffeine offers better performance, more features (including asynchronous * loading), and fewer Java 8 users: several common uses for this class are now more comprehensively addressed - * by the new {@link java.util.stream.Stream} library. Read the method documentation below for - * comparisons. These methods are not being deprecated, but we gently encourage you to migrate to - * streams. + *

    Java 8+ users: several common uses for this class are now more comprehensively + * addressed by the new {@link java.util.stream.Stream} library. Read the method documentation below + * for comparisons. These methods are not being deprecated, but we gently encourage you to migrate + * to streams. * * @author Chris Povirk * @author Mike Bostock diff --git a/guava/src/com/google/common/collect/Comparators.java b/guava/src/com/google/common/collect/Comparators.java index 5779be31bfaf..9b9867ad4727 100644 --- a/guava/src/com/google/common/collect/Comparators.java +++ b/guava/src/com/google/common/collect/Comparators.java @@ -29,7 +29,7 @@ /** * Provides static methods for working with {@link Comparator} instances. For many other helpful - * comparator utilities, see either {@code Comparator} itself (for Java 8 or later), or {@code + * comparator utilities, see either {@code Comparator} itself (for Java 8+), or {@code * com.google.common.collect.Ordering} (otherwise). * *

    Relationship to {@code Ordering}

    diff --git a/guava/src/com/google/common/collect/ImmutableList.java b/guava/src/com/google/common/collect/ImmutableList.java index 7c7801dbcf88..6f00f83625be 100644 --- a/guava/src/com/google/common/collect/ImmutableList.java +++ b/guava/src/com/google/common/collect/ImmutableList.java @@ -310,7 +310,7 @@ public static ImmutableList copyOf(E[] elements) { * ImmutableSortedSet.copyOf(elements)}; if you want a {@code List} you can use its {@code * asList()} view. * - *

    Java 8 users: If you want to convert a {@link java.util.stream.Stream} to a sorted + *

    Java 8+ users: If you want to convert a {@link java.util.stream.Stream} to a sorted * {@code ImmutableList}, use {@code stream.sorted().collect(toImmutableList())}. * * @throws NullPointerException if any element in the input is null @@ -333,7 +333,7 @@ public static > ImmutableList sortedCopyOf( * ImmutableSortedSet.copyOf(comparator, elements)}; if you want a {@code List} you can use its * {@code asList()} view. * - *

    Java 8 users: If you want to convert a {@link java.util.stream.Stream} to a sorted + *

    Java 8+ users: If you want to convert a {@link java.util.stream.Stream} to a sorted * {@code ImmutableList}, use {@code stream.sorted(comparator).collect(toImmutableList())}. * * @throws NullPointerException if any element in the input is null diff --git a/guava/src/com/google/common/collect/ImmutableMap.java b/guava/src/com/google/common/collect/ImmutableMap.java index 7a185b5d3b67..205a47716151 100644 --- a/guava/src/com/google/common/collect/ImmutableMap.java +++ b/guava/src/com/google/common/collect/ImmutableMap.java @@ -992,7 +992,8 @@ public boolean containsValue(@CheckForNull Object value) { /** * @since 21.0 (but only since 23.5 in the Android flavor). - * Note, however, that Java 8 users can call this method with any version and flavor of Guava. + * Note, however, that Java 8+ users can call this method with any version and flavor of + * Guava. */ @Override @CheckForNull diff --git a/guava/src/com/google/common/collect/Iterables.java b/guava/src/com/google/common/collect/Iterables.java index eef28a4fdf11..d977bb02d0ce 100644 --- a/guava/src/com/google/common/collect/Iterables.java +++ b/guava/src/com/google/common/collect/Iterables.java @@ -47,9 +47,9 @@ * {@code Iterable}. Except as noted, each method has a corresponding {@link Iterator}-based method * in the {@link Iterators} class. * - *

    Java 8 users: several common uses for this class are now more comprehensively addressed - * by the new {@link java.util.stream.Stream} library. Read the method documentation below for - * comparisons. This class is not being deprecated, but we gently encourage you to migrate to + *

    Java 8+ users: several common uses for this class are now more comprehensively + * addressed by the new {@link java.util.stream.Stream} library. Read the method documentation below + * for comparisons. This class is not being deprecated, but we gently encourage you to migrate to * streams. * *

    Performance notes: Unless otherwise noted, all of the iterables produced in this class @@ -187,7 +187,7 @@ public static boolean retainAll(Iterable removeFrom, Collection elementsTo * The behavior of this method is not specified if {@code predicate} is dependent on {@code * removeFrom}. * - *

    Java 8 users: if {@code removeFrom} is a {@link Collection}, use {@code + *

    Java 8+ users: if {@code removeFrom} is a {@link Collection}, use {@code * removeFrom.removeIf(predicate)} instead. * * @param removeFrom the iterable to (potentially) remove elements from @@ -252,7 +252,7 @@ public static String toString(Iterable iterable) { /** * Returns the single element contained in {@code iterable}. * - *

    Java 8 users: the {@code Stream} equivalent to this method is {@code + *

    Java 8+ users: the {@code Stream} equivalent to this method is {@code * stream.collect(MoreCollectors.onlyElement())}. * * @throws NoSuchElementException if the iterable is empty @@ -267,7 +267,7 @@ public static String toString(Iterable iterable) { * Returns the single element contained in {@code iterable}, or {@code defaultValue} if the * iterable is empty. * - *

    Java 8 users: the {@code Stream} equivalent to this method is {@code + *

    Java 8+ users: the {@code Stream} equivalent to this method is {@code * stream.collect(MoreCollectors.toOptional()).orElse(defaultValue)}. * * @throws IllegalArgumentException if the iterator contains multiple elements @@ -337,7 +337,7 @@ public static String toString(Iterable iterable) { * Returns the number of elements in the specified iterable that equal the specified object. This * implementation avoids a full iteration when the iterable is a {@link Multiset} or {@link Set}. * - *

    Java 8 users: In most cases, the {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: In most cases, the {@code Stream} equivalent of this method is {@code * stream.filter(element::equals).count()}. If {@code element} might be null, use {@code * stream.filter(Predicate.isEqual(element)).count()} instead. * @@ -368,7 +368,7 @@ public static int frequency(Iterable iterable, @CheckForNull Object element) *

    To cycle over the iterable {@code n} times, use the following: {@code * Iterables.concat(Collections.nCopies(n, iterable))} * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code * Stream.generate(() -> iterable).flatMap(Streams::stream)}. */ public static Iterable cycle(final Iterable iterable) { @@ -407,8 +407,8 @@ public String toString() { *

    To cycle over the elements {@code n} times, use the following: {@code * Iterables.concat(Collections.nCopies(n, Arrays.asList(elements)))} * - *

    Java 8 users: If passing a single element {@code e}, the {@code Stream} equivalent of - * this method is {@code Stream.generate(() -> e)}. Otherwise, put the elements in a collection + *

    Java 8+ users: If passing a single element {@code e}, the {@code Stream} equivalent + * of this method is {@code Stream.generate(() -> e)}. Otherwise, put the elements in a collection * and use {@code Stream.generate(() -> collection).flatMap(Collection::stream)}. */ @SafeVarargs @@ -424,8 +424,8 @@ public String toString() { *

    The returned iterable's iterator supports {@code remove()} when the corresponding input * iterator supports it. * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code Stream.concat(a, - * b)}. + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code + * Stream.concat(a, b)}. */ public static Iterable concat( Iterable a, Iterable b) { @@ -440,7 +440,7 @@ public String toString() { *

    The returned iterable's iterator supports {@code remove()} when the corresponding input * iterator supports it. * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code * Streams.concat(a, b, c)}. */ public static Iterable concat( @@ -457,7 +457,7 @@ public String toString() { *

    The returned iterable's iterator supports {@code remove()} when the corresponding input * iterator supports it. * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code * Streams.concat(a, b, c, d)}. */ public static Iterable concat( @@ -476,7 +476,7 @@ public String toString() { *

    The returned iterable's iterator supports {@code remove()} when the corresponding input * iterator supports it. * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code * Streams.concat(...)}. * * @throws NullPointerException if any of the provided iterables is null @@ -495,7 +495,7 @@ public String toString() { * iterator supports it. The methods of the returned iterable may throw {@code * NullPointerException} if any of the input iterators is null. * - *

    Java 8 users: The {@code Stream} equivalent of this method is {@code + *

    Java 8+ users: The {@code Stream} equivalent of this method is {@code * streamOfStreams.flatMap(s -> s)}. */ public static Iterable concat( diff --git a/guava/src/com/google/common/collect/Lists.java b/guava/src/com/google/common/collect/Lists.java index ae057e0d3d57..52e90c1c177e 100644 --- a/guava/src/com/google/common/collect/Lists.java +++ b/guava/src/com/google/common/collect/Lists.java @@ -525,7 +525,7 @@ public static List> cartesianProduct(List... lists) { * serialize the copy. Other methods similar to this do not implement serialization at all for * this reason. * - *

    Java 8 users: many use cases for this method are better addressed by {@link + *

    Java 8+ users: many use cases for this method are better addressed by {@link * java.util.stream.Stream#map}. This method is not being deprecated, but we gently encourage you * to migrate to streams. */ diff --git a/guava/src/com/google/common/collect/Maps.java b/guava/src/com/google/common/collect/Maps.java index 9bc33913ed87..9269a4fb65ef 100644 --- a/guava/src/com/google/common/collect/Maps.java +++ b/guava/src/com/google/common/collect/Maps.java @@ -1301,7 +1301,7 @@ public static ImmutableMap toMap( *

    If your index may associate multiple values with each key, use {@link * Multimaps#index(Iterable, Function) Multimaps.index}. * - *

    Note: on Java 8 and later, it is usually better to use streams. For example: + *

    Note: on Java 8+, it is usually better to use streams. For example: * *

    {@code
        * import static com.google.common.collect.ImmutableMap.toImmutableMap;
    diff --git a/guava/src/com/google/common/collect/Ordering.java b/guava/src/com/google/common/collect/Ordering.java
    index b1d76a06435d..d29a3b0d8f79 100644
    --- a/guava/src/com/google/common/collect/Ordering.java
    +++ b/guava/src/com/google/common/collect/Ordering.java
    @@ -123,12 +123,12 @@
      * {@code function} can themselves be serialized, then {@code ordering.onResultOf(function)} can as
      * well.
      *
    - * 

    For Java 8 users

    + *

    Java 8+ users

    * - *

    If you are using Java 8, this class is now obsolete. Most of its functionality is now provided - * by {@link java.util.stream.Stream Stream} and by {@link Comparator} itself, and the rest can now - * be found as static methods in our new {@link Comparators} class. See each method below for - * further instructions. Whenever possible, you should change any references of type {@code + *

    If you are using Java 8+, this class is now obsolete. Most of its functionality is now + * provided by {@link java.util.stream.Stream Stream} and by {@link Comparator} itself, and the rest + * can now be found as static methods in our new {@link Comparators} class. See each method below + * for further instructions. Whenever possible, you should change any references of type {@code * Ordering} to be of type {@code Comparator} instead. However, at this time we have no plan to * deprecate this class. * @@ -157,7 +157,7 @@ public abstract class Ordering implements Comparator *

    The type specification is {@code }, instead of the technically correct * {@code >}, to support legacy types from before Java 5. * - *

    Java 8 users: use {@link Comparator#naturalOrder} instead. + *

    Java 8+ users: use {@link Comparator#naturalOrder} instead. */ @GwtCompatible(serializable = true) @SuppressWarnings("unchecked") // TODO(kevinb): right way to explain this?? @@ -175,7 +175,7 @@ public static Ordering natural() { * *

    The returned object is serializable if {@code comparator} is serializable. * - *

    Java 8 users: this class is now obsolete as explained in the class documentation, so + *

    Java 8+ users: this class is now obsolete as explained in the class documentation, so * there is no need to use this method. * * @param comparator the comparator that defines the order @@ -276,8 +276,8 @@ public static Ordering explicit(T leastValue, T... remainingValuesInOrder * *

    The returned comparator is serializable. * - *

    Java 8 users: Use the lambda expression {@code (a, b) -> 0} instead (in certain cases - * you may need to cast that to {@code Comparator}). + *

    Java 8+ users: Use the lambda expression {@code (a, b) -> 0} instead (in certain + * cases you may need to cast that to {@code Comparator}). * * @since 13.0 */ @@ -293,7 +293,7 @@ public static Ordering explicit(T leastValue, T... remainingValuesInOrder * *

    The comparator is serializable. * - *

    Java 8 users: Use {@code Comparator.comparing(Object::toString)} instead. + *

    Java 8+ users: Use {@code Comparator.comparing(Object::toString)} instead. */ @GwtCompatible(serializable = true) public static Ordering usingToString() { @@ -404,7 +404,7 @@ protected Ordering() {} * Returns the reverse of this ordering; the {@code Ordering} equivalent to {@link * Collections#reverseOrder(Comparator)}. * - *

    Java 8 users: Use {@code thisComparator.reversed()} instead. + *

    Java 8+ users: Use {@code thisComparator.reversed()} instead. */ // type parameter lets us avoid the extra in statements like: // Ordering o = Ordering.natural().reverse(); @@ -419,7 +419,7 @@ public Ordering reverse() { * *

    The returned object is serializable if this object is serializable. * - *

    Java 8 users: Use {@code Comparator.nullsFirst(thisComparator)} instead. + *

    Java 8+ users: Use {@code Comparator.nullsFirst(thisComparator)} instead. */ // type parameter lets us avoid the extra in statements like: // Ordering o = Ordering.natural().nullsFirst(); @@ -434,7 +434,7 @@ public Ordering reverse() { * *

    The returned object is serializable if this object is serializable. * - *

    Java 8 users: Use {@code Comparator.nullsLast(thisComparator)} instead. + *

    Java 8+ users: Use {@code Comparator.nullsLast(thisComparator)} instead. */ // type parameter lets us avoid the extra in statements like: // Ordering o = Ordering.natural().nullsLast(); @@ -453,8 +453,8 @@ public Ordering reverse() { * .onResultOf(Functions.toStringFunction()) * } * - *

    Java 8 users: Use {@code Comparator.comparing(function, thisComparator)} instead (you - * can omit the comparator if it is the natural order). + *

    Java 8+ users: Use {@code Comparator.comparing(function, thisComparator)} instead + * (you can omit the comparator if it is the natural order). */ @GwtCompatible(serializable = true) public Ordering onResultOf(Function function) { @@ -477,7 +477,7 @@ public Ordering reverse() { *

    The returned object is serializable if this object and {@code secondaryComparator} are both * serializable. * - *

    Java 8 users: Use {@code thisComparator.thenComparing(secondaryComparator)} instead. + *

    Java 8+ users: Use {@code thisComparator.thenComparing(secondaryComparator)} instead. * Depending on what {@code secondaryComparator} is, one of the other overloads of {@code * thenComparing} may be even more useful. */ @@ -500,7 +500,7 @@ public Ordering compound(Comparator secondaryCompara *

    Warning: Supplying an argument with undefined iteration order, such as a {@link * HashSet}, will produce non-deterministic results. * - *

    Java 8 users: Use a chain of calls to {@link Comparator#thenComparing(Comparator)}, + *

    Java 8+ users: Use a chain of calls to {@link Comparator#thenComparing(Comparator)}, * or {@code comparatorCollection.stream().reduce(Comparator::thenComparing).get()} (if the * collection might be empty, also provide a default comparator as the {@code identity} parameter * to {@code reduce}). @@ -524,7 +524,7 @@ public Ordering compound(Comparator secondaryCompara * ordering.reverse().lexicographical()} (consider how each would order {@code [1]} and {@code [1, * 1]}). * - *

    Java 8 users: Use {@link Comparators#lexicographical(Comparator)} instead. + *

    Java 8+ users: Use {@link Comparators#lexicographical(Comparator)} instead. * * @since 2.0 */ @@ -553,7 +553,7 @@ public Ordering> lexicographical() { * least values, the first of those is returned. The iterator will be left exhausted: its {@code * hasNext()} method will return {@code false}. * - *

    Java 8 users: Use {@code Streams.stream(iterator).min(thisComparator).get()} instead + *

    Java 8+ users: Use {@code Streams.stream(iterator).min(thisComparator).get()} instead * (but note that it does not guarantee which tied minimum element is returned). * * @param iterator the iterator whose minimum element is to be determined @@ -578,7 +578,7 @@ public E min(Iterator iterator) { * Returns the least of the specified values according to this ordering. If there are multiple * least values, the first of those is returned. * - *

    Java 8 users: If {@code iterable} is a {@link Collection}, use {@code + *

    Java 8+ users: If {@code iterable} is a {@link Collection}, use {@code * Collections.min(collection, thisComparator)} instead. Otherwise, use {@code * Streams.stream(iterable).min(thisComparator).get()} instead. Note that these alternatives do * not guarantee which tied minimum element is returned. @@ -617,7 +617,7 @@ public E min(@ParametricNullness E a, @ParametricNullness E b) { * Returns the least of the specified values according to this ordering. If there are multiple * least values, the first of those is returned. * - *

    Java 8 users: Use {@code Collections.min(Arrays.asList(a, b, c...), thisComparator)} + *

    Java 8+ users: Use {@code Collections.min(Arrays.asList(a, b, c...), thisComparator)} * instead (but note that it does not guarantee which tied minimum element is returned). * * @param a value to compare, returned if less than or equal to the rest. @@ -644,7 +644,7 @@ public E min( * greatest values, the first of those is returned. The iterator will be left exhausted: its * {@code hasNext()} method will return {@code false}. * - *

    Java 8 users: Use {@code Streams.stream(iterator).max(thisComparator).get()} instead + *

    Java 8+ users: Use {@code Streams.stream(iterator).max(thisComparator).get()} instead * (but note that it does not guarantee which tied maximum element is returned). * * @param iterator the iterator whose maximum element is to be determined @@ -669,7 +669,7 @@ public E max(Iterator iterator) { * Returns the greatest of the specified values according to this ordering. If there are multiple * greatest values, the first of those is returned. * - *

    Java 8 users: If {@code iterable} is a {@link Collection}, use {@code + *

    Java 8+ users: If {@code iterable} is a {@link Collection}, use {@code * Collections.max(collection, thisComparator)} instead. Otherwise, use {@code * Streams.stream(iterable).max(thisComparator).get()} instead. Note that these alternatives do * not guarantee which tied maximum element is returned. @@ -708,7 +708,7 @@ public E max(@ParametricNullness E a, @ParametricNullness E b) { * Returns the greatest of the specified values according to this ordering. If there are multiple * greatest values, the first of those is returned. * - *

    Java 8 users: Use {@code Collections.max(Arrays.asList(a, b, c...), thisComparator)} + *

    Java 8+ users: Use {@code Collections.max(Arrays.asList(a, b, c...), thisComparator)} * instead (but note that it does not guarantee which tied maximum element is returned). * * @param a value to compare, returned if greater than or equal to the rest. @@ -738,7 +738,7 @@ public E max( *

    The implementation does not necessarily use a stable sorting algorithm; when multiple * elements are equivalent, it is undefined which will come first. * - *

    Java 8 users: Use {@code Streams.stream(iterable).collect(Comparators.least(k, + *

    Java 8+ users: Use {@code Streams.stream(iterable).collect(Comparators.least(k, * thisComparator))} instead. * * @return an immutable {@code RandomAccess} list of the {@code k} least elements in ascending @@ -775,7 +775,7 @@ public List leastOf(Iterable iterable, int k) { *

    The implementation does not necessarily use a stable sorting algorithm; when multiple * elements are equivalent, it is undefined which will come first. * - *

    Java 8 users: Use {@code Streams.stream(iterator).collect(Comparators.least(k, + *

    Java 8+ users: Use {@code Streams.stream(iterator).collect(Comparators.least(k, * thisComparator))} instead. * * @return an immutable {@code RandomAccess} list of the {@code k} least elements in ascending @@ -813,7 +813,7 @@ public List leastOf(Iterator iterator, int k) { *

    The implementation does not necessarily use a stable sorting algorithm; when multiple * elements are equivalent, it is undefined which will come first. * - *

    Java 8 users: Use {@code Streams.stream(iterable).collect(Comparators.greatest(k, + *

    Java 8+ users: Use {@code Streams.stream(iterable).collect(Comparators.greatest(k, * thisComparator))} instead. * * @return an immutable {@code RandomAccess} list of the {@code k} greatest elements in @@ -835,7 +835,7 @@ public List greatestOf(Iterable iterable, int k) { *

    The implementation does not necessarily use a stable sorting algorithm; when multiple * elements are equivalent, it is undefined which will come first. * - *

    Java 8 users: Use {@code Streams.stream(iterator).collect(Comparators.greatest(k, + *

    Java 8+ users: Use {@code Streams.stream(iterator).collect(Comparators.greatest(k, * thisComparator))} instead. * * @return an immutable {@code RandomAccess} list of the {@code k} greatest elements in @@ -896,7 +896,7 @@ public List sortedCopy(Iterable elements) { * equal to the element that preceded it, according to this ordering. Note that this is always * true when the iterable has fewer than two elements. * - *

    Java 8 users: Use the equivalent {@link Comparators#isInOrder(Iterable, Comparator)} + *

    Java 8+ users: Use the equivalent {@link Comparators#isInOrder(Iterable, Comparator)} * instead, since the rest of {@code Ordering} is mostly obsolete (as explained in the class * documentation). */ @@ -920,7 +920,7 @@ public boolean isOrdered(Iterable iterable) { * greater than the element that preceded it, according to this ordering. Note that this is always * true when the iterable has fewer than two elements. * - *

    Java 8 users: Use the equivalent {@link Comparators#isInStrictOrder(Iterable, + *

    Java 8+ users: Use the equivalent {@link Comparators#isInStrictOrder(Iterable, * Comparator)} instead, since the rest of {@code Ordering} is mostly obsolete (as explained in * the class documentation). */ diff --git a/guava/src/com/google/common/collect/Sets.java b/guava/src/com/google/common/collect/Sets.java index 9257c0946f03..e23cba84026e 100644 --- a/guava/src/com/google/common/collect/Sets.java +++ b/guava/src/com/google/common/collect/Sets.java @@ -1042,7 +1042,7 @@ public boolean contains(@CheckForNull Object element) { * Predicates.instanceOf(ArrayList.class)}, which is inconsistent with equals. (See {@link * Iterables#filter(Iterable, Class)} for related functionality.) * - *

    Java 8 users: many use cases for this method are better addressed by {@link + *

    Java 8+ users: many use cases for this method are better addressed by {@link * java.util.stream.Stream#filter}. This method is not being deprecated, but we gently encourage * you to migrate to streams. */ @@ -1813,7 +1813,7 @@ static boolean equalsImpl(Set s, @CheckForNull Object object) { *

    The returned navigable set will be serializable if the specified navigable set is * serializable. * - *

    Java 8 users and later: Prefer {@link Collections#unmodifiableNavigableSet}. + *

    Java 8+ users and later: Prefer {@link Collections#unmodifiableNavigableSet}. * * @param set the navigable set for which an unmodifiable view is to be returned * @return an unmodifiable view of the specified navigable set @@ -1981,7 +1981,7 @@ public NavigableSet tailSet(@ParametricNullness E fromElement, boolean inclus *

    The returned navigable set will be serializable if the specified navigable set is * serializable. * - *

    Java 8 users and later: Prefer {@link Collections#synchronizedNavigableSet}. + *

    Java 8+ users and later: Prefer {@link Collections#synchronizedNavigableSet}. * * @param navigableSet the navigable set to be "wrapped" in a synchronized navigable set. * @return a synchronized view of the specified navigable set. diff --git a/guava/src/com/google/common/collect/TreeTraverser.java b/guava/src/com/google/common/collect/TreeTraverser.java index b5d2a4293ffa..c0baeec8c5bb 100644 --- a/guava/src/com/google/common/collect/TreeTraverser.java +++ b/guava/src/com/google/common/collect/TreeTraverser.java @@ -49,8 +49,8 @@ * *

    Null nodes are strictly forbidden. * - *

    For Java 8 users: Because this is an abstract class, not an interface, you can't use a - * lambda expression to extend it: + *

    Because this is an abstract class, not an interface, you can't use a lambda expression to + * implement it: * *

    {@code
      * // won't work
    diff --git a/guava/src/com/google/common/io/Files.java b/guava/src/com/google/common/io/Files.java
    index 499ea6a20d94..6397135aae87 100644
    --- a/guava/src/com/google/common/io/Files.java
    +++ b/guava/src/com/google/common/io/Files.java
    @@ -424,10 +424,10 @@ public static boolean equal(File file1, File file2) throws IOException {
        *     context.getCacheDir()}), and create your own directory under that. (For example, you might
        *     use {@code new File(context.getCacheDir(), "directoryname").mkdir()}, or, if you need an
        *     arbitrary number of temporary directories, you might have to generate multiple directory
    -   *     names in a loop until {@code mkdir()} returns {@code true}.) For developers on Java 7 or
    -   *     later, use {@link java.nio.file.Files#createTempDirectory}, transforming it to a {@link
    -   *     File} using {@link java.nio.file.Path#toFile() toFile()} if needed. To restrict permissions
    -   *     as this method does, pass {@code
    +   *     names in a loop until {@code mkdir()} returns {@code true}.) For Java 7+ users, prefer
    +   *     {@link java.nio.file.Files#createTempDirectory}, transforming it to a {@link File} using
    +   *     {@link java.nio.file.Path#toFile() toFile()} if needed. To restrict permissions as this
    +   *     method does, pass {@code
        *     PosixFilePermissions.asFileAttribute(PosixFilePermissions.fromString("rwx------"))} to your
        *     call to {@code createTempDirectory}.
        */
    diff --git a/guava/src/com/google/common/math/Stats.java b/guava/src/com/google/common/math/Stats.java
    index c1143c04f75d..b18694c936d1 100644
    --- a/guava/src/com/google/common/math/Stats.java
    +++ b/guava/src/com/google/common/math/Stats.java
    @@ -55,7 +55,7 @@
      * 

    Static convenience methods called {@code meanOf} are also provided for users who wish to * calculate only the mean. * - *

    Java 8 users: If you are not using any of the variance statistics, you may wish to use + *

    Java 8+ users: If you are not using any of the variance statistics, you may wish to use * built-in JDK libraries instead of this class. * * @author Pete Gillin diff --git a/guava/src/com/google/common/primitives/Booleans.java b/guava/src/com/google/common/primitives/Booleans.java index f96d1062d4e9..61f66caca83f 100644 --- a/guava/src/com/google/common/primitives/Booleans.java +++ b/guava/src/com/google/common/primitives/Booleans.java @@ -99,7 +99,7 @@ public static Comparator falseFirst() { * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Boolean) * value).hashCode()}. * - *

    Java 8 users: use {@link Boolean#hashCode(boolean)} instead. + *

    Java 8+ users: use {@link Boolean#hashCode(boolean)} instead. * * @param value a primitive {@code boolean} value * @return a hash code for the value @@ -113,8 +113,8 @@ public static int hashCode(boolean value) { * considered less than {@code true}). The sign of the value returned is the same as that of * {@code ((Boolean) a).compareTo(b)}. * - *

    Note for Java 7 and later: this method should be treated as deprecated; use the - * equivalent {@link Boolean#compare} method instead. + *

    Java 7+ users: this method should be treated as deprecated; use the equivalent {@link + * Boolean#compare} method instead. * * @param a the first {@code boolean} to compare * @param b the second {@code boolean} to compare diff --git a/guava/src/com/google/common/primitives/Bytes.java b/guava/src/com/google/common/primitives/Bytes.java index b32ef8ec9488..9bc30ebc2584 100644 --- a/guava/src/com/google/common/primitives/Bytes.java +++ b/guava/src/com/google/common/primitives/Bytes.java @@ -52,7 +52,7 @@ private Bytes() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Byte) * value).hashCode()}. * - *

    Java 8 users: use {@link Byte#hashCode(byte)} instead. + *

    Java 8+ users: use {@link Byte#hashCode(byte)} instead. * * @param value a primitive {@code byte} value * @return a hash code for the value diff --git a/guava/src/com/google/common/primitives/Chars.java b/guava/src/com/google/common/primitives/Chars.java index 728c6e5e9349..7b5f94d80f86 100644 --- a/guava/src/com/google/common/primitives/Chars.java +++ b/guava/src/com/google/common/primitives/Chars.java @@ -52,7 +52,7 @@ private Chars() {} /** * The number of bytes required to represent a primitive {@code char} value. * - *

    Java 8 users: use {@link Character#BYTES} instead. + *

    Java 8+ users: use {@link Character#BYTES} instead. */ public static final int BYTES = Character.SIZE / Byte.SIZE; @@ -60,7 +60,7 @@ private Chars() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Character) * value).hashCode()}. * - *

    Java 8 users: use {@link Character#hashCode(char)} instead. + *

    Java 8+ users: use {@link Character#hashCode(char)} instead. * * @param value a primitive {@code char} value * @return a hash code for the value @@ -105,8 +105,8 @@ public static char saturatedCast(long value) { * Compares the two specified {@code char} values. The sign of the value returned is the same as * that of {@code ((Character) a).compareTo(b)}. * - *

    Note for Java 7 and later: this method should be treated as deprecated; use the - * equivalent {@link Character#compare} method instead. + *

    Java 7+ users: this method should be treated as deprecated; use the equivalent {@link + * Character#compare} method instead. * * @param a the first {@code char} to compare * @param b the second {@code char} to compare diff --git a/guava/src/com/google/common/primitives/Doubles.java b/guava/src/com/google/common/primitives/Doubles.java index 7fcbae957445..42804eb3d09c 100644 --- a/guava/src/com/google/common/primitives/Doubles.java +++ b/guava/src/com/google/common/primitives/Doubles.java @@ -56,7 +56,7 @@ private Doubles() {} /** * The number of bytes required to represent a primitive {@code double} value. * - *

    Java 8 users: use {@link Double#BYTES} instead. + *

    Java 8+ users: use {@link Double#BYTES} instead. * * @since 10.0 */ @@ -66,7 +66,7 @@ private Doubles() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Double) * value).hashCode()}. * - *

    Java 8 users: use {@link Double#hashCode(double)} instead. + *

    Java 8+ users: use {@link Double#hashCode(double)} instead. * * @param value a primitive {@code double} value * @return a hash code for the value @@ -100,7 +100,7 @@ public static int compare(double a, double b) { * Returns {@code true} if {@code value} represents a real number. This is equivalent to, but not * necessarily implemented as, {@code !(Double.isInfinite(value) || Double.isNaN(value))}. * - *

    Java 8 users: use {@link Double#isFinite(double)} instead. + *

    Java 8+ users: use {@link Double#isFinite(double)} instead. * * @since 10.0 */ diff --git a/guava/src/com/google/common/primitives/Floats.java b/guava/src/com/google/common/primitives/Floats.java index c42f2f1eead0..7bb9b848c1db 100644 --- a/guava/src/com/google/common/primitives/Floats.java +++ b/guava/src/com/google/common/primitives/Floats.java @@ -54,7 +54,7 @@ private Floats() {} /** * The number of bytes required to represent a primitive {@code float} value. * - *

    Java 8 users: use {@link Float#BYTES} instead. + *

    Java 8+ users: use {@link Float#BYTES} instead. * * @since 10.0 */ @@ -64,7 +64,7 @@ private Floats() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Float) * value).hashCode()}. * - *

    Java 8 users: use {@link Float#hashCode(float)} instead. + *

    Java 8+ users: use {@link Float#hashCode(float)} instead. * * @param value a primitive {@code float} value * @return a hash code for the value @@ -95,7 +95,7 @@ public static int compare(float a, float b) { * Returns {@code true} if {@code value} represents a real number. This is equivalent to, but not * necessarily implemented as, {@code !(Float.isInfinite(value) || Float.isNaN(value))}. * - *

    Java 8 users: use {@link Float#isFinite(float)} instead. + *

    Java 8+ users: use {@link Float#isFinite(float)} instead. * * @since 10.0 */ diff --git a/guava/src/com/google/common/primitives/Ints.java b/guava/src/com/google/common/primitives/Ints.java index afd4a7b4a07b..8c77f3e068c2 100644 --- a/guava/src/com/google/common/primitives/Ints.java +++ b/guava/src/com/google/common/primitives/Ints.java @@ -52,7 +52,7 @@ private Ints() {} /** * The number of bytes required to represent a primitive {@code int} value. * - *

    Java 8 users: use {@link Integer#BYTES} instead. + *

    Java 8+ users: use {@link Integer#BYTES} instead. */ public static final int BYTES = Integer.SIZE / Byte.SIZE; @@ -67,7 +67,7 @@ private Ints() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Integer) * value).hashCode()}. * - *

    Java 8 users: use {@link Integer#hashCode(int)} instead. + *

    Java 8+ users: use {@link Integer#hashCode(int)} instead. * * @param value a primitive {@code int} value * @return a hash code for the value @@ -112,8 +112,8 @@ public static int saturatedCast(long value) { * Compares the two specified {@code int} values. The sign of the value returned is the same as * that of {@code ((Integer) a).compareTo(b)}. * - *

    Note for Java 7 and later: this method should be treated as deprecated; use the - * equivalent {@link Integer#compare} method instead. + *

    Java 7+ users: this method should be treated as deprecated; use the equivalent {@link + * Integer#compare} method instead. * * @param a the first {@code int} to compare * @param b the second {@code int} to compare diff --git a/guava/src/com/google/common/primitives/Longs.java b/guava/src/com/google/common/primitives/Longs.java index 7c5a5d3bbb8f..54b460334647 100644 --- a/guava/src/com/google/common/primitives/Longs.java +++ b/guava/src/com/google/common/primitives/Longs.java @@ -51,7 +51,7 @@ private Longs() {} /** * The number of bytes required to represent a primitive {@code long} value. * - *

    Java 8 users: use {@link Long#BYTES} instead. + *

    Java 8+ users: use {@link Long#BYTES} instead. */ public static final int BYTES = Long.SIZE / Byte.SIZE; @@ -70,7 +70,7 @@ private Longs() {} * might be different from {@code ((Long) value).hashCode()} in GWT because {@link * Long#hashCode()} in GWT does not obey the JRE contract. * - *

    Java 8 users: use {@link Long#hashCode(long)} instead. + *

    Java 8+ users: use {@link Long#hashCode(long)} instead. * * @param value a primitive {@code long} value * @return a hash code for the value @@ -83,8 +83,8 @@ public static int hashCode(long value) { * Compares the two specified {@code long} values. The sign of the value returned is the same as * that of {@code ((Long) a).compareTo(b)}. * - *

    Note for Java 7 and later: this method should be treated as deprecated; use the - * equivalent {@link Long#compare} method instead. + *

    Java 7+ users: this method should be treated as deprecated; use the equivalent {@link + * Long#compare} method instead. * * @param a the first {@code long} to compare * @param b the second {@code long} to compare diff --git a/guava/src/com/google/common/primitives/Shorts.java b/guava/src/com/google/common/primitives/Shorts.java index e7cc8538b491..6e97371141d4 100644 --- a/guava/src/com/google/common/primitives/Shorts.java +++ b/guava/src/com/google/common/primitives/Shorts.java @@ -50,7 +50,7 @@ private Shorts() {} /** * The number of bytes required to represent a primitive {@code short} value. * - *

    Java 8 users: use {@link Short#BYTES} instead. + *

    Java 8+ users: use {@link Short#BYTES} instead. */ public static final int BYTES = Short.SIZE / Byte.SIZE; @@ -65,7 +65,7 @@ private Shorts() {} * Returns a hash code for {@code value}; equal to the result of invoking {@code ((Short) * value).hashCode()}. * - *

    Java 8 users: use {@link Short#hashCode(short)} instead. + *

    Java 8+ users: use {@link Short#hashCode(short)} instead. * * @param value a primitive {@code short} value * @return a hash code for the value @@ -109,8 +109,8 @@ public static short saturatedCast(long value) { * Compares the two specified {@code short} values. The sign of the value returned is the same as * that of {@code ((Short) a).compareTo(b)}. * - *

    Note for Java 7 and later: this method should be treated as deprecated; use the - * equivalent {@link Short#compare} method instead. + *

    Java 7+ users: this method should be treated as deprecated; use the equivalent {@link + * Short#compare} method instead. * * @param a the first {@code short} to compare * @param b the second {@code short} to compare diff --git a/guava/src/com/google/common/primitives/UnsignedBytes.java b/guava/src/com/google/common/primitives/UnsignedBytes.java index 0490c6714d47..c8561256b8bf 100644 --- a/guava/src/com/google/common/primitives/UnsignedBytes.java +++ b/guava/src/com/google/common/primitives/UnsignedBytes.java @@ -69,7 +69,7 @@ private UnsignedBytes() {} * Returns the value of the given byte as an integer, when treated as unsigned. That is, returns * {@code value + 256} if {@code value} is negative; {@code value} itself otherwise. * - *

    Java 8 users: use {@link Byte#toUnsignedInt(byte)} instead. + *

    Java 8+ users: use {@link Byte#toUnsignedInt(byte)} instead. * * @since 6.0 */ diff --git a/guava/src/com/google/common/primitives/UnsignedInts.java b/guava/src/com/google/common/primitives/UnsignedInts.java index 0d556bab4706..81771dc4c8c2 100644 --- a/guava/src/com/google/common/primitives/UnsignedInts.java +++ b/guava/src/com/google/common/primitives/UnsignedInts.java @@ -59,7 +59,7 @@ static int flip(int value) { * Compares the two specified {@code int} values, treating them as unsigned values between {@code * 0} and {@code 2^32 - 1} inclusive. * - *

    Java 8 users: use {@link Integer#compareUnsigned(int, int)} instead. + *

    Java 8+ users: use {@link Integer#compareUnsigned(int, int)} instead. * * @param a the first unsigned {@code int} to compare * @param b the second unsigned {@code int} to compare @@ -73,7 +73,7 @@ public static int compare(int a, int b) { /** * Returns the value of the given {@code int} as a {@code long}, when treated as unsigned. * - *

    Java 8 users: use {@link Integer#toUnsignedLong(int)} instead. + *

    Java 8+ users: use {@link Integer#toUnsignedLong(int)} instead. */ public static long toLong(int value) { return value & INT_MASK; @@ -271,7 +271,7 @@ public static void sortDescending(int[] array, int fromIndex, int toIndex) { * Returns dividend / divisor, where the dividend and divisor are treated as unsigned 32-bit * quantities. * - *

    Java 8 users: use {@link Integer#divideUnsigned(int, int)} instead. + *

    Java 8+ users: use {@link Integer#divideUnsigned(int, int)} instead. * * @param dividend the dividend (numerator) * @param divisor the divisor (denominator) @@ -285,7 +285,7 @@ public static int divide(int dividend, int divisor) { * Returns dividend % divisor, where the dividend and divisor are treated as unsigned 32-bit * quantities. * - *

    Java 8 users: use {@link Integer#remainderUnsigned(int, int)} instead. + *

    Java 8+ users: use {@link Integer#remainderUnsigned(int, int)} instead. * * @param dividend the dividend (numerator) * @param divisor the divisor (denominator) @@ -327,7 +327,7 @@ public static int decode(String stringValue) { /** * Returns the unsigned {@code int} value represented by the given decimal string. * - *

    Java 8 users: use {@link Integer#parseUnsignedInt(String)} instead. + *

    Java 8+ users: use {@link Integer#parseUnsignedInt(String)} instead. * * @throws NumberFormatException if the string does not contain a valid unsigned {@code int} value * @throws NullPointerException if {@code s} is null (in contrast to {@link @@ -341,7 +341,7 @@ public static int parseUnsignedInt(String s) { /** * Returns the unsigned {@code int} value represented by a string with the given radix. * - *

    Java 8 users: use {@link Integer#parseUnsignedInt(String, int)} instead. + *

    Java 8+ users: use {@link Integer#parseUnsignedInt(String, int)} instead. * * @param string the string containing the unsigned integer representation to be parsed. * @param radix the radix to use while parsing {@code s}; must be between {@link @@ -365,7 +365,7 @@ public static int parseUnsignedInt(String string, int radix) { /** * Returns a string representation of x, where x is treated as unsigned. * - *

    Java 8 users: use {@link Integer#toUnsignedString(int)} instead. + *

    Java 8+ users: use {@link Integer#toUnsignedString(int)} instead. */ public static String toString(int x) { return toString(x, 10); @@ -375,7 +375,7 @@ public static String toString(int x) { * Returns a string representation of {@code x} for the given radix, where {@code x} is treated as * unsigned. * - *

    Java 8 users: use {@link Integer#toUnsignedString(int, int)} instead. + *

    Java 8+ users: use {@link Integer#toUnsignedString(int, int)} instead. * * @param x the value to convert to a string. * @param radix the radix to use while working with {@code x} diff --git a/guava/src/com/google/common/primitives/UnsignedLongs.java b/guava/src/com/google/common/primitives/UnsignedLongs.java index 04631ee9d3c7..bb806c0773ed 100644 --- a/guava/src/com/google/common/primitives/UnsignedLongs.java +++ b/guava/src/com/google/common/primitives/UnsignedLongs.java @@ -67,7 +67,7 @@ private static long flip(long a) { * Compares the two specified {@code long} values, treating them as unsigned values between {@code * 0} and {@code 2^64 - 1} inclusive. * - *

    Java 8 users: use {@link Long#compareUnsigned(long, long)} instead. + *

    Java 8+ users: use {@link Long#compareUnsigned(long, long)} instead. * * @param a the first unsigned {@code long} to compare * @param b the second unsigned {@code long} to compare @@ -237,7 +237,7 @@ public static void sortDescending(long[] array, int fromIndex, int toIndex) { * Returns dividend / divisor, where the dividend and divisor are treated as unsigned 64-bit * quantities. * - *

    Java 8 users: use {@link Long#divideUnsigned(long, long)} instead. + *

    Java 8+ users: use {@link Long#divideUnsigned(long, long)} instead. * * @param dividend the dividend (numerator) * @param divisor the divisor (denominator) @@ -272,7 +272,7 @@ public static long divide(long dividend, long divisor) { * Returns dividend % divisor, where the dividend and divisor are treated as unsigned 64-bit * quantities. * - *

    Java 8 users: use {@link Long#remainderUnsigned(long, long)} instead. + *

    Java 8+ users: use {@link Long#remainderUnsigned(long, long)} instead. * * @param dividend the dividend (numerator) * @param divisor the divisor (denominator) @@ -307,7 +307,7 @@ public static long remainder(long dividend, long divisor) { /** * Returns the unsigned {@code long} value represented by the given decimal string. * - *

    Java 8 users: use {@link Long#parseUnsignedLong(String)} instead. + *

    Java 8+ users: use {@link Long#parseUnsignedLong(String)} instead. * * @throws NumberFormatException if the string does not contain a valid unsigned {@code long} * value @@ -322,7 +322,7 @@ public static long parseUnsignedLong(String string) { /** * Returns the unsigned {@code long} value represented by a string with the given radix. * - *

    Java 8 users: use {@link Long#parseUnsignedLong(String, int)} instead. + *

    Java 8+ users: use {@link Long#parseUnsignedLong(String, int)} instead. * * @param string the string containing the unsigned {@code long} representation to be parsed. * @param radix the radix to use while parsing {@code string} @@ -435,7 +435,7 @@ static boolean overflowInParse(long current, int digit, int radix) { /** * Returns a string representation of x, where x is treated as unsigned. * - *

    Java 8 users: use {@link Long#toUnsignedString(long)} instead. + *

    Java 8+ users: use {@link Long#toUnsignedString(long)} instead. */ public static String toString(long x) { return toString(x, 10); @@ -445,7 +445,7 @@ public static String toString(long x) { * Returns a string representation of {@code x} for the given radix, where {@code x} is treated as * unsigned. * - *

    Java 8 users: use {@link Long#toUnsignedString(long, int)} instead. + *

    Java 8+ users: use {@link Long#toUnsignedString(long, int)} instead. * * @param x the value to convert to a string. * @param radix the radix to use while working with {@code x} From ff9477ac6f3eb1dbe37f382c174573100e04e38a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 15 Feb 2024 11:47:51 -0800 Subject: [PATCH 148/216] Bump github/codeql-action from 3.24.1 to 3.24.3 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.1 to 3.24.3. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/e675ced7a7522a761fc9c8eb26682c8b27c42b2b...379614612a29c9e28f31f39a59013eb8012a51f0) Fixes #7001 RELNOTES=n/a PiperOrigin-RevId: 607406046 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index ced0ee676072..07a564a9a764 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@e675ced7a7522a761fc9c8eb26682c8b27c42b2b # v3.24.1 + uses: github/codeql-action/upload-sarif@379614612a29c9e28f31f39a59013eb8012a51f0 # v3.24.3 with: sarif_file: results.sarif From f50be65252991729045be33c7f18962443896398 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 19 Feb 2024 07:18:49 -0800 Subject: [PATCH 149/216] =?UTF-8?q?Add=20`@Nullable`=20to=20`CollectSplite?= =?UTF-8?q?rators#flatMap(toPrimitive)`=20function=20parameter=E2=80=99s?= =?UTF-8?q?=20return=20type?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit According to the documentation, `function` may return null to replace an input with an empty stream. Discovered by running `CollectSpliteratorsTest` with J2KT. RELNOTES=n/a PiperOrigin-RevId: 608331079 --- .../common/collect/CollectSpliterators.java | 24 +++++++++---------- 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/guava/src/com/google/common/collect/CollectSpliterators.java b/guava/src/com/google/common/collect/CollectSpliterators.java index a1bfe86f6941..e2242db6d25c 100644 --- a/guava/src/com/google/common/collect/CollectSpliterators.java +++ b/guava/src/com/google/common/collect/CollectSpliterators.java @@ -215,7 +215,7 @@ public int characteristics() { static Spliterator flatMap( Spliterator fromSpliterator, - Function> function, + Function> function, int topCharacteristics, long topSize) { checkArgument( @@ -237,7 +237,7 @@ Spliterator flatMap( */ static Spliterator.OfInt flatMapToInt( Spliterator fromSpliterator, - Function function, + Function function, int topCharacteristics, long topSize) { checkArgument( @@ -259,7 +259,7 @@ Spliterator flatMap( */ static Spliterator.OfLong flatMapToLong( Spliterator fromSpliterator, - Function function, + Function function, int topCharacteristics, long topSize) { checkArgument( @@ -281,7 +281,7 @@ Spliterator flatMap( */ static Spliterator.OfDouble flatMapToDouble( Spliterator fromSpliterator, - Function function, + Function function, int topCharacteristics, long topSize) { checkArgument( @@ -314,14 +314,14 @@ interface Factory fromSplit, - Function function, + Function function, int splitCharacteristics, long estSplitSize); } @Weak @CheckForNull OutSpliteratorT prefix; final Spliterator from; - final Function function; + final Function function; final Factory factory; int characteristics; long estimatedSize; @@ -329,7 +329,7 @@ OutSpliteratorT newFlatMapSpliterator( FlatMapSpliterator( @CheckForNull OutSpliteratorT prefix, Spliterator from, - Function function, + Function function, Factory factory, int characteristics, long estimatedSize) { @@ -438,7 +438,7 @@ static final class FlatMapSpliteratorOfObject< FlatMapSpliteratorOfObject( @CheckForNull Spliterator prefix, Spliterator from, - Function> function, + Function> function, int characteristics, long estimatedSize) { super( @@ -466,7 +466,7 @@ abstract static class FlatMapSpliteratorOfPrimitive< FlatMapSpliteratorOfPrimitive( @CheckForNull OutSpliteratorT prefix, Spliterator from, - Function function, + Function function, Factory factory, int characteristics, long estimatedSize) { @@ -514,7 +514,7 @@ static final class FlatMapSpliteratorOfInt FlatMapSpliteratorOfInt( @CheckForNull Spliterator.OfInt prefix, Spliterator from, - Function function, + Function function, int characteristics, long estimatedSize) { super(prefix, from, function, FlatMapSpliteratorOfInt::new, characteristics, estimatedSize); @@ -528,7 +528,7 @@ static final class FlatMapSpliteratorOfLong FlatMapSpliteratorOfLong( @CheckForNull Spliterator.OfLong prefix, Spliterator from, - Function function, + Function function, int characteristics, long estimatedSize) { super(prefix, from, function, FlatMapSpliteratorOfLong::new, characteristics, estimatedSize); @@ -543,7 +543,7 @@ static final class FlatMapSpliteratorOfDouble from, - Function function, + Function function, int characteristics, long estimatedSize) { super( From 54e1c757276af154ec4fba461d5eaf43f7ecc2bf Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 19 Feb 2024 07:19:34 -0800 Subject: [PATCH 150/216] Remove `@J2ktIncompatible` from `Maps#immutableEnumMap` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit There are many enum collection APIs that don’t work on J2KT. But this here does work fine. RELNOTES=n/a PiperOrigin-RevId: 608331195 --- android/guava/src/com/google/common/collect/Maps.java | 1 - guava/src/com/google/common/collect/Maps.java | 1 - 2 files changed, 2 deletions(-) diff --git a/android/guava/src/com/google/common/collect/Maps.java b/android/guava/src/com/google/common/collect/Maps.java index 3030d59e8169..2a743c64a1c4 100644 --- a/android/guava/src/com/google/common/collect/Maps.java +++ b/android/guava/src/com/google/common/collect/Maps.java @@ -151,7 +151,6 @@ V transform(Entry entry) { * @since 14.0 */ @GwtCompatible(serializable = true) - @J2ktIncompatible public static , V> ImmutableMap immutableEnumMap( Map map) { if (map instanceof ImmutableEnumMap) { diff --git a/guava/src/com/google/common/collect/Maps.java b/guava/src/com/google/common/collect/Maps.java index 9269a4fb65ef..38c01dde7e9f 100644 --- a/guava/src/com/google/common/collect/Maps.java +++ b/guava/src/com/google/common/collect/Maps.java @@ -156,7 +156,6 @@ V transform(Entry entry) { * @since 14.0 */ @GwtCompatible(serializable = true) - @J2ktIncompatible public static , V> ImmutableMap immutableEnumMap( Map map) { if (map instanceof ImmutableEnumMap) { From 301d6e3220cc395871d312286f86c33858e41a87 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 19 Feb 2024 07:53:54 -0800 Subject: [PATCH 151/216] IteratorsTest: Replace `Integer` varargs with `int` varargs `Integer...` is hard to translate to KMP Kotlin. `Int...` has the correct nullness but results in an `IntArray` (i.e. `int[]`, which is different from Java behavior). `Int?...` results in `Array` (i.e. `@Nullable Integer[]`) which matches the runtime type used by Java but has incorrect nullness. The test helper methods here could be easily converted to `int...` RELNOTES=n/a PiperOrigin-RevId: 608337483 --- .../test/com/google/common/collect/IteratorsTest.java | 10 ++++++---- .../test/com/google/common/collect/IteratorsTest.java | 10 ++++++---- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java index 96ae2417e3e3..da59d52480fd 100644 --- a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -39,6 +39,7 @@ import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.ListFeature; +import com.google.common.primitives.Ints; import com.google.common.testing.NullPointerTester; import java.util.ArrayList; import java.util.Arrays; @@ -918,8 +919,9 @@ protected DoubletonIteratorTester() { } } - private static Iterator iterateOver(final Integer... values) { - return newArrayList(values).iterator(); + private static Iterator iterateOver(int... values) { + // Note: Ints.asList's iterator does not support remove which we need for testing. + return new ArrayList<>(Ints.asList(values)).iterator(); } public void testElementsEqual() { @@ -1274,8 +1276,8 @@ public void testAsEnumerationTypical() { assertFalse(enumer.hasMoreElements()); } - private static Enumeration enumerate(Integer... ints) { - Vector vector = new Vector<>(asList(ints)); + private static Enumeration enumerate(int... ints) { + Vector vector = new Vector<>(Ints.asList(ints)); return vector.elements(); } diff --git a/guava-tests/test/com/google/common/collect/IteratorsTest.java b/guava-tests/test/com/google/common/collect/IteratorsTest.java index 96ae2417e3e3..da59d52480fd 100644 --- a/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -39,6 +39,7 @@ import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.ListFeature; +import com.google.common.primitives.Ints; import com.google.common.testing.NullPointerTester; import java.util.ArrayList; import java.util.Arrays; @@ -918,8 +919,9 @@ protected DoubletonIteratorTester() { } } - private static Iterator iterateOver(final Integer... values) { - return newArrayList(values).iterator(); + private static Iterator iterateOver(int... values) { + // Note: Ints.asList's iterator does not support remove which we need for testing. + return new ArrayList<>(Ints.asList(values)).iterator(); } public void testElementsEqual() { @@ -1274,8 +1276,8 @@ public void testAsEnumerationTypical() { assertFalse(enumer.hasMoreElements()); } - private static Enumeration enumerate(Integer... ints) { - Vector vector = new Vector<>(asList(ints)); + private static Enumeration enumerate(int... ints) { + Vector vector = new Vector<>(Ints.asList(ints)); return vector.elements(); } From ecdd5c4037aef27c40dd54e5cbffa6c535b25d18 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 19 Feb 2024 11:03:59 -0800 Subject: [PATCH 152/216] Remove `@Nullable` from `AbstractImmutableSetTest#copyOf(E[])` None of the subclasses permit null. There may be callers that pass in arrays with null elements but those are meant to provoke NPEs and will be updated with casts if necessary. RELNOTES=n/a PiperOrigin-RevId: 608370648 --- .../com/google/common/collect/AbstractImmutableSetTest.java | 3 +-- .../com/google/common/collect/AbstractImmutableSetTest.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index b70e6dcfe9c1..d8f8443bc95d 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -34,7 +34,6 @@ import java.util.List; import java.util.Set; import junit.framework.TestCase; -import org.checkerframework.checker.nullness.qual.Nullable; /** * Base class for {@link ImmutableSet} and {@link ImmutableSortedSet} tests. @@ -61,7 +60,7 @@ public abstract class AbstractImmutableSetTest extends TestCase { protected abstract > Set of( E e1, E e2, E e3, E e4, E e5, E e6, E... rest); - protected abstract > Set copyOf(E @Nullable [] elements); + protected abstract > Set copyOf(E[] elements); protected abstract > Set copyOf( Collection elements); diff --git a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index b70e6dcfe9c1..d8f8443bc95d 100644 --- a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -34,7 +34,6 @@ import java.util.List; import java.util.Set; import junit.framework.TestCase; -import org.checkerframework.checker.nullness.qual.Nullable; /** * Base class for {@link ImmutableSet} and {@link ImmutableSortedSet} tests. @@ -61,7 +60,7 @@ public abstract class AbstractImmutableSetTest extends TestCase { protected abstract > Set of( E e1, E e2, E e3, E e4, E e5, E e6, E... rest); - protected abstract > Set copyOf(E @Nullable [] elements); + protected abstract > Set copyOf(E[] elements); protected abstract > Set copyOf( Collection elements); From fd1e344e3853b25c322b65dc629eebe86b6e1460 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 19 Feb 2024 11:14:01 -0800 Subject: [PATCH 153/216] Add `@J2ktIncompatible` to many `@GwtIncompatible` tests Tests that use - JUnit 3 explicit `Test`/`TestSuite` construction - `NullPointerTester` - `SerializableTester` - `MemoryTester` - reflection RELNOTES=n/a PiperOrigin-RevId: 608372405 --- .../google/common/collect/AbstractIteratorTest.java | 2 ++ .../common/collect/AbstractTableReadTest.java | 2 ++ .../common/collect/ArrayListMultimapTest.java | 2 ++ .../com/google/common/collect/ArrayTableTest.java | 4 ++++ .../com/google/common/collect/Collections2Test.java | 9 +++++++++ .../com/google/common/collect/EnumBiMapTest.java | 3 +++ .../google/common/collect/EnumHashBiMapTest.java | 4 ++++ .../com/google/common/collect/EnumMultisetTest.java | 4 ++++ .../google/common/collect/EvictingQueueTest.java | 2 ++ .../com/google/common/collect/GeneralRangeTest.java | 2 ++ .../google/common/collect/HashBasedTableTest.java | 3 +++ .../com/google/common/collect/HashBiMapTest.java | 2 ++ .../com/google/common/collect/HashMultimapTest.java | 2 ++ .../com/google/common/collect/HashMultisetTest.java | 5 +++++ .../google/common/collect/ImmutableBiMapTest.java | 5 +++++ .../google/common/collect/ImmutableEnumMapTest.java | 2 ++ .../common/collect/ImmutableListMultimapTest.java | 5 +++++ .../google/common/collect/ImmutableListTest.java | 6 ++++++ .../com/google/common/collect/ImmutableMapTest.java | 7 +++++++ .../common/collect/ImmutableMultimapTest.java | 2 ++ .../common/collect/ImmutableMultisetTest.java | 8 ++++++++ .../common/collect/ImmutableSetMultimapTest.java | 6 ++++++ .../com/google/common/collect/ImmutableSetTest.java | 2 ++ .../common/collect/ImmutableSortedMapTest.java | 4 ++++ .../common/collect/ImmutableSortedSetTest.java | 12 ++++++++++++ .../google/common/collect/ImmutableTableTest.java | 2 ++ .../com/google/common/collect/IterablesTest.java | 3 +++ .../com/google/common/collect/IteratorsTest.java | 4 ++++ .../common/collect/LinkedHashMultimapTest.java | 4 ++++ .../common/collect/LinkedHashMultisetTest.java | 2 ++ .../common/collect/LinkedListMultimapTest.java | 2 ++ .../com/google/common/collect/ListsImplTest.java | 3 +++ .../test/com/google/common/collect/ListsTest.java | 5 +++++ .../test/com/google/common/collect/MapsTest.java | 6 ++++++ .../common/collect/MinMaxPriorityQueueTest.java | 3 +++ .../google/common/collect/MultimapBuilderTest.java | 4 ++++ .../com/google/common/collect/MultimapsTest.java | 13 +++++++++++++ .../com/google/common/collect/MultisetsTest.java | 2 ++ .../com/google/common/collect/ObjectArraysTest.java | 2 ++ .../com/google/common/collect/OrderingTest.java | 2 ++ .../google/common/collect/SetOperationsTest.java | 2 ++ .../test/com/google/common/collect/SetsTest.java | 10 ++++++++++ .../common/collect/SimpleAbstractMultisetTest.java | 2 ++ .../com/google/common/collect/SortedListsTest.java | 2 ++ .../google/common/collect/TableCollectionTest.java | 2 ++ .../common/collect/TablesTransformValuesTest.java | 2 ++ .../google/common/collect/TreeBasedTableTest.java | 3 +++ .../common/collect/TreeMultimapNaturalTest.java | 8 ++++++++ .../com/google/common/collect/TreeMultisetTest.java | 3 +++ .../google/common/collect/TreeTraverserTest.java | 2 ++ .../google/common/collect/AbstractIteratorTest.java | 2 ++ .../common/collect/AbstractTableReadTest.java | 2 ++ .../common/collect/ArrayListMultimapTest.java | 2 ++ .../com/google/common/collect/ArrayTableTest.java | 4 ++++ .../com/google/common/collect/Collections2Test.java | 9 +++++++++ .../com/google/common/collect/EnumBiMapTest.java | 3 +++ .../google/common/collect/EnumHashBiMapTest.java | 4 ++++ .../com/google/common/collect/EnumMultisetTest.java | 4 ++++ .../google/common/collect/EvictingQueueTest.java | 2 ++ .../com/google/common/collect/GeneralRangeTest.java | 2 ++ .../google/common/collect/HashBasedTableTest.java | 3 +++ .../com/google/common/collect/HashBiMapTest.java | 2 ++ .../com/google/common/collect/HashMultimapTest.java | 2 ++ .../com/google/common/collect/HashMultisetTest.java | 5 +++++ .../google/common/collect/ImmutableBiMapTest.java | 5 +++++ .../google/common/collect/ImmutableEnumMapTest.java | 2 ++ .../common/collect/ImmutableListMultimapTest.java | 5 +++++ .../google/common/collect/ImmutableListTest.java | 6 ++++++ .../com/google/common/collect/ImmutableMapTest.java | 10 ++++++++++ .../common/collect/ImmutableMultimapTest.java | 2 ++ .../common/collect/ImmutableMultisetTest.java | 8 ++++++++ .../common/collect/ImmutableSetMultimapTest.java | 6 ++++++ .../com/google/common/collect/ImmutableSetTest.java | 2 ++ .../common/collect/ImmutableSortedMapTest.java | 4 ++++ .../common/collect/ImmutableSortedSetTest.java | 12 ++++++++++++ .../google/common/collect/ImmutableTableTest.java | 2 ++ .../com/google/common/collect/IterablesTest.java | 3 +++ .../com/google/common/collect/IteratorsTest.java | 4 ++++ .../common/collect/LinkedHashMultimapTest.java | 4 ++++ .../common/collect/LinkedHashMultisetTest.java | 2 ++ .../common/collect/LinkedListMultimapTest.java | 2 ++ .../com/google/common/collect/ListsImplTest.java | 3 +++ .../test/com/google/common/collect/ListsTest.java | 5 +++++ .../test/com/google/common/collect/MapsTest.java | 6 ++++++ .../common/collect/MinMaxPriorityQueueTest.java | 3 +++ .../google/common/collect/MultimapBuilderTest.java | 4 ++++ .../com/google/common/collect/MultimapsTest.java | 13 +++++++++++++ .../com/google/common/collect/MultisetsTest.java | 2 ++ .../com/google/common/collect/ObjectArraysTest.java | 2 ++ .../com/google/common/collect/OrderingTest.java | 2 ++ .../google/common/collect/SetOperationsTest.java | 2 ++ .../test/com/google/common/collect/SetsTest.java | 10 ++++++++++ .../common/collect/SimpleAbstractMultisetTest.java | 2 ++ .../com/google/common/collect/SortedListsTest.java | 2 ++ .../google/common/collect/TableCollectionTest.java | 2 ++ .../common/collect/TablesTransformValuesTest.java | 2 ++ .../google/common/collect/TreeBasedTableTest.java | 3 +++ .../common/collect/TreeMultimapNaturalTest.java | 8 ++++++++ .../com/google/common/collect/TreeMultisetTest.java | 3 +++ .../google/common/collect/TreeTraverserTest.java | 2 ++ 100 files changed, 399 insertions(+) diff --git a/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java b/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java index 9ca7420f6136..c6951b8ca03e 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.GcFinalization; import java.lang.ref.WeakReference; import java.util.Iterator; @@ -136,6 +137,7 @@ public Integer computeNext() { } + @J2ktIncompatible // weak references, details of GC @GwtIncompatible // weak references @AndroidIncompatible // depends on details of GC public void testFreesNextReference() { diff --git a/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java b/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java index 67d44cb9b680..65e7affdeda7 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Objects; import com.google.common.testing.EqualsTester; import com.google.common.testing.NullPointerTester; @@ -184,6 +185,7 @@ public void testColumnSetPartialOverlap() { assertThat(table.columnKeySet()).containsExactly(1, 2, 3); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerInstance() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 2, 'c', "bar", 3, 'd'); diff --git a/android/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java index 08e5ae8ccf2c..0177413e68d3 100644 --- a/android/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; @@ -43,6 +44,7 @@ public class ArrayListMultimapTest extends TestCase { @GwtIncompatible // suite + @J2ktIncompatible public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest( diff --git a/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java b/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java index b7622c23137a..4ca27cd60913 100644 --- a/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Objects; import com.google.common.collect.Table.Cell; import com.google.common.testing.EqualsTester; @@ -290,6 +291,7 @@ public void testSerialization() { SerializableTester.reserializeAndAssert(table); } + @J2ktIncompatible @GwtIncompatible // reflection public void testNullPointerStatic() { new NullPointerTester().testAllPublicStaticMethods(ArrayTable.class); @@ -519,11 +521,13 @@ public void testColumnPutIllegal() { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testNulls() { new NullPointerTester().testAllPublicInstanceMethods(create()); } + @J2ktIncompatible @GwtIncompatible // serialize public void testSerializable() { SerializableTester.reserializeAndAssert(create()); diff --git a/android/guava-tests/test/com/google/common/collect/Collections2Test.java b/android/guava-tests/test/com/google/common/collect/Collections2Test.java index 2cf05f632cd5..283bce2debd8 100644 --- a/android/guava-tests/test/com/google/common/collect/Collections2Test.java +++ b/android/guava-tests/test/com/google/common/collect/Collections2Test.java @@ -25,6 +25,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Predicate; import com.google.common.collect.testing.CollectionTestSuiteBuilder; import com.google.common.collect.testing.TestStringCollectionGenerator; @@ -49,6 +50,7 @@ */ @GwtCompatible(emulated = true) public class Collections2Test extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(Collections2Test.class.getSimpleName()); @@ -67,6 +69,7 @@ public static Test suite() { static final Predicate LENGTH_1 = input -> input.length() == 1; + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilter() { return CollectionTestSuiteBuilder.using( @@ -90,6 +93,7 @@ public Collection create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterAll() { return CollectionTestSuiteBuilder.using( @@ -111,6 +115,7 @@ public Collection create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterLinkedList() { return CollectionTestSuiteBuilder.using( @@ -134,6 +139,7 @@ public Collection create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterNoNulls() { return CollectionTestSuiteBuilder.using( @@ -157,6 +163,7 @@ public Collection create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterFiltered() { return CollectionTestSuiteBuilder.using( @@ -181,6 +188,7 @@ public Collection create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForTransform() { return CollectionTestSuiteBuilder.using( @@ -204,6 +212,7 @@ private static Test testsForTransform() { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); diff --git a/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java b/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java index fa927e2d8226..19fb8b24333e 100644 --- a/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.SampleElements; import com.google.common.collect.testing.features.CollectionFeature; @@ -109,6 +110,7 @@ public Currency[] createValueArray(int length) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -293,6 +295,7 @@ public void testSerializable() { EnumBiMap.create(ImmutableMap.of(Currency.DOLLAR, Country.CANADA))); } + @J2ktIncompatible @GwtIncompatible // reflection public void testNulls() { new NullPointerTester().testAllPublicStaticMethods(EnumBiMap.class); diff --git a/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java b/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java index 24f395328803..2995628d1d27 100644 --- a/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.SampleElements; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -102,6 +103,7 @@ public String[] createValueArray(int length) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -217,11 +219,13 @@ public void testEntrySet() { assertEquals(3, uniqueEntries.size()); } + @J2ktIncompatible @GwtIncompatible // serialize public void testSerializable() { SerializableTester.reserializeAndAssert(EnumHashBiMap.create(Currency.class)); } + @J2ktIncompatible @GwtIncompatible // reflection public void testNulls() { new NullPointerTester().testAllPublicStaticMethods(EnumHashBiMap.class); diff --git a/android/guava-tests/test/com/google/common/collect/EnumMultisetTest.java b/android/guava-tests/test/com/google/common/collect/EnumMultisetTest.java index 265db21286b7..d446a9849a95 100644 --- a/android/guava-tests/test/com/google/common/collect/EnumMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/EnumMultisetTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AnEnum; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -44,6 +45,7 @@ @GwtCompatible(emulated = true) public class EnumMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -159,6 +161,7 @@ public static > EnumMultiset create(Iterable elements) { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testEquals() throws Exception { new ClassSanityTester() @@ -168,6 +171,7 @@ public void testEquals() throws Exception { .testEquals(); } + @J2ktIncompatible @GwtIncompatible // reflection public void testNulls() throws Exception { new NullPointerTester() diff --git a/android/guava-tests/test/com/google/common/collect/EvictingQueueTest.java b/android/guava-tests/test/com/google/common/collect/EvictingQueueTest.java index 05fdbd0e860a..8b8337e46eea 100644 --- a/android/guava-tests/test/com/google/common/collect/EvictingQueueTest.java +++ b/android/guava-tests/test/com/google/common/collect/EvictingQueueTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; import java.util.AbstractList; @@ -187,6 +188,7 @@ public String get(int index) { assertTrue(queue.isEmpty()); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); diff --git a/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java b/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java index dfa73d62ba88..5d1c73548195 100644 --- a/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java +++ b/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Objects; import com.google.common.testing.NullPointerTester; import java.util.Arrays; @@ -219,6 +220,7 @@ public void testReverse() { GeneralRange.range(ORDERING, 3, CLOSED, 5, OPEN).reverse()); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointers() { new NullPointerTester().testAllPublicStaticMethods(GeneralRange.class); diff --git a/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java b/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java index 8a608aeeea60..7bb51ef31851 100644 --- a/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; @@ -91,12 +92,14 @@ public void testCreateCopy() { assertEquals((Character) 'a', copy.get("foo", 1)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); SerializableTester.reserializeAndAssert(table); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerStatic() { new NullPointerTester().testAllPublicStaticMethods(HashBasedTable.class); diff --git a/android/guava-tests/test/com/google/common/collect/HashBiMapTest.java b/android/guava-tests/test/com/google/common/collect/HashBiMapTest.java index 9541434286d4..74dc3b77af07 100644 --- a/android/guava-tests/test/com/google/common/collect/HashBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashBiMapTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; @@ -52,6 +53,7 @@ protected BiMap create(Entry[] entries) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/android/guava-tests/test/com/google/common/collect/HashMultimapTest.java b/android/guava-tests/test/com/google/common/collect/HashMultimapTest.java index 6cde6c56fda9..b1744b347f16 100644 --- a/android/guava-tests/test/com/google/common/collect/HashMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashMultimapTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; @@ -36,6 +37,7 @@ @GwtCompatible(emulated = true) public class HashMultimapTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/android/guava-tests/test/com/google/common/collect/HashMultisetTest.java b/android/guava-tests/test/com/google/common/collect/HashMultisetTest.java index 030c927a209c..b2e5fe326cc8 100644 --- a/android/guava-tests/test/com/google/common/collect/HashMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashMultisetTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.google.MultisetFeature; @@ -41,6 +42,7 @@ @GwtCompatible(emulated = true) public class HashMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -90,6 +92,7 @@ public void testCreateFromIterable() { assertEquals(2, multiset.count("foo")); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializationContainingSelf() { Multiset> multiset = HashMultiset.create(); @@ -99,6 +102,7 @@ public void testSerializationContainingSelf() { assertSame(copy, copy.iterator().next()); } + @J2ktIncompatible @GwtIncompatible // Only used by @GwtIncompatible code private static class MultisetHolder implements Serializable { public Multiset member; @@ -110,6 +114,7 @@ private static class MultisetHolder implements Serializable { private static final long serialVersionUID = 1L; } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializationIndirectSelfReference() { Multiset multiset = HashMultiset.create(); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java index 50bd68482bbf..e1abd44571cd 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableBiMap.Builder; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -50,6 +51,7 @@ public class ImmutableBiMapTest extends TestCase { // TODO: Reduce duplication of ImmutableMapTest code + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -641,12 +643,14 @@ public void testDoubleInverse() { assertSame(bimap, bimap.inverse().inverse()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testEmptySerialization() { ImmutableBiMap bimap = ImmutableBiMap.of(); assertSame(bimap, SerializableTester.reserializeAndAssert(bimap)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization() { ImmutableBiMap bimap = @@ -657,6 +661,7 @@ public void testSerialization() { assertSame(copy, copy.inverse().inverse()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testInverseSerialization() { ImmutableBiMap bimap = diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java index 189db72e6b5e..b03a93f012be 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java @@ -23,6 +23,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.collect.testing.AnEnum; import com.google.common.collect.testing.Helpers; @@ -53,6 +54,7 @@ protected Map create(Entry[] entries) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java index cb68484ea1a1..4d2f86e9a980 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java @@ -23,6 +23,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableListMultimap.Builder; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.google.ListMultimapTestSuiteBuilder; @@ -65,6 +66,7 @@ protected ListMultimap create(Entry[] entries) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -554,6 +556,7 @@ private static void assertMultimapEquals( } } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization() { Multimap multimap = createMultimap(); @@ -567,12 +570,14 @@ public void testSerialization() { assertEquals(HashMultiset.create(multimap.values()), HashMultiset.create(valuesCopy)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testEmptySerialization() { Multimap multimap = ImmutableListMultimap.of(); assertSame(multimap, SerializableTester.reserialize(multimap)); } + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java index bbe63880321d..c44a1f9af31f 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.ListTestSuiteBuilder; import com.google.common.collect.testing.MinimalCollection; @@ -56,6 +57,7 @@ @GwtCompatible(emulated = true) public class ImmutableListTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -461,6 +463,7 @@ public void testToImmutableList_java7_combine() { // Basic tests + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { @@ -469,18 +472,21 @@ public void testNullPointers() { tester.testAllPublicInstanceMethods(ImmutableList.of(1, 2, 3)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_empty() { Collection c = ImmutableList.of(); assertSame(c, SerializableTester.reserialize(c)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_singleton() { Collection c = ImmutableList.of("a"); SerializableTester.reserializeAndAssert(c); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_multiple() { Collection c = ImmutableList.of("a", "b", "c"); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java index 6b5e0731b3a3..e0de2a42e45e 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableMap.Builder; import com.google.common.collect.testing.CollectionTestSuiteBuilder; import com.google.common.collect.testing.ListTestSuiteBuilder; @@ -69,6 +70,7 @@ @SuppressWarnings("AlwaysThrows") public class ImmutableMapTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -892,6 +894,7 @@ public void testAsMultimapCaches() { assertSame(multimap1, multimap2); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { @@ -942,6 +945,7 @@ public void testMutableValues() { assertEquals(intMap.hashCode(), map.hashCode()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testViewSerialization() { Map map = ImmutableMap.of("one", 1, "two", 2, "three", 3); @@ -953,6 +957,7 @@ public void testViewSerialization() { assertTrue(reserializedValues instanceof ImmutableCollection); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testKeySetIsSerializable_regularImmutableMap() { class NonSerializableClass {} @@ -964,6 +969,7 @@ class NonSerializableClass {} LenientSerializableTester.reserializeAndAssertLenient(set); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testValuesCollectionIsSerializable_regularImmutableMap() { class NonSerializableClass {} @@ -976,6 +982,7 @@ class NonSerializableClass {} } // TODO: Re-enable this test after moving to new serialization format in ImmutableMap. + @J2ktIncompatible @GwtIncompatible // SerializableTester @SuppressWarnings("unchecked") public void ignore_testSerializationNoDuplication_regularImmutableMap() throws Exception { diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java index bf32922e1468..e8f24ce116bc 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableMultimap.Builder; import com.google.common.collect.testing.SampleElements; import com.google.common.collect.testing.SampleElements.Unhashables; @@ -127,6 +128,7 @@ public void testEquals() { .testEquals(); } + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java index 2c772b4bc9b7..ca52a36eb4b1 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.ListTestSuiteBuilder; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.SetTestSuiteBuilder; @@ -53,6 +54,7 @@ @GwtCompatible(emulated = true) public class ImmutableMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite // TODO(cpovirk): add to collect/gwt/suites public static Test suite() { TestSuite suite = new TestSuite(); @@ -470,6 +472,7 @@ public void testBuilderSetCountIllegal() { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { @@ -477,12 +480,14 @@ public void testNullPointers() { tester.testAllPublicStaticMethods(ImmutableMultiset.class); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_empty() { Collection c = ImmutableMultiset.of(); assertSame(c, SerializableTester.reserialize(c)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_multiple() { Collection c = ImmutableMultiset.of("a", "b", "a"); @@ -490,6 +495,7 @@ public void testSerialization_multiple() { assertThat(copy).containsExactly("a", "a", "b").inOrder(); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_elementSet() { Multiset c = ImmutableMultiset.of("a", "b", "a"); @@ -497,6 +503,7 @@ public void testSerialization_elementSet() { assertThat(copy).containsExactly("a", "b").inOrder(); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_entrySet() { Multiset c = ImmutableMultiset.of("a", "b", "c"); @@ -532,6 +539,7 @@ public void testAsList() { assertEquals(4, list.lastIndexOf("b")); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_asList() { ImmutableMultiset multiset = ImmutableMultiset.of("a", "a", "b", "b", "b"); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java index 0db23b6aa94a..d3c4be513eaa 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java @@ -23,6 +23,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableSetMultimap.Builder; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.google.SetMultimapTestSuiteBuilder; @@ -65,6 +66,7 @@ protected SetMultimap create(Entry[] entries) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -548,6 +550,7 @@ private static void assertMultimapEquals( } } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization() { Multimap multimap = createMultimap(); @@ -561,12 +564,14 @@ public void testSerialization() { assertEquals(HashMultiset.create(multimap.values()), HashMultiset.create(valuesCopy)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testEmptySerialization() { Multimap multimap = ImmutableSetMultimap.of(); assertSame(multimap, SerializableTester.reserialize(multimap)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSortedSerialization() { Multimap multimap = @@ -594,6 +599,7 @@ private ImmutableSetMultimap createMultimap() { .build(); } + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java index 681fdcd826ad..df39d5042c94 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableSet.Builder; import com.google.common.collect.testing.ListTestSuiteBuilder; import com.google.common.collect.testing.SetTestSuiteBuilder; @@ -52,6 +53,7 @@ @GwtCompatible(emulated = true) public class ImmutableSetTest extends AbstractImmutableSetTest { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index 39b907a776a5..301ac1fed768 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableSortedMap.Builder; import com.google.common.collect.testing.ListTestSuiteBuilder; import com.google.common.collect.testing.MapTestSuiteBuilder; @@ -59,6 +60,7 @@ public class ImmutableSortedMapTest extends TestCase { // TODO: Avoid duplicating code in ImmutableMapTest + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -658,6 +660,7 @@ public void testNullGet() { assertNull(map.get(null)); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { @@ -742,6 +745,7 @@ public void testMutableValues() { assertEquals(intMap.hashCode(), map.hashCode()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testViewSerialization() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java index 0bea3b69dfd7..c39f01bfa82a 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.ListTestSuiteBuilder; import com.google.common.collect.testing.NavigableSetTestSuiteBuilder; import com.google.common.collect.testing.features.CollectionFeature; @@ -57,6 +58,7 @@ @GwtCompatible(emulated = true) public class ImmutableSortedSetTest extends AbstractImmutableSetTest { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -229,6 +231,7 @@ protected > SortedSet copyOf(Iterator set = of(); @@ -321,6 +325,7 @@ public void testSingle_last() { assertEquals("e", set.last()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSingle_serialization() { SortedSet set = of("e"); @@ -420,6 +425,7 @@ public void testOf_subSet() { } } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testOf_subSetSerialization() { SortedSet set = of("e", "f", "b", "d", "c"); @@ -436,6 +442,7 @@ public void testOf_last() { assertEquals("f", set.last()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testOf_serialization() { SortedSet set = of("e", "f", "b", "d", "c"); @@ -557,6 +564,7 @@ public void testExplicit_last() { assertEquals("jumped", set.last()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testExplicitEmpty_serialization() { SortedSet set = ImmutableSortedSet.orderedBy(STRING_LENGTH).build(); @@ -566,6 +574,7 @@ public void testExplicitEmpty_serialization() { assertSame(set.comparator(), copy.comparator()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testExplicit_serialization() { SortedSet set = @@ -815,6 +824,7 @@ public void testContainsAll_differentComparator() { assertFalse(set.containsAll(Sets.newTreeSet(asList("f", "d", "a")))); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testDifferentComparator_serialization() { // don't use Collections.reverseOrder(); it didn't reserialize to the same instance in JDK5 @@ -932,6 +942,7 @@ public void testAsList() { assertSame(list, ImmutableList.copyOf(set)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester, ImmutableSortedAsList public void testAsListReturnTypeAndSerialization() { ImmutableSet set = ImmutableSortedSet.of("a", "e", "i", "o", "u"); @@ -947,6 +958,7 @@ public void testSubsetAsList() { assertEquals(list, ImmutableList.copyOf(set)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester, ImmutableSortedAsList public void testSubsetAsListReturnTypeAndSerialization() { ImmutableSet set = ImmutableSortedSet.of("a", "e", "i", "o", "u").subSet("c", "r"); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java index 4083ec43e28d..6016e50e6aa5 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.SerializableTester; /** @@ -480,6 +481,7 @@ public void testOverflowCondition() { assertTrue(builder.build() instanceof SparseImmutableTable); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @Override public void testNullPointerInstance() { diff --git a/android/guava-tests/test/com/google/common/collect/IterablesTest.java b/android/guava-tests/test/com/google/common/collect/IterablesTest.java index 168e85a23a63..2b9d7ea0e8ef 100644 --- a/android/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -27,6 +27,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.base.Predicates; @@ -513,6 +514,7 @@ private static void assertCanIterateAgain(Iterable iterable) { for (@SuppressWarnings("unused") Object obj : iterable) {} } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); @@ -1395,6 +1397,7 @@ public void testMergeSorted_skipping_pyramid() { verifyMergeSorted(iterables, allIntegers); } + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testIterables_nullCheck() throws Exception { diff --git a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java index da59d52480fd..31879d542e8f 100644 --- a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -29,6 +29,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.base.Predicates; @@ -67,6 +68,7 @@ @GwtCompatible(emulated = true) public class IteratorsTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(IteratorsTest.class.getSimpleName()); @@ -892,6 +894,7 @@ public void testAddAllToSet() { assertFalse(changed); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); @@ -1584,6 +1587,7 @@ public void testRetainAll() { assertEquals(newArrayList("b", "d"), list); } + @J2ktIncompatible @GwtIncompatible // ListTestSuiteBuilder private static Test testsForRemoveAllAndRetainAll() { return ListTestSuiteBuilder.using( diff --git a/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java b/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java index 92d8e052a8d0..90c50162feb5 100644 --- a/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java @@ -26,6 +26,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -52,6 +53,7 @@ @GwtCompatible(emulated = true) public class LinkedHashMultimapTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -135,6 +137,7 @@ public void testOrderingSynchronized() { assertOrderingReadOnly(Multimaps.synchronizedMultimap(multimap)); } + @J2ktIncompatible @GwtIncompatible // SeriazableTester public void testSerializationOrdering() { Multimap multimap = initializeMultimap5(); @@ -142,6 +145,7 @@ public void testSerializationOrdering() { assertOrderingReadOnly(copy); } + @J2ktIncompatible @GwtIncompatible // SeriazableTester public void testSerializationOrderingKeysAndEntries() { Multimap multimap = LinkedHashMultimap.create(); diff --git a/android/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java b/android/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java index da7e86867d10..4f4289d464df 100644 --- a/android/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.google.MultisetFeature; @@ -40,6 +41,7 @@ @GwtCompatible(emulated = true) public class LinkedHashMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java index b0d48f0f4d66..f033f3b26353 100644 --- a/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java @@ -27,6 +27,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.ListIteratorTester; import com.google.common.collect.testing.features.CollectionFeature; @@ -57,6 +58,7 @@ @GwtCompatible(emulated = true) public class LinkedListMultimapTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/android/guava-tests/test/com/google/common/collect/ListsImplTest.java b/android/guava-tests/test/com/google/common/collect/ListsImplTest.java index 6ed0b66b351f..ed252cfd67f8 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsImplTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsImplTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -70,6 +71,7 @@ public Modifiability modifiability() { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -82,6 +84,7 @@ public static Test suite() { return suite; } + @J2ktIncompatible @GwtIncompatible // suite sub call private static TestSuite createExampleSuite(ListExample example) { TestSuite resultSuite = new TestSuite(ListsImplTest.class); diff --git a/android/guava-tests/test/com/google/common/collect/ListsTest.java b/android/guava-tests/test/com/google/common/collect/ListsTest.java index 33736d6d8116..2de28913bf85 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsTest.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.collect.testing.IteratorTester; @@ -98,6 +99,7 @@ public String apply(Number n) { private static final long serialVersionUID = 0; } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -405,6 +407,7 @@ public void testNewCOWALFromIterable() { assertEquals(SOME_COLLECTION, list); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); @@ -441,6 +444,7 @@ public void testArraysAsList() { } } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testAsList1() { List list = Lists.asList("foo", new String[] {"bar", "baz"}); @@ -499,6 +503,7 @@ protected Iterator newTargetIterator() { }.test(); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testAsList2Small() { List list = Lists.asList("foo", "bar", new String[0]); diff --git a/android/guava-tests/test/com/google/common/collect/MapsTest.java b/android/guava-tests/test/com/google/common/collect/MapsTest.java index 1294a285d592..05b59d3fe38e 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsTest.java @@ -26,6 +26,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Converter; import com.google.common.base.Equivalence; import com.google.common.base.Function; @@ -114,6 +115,7 @@ public void testCapacityForNegativeSizeFails() { * *

    This test may fail miserably on non-OpenJDK environments... */ + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // relies on assumptions about OpenJDK public void testNewHashMapWithExpectedSize_wontGrow() throws Exception { @@ -131,6 +133,7 @@ public void testNewHashMapWithExpectedSize_wontGrow() throws Exception { } /** Same test as above but for newLinkedHashMapWithExpectedSize */ + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // relies on assumptions about OpenJDK public void testNewLinkedHashMapWithExpectedSize_wontGrow() throws Exception { @@ -145,6 +148,7 @@ public void testNewLinkedHashMapWithExpectedSize_wontGrow() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // reflection private static void assertWontGrow( int size, @@ -185,6 +189,7 @@ private static void assertWontGrow( .isAtMost(bucketsOf(referenceMap)); } + @J2ktIncompatible @GwtIncompatible // reflection private static int bucketsOf(HashMap hashMap) throws Exception { Field tableField = HashMap.class.getDeclaredField("table"); @@ -381,6 +386,7 @@ public void testToStringImplWithNullValues() throws Exception { assertEquals(hashmap.toString(), Maps.toStringImpl(hashmap)); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointerExceptions() { diff --git a/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java b/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java index 9a39e192ddc7..b43f2d704520 100644 --- a/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java +++ b/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java @@ -23,6 +23,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.IteratorFeature; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.QueueTestSuiteBuilder; @@ -58,6 +59,7 @@ public class MinMaxPriorityQueueTest extends TestCase { private static final Ordering SOME_COMPARATOR = Ordering.natural().reverse(); + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -886,6 +888,7 @@ public void testIsEvenLevel() { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointers() { NullPointerTester tester = new NullPointerTester(); diff --git a/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java b/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java index 5528aba94c67..488881004685 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.MultimapBuilder.MultimapBuilderWithKeys; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -69,6 +70,7 @@ public void testTreeKeys_gwtCompatible() { assertTrue(multimap.asMap() instanceof SortedMap); } + @J2ktIncompatible @GwtIncompatible // serialization public void testSerialization() throws Exception { for (MultimapBuilderWithKeys builderWithKeys : @@ -93,6 +95,7 @@ public void testSerialization() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // serialization private static void reserializeAndAssert(Object object) throws Exception { Object copy = reserialize(object); @@ -100,6 +103,7 @@ private static void reserializeAndAssert(Object object) throws Exception { assertEquals(object.getClass(), copy.getClass()); } + @J2ktIncompatible @GwtIncompatible // serialization private static Object reserialize(Object object) throws Exception { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); diff --git a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java index 33c29db18e82..4e8e5536557d 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -26,6 +26,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.base.Predicates; @@ -111,6 +112,7 @@ public void testUnmodifiableArrayListMultimap() { checkUnmodifiableMultimap(ArrayListMultimap.create(), true); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableArrayListMultimap() { Multimap unmodifiable = @@ -141,6 +143,7 @@ public void testUnmodifiableHashMultimap() { checkUnmodifiableMultimap(HashMultimap.create(), false); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableHashMultimap() { Multimap unmodifiable = @@ -153,6 +156,7 @@ public void testUnmodifiableTreeMultimap() { checkUnmodifiableMultimap(TreeMultimap.create(), false, "null", 42); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableTreeMultimap() { Multimap unmodifiable = @@ -166,6 +170,7 @@ public void testUnmodifiableSynchronizedArrayListMultimap() { Multimaps.synchronizedListMultimap(ArrayListMultimap.create()), true); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableSynchronizedArrayListMultimap() { Multimap unmodifiable = @@ -183,6 +188,7 @@ public void testUnmodifiableSynchronizedHashMultimap() { Multimaps.synchronizedSetMultimap(HashMultimap.create()), false); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableSynchronizedHashMultimap() { Multimap unmodifiable = @@ -203,6 +209,7 @@ public void testUnmodifiableSynchronizedTreeMultimap() { assertSame(INT_COMPARATOR, multimap.valueComparator()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableSynchronizedTreeMultimap() { TreeMultimap delegate = @@ -448,6 +455,7 @@ public void testForMap() { assertEquals(multimapView, ArrayListMultimap.create()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testForMapSerialization() { Map map = Maps.newHashMap(); @@ -631,6 +639,7 @@ public void testNewMultimapValueCollectionMatchesList() { assertTrue(multimap.get(Color.BLUE) instanceof List); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testNewMultimapSerialization() { CountingSupplier> factory = new QueueSupplier(); @@ -666,6 +675,7 @@ public void testNewListMultimap() { assertTrue(multimap.asMap() instanceof SortedMap); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testNewListMultimapSerialization() { CountingSupplier> factory = new ListSupplier(); @@ -697,6 +707,7 @@ public void testNewSetMultimap() { assertEquals(Sets.newHashSet(4, 3, 1), multimap.get(Color.BLUE)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testNewSetMultimapSerialization() { CountingSupplier> factory = new SetSupplier(); @@ -730,6 +741,7 @@ public void testNewSortedSetMultimap() { assertEquals(INT_COMPARATOR, multimap.valueComparator()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testNewSortedSetMultimapSerialization() { CountingSupplier> factory = new SortedSetSupplier(); @@ -999,6 +1011,7 @@ public void testFilteredKeysListMultimapGetBadValue() { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { diff --git a/android/guava-tests/test/com/google/common/collect/MultisetsTest.java b/android/guava-tests/test/com/google/common/collect/MultisetsTest.java index 3348300bf2b7..6c5600e86092 100644 --- a/android/guava-tests/test/com/google/common/collect/MultisetsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultisetsTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.DerivedComparable; import com.google.common.testing.NullPointerTester; import java.util.Arrays; @@ -272,6 +273,7 @@ public void testHighestCountFirst() { assertThat(Multisets.copyHighestCountFirst(ImmutableMultiset.of())).isEmpty(); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { diff --git a/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java b/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java index 32d043f74543..50f781469e56 100644 --- a/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java +++ b/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.NullPointerTester; import java.io.Serializable; import java.util.Arrays; @@ -34,6 +35,7 @@ @GwtCompatible(emulated = true) public class ObjectArraysTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); diff --git a/android/guava-tests/test/com/google/common/collect/OrderingTest.java b/android/guava-tests/test/com/google/common/collect/OrderingTest.java index 8a8854097ca2..efa607e53be8 100644 --- a/android/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/android/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -25,6 +25,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.collect.Ordering.ArbitraryOrdering; @@ -1139,6 +1140,7 @@ public T apply(Composite from) { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); diff --git a/android/guava-tests/test/com/google/common/collect/SetOperationsTest.java b/android/guava-tests/test/com/google/common/collect/SetOperationsTest.java index 9a26f29457b3..2dc4a7521ab2 100644 --- a/android/guava-tests/test/com/google/common/collect/SetOperationsTest.java +++ b/android/guava-tests/test/com/google/common/collect/SetOperationsTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.SetTestSuiteBuilder; import com.google.common.collect.testing.TestStringSetGenerator; import com.google.common.collect.testing.features.CollectionFeature; @@ -38,6 +39,7 @@ */ @GwtCompatible(emulated = true) public class SetOperationsTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/android/guava-tests/test/com/google/common/collect/SetsTest.java b/android/guava-tests/test/com/google/common/collect/SetsTest.java index c271abe79565..13f25ada72f0 100644 --- a/android/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/android/guava-tests/test/com/google/common/collect/SetsTest.java @@ -32,6 +32,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Predicate; import com.google.common.collect.testing.AnEnum; import com.google.common.collect.testing.IteratorTester; @@ -105,6 +106,7 @@ public Iterator iterator() { private static final Comparator SOME_COMPARATOR = Collections.reverseOrder(); + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -217,6 +219,7 @@ public List order(List insertionOrder) { return suite; } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilter() { return SetTestSuiteBuilder.using( @@ -240,6 +243,7 @@ public Set create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterNoNulls() { TestSuite suite = new TestSuite(); @@ -291,6 +295,7 @@ public List order(List insertionOrder) { return suite; } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterFiltered() { return SetTestSuiteBuilder.using( @@ -341,6 +346,7 @@ public void testImmutableEnumSet() { } } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testImmutableEnumSet_serialized() { Set units = Sets.immutableEnumSet(SomeEnum.D, SomeEnum.B); @@ -362,6 +368,7 @@ public void testImmutableEnumSet_fromIterable() { assertThat(two).containsExactly(SomeEnum.B, SomeEnum.D).inOrder(); } + @J2ktIncompatible @GwtIncompatible // java serialization not supported in GWT. public void testImmutableEnumSet_deserializationMakesDefensiveCopy() throws Exception { ImmutableSet original = Sets.immutableEnumSet(SomeEnum.A, SomeEnum.B); @@ -377,6 +384,7 @@ public void testImmutableEnumSet_deserializationMakesDefensiveCopy() throws Exce assertTrue(deserialized.contains(SomeEnum.A)); } + @J2ktIncompatible @GwtIncompatible // java serialization not supported in GWT. private static byte[] serializeWithBackReference(Object original, int handleOffset) throws IOException { @@ -636,6 +644,7 @@ public void testComplementOfEmptySetWithoutTypeDoesntWork() { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointerExceptions() { @@ -651,6 +660,7 @@ public void testNewSetFromMap() { verifySetContents(set, SOME_COLLECTION); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testNewSetFromMapSerialization() { Set set = Sets.newSetFromMap(new LinkedHashMap()); diff --git a/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java b/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java index 04f4fe67c735..6cba5d359b99 100644 --- a/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Objects; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -42,6 +43,7 @@ @SuppressWarnings("serial") // No serialization is used in this test @GwtCompatible(emulated = true) public class SimpleAbstractMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/android/guava-tests/test/com/google/common/collect/SortedListsTest.java b/android/guava-tests/test/com/google/common/collect/SortedListsTest.java index a6cddcb723cc..a9b5e73bbae2 100644 --- a/android/guava-tests/test/com/google/common/collect/SortedListsTest.java +++ b/android/guava-tests/test/com/google/common/collect/SortedListsTest.java @@ -16,6 +16,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.SortedLists.KeyAbsentBehavior; import com.google.common.collect.SortedLists.KeyPresentBehavior; import com.google.common.testing.NullPointerTester; @@ -124,6 +125,7 @@ public void testWithDups() { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNulls() { new NullPointerTester().testAllPublicStaticMethods(SortedLists.class); diff --git a/android/guava-tests/test/com/google/common/collect/TableCollectionTest.java b/android/guava-tests/test/com/google/common/collect/TableCollectionTest.java index 18ad54939f4f..eddcfe8b1d08 100644 --- a/android/guava-tests/test/com/google/common/collect/TableCollectionTest.java +++ b/android/guava-tests/test/com/google/common/collect/TableCollectionTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.collect.Table.Cell; @@ -74,6 +75,7 @@ public class TableCollectionTest extends TestCase { CollectionFeature.ALLOWS_NULL_QUERIES }; + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java index d6330a246150..2112ac6ed5fe 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import org.checkerframework.checker.nullness.qual.Nullable; @@ -51,6 +52,7 @@ protected Table create(Object... data) { } // Null support depends on the underlying table and function. + @J2ktIncompatible @GwtIncompatible // NullPointerTester @Override public void testNullPointerInstance() {} diff --git a/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java b/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java index 7975111ed920..d1f6e880c68b 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.SortedMapTestSuiteBuilder; import com.google.common.collect.testing.TestStringSortedMapGenerator; import com.google.common.collect.testing.features.CollectionFeature; @@ -43,6 +44,7 @@ */ @GwtCompatible(emulated = true) public class TreeBasedTableTest extends AbstractTableTest { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -119,6 +121,7 @@ public void testCreateCopy() { assertEquals(original, table); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); diff --git a/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java b/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java index addcfb74f856..b37a13bd0732 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.DerivedComparable; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.NavigableMapTestSuiteBuilder; @@ -59,6 +60,7 @@ @GwtCompatible(emulated = true) public class TreeMultimapNaturalTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -407,6 +409,7 @@ public void testComparators() { assertEquals(Ordering.natural(), multimap.valueComparator()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testExplicitComparatorSerialization() { TreeMultimap multimap = createPopulate(); @@ -417,6 +420,7 @@ public void testExplicitComparatorSerialization() { assertEquals(multimap.valueComparator(), copy.valueComparator()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testTreeMultimapDerived() { TreeMultimap multimap = TreeMultimap.create(); @@ -443,6 +447,7 @@ public void testTreeMultimapDerived() { SerializableTester.reserializeAndAssert(multimap); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testTreeMultimapNonGeneric() { TreeMultimap multimap = TreeMultimap.create(); @@ -500,6 +505,7 @@ public void testTailSetClear() { assertEquals(4, multimap.keys().size()); } + @J2ktIncompatible @GwtIncompatible // reflection public void testKeySetBridgeMethods() { for (Method m : TreeMultimap.class.getMethods()) { @@ -510,6 +516,7 @@ public void testKeySetBridgeMethods() { fail("No bridge method found"); } + @J2ktIncompatible @GwtIncompatible // reflection public void testAsMapBridgeMethods() { for (Method m : TreeMultimap.class.getMethods()) { @@ -519,6 +526,7 @@ public void testAsMapBridgeMethods() { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testGetBridgeMethods() { for (Method m : TreeMultimap.class.getMethods()) { diff --git a/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java b/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java index 12da1f1de0e1..42e7cc45bbb7 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers.NullsBeforeB; import com.google.common.collect.testing.NavigableSetTestSuiteBuilder; import com.google.common.collect.testing.TestStringSetGenerator; @@ -49,6 +50,7 @@ @GwtCompatible(emulated = true) public class TreeMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -355,6 +357,7 @@ public void testSubMultisetSize() { assertEquals(Integer.MAX_VALUE, ms.tailMultiset("a", CLOSED).size()); } + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // Reflection bug, or actual binary compatibility problem? public void testElementSetBridgeMethods() { diff --git a/android/guava-tests/test/com/google/common/collect/TreeTraverserTest.java b/android/guava-tests/test/com/google/common/collect/TreeTraverserTest.java index 4c2abc7683ea..d469bd1e22f1 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeTraverserTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeTraverserTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.testing.NullPointerTester; import java.util.Arrays; @@ -105,6 +106,7 @@ public void testUsing() { assertThat(iterationOrder(ADAPTER_USING_USING.preOrderTraversal(h))).isEqualTo("hdabcegf"); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNulls() { NullPointerTester tester = new NullPointerTester(); diff --git a/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java b/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java index 9ca7420f6136..c6951b8ca03e 100644 --- a/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.GcFinalization; import java.lang.ref.WeakReference; import java.util.Iterator; @@ -136,6 +137,7 @@ public Integer computeNext() { } + @J2ktIncompatible // weak references, details of GC @GwtIncompatible // weak references @AndroidIncompatible // depends on details of GC public void testFreesNextReference() { diff --git a/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java b/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java index 67d44cb9b680..65e7affdeda7 100644 --- a/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Objects; import com.google.common.testing.EqualsTester; import com.google.common.testing.NullPointerTester; @@ -184,6 +185,7 @@ public void testColumnSetPartialOverlap() { assertThat(table.columnKeySet()).containsExactly(1, 2, 3); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerInstance() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 2, 'c', "bar", 3, 'd'); diff --git a/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java b/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java index 08e5ae8ccf2c..0177413e68d3 100644 --- a/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; @@ -43,6 +44,7 @@ public class ArrayListMultimapTest extends TestCase { @GwtIncompatible // suite + @J2ktIncompatible public static Test suite() { TestSuite suite = new TestSuite(); suite.addTest( diff --git a/guava-tests/test/com/google/common/collect/ArrayTableTest.java b/guava-tests/test/com/google/common/collect/ArrayTableTest.java index b7622c23137a..4ca27cd60913 100644 --- a/guava-tests/test/com/google/common/collect/ArrayTableTest.java +++ b/guava-tests/test/com/google/common/collect/ArrayTableTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Objects; import com.google.common.collect.Table.Cell; import com.google.common.testing.EqualsTester; @@ -290,6 +291,7 @@ public void testSerialization() { SerializableTester.reserializeAndAssert(table); } + @J2ktIncompatible @GwtIncompatible // reflection public void testNullPointerStatic() { new NullPointerTester().testAllPublicStaticMethods(ArrayTable.class); @@ -519,11 +521,13 @@ public void testColumnPutIllegal() { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testNulls() { new NullPointerTester().testAllPublicInstanceMethods(create()); } + @J2ktIncompatible @GwtIncompatible // serialize public void testSerializable() { SerializableTester.reserializeAndAssert(create()); diff --git a/guava-tests/test/com/google/common/collect/Collections2Test.java b/guava-tests/test/com/google/common/collect/Collections2Test.java index 2cf05f632cd5..283bce2debd8 100644 --- a/guava-tests/test/com/google/common/collect/Collections2Test.java +++ b/guava-tests/test/com/google/common/collect/Collections2Test.java @@ -25,6 +25,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Predicate; import com.google.common.collect.testing.CollectionTestSuiteBuilder; import com.google.common.collect.testing.TestStringCollectionGenerator; @@ -49,6 +50,7 @@ */ @GwtCompatible(emulated = true) public class Collections2Test extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(Collections2Test.class.getSimpleName()); @@ -67,6 +69,7 @@ public static Test suite() { static final Predicate LENGTH_1 = input -> input.length() == 1; + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilter() { return CollectionTestSuiteBuilder.using( @@ -90,6 +93,7 @@ public Collection create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterAll() { return CollectionTestSuiteBuilder.using( @@ -111,6 +115,7 @@ public Collection create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterLinkedList() { return CollectionTestSuiteBuilder.using( @@ -134,6 +139,7 @@ public Collection create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterNoNulls() { return CollectionTestSuiteBuilder.using( @@ -157,6 +163,7 @@ public Collection create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterFiltered() { return CollectionTestSuiteBuilder.using( @@ -181,6 +188,7 @@ public Collection create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForTransform() { return CollectionTestSuiteBuilder.using( @@ -204,6 +212,7 @@ private static Test testsForTransform() { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); diff --git a/guava-tests/test/com/google/common/collect/EnumBiMapTest.java b/guava-tests/test/com/google/common/collect/EnumBiMapTest.java index fa927e2d8226..19fb8b24333e 100644 --- a/guava-tests/test/com/google/common/collect/EnumBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/EnumBiMapTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.SampleElements; import com.google.common.collect.testing.features.CollectionFeature; @@ -109,6 +110,7 @@ public Currency[] createValueArray(int length) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -293,6 +295,7 @@ public void testSerializable() { EnumBiMap.create(ImmutableMap.of(Currency.DOLLAR, Country.CANADA))); } + @J2ktIncompatible @GwtIncompatible // reflection public void testNulls() { new NullPointerTester().testAllPublicStaticMethods(EnumBiMap.class); diff --git a/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java b/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java index 24f395328803..2995628d1d27 100644 --- a/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.SampleElements; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -102,6 +103,7 @@ public String[] createValueArray(int length) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -217,11 +219,13 @@ public void testEntrySet() { assertEquals(3, uniqueEntries.size()); } + @J2ktIncompatible @GwtIncompatible // serialize public void testSerializable() { SerializableTester.reserializeAndAssert(EnumHashBiMap.create(Currency.class)); } + @J2ktIncompatible @GwtIncompatible // reflection public void testNulls() { new NullPointerTester().testAllPublicStaticMethods(EnumHashBiMap.class); diff --git a/guava-tests/test/com/google/common/collect/EnumMultisetTest.java b/guava-tests/test/com/google/common/collect/EnumMultisetTest.java index 265db21286b7..d446a9849a95 100644 --- a/guava-tests/test/com/google/common/collect/EnumMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/EnumMultisetTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AnEnum; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -44,6 +45,7 @@ @GwtCompatible(emulated = true) public class EnumMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -159,6 +161,7 @@ public static > EnumMultiset create(Iterable elements) { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testEquals() throws Exception { new ClassSanityTester() @@ -168,6 +171,7 @@ public void testEquals() throws Exception { .testEquals(); } + @J2ktIncompatible @GwtIncompatible // reflection public void testNulls() throws Exception { new NullPointerTester() diff --git a/guava-tests/test/com/google/common/collect/EvictingQueueTest.java b/guava-tests/test/com/google/common/collect/EvictingQueueTest.java index 05fdbd0e860a..8b8337e46eea 100644 --- a/guava-tests/test/com/google/common/collect/EvictingQueueTest.java +++ b/guava-tests/test/com/google/common/collect/EvictingQueueTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; import java.util.AbstractList; @@ -187,6 +188,7 @@ public String get(int index) { assertTrue(queue.isEmpty()); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); diff --git a/guava-tests/test/com/google/common/collect/GeneralRangeTest.java b/guava-tests/test/com/google/common/collect/GeneralRangeTest.java index dfa73d62ba88..5d1c73548195 100644 --- a/guava-tests/test/com/google/common/collect/GeneralRangeTest.java +++ b/guava-tests/test/com/google/common/collect/GeneralRangeTest.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Objects; import com.google.common.testing.NullPointerTester; import java.util.Arrays; @@ -219,6 +220,7 @@ public void testReverse() { GeneralRange.range(ORDERING, 3, CLOSED, 5, OPEN).reverse()); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointers() { new NullPointerTester().testAllPublicStaticMethods(GeneralRange.class); diff --git a/guava-tests/test/com/google/common/collect/HashBasedTableTest.java b/guava-tests/test/com/google/common/collect/HashBasedTableTest.java index 8a608aeeea60..7bb51ef31851 100644 --- a/guava-tests/test/com/google/common/collect/HashBasedTableTest.java +++ b/guava-tests/test/com/google/common/collect/HashBasedTableTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; @@ -91,12 +92,14 @@ public void testCreateCopy() { assertEquals((Character) 'a', copy.get("foo", 1)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); SerializableTester.reserializeAndAssert(table); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerStatic() { new NullPointerTester().testAllPublicStaticMethods(HashBasedTable.class); diff --git a/guava-tests/test/com/google/common/collect/HashBiMapTest.java b/guava-tests/test/com/google/common/collect/HashBiMapTest.java index 9541434286d4..74dc3b77af07 100644 --- a/guava-tests/test/com/google/common/collect/HashBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/HashBiMapTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; @@ -52,6 +53,7 @@ protected BiMap create(Entry[] entries) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/guava-tests/test/com/google/common/collect/HashMultimapTest.java b/guava-tests/test/com/google/common/collect/HashMultimapTest.java index 6cde6c56fda9..b1744b347f16 100644 --- a/guava-tests/test/com/google/common/collect/HashMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/HashMultimapTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.features.MapFeature; @@ -36,6 +37,7 @@ @GwtCompatible(emulated = true) public class HashMultimapTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/guava-tests/test/com/google/common/collect/HashMultisetTest.java b/guava-tests/test/com/google/common/collect/HashMultisetTest.java index 030c927a209c..b2e5fe326cc8 100644 --- a/guava-tests/test/com/google/common/collect/HashMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/HashMultisetTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.google.MultisetFeature; @@ -41,6 +42,7 @@ @GwtCompatible(emulated = true) public class HashMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -90,6 +92,7 @@ public void testCreateFromIterable() { assertEquals(2, multiset.count("foo")); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializationContainingSelf() { Multiset> multiset = HashMultiset.create(); @@ -99,6 +102,7 @@ public void testSerializationContainingSelf() { assertSame(copy, copy.iterator().next()); } + @J2ktIncompatible @GwtIncompatible // Only used by @GwtIncompatible code private static class MultisetHolder implements Serializable { public Multiset member; @@ -110,6 +114,7 @@ private static class MultisetHolder implements Serializable { private static final long serialVersionUID = 1L; } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializationIndirectSelfReference() { Multiset multiset = HashMultiset.create(); diff --git a/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java index 24eddecd4889..605241e20f76 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Equivalence; import com.google.common.collect.ImmutableBiMap.Builder; import com.google.common.collect.testing.features.CollectionFeature; @@ -57,6 +58,7 @@ public class ImmutableBiMapTest extends TestCase { // TODO: Reduce duplication of ImmutableMapTest code + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -668,12 +670,14 @@ public void testDoubleInverse() { assertSame(bimap, bimap.inverse().inverse()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testEmptySerialization() { ImmutableBiMap bimap = ImmutableBiMap.of(); assertSame(bimap, SerializableTester.reserializeAndAssert(bimap)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization() { ImmutableBiMap bimap = @@ -684,6 +688,7 @@ public void testSerialization() { assertSame(copy, copy.inverse().inverse()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testInverseSerialization() { ImmutableBiMap bimap = diff --git a/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java index d39e8b4bcfc6..90c90c7d9c6b 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Equivalence; import com.google.common.base.Function; import com.google.common.collect.testing.AnEnum; @@ -58,6 +59,7 @@ protected Map create(Entry[] entries) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java index 1b1252c22f55..40aeb8de4421 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Equivalence; import com.google.common.collect.ImmutableListMultimap.Builder; import com.google.common.collect.testing.features.CollectionSize; @@ -71,6 +72,7 @@ protected ListMultimap create(Entry[] entries) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -585,6 +587,7 @@ private static void assertMultimapEquals( } } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization() { Multimap multimap = createMultimap(); @@ -598,12 +601,14 @@ public void testSerialization() { assertEquals(HashMultiset.create(multimap.values()), HashMultiset.create(valuesCopy)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testEmptySerialization() { Multimap multimap = ImmutableListMultimap.of(); assertSame(multimap, SerializableTester.reserialize(multimap)); } + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { diff --git a/guava-tests/test/com/google/common/collect/ImmutableListTest.java b/guava-tests/test/com/google/common/collect/ImmutableListTest.java index c881e0bf4193..4c338a7b96fa 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableListTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableListTest.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.ListTestSuiteBuilder; import com.google.common.collect.testing.MinimalCollection; @@ -57,6 +58,7 @@ @GwtCompatible(emulated = true) public class ImmutableListTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -459,6 +461,7 @@ public void testToImmutableList() { // Basic tests + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { @@ -467,18 +470,21 @@ public void testNullPointers() { tester.testAllPublicInstanceMethods(ImmutableList.of(1, 2, 3)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_empty() { Collection c = ImmutableList.of(); assertSame(c, SerializableTester.reserialize(c)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_singleton() { Collection c = ImmutableList.of("a"); SerializableTester.reserializeAndAssert(c); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_multiple() { Collection c = ImmutableList.of("a", "b", "c"); diff --git a/guava-tests/test/com/google/common/collect/ImmutableMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMapTest.java index ce462ec8218e..9e48f94b6f80 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMapTest.java @@ -23,6 +23,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Equivalence; import com.google.common.collect.ImmutableMap.Builder; import com.google.common.collect.testing.AnEnum; @@ -77,6 +78,7 @@ @SuppressWarnings("AlwaysThrows") public class ImmutableMapTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -903,6 +905,7 @@ public void testAsMultimapCaches() { assertSame(multimap1, multimap2); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { @@ -960,6 +963,7 @@ public void testCopyOfEnumMap() { assertTrue(ImmutableMap.copyOf(map) instanceof ImmutableEnumMap); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testViewSerialization() { Map map = ImmutableMap.of("one", 1, "two", 2, "three", 3); @@ -971,6 +975,7 @@ public void testViewSerialization() { assertTrue(reserializedValues instanceof ImmutableCollection); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testKeySetIsSerializable_regularImmutableMap() { class NonSerializableClass {} @@ -982,6 +987,7 @@ class NonSerializableClass {} LenientSerializableTester.reserializeAndAssertLenient(set); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testKeySetIsSerializable_jdkBackedImmutableMap() { class NonSerializableClass {} @@ -996,6 +1002,7 @@ class NonSerializableClass {} LenientSerializableTester.reserializeAndAssertLenient(set); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testValuesCollectionIsSerializable_regularImmutableMap() { class NonSerializableClass {} @@ -1007,6 +1014,7 @@ class NonSerializableClass {} LenientSerializableTester.reserializeAndAssertElementsEqual(collection); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testValuesCollectionIsSerializable_jdkBackedImmutableMap() { class NonSerializableClass {} @@ -1022,6 +1030,7 @@ class NonSerializableClass {} } // TODO: Re-enable this test after moving to new serialization format in ImmutableMap. + @J2ktIncompatible @GwtIncompatible // SerializableTester @SuppressWarnings("unchecked") public void ignore_testSerializationNoDuplication_regularImmutableMap() throws Exception { @@ -1052,6 +1061,7 @@ public void ignore_testSerializationNoDuplication_regularImmutableMap() throws E } // TODO: Re-enable this test after moving to new serialization format in ImmutableMap. + @J2ktIncompatible @GwtIncompatible // SerializableTester @SuppressWarnings("unchecked") public void ignore_testSerializationNoDuplication_jdkBackedImmutableMap() throws Exception { diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java index bf32922e1468..e8f24ce116bc 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.ImmutableMultimap.Builder; import com.google.common.collect.testing.SampleElements; import com.google.common.collect.testing.SampleElements.Unhashables; @@ -127,6 +128,7 @@ public void testEquals() { .testEquals(); } + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java index 2e0b1d23bd76..112b79321bd1 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.ListTestSuiteBuilder; import com.google.common.collect.testing.MinimalCollection; import com.google.common.collect.testing.SetTestSuiteBuilder; @@ -57,6 +58,7 @@ @GwtCompatible(emulated = true) public class ImmutableMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite // TODO(cpovirk): add to collect/gwt/suites public static Test suite() { TestSuite suite = new TestSuite(); @@ -577,6 +579,7 @@ public void testBuilderSetCountIllegal() { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { @@ -584,12 +587,14 @@ public void testNullPointers() { tester.testAllPublicStaticMethods(ImmutableMultiset.class); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_empty() { Collection c = ImmutableMultiset.of(); assertSame(c, SerializableTester.reserialize(c)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_multiple() { Collection c = ImmutableMultiset.of("a", "b", "a"); @@ -597,6 +602,7 @@ public void testSerialization_multiple() { assertThat(copy).containsExactly("a", "a", "b").inOrder(); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_elementSet() { Multiset c = ImmutableMultiset.of("a", "b", "a"); @@ -604,6 +610,7 @@ public void testSerialization_elementSet() { assertThat(copy).containsExactly("a", "b").inOrder(); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_entrySet() { Multiset c = ImmutableMultiset.of("a", "b", "c"); @@ -639,6 +646,7 @@ public void testAsList() { assertEquals(4, list.lastIndexOf("b")); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization_asList() { ImmutableMultiset multiset = ImmutableMultiset.of("a", "a", "b", "b", "b"); diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java index b5eeb58bc406..741788ff2eaa 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Equivalence; import com.google.common.collect.ImmutableSetMultimap.Builder; import com.google.common.collect.testing.features.CollectionSize; @@ -71,6 +72,7 @@ protected SetMultimap create(Entry[] entries) { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -581,6 +583,7 @@ private static void assertMultimapEquals( } } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization() { Multimap multimap = createMultimap(); @@ -594,12 +597,14 @@ public void testSerialization() { assertEquals(HashMultiset.create(multimap.values()), HashMultiset.create(valuesCopy)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testEmptySerialization() { Multimap multimap = ImmutableSetMultimap.of(); assertSame(multimap, SerializableTester.reserialize(multimap)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSortedSerialization() { Multimap multimap = @@ -627,6 +632,7 @@ private ImmutableSetMultimap createMultimap() { .build(); } + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNulls() throws Exception { diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetTest.java index 027e6a2035be..ab8c2daaf828 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSetTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Equivalence; import com.google.common.collect.ImmutableSet.Builder; import com.google.common.collect.testing.ListTestSuiteBuilder; @@ -58,6 +59,7 @@ @GwtCompatible(emulated = true) public class ImmutableSetTest extends AbstractImmutableSetTest { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index bc6c014d49ef..14492163a0d1 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Equivalence; import com.google.common.collect.ImmutableSortedMap.Builder; import com.google.common.collect.testing.ListTestSuiteBuilder; @@ -65,6 +66,7 @@ public class ImmutableSortedMapTest extends TestCase { // TODO: Avoid duplicating code in ImmutableMapTest + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -684,6 +686,7 @@ public void testNullGet() { assertNull(map.get(null)); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { @@ -768,6 +771,7 @@ public void testMutableValues() { assertEquals(intMap.hashCode(), map.hashCode()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testViewSerialization() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3); diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java index 3b66aa90d60c..e35819c8edd9 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Equivalence; import com.google.common.collect.testing.ListTestSuiteBuilder; import com.google.common.collect.testing.NavigableSetTestSuiteBuilder; @@ -62,6 +63,7 @@ @GwtCompatible(emulated = true) public class ImmutableSortedSetTest extends AbstractImmutableSetTest { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -234,6 +236,7 @@ protected > SortedSet copyOf(Iterator set = of(); @@ -326,6 +330,7 @@ public void testSingle_last() { assertEquals("e", set.last()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSingle_serialization() { SortedSet set = of("e"); @@ -425,6 +430,7 @@ public void testOf_subSet() { } } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testOf_subSetSerialization() { SortedSet set = of("e", "f", "b", "d", "c"); @@ -441,6 +447,7 @@ public void testOf_last() { assertEquals("f", set.last()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testOf_serialization() { SortedSet set = of("e", "f", "b", "d", "c"); @@ -562,6 +569,7 @@ public void testExplicit_last() { assertEquals("jumped", set.last()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testExplicitEmpty_serialization() { SortedSet set = ImmutableSortedSet.orderedBy(STRING_LENGTH).build(); @@ -571,6 +579,7 @@ public void testExplicitEmpty_serialization() { assertSame(set.comparator(), copy.comparator()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testExplicit_serialization() { SortedSet set = @@ -866,6 +875,7 @@ public void testContainsAll_differentComparator() { assertFalse(set.containsAll(Sets.newTreeSet(asList("f", "d", "a")))); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testDifferentComparator_serialization() { // don't use Collections.reverseOrder(); it didn't reserialize to the same instance in JDK5 @@ -983,6 +993,7 @@ public void testAsList() { assertSame(list, ImmutableList.copyOf(set)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester, ImmutableSortedAsList public void testAsListReturnTypeAndSerialization() { ImmutableSet set = ImmutableSortedSet.of("a", "e", "i", "o", "u"); @@ -999,6 +1010,7 @@ public void testSubsetAsList() { assertEquals(list, ImmutableList.copyOf(set)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester, ImmutableSortedAsList public void testSubsetAsListReturnTypeAndSerialization() { ImmutableSet set = ImmutableSortedSet.of("a", "e", "i", "o", "u").subSet("c", "r"); diff --git a/guava-tests/test/com/google/common/collect/ImmutableTableTest.java b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java index 9362a6b201aa..4838ea7c2c8b 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableTableTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.Table.Cell; import com.google.common.testing.CollectorTester; import com.google.common.testing.SerializableTester; @@ -486,6 +487,7 @@ public void testOverflowCondition() { assertTrue(builder.build() instanceof SparseImmutableTable); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @Override public void testNullPointerInstance() { diff --git a/guava-tests/test/com/google/common/collect/IterablesTest.java b/guava-tests/test/com/google/common/collect/IterablesTest.java index 24f3d5da7b74..cdc2637a0e5d 100644 --- a/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -27,6 +27,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.base.Predicates; @@ -542,6 +543,7 @@ private static void assertCanIterateAgain(Iterable iterable) { for (@SuppressWarnings("unused") Object obj : iterable) {} } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); @@ -1432,6 +1434,7 @@ public void testMergeSorted_skipping_pyramid() { verifyMergeSorted(iterables, allIntegers); } + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testIterables_nullCheck() throws Exception { diff --git a/guava-tests/test/com/google/common/collect/IteratorsTest.java b/guava-tests/test/com/google/common/collect/IteratorsTest.java index da59d52480fd..31879d542e8f 100644 --- a/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -29,6 +29,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.common.base.Predicates; @@ -67,6 +68,7 @@ @GwtCompatible(emulated = true) public class IteratorsTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(IteratorsTest.class.getSimpleName()); @@ -892,6 +894,7 @@ public void testAddAllToSet() { assertFalse(changed); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); @@ -1584,6 +1587,7 @@ public void testRetainAll() { assertEquals(newArrayList("b", "d"), list); } + @J2ktIncompatible @GwtIncompatible // ListTestSuiteBuilder private static Test testsForRemoveAllAndRetainAll() { return ListTestSuiteBuilder.using( diff --git a/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java b/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java index 678fc2aa638a..7d76214430d7 100644 --- a/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java @@ -26,6 +26,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -53,6 +54,7 @@ @GwtCompatible(emulated = true) public class LinkedHashMultimapTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -136,6 +138,7 @@ public void testOrderingSynchronized() { assertOrderingReadOnly(Multimaps.synchronizedMultimap(multimap)); } + @J2ktIncompatible @GwtIncompatible // SeriazableTester public void testSerializationOrdering() { Multimap multimap = initializeMultimap5(); @@ -143,6 +146,7 @@ public void testSerializationOrdering() { assertOrderingReadOnly(copy); } + @J2ktIncompatible @GwtIncompatible // SeriazableTester public void testSerializationOrderingKeysAndEntries() { Multimap multimap = LinkedHashMultimap.create(); diff --git a/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java b/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java index da7e86867d10..4f4289d464df 100644 --- a/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.google.MultisetFeature; @@ -40,6 +41,7 @@ @GwtCompatible(emulated = true) public class LinkedHashMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java b/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java index d57d5c044c87..8018cf227f7b 100644 --- a/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java @@ -27,6 +27,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.ListIteratorTester; import com.google.common.collect.testing.features.CollectionFeature; @@ -56,6 +57,7 @@ @GwtCompatible(emulated = true) public class LinkedListMultimapTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/guava-tests/test/com/google/common/collect/ListsImplTest.java b/guava-tests/test/com/google/common/collect/ListsImplTest.java index 73071de1253e..c6eba5d7ef8b 100644 --- a/guava-tests/test/com/google/common/collect/ListsImplTest.java +++ b/guava-tests/test/com/google/common/collect/ListsImplTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; @@ -70,6 +71,7 @@ public Modifiability modifiability() { } } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -82,6 +84,7 @@ public static Test suite() { return suite; } + @J2ktIncompatible @GwtIncompatible // suite sub call private static TestSuite createExampleSuite(ListExample example) { TestSuite resultSuite = new TestSuite(ListsImplTest.class); diff --git a/guava-tests/test/com/google/common/collect/ListsTest.java b/guava-tests/test/com/google/common/collect/ListsTest.java index 33736d6d8116..2de28913bf85 100644 --- a/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/guava-tests/test/com/google/common/collect/ListsTest.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.collect.testing.IteratorTester; @@ -98,6 +99,7 @@ public String apply(Number n) { private static final long serialVersionUID = 0; } + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -405,6 +407,7 @@ public void testNewCOWALFromIterable() { assertEquals(SOME_COLLECTION, list); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); @@ -441,6 +444,7 @@ public void testArraysAsList() { } } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testAsList1() { List list = Lists.asList("foo", new String[] {"bar", "baz"}); @@ -499,6 +503,7 @@ protected Iterator newTargetIterator() { }.test(); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testAsList2Small() { List list = Lists.asList("foo", "bar", new String[0]); diff --git a/guava-tests/test/com/google/common/collect/MapsTest.java b/guava-tests/test/com/google/common/collect/MapsTest.java index f29151e4bb89..57e21b4363cd 100644 --- a/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/guava-tests/test/com/google/common/collect/MapsTest.java @@ -26,6 +26,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Converter; import com.google.common.base.Equivalence; import com.google.common.base.Function; @@ -114,6 +115,7 @@ public void testCapacityForNegativeSizeFails() { * *

    This test may fail miserably on non-OpenJDK environments... */ + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // relies on assumptions about OpenJDK public void testNewHashMapWithExpectedSize_wontGrow() throws Exception { @@ -131,6 +133,7 @@ public void testNewHashMapWithExpectedSize_wontGrow() throws Exception { } /** Same test as above but for newLinkedHashMapWithExpectedSize */ + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // relies on assumptions about OpenJDK public void testNewLinkedHashMapWithExpectedSize_wontGrow() throws Exception { @@ -145,6 +148,7 @@ public void testNewLinkedHashMapWithExpectedSize_wontGrow() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // reflection private static void assertWontGrow( int size, @@ -185,6 +189,7 @@ private static void assertWontGrow( .isAtMost(bucketsOf(referenceMap)); } + @J2ktIncompatible @GwtIncompatible // reflection private static int bucketsOf(HashMap hashMap) throws Exception { Field tableField = HashMap.class.getDeclaredField("table"); @@ -381,6 +386,7 @@ public void testToStringImplWithNullValues() throws Exception { assertEquals(hashmap.toString(), Maps.toStringImpl(hashmap)); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointerExceptions() { diff --git a/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java index 9a39e192ddc7..b43f2d704520 100644 --- a/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java +++ b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java @@ -23,6 +23,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.IteratorFeature; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.QueueTestSuiteBuilder; @@ -58,6 +59,7 @@ public class MinMaxPriorityQueueTest extends TestCase { private static final Ordering SOME_COMPARATOR = Ordering.natural().reverse(); + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -886,6 +888,7 @@ public void testIsEvenLevel() { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointers() { NullPointerTester tester = new NullPointerTester(); diff --git a/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java b/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java index 5528aba94c67..488881004685 100644 --- a/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.MultimapBuilder.MultimapBuilderWithKeys; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; @@ -69,6 +70,7 @@ public void testTreeKeys_gwtCompatible() { assertTrue(multimap.asMap() instanceof SortedMap); } + @J2ktIncompatible @GwtIncompatible // serialization public void testSerialization() throws Exception { for (MultimapBuilderWithKeys builderWithKeys : @@ -93,6 +95,7 @@ public void testSerialization() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // serialization private static void reserializeAndAssert(Object object) throws Exception { Object copy = reserialize(object); @@ -100,6 +103,7 @@ private static void reserializeAndAssert(Object object) throws Exception { assertEquals(object.getClass(), copy.getClass()); } + @J2ktIncompatible @GwtIncompatible // serialization private static Object reserialize(Object object) throws Exception { ByteArrayOutputStream bytes = new ByteArrayOutputStream(); diff --git a/guava-tests/test/com/google/common/collect/MultimapsTest.java b/guava-tests/test/com/google/common/collect/MultimapsTest.java index eecc158fbed0..ff30e46d96a2 100644 --- a/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -27,6 +27,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Equivalence; import com.google.common.base.Function; import com.google.common.base.Functions; @@ -169,6 +170,7 @@ public void testUnmodifiableArrayListMultimap() { checkUnmodifiableMultimap(ArrayListMultimap.create(), true); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableArrayListMultimap() { Multimap unmodifiable = @@ -199,6 +201,7 @@ public void testUnmodifiableHashMultimap() { checkUnmodifiableMultimap(HashMultimap.create(), false); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableHashMultimap() { Multimap unmodifiable = @@ -211,6 +214,7 @@ public void testUnmodifiableTreeMultimap() { checkUnmodifiableMultimap(TreeMultimap.create(), false, "null", 42); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableTreeMultimap() { Multimap unmodifiable = @@ -224,6 +228,7 @@ public void testUnmodifiableSynchronizedArrayListMultimap() { Multimaps.synchronizedListMultimap(ArrayListMultimap.create()), true); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableSynchronizedArrayListMultimap() { Multimap unmodifiable = @@ -241,6 +246,7 @@ public void testUnmodifiableSynchronizedHashMultimap() { Multimaps.synchronizedSetMultimap(HashMultimap.create()), false); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableSynchronizedHashMultimap() { Multimap unmodifiable = @@ -261,6 +267,7 @@ public void testUnmodifiableSynchronizedTreeMultimap() { assertSame(INT_COMPARATOR, multimap.valueComparator()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerializingUnmodifiableSynchronizedTreeMultimap() { TreeMultimap delegate = @@ -506,6 +513,7 @@ public void testForMap() { assertEquals(multimapView, ArrayListMultimap.create()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testForMapSerialization() { Map map = Maps.newHashMap(); @@ -689,6 +697,7 @@ public void testNewMultimapValueCollectionMatchesList() { assertTrue(multimap.get(Color.BLUE) instanceof List); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testNewMultimapSerialization() { CountingSupplier> factory = new QueueSupplier(); @@ -724,6 +733,7 @@ public void testNewListMultimap() { assertTrue(multimap.asMap() instanceof SortedMap); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testNewListMultimapSerialization() { CountingSupplier> factory = new ListSupplier(); @@ -755,6 +765,7 @@ public void testNewSetMultimap() { assertEquals(Sets.newHashSet(4, 3, 1), multimap.get(Color.BLUE)); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testNewSetMultimapSerialization() { CountingSupplier> factory = new SetSupplier(); @@ -788,6 +799,7 @@ public void testNewSortedSetMultimap() { assertEquals(INT_COMPARATOR, multimap.valueComparator()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testNewSortedSetMultimapSerialization() { CountingSupplier> factory = new SortedSetSupplier(); @@ -1057,6 +1069,7 @@ public void testFilteredKeysListMultimapGetBadValue() { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { diff --git a/guava-tests/test/com/google/common/collect/MultisetsTest.java b/guava-tests/test/com/google/common/collect/MultisetsTest.java index b6b67aa80615..a8d8e341c3eb 100644 --- a/guava-tests/test/com/google/common/collect/MultisetsTest.java +++ b/guava-tests/test/com/google/common/collect/MultisetsTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.DerivedComparable; import com.google.common.testing.CollectorTester; import com.google.common.testing.NullPointerTester; @@ -293,6 +294,7 @@ public void testToMultisetCountFunction() { Multisets.immutableEntry("c", 3)); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointers() { diff --git a/guava-tests/test/com/google/common/collect/ObjectArraysTest.java b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java index 32d043f74543..50f781469e56 100644 --- a/guava-tests/test/com/google/common/collect/ObjectArraysTest.java +++ b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.NullPointerTester; import java.io.Serializable; import java.util.Arrays; @@ -34,6 +35,7 @@ @GwtCompatible(emulated = true) public class ObjectArraysTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); diff --git a/guava-tests/test/com/google/common/collect/OrderingTest.java b/guava-tests/test/com/google/common/collect/OrderingTest.java index 8a8854097ca2..efa607e53be8 100644 --- a/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -25,6 +25,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.collect.Ordering.ArbitraryOrdering; @@ -1139,6 +1140,7 @@ public T apply(Composite from) { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNullPointerExceptions() { NullPointerTester tester = new NullPointerTester(); diff --git a/guava-tests/test/com/google/common/collect/SetOperationsTest.java b/guava-tests/test/com/google/common/collect/SetOperationsTest.java index 9a26f29457b3..2dc4a7521ab2 100644 --- a/guava-tests/test/com/google/common/collect/SetOperationsTest.java +++ b/guava-tests/test/com/google/common/collect/SetOperationsTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.SetTestSuiteBuilder; import com.google.common.collect.testing.TestStringSetGenerator; import com.google.common.collect.testing.features.CollectionFeature; @@ -38,6 +39,7 @@ */ @GwtCompatible(emulated = true) public class SetOperationsTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/guava-tests/test/com/google/common/collect/SetsTest.java b/guava-tests/test/com/google/common/collect/SetsTest.java index c8cb0e0bb762..2727792e04a8 100644 --- a/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/guava-tests/test/com/google/common/collect/SetsTest.java @@ -32,6 +32,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Predicate; import com.google.common.collect.testing.AnEnum; import com.google.common.collect.testing.IteratorTester; @@ -108,6 +109,7 @@ public Iterator iterator() { private static final Comparator SOME_COMPARATOR = Collections.reverseOrder(); + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -220,6 +222,7 @@ public List order(List insertionOrder) { return suite; } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilter() { return SetTestSuiteBuilder.using( @@ -243,6 +246,7 @@ public Set create(String[] elements) { .createTestSuite(); } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterNoNulls() { TestSuite suite = new TestSuite(); @@ -294,6 +298,7 @@ public List order(List insertionOrder) { return suite; } + @J2ktIncompatible @GwtIncompatible // suite private static Test testsForFilterFiltered() { return SetTestSuiteBuilder.using( @@ -372,6 +377,7 @@ public void testToImmutableEnumSetReused() { assertThat(set).containsExactly(SomeEnum.A, SomeEnum.B); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testImmutableEnumSet_serialized() { Set units = Sets.immutableEnumSet(SomeEnum.D, SomeEnum.B); @@ -393,6 +399,7 @@ public void testImmutableEnumSet_fromIterable() { assertThat(two).containsExactly(SomeEnum.B, SomeEnum.D).inOrder(); } + @J2ktIncompatible @GwtIncompatible // java serialization not supported in GWT. public void testImmutableEnumSet_deserializationMakesDefensiveCopy() throws Exception { ImmutableSet original = Sets.immutableEnumSet(SomeEnum.A, SomeEnum.B); @@ -408,6 +415,7 @@ public void testImmutableEnumSet_deserializationMakesDefensiveCopy() throws Exce assertTrue(deserialized.contains(SomeEnum.A)); } + @J2ktIncompatible @GwtIncompatible // java serialization not supported in GWT. private static byte[] serializeWithBackReference(Object original, int handleOffset) throws IOException { @@ -667,6 +675,7 @@ public void testComplementOfEmptySetWithoutTypeDoesntWork() { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester @AndroidIncompatible // see ImmutableTableTest.testNullPointerInstance public void testNullPointerExceptions() { @@ -682,6 +691,7 @@ public void testNewSetFromMap() { verifySetContents(set, SOME_COLLECTION); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testNewSetFromMapSerialization() { Set set = Sets.newSetFromMap(new LinkedHashMap()); diff --git a/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java b/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java index 04f4fe67c735..6cba5d359b99 100644 --- a/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Objects; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -42,6 +43,7 @@ @SuppressWarnings("serial") // No serialization is used in this test @GwtCompatible(emulated = true) public class SimpleAbstractMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/guava-tests/test/com/google/common/collect/SortedListsTest.java b/guava-tests/test/com/google/common/collect/SortedListsTest.java index a6cddcb723cc..a9b5e73bbae2 100644 --- a/guava-tests/test/com/google/common/collect/SortedListsTest.java +++ b/guava-tests/test/com/google/common/collect/SortedListsTest.java @@ -16,6 +16,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.SortedLists.KeyAbsentBehavior; import com.google.common.collect.SortedLists.KeyPresentBehavior; import com.google.common.testing.NullPointerTester; @@ -124,6 +125,7 @@ public void testWithDups() { } } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNulls() { new NullPointerTester().testAllPublicStaticMethods(SortedLists.class); diff --git a/guava-tests/test/com/google/common/collect/TableCollectionTest.java b/guava-tests/test/com/google/common/collect/TableCollectionTest.java index 18ad54939f4f..eddcfe8b1d08 100644 --- a/guava-tests/test/com/google/common/collect/TableCollectionTest.java +++ b/guava-tests/test/com/google/common/collect/TableCollectionTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Functions; import com.google.common.collect.Table.Cell; @@ -74,6 +75,7 @@ public class TableCollectionTest extends TestCase { CollectionFeature.ALLOWS_NULL_QUERIES }; + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); diff --git a/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java b/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java index d6330a246150..2112ac6ed5fe 100644 --- a/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import org.checkerframework.checker.nullness.qual.Nullable; @@ -51,6 +52,7 @@ protected Table create(Object... data) { } // Null support depends on the underlying table and function. + @J2ktIncompatible @GwtIncompatible // NullPointerTester @Override public void testNullPointerInstance() {} diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java index 7975111ed920..d1f6e880c68b 100644 --- a/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java +++ b/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.SortedMapTestSuiteBuilder; import com.google.common.collect.testing.TestStringSortedMapGenerator; import com.google.common.collect.testing.features.CollectionFeature; @@ -43,6 +44,7 @@ */ @GwtCompatible(emulated = true) public class TreeBasedTableTest extends AbstractTableTest { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -119,6 +121,7 @@ public void testCreateCopy() { assertEquals(original, table); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testSerialization() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); diff --git a/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java b/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java index addcfb74f856..b37a13bd0732 100644 --- a/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java +++ b/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.DerivedComparable; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.NavigableMapTestSuiteBuilder; @@ -59,6 +60,7 @@ @GwtCompatible(emulated = true) public class TreeMultimapNaturalTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -407,6 +409,7 @@ public void testComparators() { assertEquals(Ordering.natural(), multimap.valueComparator()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testExplicitComparatorSerialization() { TreeMultimap multimap = createPopulate(); @@ -417,6 +420,7 @@ public void testExplicitComparatorSerialization() { assertEquals(multimap.valueComparator(), copy.valueComparator()); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testTreeMultimapDerived() { TreeMultimap multimap = TreeMultimap.create(); @@ -443,6 +447,7 @@ public void testTreeMultimapDerived() { SerializableTester.reserializeAndAssert(multimap); } + @J2ktIncompatible @GwtIncompatible // SerializableTester public void testTreeMultimapNonGeneric() { TreeMultimap multimap = TreeMultimap.create(); @@ -500,6 +505,7 @@ public void testTailSetClear() { assertEquals(4, multimap.keys().size()); } + @J2ktIncompatible @GwtIncompatible // reflection public void testKeySetBridgeMethods() { for (Method m : TreeMultimap.class.getMethods()) { @@ -510,6 +516,7 @@ public void testKeySetBridgeMethods() { fail("No bridge method found"); } + @J2ktIncompatible @GwtIncompatible // reflection public void testAsMapBridgeMethods() { for (Method m : TreeMultimap.class.getMethods()) { @@ -519,6 +526,7 @@ public void testAsMapBridgeMethods() { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testGetBridgeMethods() { for (Method m : TreeMultimap.class.getMethods()) { diff --git a/guava-tests/test/com/google/common/collect/TreeMultisetTest.java b/guava-tests/test/com/google/common/collect/TreeMultisetTest.java index 12da1f1de0e1..42e7cc45bbb7 100644 --- a/guava-tests/test/com/google/common/collect/TreeMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/TreeMultisetTest.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers.NullsBeforeB; import com.google.common.collect.testing.NavigableSetTestSuiteBuilder; import com.google.common.collect.testing.TestStringSetGenerator; @@ -49,6 +50,7 @@ @GwtCompatible(emulated = true) public class TreeMultisetTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { TestSuite suite = new TestSuite(); @@ -355,6 +357,7 @@ public void testSubMultisetSize() { assertEquals(Integer.MAX_VALUE, ms.tailMultiset("a", CLOSED).size()); } + @J2ktIncompatible @GwtIncompatible // reflection @AndroidIncompatible // Reflection bug, or actual binary compatibility problem? public void testElementSetBridgeMethods() { diff --git a/guava-tests/test/com/google/common/collect/TreeTraverserTest.java b/guava-tests/test/com/google/common/collect/TreeTraverserTest.java index 690838c5dec8..7c49fac7f318 100644 --- a/guava-tests/test/com/google/common/collect/TreeTraverserTest.java +++ b/guava-tests/test/com/google/common/collect/TreeTraverserTest.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.testing.NullPointerTester; import java.util.Arrays; @@ -110,6 +111,7 @@ public void testUsing() { assertThat(iterationOrder(ADAPTER_USING_USING.preOrderTraversal(h))).isEqualTo("hdabcegf"); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNulls() { NullPointerTester tester = new NullPointerTester(); From 5fb34c0744bcb0933879f44f38d6dd387eb93bcb Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 19 Feb 2024 12:32:03 -0800 Subject: [PATCH 154/216] Add `@NullMarked` to collection tests In preparation for running tests with J2KT. There are no nullness annotation fixes in this change. Those will be in smaller, more targeted followup changes. RELNOTES=n/a PiperOrigin-RevId: 608383923 --- .../com/google/common/collect/AbstractFilteredMapTest.java | 1 + .../com/google/common/collect/AbstractImmutableSetTest.java | 1 + .../google/common/collect/AbstractImmutableTableTest.java | 1 + .../test/com/google/common/collect/AbstractIteratorTest.java | 1 + .../test/com/google/common/collect/AbstractMapEntryTest.java | 1 + .../common/collect/AbstractMapsTransformValuesTest.java | 1 + .../collect/AbstractMultimapAsMapImplementsMapTest.java | 1 + .../common/collect/AbstractSequentialIteratorTest.java | 1 + .../com/google/common/collect/AbstractTableReadTest.java | 1 + .../test/com/google/common/collect/AbstractTableTest.java | 1 + .../com/google/common/collect/ArrayListMultimapTest.java | 1 + .../test/com/google/common/collect/ArrayTableTest.java | 1 + .../test/com/google/common/collect/Collections2Test.java | 1 + .../test/com/google/common/collect/ComparatorsTest.java | 1 + .../test/com/google/common/collect/ComparisonChainTest.java | 1 + .../test/com/google/common/collect/ContiguousSetTest.java | 2 ++ .../test/com/google/common/collect/CountTest.java | 1 + .../com/google/common/collect/EmptyImmutableTableTest.java | 1 + .../test/com/google/common/collect/EnumBiMapTest.java | 1 + .../test/com/google/common/collect/EvictingQueueTest.java | 1 + .../test/com/google/common/collect/FilteredBiMapTest.java | 1 + .../test/com/google/common/collect/FilteredMapTest.java | 1 + .../com/google/common/collect/FilteredSortedMapTest.java | 1 + .../common/collect/ForMapMultimapAsMapImplementsMapTest.java | 1 + .../common/collect/ForwardingSortedMapImplementsMapTest.java | 1 + .../test/com/google/common/collect/GeneralRangeTest.java | 1 + .../google/common/collect/HashBasedTableColumnMapTest.java | 1 + .../com/google/common/collect/HashBasedTableColumnTest.java | 1 + .../com/google/common/collect/HashBasedTableRowMapTest.java | 1 + .../com/google/common/collect/HashBasedTableRowTest.java | 1 + .../test/com/google/common/collect/HashBasedTableTest.java | 1 + .../test/com/google/common/collect/HashBiMapTest.java | 1 + .../test/com/google/common/collect/HashMultimapTest.java | 1 + .../test/com/google/common/collect/HashMultisetTest.java | 1 + .../test/com/google/common/collect/HashingTest.java | 1 + .../test/com/google/common/collect/ImmutableBiMapTest.java | 1 + .../test/com/google/common/collect/ImmutableEnumMapTest.java | 1 + .../com/google/common/collect/ImmutableListMultimapTest.java | 1 + .../test/com/google/common/collect/ImmutableListTest.java | 1 + .../test/com/google/common/collect/ImmutableMapTest.java | 1 + .../collect/ImmutableMultimapAsMapImplementsMapTest.java | 1 + .../com/google/common/collect/ImmutableMultimapTest.java | 1 + .../com/google/common/collect/ImmutableMultisetTest.java | 1 + .../collect/ImmutableSetMultimapAsMapImplementsMapTest.java | 1 + .../com/google/common/collect/ImmutableSetMultimapTest.java | 1 + .../test/com/google/common/collect/ImmutableSetTest.java | 1 + .../com/google/common/collect/ImmutableSortedMapTest.java | 1 + .../com/google/common/collect/ImmutableSortedSetTest.java | 1 + .../test/com/google/common/collect/ImmutableTableTest.java | 1 + .../test/com/google/common/collect/IterablesTest.java | 1 + .../test/com/google/common/collect/IteratorsTest.java | 1 + .../test/com/google/common/collect/LegacyComparable.java | 1 + .../com/google/common/collect/LinkedHashMultimapTest.java | 1 + .../com/google/common/collect/LinkedHashMultisetTest.java | 1 + .../com/google/common/collect/LinkedListMultimapTest.java | 1 + .../test/com/google/common/collect/ListsImplTest.java | 1 + .../test/com/google/common/collect/ListsTest.java | 1 + .../google/common/collect/MapsSortedTransformValuesTest.java | 1 + .../guava-tests/test/com/google/common/collect/MapsTest.java | 1 + .../com/google/common/collect/MapsTransformValuesTest.java | 1 + .../collect/MapsTransformValuesUnmodifiableIteratorTest.java | 1 + .../com/google/common/collect/MinMaxPriorityQueueTest.java | 1 + .../test/com/google/common/collect/MultimapBuilderTest.java | 1 + .../test/com/google/common/collect/MultimapsTest.java | 1 + .../common/collect/MultimapsTransformValuesAsMapTest.java | 1 + .../google/common/collect/MultisetsImmutableEntryTest.java | 1 + .../test/com/google/common/collect/MultisetsTest.java | 1 + .../test/com/google/common/collect/NewCustomTableTest.java | 1 + .../test/com/google/common/collect/ObjectArraysTest.java | 1 + .../test/com/google/common/collect/OrderingTest.java | 1 + .../test/com/google/common/collect/PeekingIteratorTest.java | 1 + .../test/com/google/common/collect/RangeTest.java | 1 + .../google/common/collect/RegularImmutableAsListTest.java | 1 + .../com/google/common/collect/RegularImmutableTableTest.java | 5 ++++- .../test/com/google/common/collect/SetOperationsTest.java | 1 + .../guava-tests/test/com/google/common/collect/SetsTest.java | 1 + .../google/common/collect/SimpleAbstractMultisetTest.java | 1 + .../google/common/collect/SingletonImmutableTableTest.java | 1 + .../test/com/google/common/collect/SortedIterablesTest.java | 1 + .../test/com/google/common/collect/SortedListsTest.java | 1 + .../common/collect/SubMapMultimapAsMapImplementsMapTest.java | 1 + .../test/com/google/common/collect/TableCollectionTest.java | 1 + .../test/com/google/common/collect/TablesTest.java | 1 + .../common/collect/TablesTransformValuesColumnMapTest.java | 1 + .../common/collect/TablesTransformValuesColumnTest.java | 1 + .../common/collect/TablesTransformValuesRowMapTest.java | 1 + .../google/common/collect/TablesTransformValuesRowTest.java | 1 + .../com/google/common/collect/TablesTransformValuesTest.java | 1 + .../com/google/common/collect/TablesTransposeColumnTest.java | 1 + .../com/google/common/collect/TablesTransposeRowTest.java | 1 + .../test/com/google/common/collect/TransposedTableTest.java | 1 + .../google/common/collect/TreeBasedTableColumnMapTest.java | 1 + .../com/google/common/collect/TreeBasedTableColumnTest.java | 1 + .../common/collect/TreeBasedTableRowMapHeadMapTest.java | 1 + .../common/collect/TreeBasedTableRowMapSubMapTest.java | 1 + .../common/collect/TreeBasedTableRowMapTailMapTest.java | 1 + .../com/google/common/collect/TreeBasedTableRowMapTest.java | 1 + .../com/google/common/collect/TreeBasedTableRowTest.java | 1 + .../test/com/google/common/collect/TreeBasedTableTest.java | 1 + .../com/google/common/collect/TreeMultimapExplicitTest.java | 1 + .../com/google/common/collect/TreeMultimapNaturalTest.java | 1 + .../test/com/google/common/collect/TreeMultisetTest.java | 1 + .../test/com/google/common/collect/TreeTraverserTest.java | 1 + .../com/google/common/collect/UnmodifiableIteratorTest.java | 1 + .../google/common/collect/UnmodifiableListIteratorTest.java | 1 + .../collect/UnmodifiableMultimapAsMapImplementsMapTest.java | 1 + .../collect/UnmodifiableRowSortedTableColumnMapTest.java | 1 + .../common/collect/UnmodifiableRowSortedTableColumnTest.java | 1 + .../common/collect/UnmodifiableRowSortedTableRowMapTest.java | 1 + .../common/collect/UnmodifiableRowSortedTableRowTest.java | 1 + .../common/collect/UnmodifiableTableColumnMapTest.java | 1 + .../google/common/collect/UnmodifiableTableColumnTest.java | 1 + .../google/common/collect/UnmodifiableTableRowMapTest.java | 1 + .../com/google/common/collect/UnmodifiableTableRowTest.java | 1 + .../com/google/common/collect/AbstractFilteredMapTest.java | 1 + .../com/google/common/collect/AbstractImmutableSetTest.java | 1 + .../google/common/collect/AbstractImmutableTableTest.java | 1 + .../test/com/google/common/collect/AbstractIteratorTest.java | 1 + .../test/com/google/common/collect/AbstractMapEntryTest.java | 1 + .../common/collect/AbstractMapsTransformValuesTest.java | 1 + .../collect/AbstractMultimapAsMapImplementsMapTest.java | 1 + .../common/collect/AbstractSequentialIteratorTest.java | 1 + .../com/google/common/collect/AbstractTableReadTest.java | 1 + .../test/com/google/common/collect/AbstractTableTest.java | 1 + .../com/google/common/collect/ArrayListMultimapTest.java | 1 + .../test/com/google/common/collect/ArrayTableTest.java | 1 + .../com/google/common/collect/CollectSpliteratorsTest.java | 1 + .../test/com/google/common/collect/Collections2Test.java | 1 + .../test/com/google/common/collect/ComparatorsTest.java | 1 + .../test/com/google/common/collect/ComparisonChainTest.java | 1 + .../test/com/google/common/collect/ContiguousSetTest.java | 2 ++ guava-tests/test/com/google/common/collect/CountTest.java | 1 + .../com/google/common/collect/EmptyImmutableTableTest.java | 1 + .../test/com/google/common/collect/EnumBiMapTest.java | 1 + .../test/com/google/common/collect/EvictingQueueTest.java | 1 + .../test/com/google/common/collect/FilteredBiMapTest.java | 1 + .../test/com/google/common/collect/FilteredMapTest.java | 1 + .../com/google/common/collect/FilteredSortedMapTest.java | 1 + .../common/collect/ForMapMultimapAsMapImplementsMapTest.java | 1 + .../common/collect/ForwardingSortedMapImplementsMapTest.java | 1 + .../test/com/google/common/collect/GeneralRangeTest.java | 1 + .../google/common/collect/HashBasedTableColumnMapTest.java | 1 + .../com/google/common/collect/HashBasedTableColumnTest.java | 1 + .../com/google/common/collect/HashBasedTableRowMapTest.java | 1 + .../com/google/common/collect/HashBasedTableRowTest.java | 1 + .../test/com/google/common/collect/HashBasedTableTest.java | 1 + .../test/com/google/common/collect/HashBiMapTest.java | 1 + .../test/com/google/common/collect/HashMultimapTest.java | 1 + .../test/com/google/common/collect/HashMultisetTest.java | 1 + guava-tests/test/com/google/common/collect/HashingTest.java | 1 + .../test/com/google/common/collect/ImmutableBiMapTest.java | 1 + .../test/com/google/common/collect/ImmutableEnumMapTest.java | 1 + .../com/google/common/collect/ImmutableListMultimapTest.java | 1 + .../test/com/google/common/collect/ImmutableListTest.java | 1 + .../test/com/google/common/collect/ImmutableMapTest.java | 1 + .../collect/ImmutableMultimapAsMapImplementsMapTest.java | 1 + .../com/google/common/collect/ImmutableMultimapTest.java | 1 + .../com/google/common/collect/ImmutableMultisetTest.java | 1 + .../collect/ImmutableSetMultimapAsMapImplementsMapTest.java | 1 + .../com/google/common/collect/ImmutableSetMultimapTest.java | 1 + .../test/com/google/common/collect/ImmutableSetTest.java | 1 + .../com/google/common/collect/ImmutableSortedMapTest.java | 1 + .../com/google/common/collect/ImmutableSortedSetTest.java | 1 + .../test/com/google/common/collect/ImmutableTableTest.java | 1 + .../test/com/google/common/collect/IterablesTest.java | 1 + .../test/com/google/common/collect/IteratorsTest.java | 1 + .../test/com/google/common/collect/LegacyComparable.java | 1 + .../com/google/common/collect/LinkedHashMultimapTest.java | 1 + .../com/google/common/collect/LinkedHashMultisetTest.java | 1 + .../com/google/common/collect/LinkedListMultimapTest.java | 1 + .../test/com/google/common/collect/ListsImplTest.java | 1 + guava-tests/test/com/google/common/collect/ListsTest.java | 1 + .../google/common/collect/MapsSortedTransformValuesTest.java | 1 + guava-tests/test/com/google/common/collect/MapsTest.java | 1 + .../com/google/common/collect/MapsTransformValuesTest.java | 1 + .../collect/MapsTransformValuesUnmodifiableIteratorTest.java | 1 + .../com/google/common/collect/MinMaxPriorityQueueTest.java | 1 + .../test/com/google/common/collect/MoreCollectorsTest.java | 1 + .../test/com/google/common/collect/MultimapBuilderTest.java | 1 + .../test/com/google/common/collect/MultimapsTest.java | 1 + .../common/collect/MultimapsTransformValuesAsMapTest.java | 1 + .../google/common/collect/MultisetsImmutableEntryTest.java | 1 + .../test/com/google/common/collect/MultisetsTest.java | 1 + .../test/com/google/common/collect/NewCustomTableTest.java | 1 + .../test/com/google/common/collect/ObjectArraysTest.java | 1 + guava-tests/test/com/google/common/collect/OrderingTest.java | 1 + .../test/com/google/common/collect/PeekingIteratorTest.java | 1 + guava-tests/test/com/google/common/collect/RangeTest.java | 1 + .../google/common/collect/RegularImmutableAsListTest.java | 1 + .../com/google/common/collect/RegularImmutableTableTest.java | 5 ++++- .../test/com/google/common/collect/SetOperationsTest.java | 1 + guava-tests/test/com/google/common/collect/SetsTest.java | 1 + .../google/common/collect/SimpleAbstractMultisetTest.java | 1 + .../google/common/collect/SingletonImmutableTableTest.java | 1 + .../test/com/google/common/collect/SortedIterablesTest.java | 1 + .../test/com/google/common/collect/SortedListsTest.java | 1 + guava-tests/test/com/google/common/collect/StreamsTest.java | 1 + .../common/collect/SubMapMultimapAsMapImplementsMapTest.java | 1 + .../test/com/google/common/collect/TableCollectionTest.java | 1 + .../test/com/google/common/collect/TableCollectorsTest.java | 1 + guava-tests/test/com/google/common/collect/TablesTest.java | 1 + .../common/collect/TablesTransformValuesColumnMapTest.java | 1 + .../common/collect/TablesTransformValuesColumnTest.java | 1 + .../common/collect/TablesTransformValuesRowMapTest.java | 1 + .../google/common/collect/TablesTransformValuesRowTest.java | 1 + .../com/google/common/collect/TablesTransformValuesTest.java | 1 + .../com/google/common/collect/TablesTransposeColumnTest.java | 1 + .../com/google/common/collect/TablesTransposeRowTest.java | 1 + .../test/com/google/common/collect/TransposedTableTest.java | 1 + .../google/common/collect/TreeBasedTableColumnMapTest.java | 1 + .../com/google/common/collect/TreeBasedTableColumnTest.java | 1 + .../common/collect/TreeBasedTableRowMapHeadMapTest.java | 1 + .../common/collect/TreeBasedTableRowMapSubMapTest.java | 1 + .../common/collect/TreeBasedTableRowMapTailMapTest.java | 1 + .../com/google/common/collect/TreeBasedTableRowMapTest.java | 1 + .../com/google/common/collect/TreeBasedTableRowTest.java | 1 + .../test/com/google/common/collect/TreeBasedTableTest.java | 1 + .../com/google/common/collect/TreeMultimapExplicitTest.java | 1 + .../com/google/common/collect/TreeMultimapNaturalTest.java | 1 + .../test/com/google/common/collect/TreeMultisetTest.java | 1 + .../test/com/google/common/collect/TreeTraverserTest.java | 1 + .../com/google/common/collect/UnmodifiableIteratorTest.java | 1 + .../google/common/collect/UnmodifiableListIteratorTest.java | 1 + .../collect/UnmodifiableMultimapAsMapImplementsMapTest.java | 1 + .../collect/UnmodifiableRowSortedTableColumnMapTest.java | 1 + .../common/collect/UnmodifiableRowSortedTableColumnTest.java | 1 + .../common/collect/UnmodifiableRowSortedTableRowMapTest.java | 1 + .../common/collect/UnmodifiableRowSortedTableRowTest.java | 1 + .../common/collect/UnmodifiableTableColumnMapTest.java | 1 + .../google/common/collect/UnmodifiableTableColumnTest.java | 1 + .../google/common/collect/UnmodifiableTableRowMapTest.java | 1 + .../com/google/common/collect/UnmodifiableTableRowTest.java | 1 + 232 files changed, 240 insertions(+), 2 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/AbstractFilteredMapTest.java b/android/guava-tests/test/com/google/common/collect/AbstractFilteredMapTest.java index b415b2b1b5e7..46a26d01f8ee 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractFilteredMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractFilteredMapTest.java @@ -25,6 +25,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; @GwtCompatible +@ElementTypesAreNonnullByDefault abstract class AbstractFilteredMapTest extends TestCase { private static final Predicate<@Nullable String> NOT_LENGTH_3 = input -> input == null || input.length() != 3; diff --git a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index d8f8443bc95d..1333a65b7c28 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -42,6 +42,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public abstract class AbstractImmutableSetTest extends TestCase { protected abstract > Set of(); diff --git a/android/guava-tests/test/com/google/common/collect/AbstractImmutableTableTest.java b/android/guava-tests/test/com/google/common/collect/AbstractImmutableTableTest.java index ffff9f52b667..8edd14f5d847 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractImmutableTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractImmutableTableTest.java @@ -25,6 +25,7 @@ * @author Gregory Kick */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class AbstractImmutableTableTest extends TestCase { abstract Iterable> getTestInstances(); diff --git a/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java b/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java index c6951b8ca03e..4811080f977d 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java @@ -32,6 +32,7 @@ */ @SuppressWarnings("serial") // No serialization is used in this test @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class AbstractIteratorTest extends TestCase { public void testDefaultBehaviorOfNextAndHasNext() { diff --git a/android/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java b/android/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java index 6e6b25497235..a5460ba5718e 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java @@ -28,6 +28,7 @@ * @author Mike Bostock */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class AbstractMapEntryTest extends TestCase { private static final @Nullable String NK = null; private static final @Nullable Integer NV = null; diff --git a/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java b/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java index 3b56fef5e602..cf6c74eb9140 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java @@ -33,6 +33,7 @@ * @author Isaac Shum */ @GwtCompatible +@ElementTypesAreNonnullByDefault abstract class AbstractMapsTransformValuesTest extends MapInterfaceTest { public AbstractMapsTransformValuesTest() { super(false, true, false, true, true); diff --git a/android/guava-tests/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java b/android/guava-tests/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java index 3e41dec8eb5a..06466c84df61 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java @@ -28,6 +28,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class AbstractMultimapAsMapImplementsMapTest extends MapInterfaceTest> { diff --git a/android/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java b/android/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java index 16a9ba781722..f027ff20d470 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java @@ -30,6 +30,7 @@ /** Tests for {@link AbstractSequentialIterator}. */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class AbstractSequentialIteratorTest extends TestCase { @GwtIncompatible // Too slow public void testDoublerExhaustive() { diff --git a/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java b/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java index 65e7affdeda7..d89be34623ae 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java @@ -32,6 +32,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public abstract class AbstractTableReadTest extends TestCase { protected Table table; diff --git a/android/guava-tests/test/com/google/common/collect/AbstractTableTest.java b/android/guava-tests/test/com/google/common/collect/AbstractTableTest.java index f634b6a8c724..c8d9052d9c60 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractTableTest.java @@ -28,6 +28,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class AbstractTableTest extends AbstractTableReadTest { protected void populate(Table table, Object... data) { diff --git a/android/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java index 0177413e68d3..20920362557b 100644 --- a/android/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java @@ -41,6 +41,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ArrayListMultimapTest extends TestCase { @GwtIncompatible // suite diff --git a/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java b/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java index 4ca27cd60913..9f4be6cf9426 100644 --- a/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java @@ -36,6 +36,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ArrayTableTest extends AbstractTableTest { @Override diff --git a/android/guava-tests/test/com/google/common/collect/Collections2Test.java b/android/guava-tests/test/com/google/common/collect/Collections2Test.java index 283bce2debd8..3c2920b46524 100644 --- a/android/guava-tests/test/com/google/common/collect/Collections2Test.java +++ b/android/guava-tests/test/com/google/common/collect/Collections2Test.java @@ -49,6 +49,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class Collections2Test extends TestCase { @J2ktIncompatible @GwtIncompatible // suite diff --git a/android/guava-tests/test/com/google/common/collect/ComparatorsTest.java b/android/guava-tests/test/com/google/common/collect/ComparatorsTest.java index 03686119dec5..159dbf7c374c 100644 --- a/android/guava-tests/test/com/google/common/collect/ComparatorsTest.java +++ b/android/guava-tests/test/com/google/common/collect/ComparatorsTest.java @@ -33,6 +33,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ComparatorsTest extends TestCase { @SuppressWarnings("unchecked") // dang varargs public void testLexicographical() { diff --git a/android/guava-tests/test/com/google/common/collect/ComparisonChainTest.java b/android/guava-tests/test/com/google/common/collect/ComparisonChainTest.java index b2bb7efcac00..c599a02aa3e7 100644 --- a/android/guava-tests/test/com/google/common/collect/ComparisonChainTest.java +++ b/android/guava-tests/test/com/google/common/collect/ComparisonChainTest.java @@ -28,6 +28,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ComparisonChainTest extends TestCase { private static final DontCompareMe DONT_COMPARE_ME = new DontCompareMe(); diff --git a/android/guava-tests/test/com/google/common/collect/ContiguousSetTest.java b/android/guava-tests/test/com/google/common/collect/ContiguousSetTest.java index f3c5fe86402b..63edca44b7b5 100644 --- a/android/guava-tests/test/com/google/common/collect/ContiguousSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ContiguousSetTest.java @@ -30,6 +30,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.NavigableSetTestSuiteBuilder; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.google.SetGenerators.ContiguousSetDescendingGenerator; @@ -408,6 +409,7 @@ public void testAsList() { assertEquals(ImmutableList.of(1, 2, 3), ImmutableList.copyOf(list.toArray(new Integer[0]))); } + @J2ktIncompatible @GwtIncompatible // suite public static class BuiltTests extends TestCase { public static Test suite() { diff --git a/android/guava-tests/test/com/google/common/collect/CountTest.java b/android/guava-tests/test/com/google/common/collect/CountTest.java index 0eff420a5818..a6f6019b7901 100644 --- a/android/guava-tests/test/com/google/common/collect/CountTest.java +++ b/android/guava-tests/test/com/google/common/collect/CountTest.java @@ -23,6 +23,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class CountTest extends TestCase { public void testGet() { assertEquals(20, new Count(20).get()); diff --git a/android/guava-tests/test/com/google/common/collect/EmptyImmutableTableTest.java b/android/guava-tests/test/com/google/common/collect/EmptyImmutableTableTest.java index 4fb26e65c8fa..1c928638a96e 100644 --- a/android/guava-tests/test/com/google/common/collect/EmptyImmutableTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/EmptyImmutableTableTest.java @@ -26,6 +26,7 @@ * @author Gregory Kick */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class EmptyImmutableTableTest extends AbstractImmutableTableTest { private static final ImmutableTable INSTANCE = ImmutableTable.of(); diff --git a/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java b/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java index 19fb8b24333e..d702b0da2e9a 100644 --- a/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java @@ -49,6 +49,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class EnumBiMapTest extends TestCase { private enum Currency { DOLLAR, diff --git a/android/guava-tests/test/com/google/common/collect/EvictingQueueTest.java b/android/guava-tests/test/com/google/common/collect/EvictingQueueTest.java index 8b8337e46eea..0e23035d86a6 100644 --- a/android/guava-tests/test/com/google/common/collect/EvictingQueueTest.java +++ b/android/guava-tests/test/com/google/common/collect/EvictingQueueTest.java @@ -32,6 +32,7 @@ * @author Kurt Alfred Kluever */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class EvictingQueueTest extends TestCase { public void testCreateWithNegativeSize() throws Exception { diff --git a/android/guava-tests/test/com/google/common/collect/FilteredBiMapTest.java b/android/guava-tests/test/com/google/common/collect/FilteredBiMapTest.java index 8f5f4c6c3f9a..652a23045e50 100644 --- a/android/guava-tests/test/com/google/common/collect/FilteredBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/FilteredBiMapTest.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; @GwtCompatible +@ElementTypesAreNonnullByDefault public class FilteredBiMapTest extends AbstractFilteredMapTest { @Override BiMap createUnfiltered() { diff --git a/android/guava-tests/test/com/google/common/collect/FilteredMapTest.java b/android/guava-tests/test/com/google/common/collect/FilteredMapTest.java index da080fbe3754..049e28645723 100644 --- a/android/guava-tests/test/com/google/common/collect/FilteredMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/FilteredMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class FilteredMapTest extends AbstractFilteredMapTest { @Override Map createUnfiltered() { diff --git a/android/guava-tests/test/com/google/common/collect/FilteredSortedMapTest.java b/android/guava-tests/test/com/google/common/collect/FilteredSortedMapTest.java index 0a08da3d8cb0..bbf78ee768d0 100644 --- a/android/guava-tests/test/com/google/common/collect/FilteredSortedMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/FilteredSortedMapTest.java @@ -20,6 +20,7 @@ import java.util.SortedMap; @GwtCompatible +@ElementTypesAreNonnullByDefault public class FilteredSortedMapTest extends AbstractFilteredMapTest { @Override SortedMap createUnfiltered() { diff --git a/android/guava-tests/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java b/android/guava-tests/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java index 402410b297f0..3cabcda48d17 100644 --- a/android/guava-tests/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java @@ -28,6 +28,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ForMapMultimapAsMapImplementsMapTest extends AbstractMultimapAsMapImplementsMapTest { public ForMapMultimapAsMapImplementsMapTest() { diff --git a/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java b/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java index b694d5d68988..9dc386ea490d 100644 --- a/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java @@ -28,6 +28,7 @@ * @author George van den Driessche */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ForwardingSortedMapImplementsMapTest extends SortedMapInterfaceTest { private static class SimpleForwardingSortedMap extends ForwardingSortedMap { diff --git a/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java b/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java index 5d1c73548195..9994c4bcec11 100644 --- a/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java +++ b/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java @@ -32,6 +32,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class GeneralRangeTest extends TestCase { private static final Ordering ORDERING = Ordering.natural().nullsFirst(); diff --git a/android/guava-tests/test/com/google/common/collect/HashBasedTableColumnMapTest.java b/android/guava-tests/test/com/google/common/collect/HashBasedTableColumnMapTest.java index 5b12653b5e2d..dc77b8cac28c 100644 --- a/android/guava-tests/test/com/google/common/collect/HashBasedTableColumnMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashBasedTableColumnMapTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.ColumnMapTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class HashBasedTableColumnMapTest extends ColumnMapTests { public HashBasedTableColumnMapTest() { super(false, true, true, false); diff --git a/android/guava-tests/test/com/google/common/collect/HashBasedTableColumnTest.java b/android/guava-tests/test/com/google/common/collect/HashBasedTableColumnTest.java index 3a68bc642809..48d0d4785122 100644 --- a/android/guava-tests/test/com/google/common/collect/HashBasedTableColumnTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashBasedTableColumnTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.ColumnTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class HashBasedTableColumnTest extends ColumnTests { public HashBasedTableColumnTest() { super(false, true, true, true, false); diff --git a/android/guava-tests/test/com/google/common/collect/HashBasedTableRowMapTest.java b/android/guava-tests/test/com/google/common/collect/HashBasedTableRowMapTest.java index e5203b134666..e007fe077b2f 100644 --- a/android/guava-tests/test/com/google/common/collect/HashBasedTableRowMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashBasedTableRowMapTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.RowMapTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class HashBasedTableRowMapTest extends RowMapTests { public HashBasedTableRowMapTest() { super(false, true, true, true); diff --git a/android/guava-tests/test/com/google/common/collect/HashBasedTableRowTest.java b/android/guava-tests/test/com/google/common/collect/HashBasedTableRowTest.java index eb4afeb78037..265e2983d0e1 100644 --- a/android/guava-tests/test/com/google/common/collect/HashBasedTableRowTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashBasedTableRowTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.RowTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class HashBasedTableRowTest extends RowTests { public HashBasedTableRowTest() { super(false, true, true, true, true); diff --git a/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java b/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java index 7bb51ef31851..fac4794dfff2 100644 --- a/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java @@ -30,6 +30,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class HashBasedTableTest extends AbstractTableTest { @Override diff --git a/android/guava-tests/test/com/google/common/collect/HashBiMapTest.java b/android/guava-tests/test/com/google/common/collect/HashBiMapTest.java index 74dc3b77af07..7d16557e8b43 100644 --- a/android/guava-tests/test/com/google/common/collect/HashBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashBiMapTest.java @@ -40,6 +40,7 @@ * @author Mike Bostock */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class HashBiMapTest extends TestCase { public static final class HashBiMapGenerator extends TestStringBiMapGenerator { diff --git a/android/guava-tests/test/com/google/common/collect/HashMultimapTest.java b/android/guava-tests/test/com/google/common/collect/HashMultimapTest.java index b1744b347f16..6943656b3938 100644 --- a/android/guava-tests/test/com/google/common/collect/HashMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashMultimapTest.java @@ -35,6 +35,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class HashMultimapTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/HashMultisetTest.java b/android/guava-tests/test/com/google/common/collect/HashMultisetTest.java index b2e5fe326cc8..ac7d1ab2ce49 100644 --- a/android/guava-tests/test/com/google/common/collect/HashMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashMultisetTest.java @@ -40,6 +40,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class HashMultisetTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/HashingTest.java b/android/guava-tests/test/com/google/common/collect/HashingTest.java index 5dfac4726ab9..c68d2c2bd731 100644 --- a/android/guava-tests/test/com/google/common/collect/HashingTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashingTest.java @@ -21,6 +21,7 @@ /** Tests for {@code Hashing}. */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class HashingTest extends TestCase { public void testSmear() { assertEquals(1459320713, smear(754102528)); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java index e1abd44571cd..0dd6360b6e6f 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java @@ -47,6 +47,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableBiMapTest extends TestCase { // TODO: Reduce duplication of ImmutableMapTest code diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java index b03a93f012be..37c58729dace 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java @@ -42,6 +42,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableEnumMapTest extends TestCase { public static class ImmutableEnumMapGenerator extends TestEnumMapGenerator { @Override diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java index 4d2f86e9a980..cc8b3764149a 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java @@ -46,6 +46,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableListMultimapTest extends TestCase { public static class ImmutableListMultimapGenerator extends TestStringListMultimapGenerator { @Override diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java index c44a1f9af31f..c333d5b09233 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java @@ -55,6 +55,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableListTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java index e0de2a42e45e..c5dccbdde8e5 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java @@ -68,6 +68,7 @@ */ @GwtCompatible(emulated = true) @SuppressWarnings("AlwaysThrows") +@ElementTypesAreNonnullByDefault public class ImmutableMapTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java index 8c1f020b5ca8..f216745044e3 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ImmutableMultimapAsMapImplementsMapTest extends AbstractMultimapAsMapImplementsMapTest { diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java index e8f24ce116bc..57be835c72fa 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java @@ -35,6 +35,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableMultimapTest extends TestCase { public void testBuilder_withImmutableEntry() { diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java index ca52a36eb4b1..27100cc06af0 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java @@ -52,6 +52,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableMultisetTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java index c503a17573ef..317644e1421d 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java @@ -27,6 +27,7 @@ * @author Mike Ward */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ImmutableSetMultimapAsMapImplementsMapTest extends AbstractMultimapAsMapImplementsMapTest { diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java index d3c4be513eaa..f8cafc79725c 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java @@ -46,6 +46,7 @@ * @author Mike Ward */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableSetMultimapTest extends TestCase { private static final class ImmutableSetMultimapGenerator extends TestStringSetMultimapGenerator { @Override diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java index df39d5042c94..de70e96edc45 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java @@ -51,6 +51,7 @@ * @author Nick Kralevich */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableSetTest extends AbstractImmutableSetTest { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index 301ac1fed768..9159b6ccae89 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -57,6 +57,7 @@ */ @GwtCompatible(emulated = true) @SuppressWarnings("AlwaysThrows") +@ElementTypesAreNonnullByDefault public class ImmutableSortedMapTest extends TestCase { // TODO: Avoid duplicating code in ImmutableMapTest diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java index c39f01bfa82a..cc8f0a3ec075 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java @@ -56,6 +56,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableSortedSetTest extends AbstractImmutableSetTest { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java index 6016e50e6aa5..3d3655d6b655 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java @@ -29,6 +29,7 @@ * @author Gregory Kick */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableTableTest extends AbstractTableReadTest { @Override protected Table create(Object... data) { diff --git a/android/guava-tests/test/com/google/common/collect/IterablesTest.java b/android/guava-tests/test/com/google/common/collect/IterablesTest.java index 2b9d7ea0e8ef..fae3f88facbe 100644 --- a/android/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -56,6 +56,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class IterablesTest extends TestCase { public void testSize0() { diff --git a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java index 31879d542e8f..01fd1e2ec408 100644 --- a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -66,6 +66,7 @@ * @author Kevin Bourrillion */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class IteratorsTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/LegacyComparable.java b/android/guava-tests/test/com/google/common/collect/LegacyComparable.java index 05a6607a420c..90d0ad36e591 100644 --- a/android/guava-tests/test/com/google/common/collect/LegacyComparable.java +++ b/android/guava-tests/test/com/google/common/collect/LegacyComparable.java @@ -30,6 +30,7 @@ */ @SuppressWarnings("ComparableType") @GwtCompatible +@ElementTypesAreNonnullByDefault class LegacyComparable implements Comparable, Serializable { static final LegacyComparable X = new LegacyComparable("x"); static final LegacyComparable Y = new LegacyComparable("y"); diff --git a/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java b/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java index 90c50162feb5..fc5f1e058880 100644 --- a/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java @@ -51,6 +51,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class LinkedHashMultimapTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java b/android/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java index 4f4289d464df..6c390240918a 100644 --- a/android/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java @@ -39,6 +39,7 @@ * @author Kevin Bourrillion */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class LinkedHashMultisetTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java index f033f3b26353..bfe000b61f13 100644 --- a/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java @@ -56,6 +56,7 @@ * @author Mike Bostock */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class LinkedListMultimapTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/ListsImplTest.java b/android/guava-tests/test/com/google/common/collect/ListsImplTest.java index ed252cfd67f8..9fb4359180d4 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsImplTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsImplTest.java @@ -36,6 +36,7 @@ /** Tests the package level *impl methods directly using various types of lists. */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ListsImplTest extends TestCase { /** Describes how a list is modifiable */ diff --git a/android/guava-tests/test/com/google/common/collect/ListsTest.java b/android/guava-tests/test/com/google/common/collect/ListsTest.java index 2de28913bf85..c7ce4ad03396 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsTest.java @@ -60,6 +60,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ListsTest extends TestCase { private static final Collection SOME_COLLECTION = asList(0, 1, 1); diff --git a/android/guava-tests/test/com/google/common/collect/MapsSortedTransformValuesTest.java b/android/guava-tests/test/com/google/common/collect/MapsSortedTransformValuesTest.java index 6bf066f513b0..03d5dd225d37 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsSortedTransformValuesTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsSortedTransformValuesTest.java @@ -27,6 +27,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MapsSortedTransformValuesTest extends AbstractMapsTransformValuesTest { @Override protected SortedMap makeEmptyMap() { diff --git a/android/guava-tests/test/com/google/common/collect/MapsTest.java b/android/guava-tests/test/com/google/common/collect/MapsTest.java index 05b59d3fe38e..e920f5f2a423 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsTest.java @@ -70,6 +70,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class MapsTest extends TestCase { private static final Comparator SOME_COMPARATOR = Collections.reverseOrder(); diff --git a/android/guava-tests/test/com/google/common/collect/MapsTransformValuesTest.java b/android/guava-tests/test/com/google/common/collect/MapsTransformValuesTest.java index 6c6bca3ddeb0..308c01c64ea9 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsTransformValuesTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsTransformValuesTest.java @@ -27,6 +27,7 @@ * @author Isaac Shum */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MapsTransformValuesTest extends AbstractMapsTransformValuesTest { @Override protected Map makeEmptyMap() { diff --git a/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java b/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java index 7411beca42d3..87ba989f95fb 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java @@ -34,6 +34,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MapsTransformValuesUnmodifiableIteratorTest extends MapInterfaceTest { // TODO(jlevy): Move shared code of this class and MapsTransformValuesTest // to a superclass. diff --git a/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java b/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java index b43f2d704520..0d922df46a18 100644 --- a/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java +++ b/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java @@ -56,6 +56,7 @@ * @author Sverre Sundsdal */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class MinMaxPriorityQueueTest extends TestCase { private static final Ordering SOME_COMPARATOR = Ordering.natural().reverse(); diff --git a/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java b/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java index 488881004685..0166c7e6c233 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java @@ -35,6 +35,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class MultimapBuilderTest extends TestCase { @GwtIncompatible // doesn't build without explicit type parameters on build() methods diff --git a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java index 4e8e5536557d..1f97ee08de89 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -65,6 +65,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class MultimapsTest extends TestCase { private static final Comparator INT_COMPARATOR = diff --git a/android/guava-tests/test/com/google/common/collect/MultimapsTransformValuesAsMapTest.java b/android/guava-tests/test/com/google/common/collect/MultimapsTransformValuesAsMapTest.java index 491a632f9e6e..78494be1b4d5 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapsTransformValuesAsMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapsTransformValuesAsMapTest.java @@ -27,6 +27,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MultimapsTransformValuesAsMapTest extends AbstractMultimapAsMapImplementsMapTest { public MultimapsTransformValuesAsMapTest() { diff --git a/android/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java b/android/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java index 870490e5fd42..15c0901b15bc 100644 --- a/android/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java @@ -28,6 +28,7 @@ * @author Mike Bostock */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MultisetsImmutableEntryTest extends TestCase { private static final @Nullable String NE = null; diff --git a/android/guava-tests/test/com/google/common/collect/MultisetsTest.java b/android/guava-tests/test/com/google/common/collect/MultisetsTest.java index 6c5600e86092..c0018b196543 100644 --- a/android/guava-tests/test/com/google/common/collect/MultisetsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultisetsTest.java @@ -36,6 +36,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class MultisetsTest extends TestCase { /* See MultisetsImmutableEntryTest for immutableEntry() tests. */ diff --git a/android/guava-tests/test/com/google/common/collect/NewCustomTableTest.java b/android/guava-tests/test/com/google/common/collect/NewCustomTableTest.java index 6ad3aa212a1f..b048e4648a38 100644 --- a/android/guava-tests/test/com/google/common/collect/NewCustomTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/NewCustomTableTest.java @@ -29,6 +29,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class NewCustomTableTest extends AbstractTableTest { @Override diff --git a/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java b/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java index 50f781469e56..edbcf2a9e55e 100644 --- a/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java +++ b/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java @@ -33,6 +33,7 @@ * @author Kevin Bourrillion */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ObjectArraysTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/OrderingTest.java b/android/guava-tests/test/com/google/common/collect/OrderingTest.java index efa607e53be8..dab0259f78aa 100644 --- a/android/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/android/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -50,6 +50,7 @@ * @author Jesse Wilson */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class OrderingTest extends TestCase { // TODO(cpovirk): some of these are inexplicably slow (20-30s) under GWT diff --git a/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java b/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java index 0f79985bcf39..e732a88c4290 100644 --- a/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java @@ -38,6 +38,7 @@ */ @SuppressWarnings("serial") // No serialization is used in this test @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class PeekingIteratorTest extends TestCase { /** diff --git a/android/guava-tests/test/com/google/common/collect/RangeTest.java b/android/guava-tests/test/com/google/common/collect/RangeTest.java index 16764a699519..cb18804a8bcd 100644 --- a/android/guava-tests/test/com/google/common/collect/RangeTest.java +++ b/android/guava-tests/test/com/google/common/collect/RangeTest.java @@ -40,6 +40,7 @@ * @author Kevin Bourrillion */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class RangeTest extends TestCase { public void testOpen() { Range range = Range.open(4, 8); diff --git a/android/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java b/android/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java index b0f9e16e4327..76086cef997c 100644 --- a/android/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java +++ b/android/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java @@ -23,6 +23,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class RegularImmutableAsListTest extends TestCase { /** * RegularImmutableAsList should assume its input is null-free without checking, because it only diff --git a/android/guava-tests/test/com/google/common/collect/RegularImmutableTableTest.java b/android/guava-tests/test/com/google/common/collect/RegularImmutableTableTest.java index 82d7b39b9ff5..6502766cc55e 100644 --- a/android/guava-tests/test/com/google/common/collect/RegularImmutableTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/RegularImmutableTableTest.java @@ -21,8 +21,11 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.Table.Cell; -/** @author Gregory Kick */ +/** + * @author Gregory Kick + */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class RegularImmutableTableTest extends AbstractImmutableTableTest { private static final ImmutableSet> CELLS = ImmutableSet.of( diff --git a/android/guava-tests/test/com/google/common/collect/SetOperationsTest.java b/android/guava-tests/test/com/google/common/collect/SetOperationsTest.java index 2dc4a7521ab2..bf36f428016b 100644 --- a/android/guava-tests/test/com/google/common/collect/SetOperationsTest.java +++ b/android/guava-tests/test/com/google/common/collect/SetOperationsTest.java @@ -38,6 +38,7 @@ * @author Kevin Bourrillion */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SetOperationsTest extends TestCase { @J2ktIncompatible @GwtIncompatible // suite diff --git a/android/guava-tests/test/com/google/common/collect/SetsTest.java b/android/guava-tests/test/com/google/common/collect/SetsTest.java index 13f25ada72f0..6171a25748da 100644 --- a/android/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/android/guava-tests/test/com/google/common/collect/SetsTest.java @@ -85,6 +85,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SetsTest extends TestCase { private static final IteratorTester.KnownOrder KNOWN_ORDER = diff --git a/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java b/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java index 6cba5d359b99..e3671bcb0277 100644 --- a/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java @@ -42,6 +42,7 @@ */ @SuppressWarnings("serial") // No serialization is used in this test @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SimpleAbstractMultisetTest extends TestCase { @J2ktIncompatible @GwtIncompatible // suite diff --git a/android/guava-tests/test/com/google/common/collect/SingletonImmutableTableTest.java b/android/guava-tests/test/com/google/common/collect/SingletonImmutableTableTest.java index 16c5ecbbf959..c74951a807a7 100644 --- a/android/guava-tests/test/com/google/common/collect/SingletonImmutableTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/SingletonImmutableTableTest.java @@ -29,6 +29,7 @@ * @author Gregory Kick */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SingletonImmutableTableTest extends AbstractImmutableTableTest { private final ImmutableTable testTable = new SingletonImmutableTable<>('a', 1, "blah"); diff --git a/android/guava-tests/test/com/google/common/collect/SortedIterablesTest.java b/android/guava-tests/test/com/google/common/collect/SortedIterablesTest.java index 543199d2e1ad..cd025c66db73 100644 --- a/android/guava-tests/test/com/google/common/collect/SortedIterablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/SortedIterablesTest.java @@ -24,6 +24,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class SortedIterablesTest extends TestCase { public void testSameComparator() { assertTrue(SortedIterables.hasSameComparator(Ordering.natural(), Sets.newTreeSet())); diff --git a/android/guava-tests/test/com/google/common/collect/SortedListsTest.java b/android/guava-tests/test/com/google/common/collect/SortedListsTest.java index a9b5e73bbae2..7109c6c0ff2c 100644 --- a/android/guava-tests/test/com/google/common/collect/SortedListsTest.java +++ b/android/guava-tests/test/com/google/common/collect/SortedListsTest.java @@ -29,6 +29,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SortedListsTest extends TestCase { private static final ImmutableList LIST_WITH_DUPS = ImmutableList.of(1, 1, 2, 4, 4, 4, 8); diff --git a/android/guava-tests/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java b/android/guava-tests/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java index 1cb7abceb4cd..7cab6fb94363 100644 --- a/android/guava-tests/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java @@ -28,6 +28,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class SubMapMultimapAsMapImplementsMapTest extends AbstractMultimapAsMapImplementsMapTest { public SubMapMultimapAsMapImplementsMapTest() { diff --git a/android/guava-tests/test/com/google/common/collect/TableCollectionTest.java b/android/guava-tests/test/com/google/common/collect/TableCollectionTest.java index eddcfe8b1d08..1a956f74c473 100644 --- a/android/guava-tests/test/com/google/common/collect/TableCollectionTest.java +++ b/android/guava-tests/test/com/google/common/collect/TableCollectionTest.java @@ -54,6 +54,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TableCollectionTest extends TestCase { private static final Feature[] COLLECTION_FEATURES = { diff --git a/android/guava-tests/test/com/google/common/collect/TablesTest.java b/android/guava-tests/test/com/google/common/collect/TablesTest.java index 1cce12f27fb8..239f2ef50980 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTest.java @@ -29,6 +29,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TablesTest extends TestCase { @GwtIncompatible // SerializableTester diff --git a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnMapTest.java b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnMapTest.java index 0344b56c19aa..7653a8c2c4ee 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnMapTest.java @@ -23,6 +23,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransformValuesColumnMapTest extends ColumnMapTests { public TablesTransformValuesColumnMapTest() { super(false, true, true, false); diff --git a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnTest.java b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnTest.java index b28f5c506e76..5ae6ebf5a5ac 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnTest.java @@ -23,6 +23,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransformValuesColumnTest extends ColumnTests { public TablesTransformValuesColumnTest() { super(false, false, true, true, false); diff --git a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesRowMapTest.java b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesRowMapTest.java index 661a23255291..6ec708b8262f 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesRowMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesRowMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransformValuesRowMapTest extends RowMapTests { public TablesTransformValuesRowMapTest() { super(false, true, true, true); diff --git a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesRowTest.java b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesRowTest.java index 71571b98381b..507672d61a73 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesRowTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesRowTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransformValuesRowTest extends RowTests { public TablesTransformValuesRowTest() { super(false, false, true, true, true); diff --git a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java index 2112ac6ed5fe..20251795ce9a 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java @@ -30,6 +30,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TablesTransformValuesTest extends AbstractTableTest { private static final Function<@Nullable String, @Nullable Character> FIRST_CHARACTER = diff --git a/android/guava-tests/test/com/google/common/collect/TablesTransposeColumnTest.java b/android/guava-tests/test/com/google/common/collect/TablesTransposeColumnTest.java index 142dbc7cf77b..0d169546aa0b 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTransposeColumnTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTransposeColumnTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.ColumnTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransposeColumnTest extends ColumnTests { public TablesTransposeColumnTest() { super(false, true, true, true, true); diff --git a/android/guava-tests/test/com/google/common/collect/TablesTransposeRowTest.java b/android/guava-tests/test/com/google/common/collect/TablesTransposeRowTest.java index 03caae1de593..a24264cd8657 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTransposeRowTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTransposeRowTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.RowTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransposeRowTest extends RowTests { public TablesTransposeRowTest() { super(false, true, true, true, false); diff --git a/android/guava-tests/test/com/google/common/collect/TransposedTableTest.java b/android/guava-tests/test/com/google/common/collect/TransposedTableTest.java index 7233cf175374..e556ea88fa9a 100644 --- a/android/guava-tests/test/com/google/common/collect/TransposedTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/TransposedTableTest.java @@ -24,6 +24,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class TransposedTableTest extends AbstractTableTest { @Override diff --git a/android/guava-tests/test/com/google/common/collect/TreeBasedTableColumnMapTest.java b/android/guava-tests/test/com/google/common/collect/TreeBasedTableColumnMapTest.java index b5c92c8e7495..4fa7b5aaeca6 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeBasedTableColumnMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeBasedTableColumnMapTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.ColumnMapTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableColumnMapTest extends ColumnMapTests { public TreeBasedTableColumnMapTest() { super(false, true, true, false); diff --git a/android/guava-tests/test/com/google/common/collect/TreeBasedTableColumnTest.java b/android/guava-tests/test/com/google/common/collect/TreeBasedTableColumnTest.java index b90f46b4b6ea..48049bc5913e 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeBasedTableColumnTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeBasedTableColumnTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.ColumnTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableColumnTest extends ColumnTests { public TreeBasedTableColumnTest() { super(false, true, true, true, false); diff --git a/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapHeadMapTest.java b/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapHeadMapTest.java index 05bfc4133e4e..274594166764 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapHeadMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapHeadMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableRowMapHeadMapTest extends RowMapTests { public TreeBasedTableRowMapHeadMapTest() { super(false, true, true, true); diff --git a/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapSubMapTest.java b/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapSubMapTest.java index a9c7e9ff4124..ba4235d7748a 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapSubMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapSubMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableRowMapSubMapTest extends RowMapTests { public TreeBasedTableRowMapSubMapTest() { super(false, true, true, true); diff --git a/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTailMapTest.java b/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTailMapTest.java index 7d7b82e4378a..862d78c7d1b2 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTailMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTailMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableRowMapTailMapTest extends RowMapTests { public TreeBasedTableRowMapTailMapTest() { super(false, true, true, true); diff --git a/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTest.java b/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTest.java index 63a86bfccbea..46a925a58f63 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.RowMapTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableRowMapTest extends RowMapTests { public TreeBasedTableRowMapTest() { super(false, true, true, true); diff --git a/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowTest.java b/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowTest.java index 9a67fe93471e..7884b61104f4 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeBasedTableRowTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.RowTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableRowTest extends RowTests { public TreeBasedTableRowTest() { super(false, true, true, true, true); diff --git a/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java b/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java index d1f6e880c68b..f42673766a21 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java @@ -43,6 +43,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TreeBasedTableTest extends AbstractTableTest { @J2ktIncompatible @GwtIncompatible // suite diff --git a/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java b/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java index 4b00570a6126..65e83157678f 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java @@ -36,6 +36,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TreeMultimapExplicitTest extends TestCase { /** diff --git a/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java b/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java index b37a13bd0732..69be036cd2b5 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java @@ -58,6 +58,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TreeMultimapNaturalTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java b/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java index 42e7cc45bbb7..159545a984f5 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java @@ -48,6 +48,7 @@ * @author Neal Kanodia */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TreeMultisetTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/TreeTraverserTest.java b/android/guava-tests/test/com/google/common/collect/TreeTraverserTest.java index d469bd1e22f1..639ad3a4e869 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeTraverserTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeTraverserTest.java @@ -31,6 +31,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TreeTraverserTest extends TestCase { private static class Node { final char value; diff --git a/android/guava-tests/test/com/google/common/collect/UnmodifiableIteratorTest.java b/android/guava-tests/test/com/google/common/collect/UnmodifiableIteratorTest.java index 5e474aa70f67..e2e432fe5299 100644 --- a/android/guava-tests/test/com/google/common/collect/UnmodifiableIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/UnmodifiableIteratorTest.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableIteratorTest extends TestCase { @SuppressWarnings("DoNotCall") diff --git a/android/guava-tests/test/com/google/common/collect/UnmodifiableListIteratorTest.java b/android/guava-tests/test/com/google/common/collect/UnmodifiableListIteratorTest.java index 36a017d45cb3..130ef6b7cdca 100644 --- a/android/guava-tests/test/com/google/common/collect/UnmodifiableListIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/UnmodifiableListIteratorTest.java @@ -28,6 +28,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableListIteratorTest extends TestCase { @SuppressWarnings("DoNotCall") public void testRemove() { diff --git a/android/guava-tests/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java b/android/guava-tests/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java index d03d7e351b65..f485b8bb0e5e 100644 --- a/android/guava-tests/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableMultimapAsMapImplementsMapTest extends AbstractMultimapAsMapImplementsMapTest { diff --git a/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnMapTest.java b/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnMapTest.java index 3f49178c3ee4..12695960396a 100644 --- a/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableRowSortedTableColumnMapTest extends ColumnMapTests { public UnmodifiableRowSortedTableColumnMapTest() { super(false, false, false, false); diff --git a/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnTest.java b/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnTest.java index ff7008160c62..2d9c2ea8988d 100644 --- a/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnTest.java +++ b/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableRowSortedTableColumnTest extends ColumnTests { public UnmodifiableRowSortedTableColumnTest() { super(false, false, false, false, false); diff --git a/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowMapTest.java b/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowMapTest.java index 76dadc334060..023e5608a79f 100644 --- a/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowMapTest.java @@ -22,6 +22,7 @@ import java.util.SortedMap; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableRowSortedTableRowMapTest extends RowMapTests { public UnmodifiableRowSortedTableRowMapTest() { super(false, false, false, false); diff --git a/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowTest.java b/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowTest.java index 0de5f0e34991..ae7832fc3408 100644 --- a/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowTest.java +++ b/android/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableRowSortedTableRowTest extends RowTests { public UnmodifiableRowSortedTableRowTest() { super(false, false, false, false, false); diff --git a/android/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnMapTest.java b/android/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnMapTest.java index a5cc6fba96d9..a66173b06439 100644 --- a/android/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableTableColumnMapTest extends ColumnMapTests { public UnmodifiableTableColumnMapTest() { super(false, false, false, false); diff --git a/android/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnTest.java b/android/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnTest.java index ebf378b87365..a27f0c197f4e 100644 --- a/android/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnTest.java +++ b/android/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableTableColumnTest extends ColumnTests { public UnmodifiableTableColumnTest() { super(false, false, false, false, false); diff --git a/android/guava-tests/test/com/google/common/collect/UnmodifiableTableRowMapTest.java b/android/guava-tests/test/com/google/common/collect/UnmodifiableTableRowMapTest.java index c53f15777bdf..79fecaf6544c 100644 --- a/android/guava-tests/test/com/google/common/collect/UnmodifiableTableRowMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/UnmodifiableTableRowMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableTableRowMapTest extends RowMapTests { public UnmodifiableTableRowMapTest() { super(false, false, false, false); diff --git a/android/guava-tests/test/com/google/common/collect/UnmodifiableTableRowTest.java b/android/guava-tests/test/com/google/common/collect/UnmodifiableTableRowTest.java index f0440abc57c0..55eea54d17a2 100644 --- a/android/guava-tests/test/com/google/common/collect/UnmodifiableTableRowTest.java +++ b/android/guava-tests/test/com/google/common/collect/UnmodifiableTableRowTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableTableRowTest extends RowTests { public UnmodifiableTableRowTest() { super(false, false, false, false, false); diff --git a/guava-tests/test/com/google/common/collect/AbstractFilteredMapTest.java b/guava-tests/test/com/google/common/collect/AbstractFilteredMapTest.java index b415b2b1b5e7..46a26d01f8ee 100644 --- a/guava-tests/test/com/google/common/collect/AbstractFilteredMapTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractFilteredMapTest.java @@ -25,6 +25,7 @@ import org.checkerframework.checker.nullness.qual.Nullable; @GwtCompatible +@ElementTypesAreNonnullByDefault abstract class AbstractFilteredMapTest extends TestCase { private static final Predicate<@Nullable String> NOT_LENGTH_3 = input -> input == null || input.length() != 3; diff --git a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index d8f8443bc95d..1333a65b7c28 100644 --- a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -42,6 +42,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public abstract class AbstractImmutableSetTest extends TestCase { protected abstract > Set of(); diff --git a/guava-tests/test/com/google/common/collect/AbstractImmutableTableTest.java b/guava-tests/test/com/google/common/collect/AbstractImmutableTableTest.java index ffff9f52b667..8edd14f5d847 100644 --- a/guava-tests/test/com/google/common/collect/AbstractImmutableTableTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractImmutableTableTest.java @@ -25,6 +25,7 @@ * @author Gregory Kick */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class AbstractImmutableTableTest extends TestCase { abstract Iterable> getTestInstances(); diff --git a/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java b/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java index c6951b8ca03e..4811080f977d 100644 --- a/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java @@ -32,6 +32,7 @@ */ @SuppressWarnings("serial") // No serialization is used in this test @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class AbstractIteratorTest extends TestCase { public void testDefaultBehaviorOfNextAndHasNext() { diff --git a/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java b/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java index 6e6b25497235..a5460ba5718e 100644 --- a/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java @@ -28,6 +28,7 @@ * @author Mike Bostock */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class AbstractMapEntryTest extends TestCase { private static final @Nullable String NK = null; private static final @Nullable Integer NV = null; diff --git a/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java b/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java index 3b56fef5e602..cf6c74eb9140 100644 --- a/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java @@ -33,6 +33,7 @@ * @author Isaac Shum */ @GwtCompatible +@ElementTypesAreNonnullByDefault abstract class AbstractMapsTransformValuesTest extends MapInterfaceTest { public AbstractMapsTransformValuesTest() { super(false, true, false, true, true); diff --git a/guava-tests/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java index 3e41dec8eb5a..06466c84df61 100644 --- a/guava-tests/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractMultimapAsMapImplementsMapTest.java @@ -28,6 +28,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class AbstractMultimapAsMapImplementsMapTest extends MapInterfaceTest> { diff --git a/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java b/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java index 16a9ba781722..f027ff20d470 100644 --- a/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java @@ -30,6 +30,7 @@ /** Tests for {@link AbstractSequentialIterator}. */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class AbstractSequentialIteratorTest extends TestCase { @GwtIncompatible // Too slow public void testDoublerExhaustive() { diff --git a/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java b/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java index 65e7affdeda7..d89be34623ae 100644 --- a/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java @@ -32,6 +32,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public abstract class AbstractTableReadTest extends TestCase { protected Table table; diff --git a/guava-tests/test/com/google/common/collect/AbstractTableTest.java b/guava-tests/test/com/google/common/collect/AbstractTableTest.java index f634b6a8c724..c8d9052d9c60 100644 --- a/guava-tests/test/com/google/common/collect/AbstractTableTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractTableTest.java @@ -28,6 +28,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class AbstractTableTest extends AbstractTableReadTest { protected void populate(Table table, Object... data) { diff --git a/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java b/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java index 0177413e68d3..20920362557b 100644 --- a/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ArrayListMultimapTest.java @@ -41,6 +41,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ArrayListMultimapTest extends TestCase { @GwtIncompatible // suite diff --git a/guava-tests/test/com/google/common/collect/ArrayTableTest.java b/guava-tests/test/com/google/common/collect/ArrayTableTest.java index 4ca27cd60913..9f4be6cf9426 100644 --- a/guava-tests/test/com/google/common/collect/ArrayTableTest.java +++ b/guava-tests/test/com/google/common/collect/ArrayTableTest.java @@ -36,6 +36,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ArrayTableTest extends AbstractTableTest { @Override diff --git a/guava-tests/test/com/google/common/collect/CollectSpliteratorsTest.java b/guava-tests/test/com/google/common/collect/CollectSpliteratorsTest.java index 2b5e6e53004b..1a460fccbc66 100644 --- a/guava-tests/test/com/google/common/collect/CollectSpliteratorsTest.java +++ b/guava-tests/test/com/google/common/collect/CollectSpliteratorsTest.java @@ -29,6 +29,7 @@ /** Tests for {@code CollectSpliterators}. */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class CollectSpliteratorsTest extends TestCase { public void testMap() { SpliteratorTester.of( diff --git a/guava-tests/test/com/google/common/collect/Collections2Test.java b/guava-tests/test/com/google/common/collect/Collections2Test.java index 283bce2debd8..3c2920b46524 100644 --- a/guava-tests/test/com/google/common/collect/Collections2Test.java +++ b/guava-tests/test/com/google/common/collect/Collections2Test.java @@ -49,6 +49,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class Collections2Test extends TestCase { @J2ktIncompatible @GwtIncompatible // suite diff --git a/guava-tests/test/com/google/common/collect/ComparatorsTest.java b/guava-tests/test/com/google/common/collect/ComparatorsTest.java index 3e11365166cb..8d658a7837ad 100644 --- a/guava-tests/test/com/google/common/collect/ComparatorsTest.java +++ b/guava-tests/test/com/google/common/collect/ComparatorsTest.java @@ -36,6 +36,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ComparatorsTest extends TestCase { @SuppressWarnings("unchecked") // dang varargs public void testLexicographical() { diff --git a/guava-tests/test/com/google/common/collect/ComparisonChainTest.java b/guava-tests/test/com/google/common/collect/ComparisonChainTest.java index d697ebb79790..d756a8c2c512 100644 --- a/guava-tests/test/com/google/common/collect/ComparisonChainTest.java +++ b/guava-tests/test/com/google/common/collect/ComparisonChainTest.java @@ -37,6 +37,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ComparisonChainTest extends TestCase { private static final DontCompareMe DONT_COMPARE_ME = new DontCompareMe(); diff --git a/guava-tests/test/com/google/common/collect/ContiguousSetTest.java b/guava-tests/test/com/google/common/collect/ContiguousSetTest.java index f3c5fe86402b..63edca44b7b5 100644 --- a/guava-tests/test/com/google/common/collect/ContiguousSetTest.java +++ b/guava-tests/test/com/google/common/collect/ContiguousSetTest.java @@ -30,6 +30,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.NavigableSetTestSuiteBuilder; import com.google.common.collect.testing.features.CollectionSize; import com.google.common.collect.testing.google.SetGenerators.ContiguousSetDescendingGenerator; @@ -408,6 +409,7 @@ public void testAsList() { assertEquals(ImmutableList.of(1, 2, 3), ImmutableList.copyOf(list.toArray(new Integer[0]))); } + @J2ktIncompatible @GwtIncompatible // suite public static class BuiltTests extends TestCase { public static Test suite() { diff --git a/guava-tests/test/com/google/common/collect/CountTest.java b/guava-tests/test/com/google/common/collect/CountTest.java index 0eff420a5818..a6f6019b7901 100644 --- a/guava-tests/test/com/google/common/collect/CountTest.java +++ b/guava-tests/test/com/google/common/collect/CountTest.java @@ -23,6 +23,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class CountTest extends TestCase { public void testGet() { assertEquals(20, new Count(20).get()); diff --git a/guava-tests/test/com/google/common/collect/EmptyImmutableTableTest.java b/guava-tests/test/com/google/common/collect/EmptyImmutableTableTest.java index 4fb26e65c8fa..1c928638a96e 100644 --- a/guava-tests/test/com/google/common/collect/EmptyImmutableTableTest.java +++ b/guava-tests/test/com/google/common/collect/EmptyImmutableTableTest.java @@ -26,6 +26,7 @@ * @author Gregory Kick */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class EmptyImmutableTableTest extends AbstractImmutableTableTest { private static final ImmutableTable INSTANCE = ImmutableTable.of(); diff --git a/guava-tests/test/com/google/common/collect/EnumBiMapTest.java b/guava-tests/test/com/google/common/collect/EnumBiMapTest.java index 19fb8b24333e..d702b0da2e9a 100644 --- a/guava-tests/test/com/google/common/collect/EnumBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/EnumBiMapTest.java @@ -49,6 +49,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class EnumBiMapTest extends TestCase { private enum Currency { DOLLAR, diff --git a/guava-tests/test/com/google/common/collect/EvictingQueueTest.java b/guava-tests/test/com/google/common/collect/EvictingQueueTest.java index 8b8337e46eea..0e23035d86a6 100644 --- a/guava-tests/test/com/google/common/collect/EvictingQueueTest.java +++ b/guava-tests/test/com/google/common/collect/EvictingQueueTest.java @@ -32,6 +32,7 @@ * @author Kurt Alfred Kluever */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class EvictingQueueTest extends TestCase { public void testCreateWithNegativeSize() throws Exception { diff --git a/guava-tests/test/com/google/common/collect/FilteredBiMapTest.java b/guava-tests/test/com/google/common/collect/FilteredBiMapTest.java index 8f5f4c6c3f9a..652a23045e50 100644 --- a/guava-tests/test/com/google/common/collect/FilteredBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/FilteredBiMapTest.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; @GwtCompatible +@ElementTypesAreNonnullByDefault public class FilteredBiMapTest extends AbstractFilteredMapTest { @Override BiMap createUnfiltered() { diff --git a/guava-tests/test/com/google/common/collect/FilteredMapTest.java b/guava-tests/test/com/google/common/collect/FilteredMapTest.java index da080fbe3754..049e28645723 100644 --- a/guava-tests/test/com/google/common/collect/FilteredMapTest.java +++ b/guava-tests/test/com/google/common/collect/FilteredMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class FilteredMapTest extends AbstractFilteredMapTest { @Override Map createUnfiltered() { diff --git a/guava-tests/test/com/google/common/collect/FilteredSortedMapTest.java b/guava-tests/test/com/google/common/collect/FilteredSortedMapTest.java index 0a08da3d8cb0..bbf78ee768d0 100644 --- a/guava-tests/test/com/google/common/collect/FilteredSortedMapTest.java +++ b/guava-tests/test/com/google/common/collect/FilteredSortedMapTest.java @@ -20,6 +20,7 @@ import java.util.SortedMap; @GwtCompatible +@ElementTypesAreNonnullByDefault public class FilteredSortedMapTest extends AbstractFilteredMapTest { @Override SortedMap createUnfiltered() { diff --git a/guava-tests/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java index 402410b297f0..3cabcda48d17 100644 --- a/guava-tests/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java +++ b/guava-tests/test/com/google/common/collect/ForMapMultimapAsMapImplementsMapTest.java @@ -28,6 +28,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ForMapMultimapAsMapImplementsMapTest extends AbstractMultimapAsMapImplementsMapTest { public ForMapMultimapAsMapImplementsMapTest() { diff --git a/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java index b694d5d68988..9dc386ea490d 100644 --- a/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java +++ b/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java @@ -28,6 +28,7 @@ * @author George van den Driessche */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ForwardingSortedMapImplementsMapTest extends SortedMapInterfaceTest { private static class SimpleForwardingSortedMap extends ForwardingSortedMap { diff --git a/guava-tests/test/com/google/common/collect/GeneralRangeTest.java b/guava-tests/test/com/google/common/collect/GeneralRangeTest.java index 5d1c73548195..9994c4bcec11 100644 --- a/guava-tests/test/com/google/common/collect/GeneralRangeTest.java +++ b/guava-tests/test/com/google/common/collect/GeneralRangeTest.java @@ -32,6 +32,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class GeneralRangeTest extends TestCase { private static final Ordering ORDERING = Ordering.natural().nullsFirst(); diff --git a/guava-tests/test/com/google/common/collect/HashBasedTableColumnMapTest.java b/guava-tests/test/com/google/common/collect/HashBasedTableColumnMapTest.java index 5b12653b5e2d..dc77b8cac28c 100644 --- a/guava-tests/test/com/google/common/collect/HashBasedTableColumnMapTest.java +++ b/guava-tests/test/com/google/common/collect/HashBasedTableColumnMapTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.ColumnMapTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class HashBasedTableColumnMapTest extends ColumnMapTests { public HashBasedTableColumnMapTest() { super(false, true, true, false); diff --git a/guava-tests/test/com/google/common/collect/HashBasedTableColumnTest.java b/guava-tests/test/com/google/common/collect/HashBasedTableColumnTest.java index 3a68bc642809..48d0d4785122 100644 --- a/guava-tests/test/com/google/common/collect/HashBasedTableColumnTest.java +++ b/guava-tests/test/com/google/common/collect/HashBasedTableColumnTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.ColumnTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class HashBasedTableColumnTest extends ColumnTests { public HashBasedTableColumnTest() { super(false, true, true, true, false); diff --git a/guava-tests/test/com/google/common/collect/HashBasedTableRowMapTest.java b/guava-tests/test/com/google/common/collect/HashBasedTableRowMapTest.java index e5203b134666..e007fe077b2f 100644 --- a/guava-tests/test/com/google/common/collect/HashBasedTableRowMapTest.java +++ b/guava-tests/test/com/google/common/collect/HashBasedTableRowMapTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.RowMapTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class HashBasedTableRowMapTest extends RowMapTests { public HashBasedTableRowMapTest() { super(false, true, true, true); diff --git a/guava-tests/test/com/google/common/collect/HashBasedTableRowTest.java b/guava-tests/test/com/google/common/collect/HashBasedTableRowTest.java index eb4afeb78037..265e2983d0e1 100644 --- a/guava-tests/test/com/google/common/collect/HashBasedTableRowTest.java +++ b/guava-tests/test/com/google/common/collect/HashBasedTableRowTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.RowTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class HashBasedTableRowTest extends RowTests { public HashBasedTableRowTest() { super(false, true, true, true, true); diff --git a/guava-tests/test/com/google/common/collect/HashBasedTableTest.java b/guava-tests/test/com/google/common/collect/HashBasedTableTest.java index 7bb51ef31851..fac4794dfff2 100644 --- a/guava-tests/test/com/google/common/collect/HashBasedTableTest.java +++ b/guava-tests/test/com/google/common/collect/HashBasedTableTest.java @@ -30,6 +30,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class HashBasedTableTest extends AbstractTableTest { @Override diff --git a/guava-tests/test/com/google/common/collect/HashBiMapTest.java b/guava-tests/test/com/google/common/collect/HashBiMapTest.java index 74dc3b77af07..7d16557e8b43 100644 --- a/guava-tests/test/com/google/common/collect/HashBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/HashBiMapTest.java @@ -40,6 +40,7 @@ * @author Mike Bostock */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class HashBiMapTest extends TestCase { public static final class HashBiMapGenerator extends TestStringBiMapGenerator { diff --git a/guava-tests/test/com/google/common/collect/HashMultimapTest.java b/guava-tests/test/com/google/common/collect/HashMultimapTest.java index b1744b347f16..6943656b3938 100644 --- a/guava-tests/test/com/google/common/collect/HashMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/HashMultimapTest.java @@ -35,6 +35,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class HashMultimapTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/HashMultisetTest.java b/guava-tests/test/com/google/common/collect/HashMultisetTest.java index b2e5fe326cc8..ac7d1ab2ce49 100644 --- a/guava-tests/test/com/google/common/collect/HashMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/HashMultisetTest.java @@ -40,6 +40,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class HashMultisetTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/HashingTest.java b/guava-tests/test/com/google/common/collect/HashingTest.java index 5dfac4726ab9..c68d2c2bd731 100644 --- a/guava-tests/test/com/google/common/collect/HashingTest.java +++ b/guava-tests/test/com/google/common/collect/HashingTest.java @@ -21,6 +21,7 @@ /** Tests for {@code Hashing}. */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class HashingTest extends TestCase { public void testSmear() { assertEquals(1459320713, smear(754102528)); diff --git a/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java index 605241e20f76..68bb38604ebd 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java @@ -54,6 +54,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableBiMapTest extends TestCase { // TODO: Reduce duplication of ImmutableMapTest code diff --git a/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java index 90c90c7d9c6b..f0f77451686e 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableEnumMapTest.java @@ -47,6 +47,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableEnumMapTest extends TestCase { public static class ImmutableEnumMapGenerator extends TestEnumMapGenerator { @Override diff --git a/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java index 40aeb8de4421..f2166336c958 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java @@ -52,6 +52,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableListMultimapTest extends TestCase { public static class ImmutableListMultimapGenerator extends TestStringListMultimapGenerator { @Override diff --git a/guava-tests/test/com/google/common/collect/ImmutableListTest.java b/guava-tests/test/com/google/common/collect/ImmutableListTest.java index 4c338a7b96fa..eed63d403cfd 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableListTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableListTest.java @@ -56,6 +56,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableListTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/ImmutableMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMapTest.java index 9e48f94b6f80..ad8948f24d26 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMapTest.java @@ -76,6 +76,7 @@ */ @GwtCompatible(emulated = true) @SuppressWarnings("AlwaysThrows") +@ElementTypesAreNonnullByDefault public class ImmutableMapTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java index 8c1f020b5ca8..f216745044e3 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMultimapAsMapImplementsMapTest.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ImmutableMultimapAsMapImplementsMapTest extends AbstractMultimapAsMapImplementsMapTest { diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java index e8f24ce116bc..57be835c72fa 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java @@ -35,6 +35,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableMultimapTest extends TestCase { public void testBuilder_withImmutableEntry() { diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java index 112b79321bd1..0ae9a4f63d75 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java @@ -56,6 +56,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableMultisetTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java index c503a17573ef..317644e1421d 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapAsMapImplementsMapTest.java @@ -27,6 +27,7 @@ * @author Mike Ward */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class ImmutableSetMultimapAsMapImplementsMapTest extends AbstractMultimapAsMapImplementsMapTest { diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java index 741788ff2eaa..36a9f945ddf7 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java @@ -52,6 +52,7 @@ * @author Mike Ward */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableSetMultimapTest extends TestCase { private static final class ImmutableSetMultimapGenerator extends TestStringSetMultimapGenerator { @Override diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetTest.java index ab8c2daaf828..feb042e3c91b 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSetTest.java @@ -57,6 +57,7 @@ * @author Nick Kralevich */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableSetTest extends AbstractImmutableSetTest { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index 14492163a0d1..94de5462dd65 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -63,6 +63,7 @@ */ @GwtCompatible(emulated = true) @SuppressWarnings("AlwaysThrows") +@ElementTypesAreNonnullByDefault public class ImmutableSortedMapTest extends TestCase { // TODO: Avoid duplicating code in ImmutableMapTest diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java index e35819c8edd9..b91d6ac66fae 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java @@ -61,6 +61,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableSortedSetTest extends AbstractImmutableSetTest { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/ImmutableTableTest.java b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java index 4838ea7c2c8b..04de1572bc9a 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableTableTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java @@ -32,6 +32,7 @@ * @author Gregory Kick */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ImmutableTableTest extends AbstractTableReadTest { @Override protected Table create(Object... data) { diff --git a/guava-tests/test/com/google/common/collect/IterablesTest.java b/guava-tests/test/com/google/common/collect/IterablesTest.java index cdc2637a0e5d..92ac0157436c 100644 --- a/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -56,6 +56,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class IterablesTest extends TestCase { public void testSize0() { diff --git a/guava-tests/test/com/google/common/collect/IteratorsTest.java b/guava-tests/test/com/google/common/collect/IteratorsTest.java index 31879d542e8f..01fd1e2ec408 100644 --- a/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -66,6 +66,7 @@ * @author Kevin Bourrillion */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class IteratorsTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/LegacyComparable.java b/guava-tests/test/com/google/common/collect/LegacyComparable.java index 05a6607a420c..90d0ad36e591 100644 --- a/guava-tests/test/com/google/common/collect/LegacyComparable.java +++ b/guava-tests/test/com/google/common/collect/LegacyComparable.java @@ -30,6 +30,7 @@ */ @SuppressWarnings("ComparableType") @GwtCompatible +@ElementTypesAreNonnullByDefault class LegacyComparable implements Comparable, Serializable { static final LegacyComparable X = new LegacyComparable("x"); static final LegacyComparable Y = new LegacyComparable("y"); diff --git a/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java b/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java index 7d76214430d7..1ab7b48b8941 100644 --- a/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java @@ -52,6 +52,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class LinkedHashMultimapTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java b/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java index 4f4289d464df..6c390240918a 100644 --- a/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/LinkedHashMultisetTest.java @@ -39,6 +39,7 @@ * @author Kevin Bourrillion */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class LinkedHashMultisetTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java b/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java index 8018cf227f7b..434acbb6367d 100644 --- a/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java @@ -55,6 +55,7 @@ * @author Mike Bostock */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class LinkedListMultimapTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/ListsImplTest.java b/guava-tests/test/com/google/common/collect/ListsImplTest.java index c6eba5d7ef8b..f4c0362a41a1 100644 --- a/guava-tests/test/com/google/common/collect/ListsImplTest.java +++ b/guava-tests/test/com/google/common/collect/ListsImplTest.java @@ -36,6 +36,7 @@ /** Tests the package level *impl methods directly using various types of lists. */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ListsImplTest extends TestCase { /** Describes how a list is modifiable */ diff --git a/guava-tests/test/com/google/common/collect/ListsTest.java b/guava-tests/test/com/google/common/collect/ListsTest.java index 2de28913bf85..c7ce4ad03396 100644 --- a/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/guava-tests/test/com/google/common/collect/ListsTest.java @@ -60,6 +60,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ListsTest extends TestCase { private static final Collection SOME_COLLECTION = asList(0, 1, 1); diff --git a/guava-tests/test/com/google/common/collect/MapsSortedTransformValuesTest.java b/guava-tests/test/com/google/common/collect/MapsSortedTransformValuesTest.java index 6bf066f513b0..03d5dd225d37 100644 --- a/guava-tests/test/com/google/common/collect/MapsSortedTransformValuesTest.java +++ b/guava-tests/test/com/google/common/collect/MapsSortedTransformValuesTest.java @@ -27,6 +27,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MapsSortedTransformValuesTest extends AbstractMapsTransformValuesTest { @Override protected SortedMap makeEmptyMap() { diff --git a/guava-tests/test/com/google/common/collect/MapsTest.java b/guava-tests/test/com/google/common/collect/MapsTest.java index 57e21b4363cd..fc51b72630d4 100644 --- a/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/guava-tests/test/com/google/common/collect/MapsTest.java @@ -70,6 +70,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class MapsTest extends TestCase { private static final Comparator SOME_COMPARATOR = Collections.reverseOrder(); diff --git a/guava-tests/test/com/google/common/collect/MapsTransformValuesTest.java b/guava-tests/test/com/google/common/collect/MapsTransformValuesTest.java index 6c6bca3ddeb0..308c01c64ea9 100644 --- a/guava-tests/test/com/google/common/collect/MapsTransformValuesTest.java +++ b/guava-tests/test/com/google/common/collect/MapsTransformValuesTest.java @@ -27,6 +27,7 @@ * @author Isaac Shum */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MapsTransformValuesTest extends AbstractMapsTransformValuesTest { @Override protected Map makeEmptyMap() { diff --git a/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java b/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java index 7411beca42d3..87ba989f95fb 100644 --- a/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java @@ -34,6 +34,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MapsTransformValuesUnmodifiableIteratorTest extends MapInterfaceTest { // TODO(jlevy): Move shared code of this class and MapsTransformValuesTest // to a superclass. diff --git a/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java index b43f2d704520..0d922df46a18 100644 --- a/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java +++ b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java @@ -56,6 +56,7 @@ * @author Sverre Sundsdal */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class MinMaxPriorityQueueTest extends TestCase { private static final Ordering SOME_COMPARATOR = Ordering.natural().reverse(); diff --git a/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java b/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java index 282be1a5b207..664fb283bc39 100644 --- a/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java +++ b/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java @@ -29,6 +29,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MoreCollectorsTest extends TestCase { public void testToOptionalEmpty() { assertThat(Stream.empty().collect(MoreCollectors.toOptional())).isEmpty(); diff --git a/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java b/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java index 488881004685..0166c7e6c233 100644 --- a/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java @@ -35,6 +35,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class MultimapBuilderTest extends TestCase { @GwtIncompatible // doesn't build without explicit type parameters on build() methods diff --git a/guava-tests/test/com/google/common/collect/MultimapsTest.java b/guava-tests/test/com/google/common/collect/MultimapsTest.java index ff30e46d96a2..adee63bc8b99 100644 --- a/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -72,6 +72,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class MultimapsTest extends TestCase { private static final Comparator INT_COMPARATOR = diff --git a/guava-tests/test/com/google/common/collect/MultimapsTransformValuesAsMapTest.java b/guava-tests/test/com/google/common/collect/MultimapsTransformValuesAsMapTest.java index 491a632f9e6e..78494be1b4d5 100644 --- a/guava-tests/test/com/google/common/collect/MultimapsTransformValuesAsMapTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapsTransformValuesAsMapTest.java @@ -27,6 +27,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MultimapsTransformValuesAsMapTest extends AbstractMultimapAsMapImplementsMapTest { public MultimapsTransformValuesAsMapTest() { diff --git a/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java b/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java index 870490e5fd42..15c0901b15bc 100644 --- a/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java +++ b/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java @@ -28,6 +28,7 @@ * @author Mike Bostock */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MultisetsImmutableEntryTest extends TestCase { private static final @Nullable String NE = null; diff --git a/guava-tests/test/com/google/common/collect/MultisetsTest.java b/guava-tests/test/com/google/common/collect/MultisetsTest.java index a8d8e341c3eb..c2f597853716 100644 --- a/guava-tests/test/com/google/common/collect/MultisetsTest.java +++ b/guava-tests/test/com/google/common/collect/MultisetsTest.java @@ -38,6 +38,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class MultisetsTest extends TestCase { /* See MultisetsImmutableEntryTest for immutableEntry() tests. */ diff --git a/guava-tests/test/com/google/common/collect/NewCustomTableTest.java b/guava-tests/test/com/google/common/collect/NewCustomTableTest.java index 6ad3aa212a1f..b048e4648a38 100644 --- a/guava-tests/test/com/google/common/collect/NewCustomTableTest.java +++ b/guava-tests/test/com/google/common/collect/NewCustomTableTest.java @@ -29,6 +29,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class NewCustomTableTest extends AbstractTableTest { @Override diff --git a/guava-tests/test/com/google/common/collect/ObjectArraysTest.java b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java index 50f781469e56..edbcf2a9e55e 100644 --- a/guava-tests/test/com/google/common/collect/ObjectArraysTest.java +++ b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java @@ -33,6 +33,7 @@ * @author Kevin Bourrillion */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class ObjectArraysTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/OrderingTest.java b/guava-tests/test/com/google/common/collect/OrderingTest.java index efa607e53be8..dab0259f78aa 100644 --- a/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -50,6 +50,7 @@ * @author Jesse Wilson */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class OrderingTest extends TestCase { // TODO(cpovirk): some of these are inexplicably slow (20-30s) under GWT diff --git a/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java b/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java index 0f79985bcf39..e732a88c4290 100644 --- a/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java @@ -38,6 +38,7 @@ */ @SuppressWarnings("serial") // No serialization is used in this test @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class PeekingIteratorTest extends TestCase { /** diff --git a/guava-tests/test/com/google/common/collect/RangeTest.java b/guava-tests/test/com/google/common/collect/RangeTest.java index 16764a699519..cb18804a8bcd 100644 --- a/guava-tests/test/com/google/common/collect/RangeTest.java +++ b/guava-tests/test/com/google/common/collect/RangeTest.java @@ -40,6 +40,7 @@ * @author Kevin Bourrillion */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class RangeTest extends TestCase { public void testOpen() { Range range = Range.open(4, 8); diff --git a/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java b/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java index b0f9e16e4327..76086cef997c 100644 --- a/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java +++ b/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java @@ -23,6 +23,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class RegularImmutableAsListTest extends TestCase { /** * RegularImmutableAsList should assume its input is null-free without checking, because it only diff --git a/guava-tests/test/com/google/common/collect/RegularImmutableTableTest.java b/guava-tests/test/com/google/common/collect/RegularImmutableTableTest.java index 82d7b39b9ff5..6502766cc55e 100644 --- a/guava-tests/test/com/google/common/collect/RegularImmutableTableTest.java +++ b/guava-tests/test/com/google/common/collect/RegularImmutableTableTest.java @@ -21,8 +21,11 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.Table.Cell; -/** @author Gregory Kick */ +/** + * @author Gregory Kick + */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class RegularImmutableTableTest extends AbstractImmutableTableTest { private static final ImmutableSet> CELLS = ImmutableSet.of( diff --git a/guava-tests/test/com/google/common/collect/SetOperationsTest.java b/guava-tests/test/com/google/common/collect/SetOperationsTest.java index 2dc4a7521ab2..bf36f428016b 100644 --- a/guava-tests/test/com/google/common/collect/SetOperationsTest.java +++ b/guava-tests/test/com/google/common/collect/SetOperationsTest.java @@ -38,6 +38,7 @@ * @author Kevin Bourrillion */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SetOperationsTest extends TestCase { @J2ktIncompatible @GwtIncompatible // suite diff --git a/guava-tests/test/com/google/common/collect/SetsTest.java b/guava-tests/test/com/google/common/collect/SetsTest.java index 2727792e04a8..97585aa44872 100644 --- a/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/guava-tests/test/com/google/common/collect/SetsTest.java @@ -88,6 +88,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SetsTest extends TestCase { private static final IteratorTester.KnownOrder KNOWN_ORDER = diff --git a/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java b/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java index 6cba5d359b99..e3671bcb0277 100644 --- a/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java @@ -42,6 +42,7 @@ */ @SuppressWarnings("serial") // No serialization is used in this test @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SimpleAbstractMultisetTest extends TestCase { @J2ktIncompatible @GwtIncompatible // suite diff --git a/guava-tests/test/com/google/common/collect/SingletonImmutableTableTest.java b/guava-tests/test/com/google/common/collect/SingletonImmutableTableTest.java index 16c5ecbbf959..c74951a807a7 100644 --- a/guava-tests/test/com/google/common/collect/SingletonImmutableTableTest.java +++ b/guava-tests/test/com/google/common/collect/SingletonImmutableTableTest.java @@ -29,6 +29,7 @@ * @author Gregory Kick */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SingletonImmutableTableTest extends AbstractImmutableTableTest { private final ImmutableTable testTable = new SingletonImmutableTable<>('a', 1, "blah"); diff --git a/guava-tests/test/com/google/common/collect/SortedIterablesTest.java b/guava-tests/test/com/google/common/collect/SortedIterablesTest.java index 543199d2e1ad..cd025c66db73 100644 --- a/guava-tests/test/com/google/common/collect/SortedIterablesTest.java +++ b/guava-tests/test/com/google/common/collect/SortedIterablesTest.java @@ -24,6 +24,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class SortedIterablesTest extends TestCase { public void testSameComparator() { assertTrue(SortedIterables.hasSameComparator(Ordering.natural(), Sets.newTreeSet())); diff --git a/guava-tests/test/com/google/common/collect/SortedListsTest.java b/guava-tests/test/com/google/common/collect/SortedListsTest.java index a9b5e73bbae2..7109c6c0ff2c 100644 --- a/guava-tests/test/com/google/common/collect/SortedListsTest.java +++ b/guava-tests/test/com/google/common/collect/SortedListsTest.java @@ -29,6 +29,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SortedListsTest extends TestCase { private static final ImmutableList LIST_WITH_DUPS = ImmutableList.of(1, 1, 2, 4, 4, 4, 8); diff --git a/guava-tests/test/com/google/common/collect/StreamsTest.java b/guava-tests/test/com/google/common/collect/StreamsTest.java index 36a409be73ad..fc64f84d893a 100644 --- a/guava-tests/test/com/google/common/collect/StreamsTest.java +++ b/guava-tests/test/com/google/common/collect/StreamsTest.java @@ -43,6 +43,7 @@ /** Unit test for {@link Streams}. */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class StreamsTest extends TestCase { /* * Full and proper black-box testing of a Stream-returning method is extremely involved, and is diff --git a/guava-tests/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java index 1cb7abceb4cd..7cab6fb94363 100644 --- a/guava-tests/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java +++ b/guava-tests/test/com/google/common/collect/SubMapMultimapAsMapImplementsMapTest.java @@ -28,6 +28,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class SubMapMultimapAsMapImplementsMapTest extends AbstractMultimapAsMapImplementsMapTest { public SubMapMultimapAsMapImplementsMapTest() { diff --git a/guava-tests/test/com/google/common/collect/TableCollectionTest.java b/guava-tests/test/com/google/common/collect/TableCollectionTest.java index eddcfe8b1d08..1a956f74c473 100644 --- a/guava-tests/test/com/google/common/collect/TableCollectionTest.java +++ b/guava-tests/test/com/google/common/collect/TableCollectionTest.java @@ -54,6 +54,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TableCollectionTest extends TestCase { private static final Feature[] COLLECTION_FEATURES = { diff --git a/guava-tests/test/com/google/common/collect/TableCollectorsTest.java b/guava-tests/test/com/google/common/collect/TableCollectorsTest.java index 9a1fe5bc5358..ced6751a3b9a 100644 --- a/guava-tests/test/com/google/common/collect/TableCollectorsTest.java +++ b/guava-tests/test/com/google/common/collect/TableCollectorsTest.java @@ -31,6 +31,7 @@ /** Unit tests for {@link TableCollectors}. */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TableCollectorsTest extends TestCase { public void testToImmutableTable() { Collector, ?, ImmutableTable> collector = diff --git a/guava-tests/test/com/google/common/collect/TablesTest.java b/guava-tests/test/com/google/common/collect/TablesTest.java index 6fe3e99be4f0..4469be090a9f 100644 --- a/guava-tests/test/com/google/common/collect/TablesTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTest.java @@ -29,6 +29,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TablesTest extends TestCase { @GwtIncompatible // SerializableTester public void testImmutableEntrySerialization() { diff --git a/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnMapTest.java b/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnMapTest.java index 0344b56c19aa..7653a8c2c4ee 100644 --- a/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnMapTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnMapTest.java @@ -23,6 +23,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransformValuesColumnMapTest extends ColumnMapTests { public TablesTransformValuesColumnMapTest() { super(false, true, true, false); diff --git a/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnTest.java b/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnTest.java index b28f5c506e76..5ae6ebf5a5ac 100644 --- a/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTransformValuesColumnTest.java @@ -23,6 +23,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransformValuesColumnTest extends ColumnTests { public TablesTransformValuesColumnTest() { super(false, false, true, true, false); diff --git a/guava-tests/test/com/google/common/collect/TablesTransformValuesRowMapTest.java b/guava-tests/test/com/google/common/collect/TablesTransformValuesRowMapTest.java index 661a23255291..6ec708b8262f 100644 --- a/guava-tests/test/com/google/common/collect/TablesTransformValuesRowMapTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTransformValuesRowMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransformValuesRowMapTest extends RowMapTests { public TablesTransformValuesRowMapTest() { super(false, true, true, true); diff --git a/guava-tests/test/com/google/common/collect/TablesTransformValuesRowTest.java b/guava-tests/test/com/google/common/collect/TablesTransformValuesRowTest.java index 71571b98381b..507672d61a73 100644 --- a/guava-tests/test/com/google/common/collect/TablesTransformValuesRowTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTransformValuesRowTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransformValuesRowTest extends RowTests { public TablesTransformValuesRowTest() { super(false, false, true, true, true); diff --git a/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java b/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java index 2112ac6ed5fe..20251795ce9a 100644 --- a/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java @@ -30,6 +30,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TablesTransformValuesTest extends AbstractTableTest { private static final Function<@Nullable String, @Nullable Character> FIRST_CHARACTER = diff --git a/guava-tests/test/com/google/common/collect/TablesTransposeColumnTest.java b/guava-tests/test/com/google/common/collect/TablesTransposeColumnTest.java index 142dbc7cf77b..0d169546aa0b 100644 --- a/guava-tests/test/com/google/common/collect/TablesTransposeColumnTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTransposeColumnTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.ColumnTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransposeColumnTest extends ColumnTests { public TablesTransposeColumnTest() { super(false, true, true, true, true); diff --git a/guava-tests/test/com/google/common/collect/TablesTransposeRowTest.java b/guava-tests/test/com/google/common/collect/TablesTransposeRowTest.java index 03caae1de593..a24264cd8657 100644 --- a/guava-tests/test/com/google/common/collect/TablesTransposeRowTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTransposeRowTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.RowTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TablesTransposeRowTest extends RowTests { public TablesTransposeRowTest() { super(false, true, true, true, false); diff --git a/guava-tests/test/com/google/common/collect/TransposedTableTest.java b/guava-tests/test/com/google/common/collect/TransposedTableTest.java index 7233cf175374..e556ea88fa9a 100644 --- a/guava-tests/test/com/google/common/collect/TransposedTableTest.java +++ b/guava-tests/test/com/google/common/collect/TransposedTableTest.java @@ -24,6 +24,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class TransposedTableTest extends AbstractTableTest { @Override diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableColumnMapTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableColumnMapTest.java index b5c92c8e7495..4fa7b5aaeca6 100644 --- a/guava-tests/test/com/google/common/collect/TreeBasedTableColumnMapTest.java +++ b/guava-tests/test/com/google/common/collect/TreeBasedTableColumnMapTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.ColumnMapTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableColumnMapTest extends ColumnMapTests { public TreeBasedTableColumnMapTest() { super(false, true, true, false); diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableColumnTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableColumnTest.java index b90f46b4b6ea..48049bc5913e 100644 --- a/guava-tests/test/com/google/common/collect/TreeBasedTableColumnTest.java +++ b/guava-tests/test/com/google/common/collect/TreeBasedTableColumnTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.ColumnTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableColumnTest extends ColumnTests { public TreeBasedTableColumnTest() { super(false, true, true, true, false); diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapHeadMapTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapHeadMapTest.java index 05bfc4133e4e..274594166764 100644 --- a/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapHeadMapTest.java +++ b/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapHeadMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableRowMapHeadMapTest extends RowMapTests { public TreeBasedTableRowMapHeadMapTest() { super(false, true, true, true); diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapSubMapTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapSubMapTest.java index a9c7e9ff4124..ba4235d7748a 100644 --- a/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapSubMapTest.java +++ b/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapSubMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableRowMapSubMapTest extends RowMapTests { public TreeBasedTableRowMapSubMapTest() { super(false, true, true, true); diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTailMapTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTailMapTest.java index 7d7b82e4378a..862d78c7d1b2 100644 --- a/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTailMapTest.java +++ b/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTailMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableRowMapTailMapTest extends RowMapTests { public TreeBasedTableRowMapTailMapTest() { super(false, true, true, true); diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTest.java index 63a86bfccbea..46a925a58f63 100644 --- a/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTest.java +++ b/guava-tests/test/com/google/common/collect/TreeBasedTableRowMapTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.RowMapTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableRowMapTest extends RowMapTests { public TreeBasedTableRowMapTest() { super(false, true, true, true); diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableRowTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableRowTest.java index 9a67fe93471e..7884b61104f4 100644 --- a/guava-tests/test/com/google/common/collect/TreeBasedTableRowTest.java +++ b/guava-tests/test/com/google/common/collect/TreeBasedTableRowTest.java @@ -20,6 +20,7 @@ import com.google.common.collect.TableCollectionTest.RowTests; @GwtCompatible +@ElementTypesAreNonnullByDefault public class TreeBasedTableRowTest extends RowTests { public TreeBasedTableRowTest() { super(false, true, true, true, true); diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java index d1f6e880c68b..f42673766a21 100644 --- a/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java +++ b/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java @@ -43,6 +43,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TreeBasedTableTest extends AbstractTableTest { @J2ktIncompatible @GwtIncompatible // suite diff --git a/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java b/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java index 4b00570a6126..65e83157678f 100644 --- a/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java +++ b/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java @@ -36,6 +36,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TreeMultimapExplicitTest extends TestCase { /** diff --git a/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java b/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java index b37a13bd0732..69be036cd2b5 100644 --- a/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java +++ b/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java @@ -58,6 +58,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TreeMultimapNaturalTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/TreeMultisetTest.java b/guava-tests/test/com/google/common/collect/TreeMultisetTest.java index 42e7cc45bbb7..159545a984f5 100644 --- a/guava-tests/test/com/google/common/collect/TreeMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/TreeMultisetTest.java @@ -48,6 +48,7 @@ * @author Neal Kanodia */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TreeMultisetTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/TreeTraverserTest.java b/guava-tests/test/com/google/common/collect/TreeTraverserTest.java index 7c49fac7f318..8eb9860a37aa 100644 --- a/guava-tests/test/com/google/common/collect/TreeTraverserTest.java +++ b/guava-tests/test/com/google/common/collect/TreeTraverserTest.java @@ -31,6 +31,7 @@ * @author Louis Wasserman */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class TreeTraverserTest extends TestCase { private static class Node { final char value; diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableIteratorTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableIteratorTest.java index 5e474aa70f67..e2e432fe5299 100644 --- a/guava-tests/test/com/google/common/collect/UnmodifiableIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/UnmodifiableIteratorTest.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableIteratorTest extends TestCase { @SuppressWarnings("DoNotCall") diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableListIteratorTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableListIteratorTest.java index 36a017d45cb3..130ef6b7cdca 100644 --- a/guava-tests/test/com/google/common/collect/UnmodifiableListIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/UnmodifiableListIteratorTest.java @@ -28,6 +28,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableListIteratorTest extends TestCase { @SuppressWarnings("DoNotCall") public void testRemove() { diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java index d03d7e351b65..f485b8bb0e5e 100644 --- a/guava-tests/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java +++ b/guava-tests/test/com/google/common/collect/UnmodifiableMultimapAsMapImplementsMapTest.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableMultimapAsMapImplementsMapTest extends AbstractMultimapAsMapImplementsMapTest { diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnMapTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnMapTest.java index 3f49178c3ee4..12695960396a 100644 --- a/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnMapTest.java +++ b/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableRowSortedTableColumnMapTest extends ColumnMapTests { public UnmodifiableRowSortedTableColumnMapTest() { super(false, false, false, false); diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnTest.java index ff7008160c62..2d9c2ea8988d 100644 --- a/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnTest.java +++ b/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableColumnTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableRowSortedTableColumnTest extends ColumnTests { public UnmodifiableRowSortedTableColumnTest() { super(false, false, false, false, false); diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowMapTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowMapTest.java index 76dadc334060..023e5608a79f 100644 --- a/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowMapTest.java +++ b/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowMapTest.java @@ -22,6 +22,7 @@ import java.util.SortedMap; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableRowSortedTableRowMapTest extends RowMapTests { public UnmodifiableRowSortedTableRowMapTest() { super(false, false, false, false); diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowTest.java index 0de5f0e34991..ae7832fc3408 100644 --- a/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowTest.java +++ b/guava-tests/test/com/google/common/collect/UnmodifiableRowSortedTableRowTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableRowSortedTableRowTest extends RowTests { public UnmodifiableRowSortedTableRowTest() { super(false, false, false, false, false); diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnMapTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnMapTest.java index a5cc6fba96d9..a66173b06439 100644 --- a/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnMapTest.java +++ b/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableTableColumnMapTest extends ColumnMapTests { public UnmodifiableTableColumnMapTest() { super(false, false, false, false); diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnTest.java index ebf378b87365..a27f0c197f4e 100644 --- a/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnTest.java +++ b/guava-tests/test/com/google/common/collect/UnmodifiableTableColumnTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableTableColumnTest extends ColumnTests { public UnmodifiableTableColumnTest() { super(false, false, false, false, false); diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableTableRowMapTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableTableRowMapTest.java index c53f15777bdf..79fecaf6544c 100644 --- a/guava-tests/test/com/google/common/collect/UnmodifiableTableRowMapTest.java +++ b/guava-tests/test/com/google/common/collect/UnmodifiableTableRowMapTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableTableRowMapTest extends RowMapTests { public UnmodifiableTableRowMapTest() { super(false, false, false, false); diff --git a/guava-tests/test/com/google/common/collect/UnmodifiableTableRowTest.java b/guava-tests/test/com/google/common/collect/UnmodifiableTableRowTest.java index f0440abc57c0..55eea54d17a2 100644 --- a/guava-tests/test/com/google/common/collect/UnmodifiableTableRowTest.java +++ b/guava-tests/test/com/google/common/collect/UnmodifiableTableRowTest.java @@ -21,6 +21,7 @@ import java.util.Map; @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableTableRowTest extends RowTests { public UnmodifiableTableRowTest() { super(false, false, false, false, false); From 59c063bef6d3e2f346314f9722159113b68f9d20 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 20 Feb 2024 08:04:33 -0800 Subject: [PATCH 155/216] Address a couple Error Prone warnings. The one isn't a "real" problem, but we're being a little unclear. The other is pointing out that the test isn't doing what it claims. RELNOTES=n/a PiperOrigin-RevId: 608607035 --- .../test/com/google/common/collect/ImmutableBiMapTest.java | 5 ++--- .../test/com/google/common/collect/ImmutableBiMapTest.java | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java index 0dd6360b6e6f..af2978e4c247 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java @@ -541,15 +541,14 @@ public void testCopyOf() { public void testEmpty() { ImmutableBiMap bimap = ImmutableBiMap.of(); assertEquals(Collections.emptyMap(), bimap); - assertEquals(Collections.emptyMap(), bimap.inverse()); + assertEquals(Collections.emptyMap(), bimap.inverse()); } public void testFromHashMap() { Map hashMap = Maps.newLinkedHashMap(); hashMap.put("one", 1); hashMap.put("two", 2); - ImmutableBiMap bimap = - ImmutableBiMap.copyOf(ImmutableMap.of("one", 1, "two", 2)); + ImmutableBiMap bimap = ImmutableBiMap.copyOf(hashMap); assertMapEquals(bimap, "one", 1, "two", 2); assertMapEquals(bimap.inverse(), 1, "one", 2, "two"); } diff --git a/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java index 68bb38604ebd..b567ef0e3b69 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java @@ -567,15 +567,14 @@ public void testCopyOf() { public void testEmpty() { ImmutableBiMap bimap = ImmutableBiMap.of(); assertEquals(Collections.emptyMap(), bimap); - assertEquals(Collections.emptyMap(), bimap.inverse()); + assertEquals(Collections.emptyMap(), bimap.inverse()); } public void testFromHashMap() { Map hashMap = Maps.newLinkedHashMap(); hashMap.put("one", 1); hashMap.put("two", 2); - ImmutableBiMap bimap = - ImmutableBiMap.copyOf(ImmutableMap.of("one", 1, "two", 2)); + ImmutableBiMap bimap = ImmutableBiMap.copyOf(hashMap); assertMapEquals(bimap, "one", 1, "two", 2); assertMapEquals(bimap.inverse(), 1, "one", 2, "two"); } From 1d96bb9aeec1ef21c947f607c7aafdcc5a58d608 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 20 Feb 2024 08:57:46 -0800 Subject: [PATCH 156/216] Remove unnecessary suppressions. Note that `cast` and `varargs` warnings (among others) are disabled for our internal builds. While we could try to leave those suppressions in place for external users, our tooling keep nudges us to remove them, and it's not obviously a good use of time to refine that tooling to stop nudging our particular project about those particular kinds of warnings. We may reevaluate if we hear of problems (e.g., for IDE users). Maybe we should at least configure our external Maven build to disable those warnings.... RELNOTES=n/a PiperOrigin-RevId: 608623394 --- .../AbstractCollectionTestSuiteBuilder.java | 2 -- .../testing/AbstractContainerTester.java | 2 -- .../testing/AbstractIteratorTester.java | 2 -- .../collect/testing/AbstractMapTester.java | 1 - .../testing/DerivedCollectionGenerators.java | 1 - .../collect/testing/MapTestSuiteBuilder.java | 1 - .../collect/testing/OneSizeGenerator.java | 1 - .../common/collect/testing/SafeTreeMap.java | 1 - .../common/collect/testing/SafeTreeSet.java | 1 - .../testing/features/CollectionFeature.java | 2 -- .../testing/features/CollectionSize.java | 2 -- .../collect/testing/features/ListFeature.java | 2 -- .../collect/testing/features/MapFeature.java | 2 -- .../collect/testing/features/SetFeature.java | 2 -- .../testing/google/BiMapPutTester.java | 9 ------- .../testing/google/BiMapRemoveTester.java | 6 ----- .../google/ListMultimapPutAllTester.java | 1 - .../google/ListMultimapRemoveTester.java | 4 --- .../ListMultimapReplaceValuesTester.java | 1 - .../testing/google/MultimapFeature.java | 2 -- .../google/MultimapReplaceValuesTester.java | 6 ----- .../google/MultimapTestSuiteBuilder.java | 2 -- .../google/MultisetIteratorTester.java | 4 --- .../google/MultisetNavigationTester.java | 4 --- .../google/SetMultimapPutAllTester.java | 1 - .../SetMultimapReplaceValuesTester.java | 1 - .../SortedMultisetTestSuiteBuilder.java | 1 - .../testers/CollectionAddAllTester.java | 1 - .../testing/testers/CollectionAddTester.java | 1 - .../testers/CollectionContainsAllTester.java | 1 - .../testers/CollectionRemoveAllTester.java | 1 - .../testers/CollectionRemoveTester.java | 1 - .../testers/CollectionRetainAllTester.java | 1 - .../testers/ListAddAllAtIndexTester.java | 1 - .../testing/testers/ListAddAllTester.java | 1 - .../testing/testers/ListAddAtIndexTester.java | 1 - .../testing/testers/ListAddTester.java | 1 - .../testing/testers/ListRemoveAllTester.java | 1 - .../testing/testers/ListRetainAllTester.java | 2 -- .../testing/testers/ListSubListTester.java | 1 - .../testing/testers/MapPutAllTester.java | 1 - .../collect/testing/testers/MapPutTester.java | 1 - .../testing/testers/MapRemoveTester.java | 1 - .../testing/testers/QueueOfferTester.java | 1 - .../testing/testers/QueuePollTester.java | 1 - .../testing/testers/QueueRemoveTester.java | 1 - .../testing/testers/SetAddAllTester.java | 1 - .../testers/SortedMapNavigationTester.java | 1 - .../testing/features/FeatureUtilTest.java | 2 -- .../google/common/base/EquivalenceTest.java | 1 - .../google/common/base/PredicatesTest.java | 27 ------------------- .../common/cache/CacheBuilderFactory.java | 1 - .../com/google/common/cache/CacheTesting.java | 1 - .../google/common/cache/LocalCacheTest.java | 3 --- .../collect/AbstractImmutableSetTest.java | 1 - .../common/collect/ComparatorsTest.java | 1 - .../common/collect/ImmutableRangeSetTest.java | 1 - .../common/collect/ImmutableSetTest.java | 1 - .../collect/ImmutableSortedMapTest.java | 8 ------ .../collect/ImmutableSortedSetTest.java | 3 --- .../google/common/collect/IterablesTest.java | 2 -- .../google/common/collect/IteratorsTest.java | 5 ---- .../collect/LinkedHashMultimapTest.java | 2 -- .../collect/LinkedListMultimapTest.java | 2 -- .../google/common/collect/ListsImplTest.java | 1 - .../com/google/common/collect/ListsTest.java | 7 ----- .../collect/MapMakerInternalMapTest.java | 2 -- .../google/common/collect/OrderingTest.java | 4 +-- .../com/google/common/collect/SetsTest.java | 16 ----------- .../google/common/primitives/CharsTest.java | 1 - .../google/common/primitives/LongsTest.java | 1 - .../google/common/primitives/ShortsTest.java | 1 - .../common/primitives/SignedBytesTest.java | 1 - .../common/primitives/UnsignedBytesTest.java | 1 - .../google/common/reflect/InvokableTest.java | 1 - .../common/util/concurrent/FuturesTest.java | 25 ----------------- .../common/collect/ImmutableSortedMap.java | 8 ------ .../common/collect/ImmutableSortedSet.java | 2 -- .../com/google/common/collect/Multisets.java | 6 ----- .../com/google/common/collect/Ordering.java | 1 - .../src/com/google/common/collect/Sets.java | 1 - .../graph/DirectedGraphConnections.java | 1 - .../AbstractCollectionTestSuiteBuilder.java | 2 -- .../testing/AbstractContainerTester.java | 2 -- .../testing/AbstractIteratorTester.java | 2 -- .../collect/testing/AbstractMapTester.java | 1 - .../testing/DerivedCollectionGenerators.java | 1 - .../collect/testing/MapTestSuiteBuilder.java | 1 - .../collect/testing/OneSizeGenerator.java | 1 - .../common/collect/testing/SafeTreeMap.java | 1 - .../common/collect/testing/SafeTreeSet.java | 1 - .../testing/features/CollectionFeature.java | 2 -- .../testing/features/CollectionSize.java | 2 -- .../collect/testing/features/ListFeature.java | 2 -- .../collect/testing/features/MapFeature.java | 2 -- .../collect/testing/features/SetFeature.java | 2 -- .../testing/google/BiMapPutTester.java | 9 ------- .../testing/google/BiMapRemoveTester.java | 6 ----- .../google/ListMultimapPutAllTester.java | 1 - .../google/ListMultimapRemoveTester.java | 4 --- .../ListMultimapReplaceValuesTester.java | 1 - .../testing/google/MultimapFeature.java | 2 -- .../google/MultimapReplaceValuesTester.java | 6 ----- .../google/MultimapTestSuiteBuilder.java | 2 -- .../google/MultisetIteratorTester.java | 4 --- .../google/MultisetNavigationTester.java | 4 --- .../google/SetMultimapPutAllTester.java | 1 - .../SetMultimapReplaceValuesTester.java | 1 - .../SortedMultisetTestSuiteBuilder.java | 1 - .../testers/CollectionAddAllTester.java | 1 - .../testing/testers/CollectionAddTester.java | 1 - .../testers/CollectionContainsAllTester.java | 1 - .../testers/CollectionRemoveAllTester.java | 1 - .../testers/CollectionRemoveIfTester.java | 1 - .../testers/CollectionRemoveTester.java | 1 - .../testers/CollectionRetainAllTester.java | 1 - .../testers/ListAddAllAtIndexTester.java | 1 - .../testing/testers/ListAddAllTester.java | 1 - .../testing/testers/ListAddAtIndexTester.java | 1 - .../testing/testers/ListAddTester.java | 1 - .../testing/testers/ListRemoveAllTester.java | 1 - .../testing/testers/ListRetainAllTester.java | 2 -- .../testing/testers/ListSubListTester.java | 1 - .../testing/testers/MapPutAllTester.java | 1 - .../collect/testing/testers/MapPutTester.java | 1 - .../testing/testers/MapRemoveTester.java | 1 - .../testing/testers/QueueOfferTester.java | 1 - .../testing/testers/QueuePollTester.java | 1 - .../testing/testers/QueueRemoveTester.java | 1 - .../testing/testers/SetAddAllTester.java | 1 - .../testers/SortedMapNavigationTester.java | 1 - .../testing/features/FeatureUtilTest.java | 2 -- .../google/common/base/EquivalenceTest.java | 1 - .../google/common/base/PredicatesTest.java | 27 ------------------- .../common/cache/CacheBuilderFactory.java | 1 - .../com/google/common/cache/CacheTesting.java | 1 - .../google/common/cache/LocalCacheTest.java | 3 --- .../collect/AbstractImmutableSetTest.java | 1 - .../common/collect/ComparatorsTest.java | 1 - .../common/collect/ImmutableRangeSetTest.java | 1 - .../common/collect/ImmutableSetTest.java | 1 - .../collect/ImmutableSortedMapTest.java | 8 ------ .../collect/ImmutableSortedSetTest.java | 3 --- .../google/common/collect/IterablesTest.java | 2 -- .../google/common/collect/IteratorsTest.java | 5 ---- .../collect/LinkedHashMultimapTest.java | 2 -- .../collect/LinkedListMultimapTest.java | 2 -- .../google/common/collect/ListsImplTest.java | 1 - .../com/google/common/collect/ListsTest.java | 7 ----- .../collect/MapMakerInternalMapTest.java | 2 -- .../google/common/collect/OrderingTest.java | 4 +-- .../com/google/common/collect/SetsTest.java | 16 ----------- .../google/common/primitives/CharsTest.java | 1 - .../google/common/primitives/LongsTest.java | 1 - .../google/common/primitives/ShortsTest.java | 1 - .../common/primitives/SignedBytesTest.java | 1 - .../common/primitives/UnsignedBytesTest.java | 1 - .../google/common/reflect/InvokableTest.java | 1 - .../common/util/concurrent/FuturesTest.java | 25 ----------------- .../common/collect/ImmutableSortedMap.java | 8 ------ .../common/collect/ImmutableSortedSet.java | 2 -- .../com/google/common/collect/Multisets.java | 6 ----- .../com/google/common/collect/Ordering.java | 1 - guava/src/com/google/common/collect/Sets.java | 1 - .../graph/DirectedGraphConnections.java | 1 - 165 files changed, 2 insertions(+), 453 deletions(-) diff --git a/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java index ef7917b93122..1c71009eace3 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java @@ -46,8 +46,6 @@ public abstract class AbstractCollectionTestSuiteBuilder< B extends AbstractCollectionTestSuiteBuilder, E> extends PerCollectionSizeTestSuiteBuilder, Collection, E> { - // Class parameters must be raw. - @SuppressWarnings("unchecked") @Override protected List> getTesters() { return Arrays.>asList( diff --git a/android/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java b/android/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java index a3d0de0473db..d857e6b4b5b7 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java @@ -229,12 +229,10 @@ protected int getNullLocation() { return getNumElements() / 2; } - @SuppressWarnings("unchecked") protected MinimalCollection createDisjointCollection() { return MinimalCollection.of(e3(), e4()); } - @SuppressWarnings("unchecked") protected MinimalCollection emptyCollection() { return MinimalCollection.of(); } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java b/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java index f26e6826beb9..4b92db5f82ac 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java @@ -541,7 +541,6 @@ void executeAndCompare(ListIterator reference, Iterator target) { } }; - @SuppressWarnings("unchecked") List>> iteratorStimuli() { return Arrays.asList(hasNext, next, remove); } @@ -589,7 +588,6 @@ void executeAndCompare(ListIterator reference, ListIterator target) { } }; - @SuppressWarnings("unchecked") List>> listIteratorStimuli() { return Arrays.asList(hasPrevious, nextIndex, previousIndex, previous, add, set); } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java b/android/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java index 2f322971785a..91f6971a45a5 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java @@ -140,7 +140,6 @@ protected void expectNullValueMissingWhenNullValuesUnsupported(String message) { } } - @SuppressWarnings("unchecked") @Override protected MinimalCollection> createDisjointCollection() { return MinimalCollection.of(e3(), e4()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java b/android/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java index a04d3ffe300a..ec60fd4482c9 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java @@ -462,7 +462,6 @@ public SortedMapSubmapTestMapGenerator( // derive values for inclusive filtering from the input samples SampleElements> samples = delegate.samples(); - @SuppressWarnings("unchecked") // no elements are inserted into the array List> samplesList = Arrays.asList(samples.e0(), samples.e1(), samples.e2(), samples.e3(), samples.e4()); Collections.sort(samplesList, entryComparator); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java index 7b8e40a2b1aa..88c9459e8753 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java @@ -62,7 +62,6 @@ public static MapTestSuiteBuilder using(TestMapGenerator gene return new MapTestSuiteBuilder().usingGenerator(generator); } - @SuppressWarnings("unchecked") // Class parameters must be raw. @Override protected List> getTesters() { return Arrays.>asList( diff --git a/android/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java index 1ff3facc4fd4..de031c9f46bf 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java @@ -67,7 +67,6 @@ public T createTestSubject() { @Override public Collection getSampleElements(int howMany) { SampleElements samples = samples(); - @SuppressWarnings("unchecked") List allSampleElements = Arrays.asList(samples.e0(), samples.e1(), samples.e2(), samples.e3(), samples.e4()); return new ArrayList<>(allSampleElements.subList(0, howMany)); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/SafeTreeMap.java b/android/guava-testlib/src/com/google/common/collect/testing/SafeTreeMap.java index c284619da15d..c958dee8ec6e 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/SafeTreeMap.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/SafeTreeMap.java @@ -91,7 +91,6 @@ public void clear() { delegate.clear(); } - @SuppressWarnings("unchecked") @Override public Comparator comparator() { Comparator comparator = delegate.comparator(); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/SafeTreeSet.java b/android/guava-testlib/src/com/google/common/collect/testing/SafeTreeSet.java index ddb628656b89..d75559d7de33 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/SafeTreeSet.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/SafeTreeSet.java @@ -92,7 +92,6 @@ public void clear() { delegate.clear(); } - @SuppressWarnings("unchecked") @Override public Comparator comparator() { Comparator comparator = delegate.comparator(); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java b/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java index 0f0a1235f018..b9ae729f38dd 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java @@ -31,8 +31,6 @@ * * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum CollectionFeature implements Feature { /** diff --git a/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java b/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java index cc627bb5cb99..0b4722860751 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java @@ -42,8 +42,6 @@ * * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum CollectionSize implements Feature, Comparable { /** Test an empty collection. */ diff --git a/android/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java b/android/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java index 1427efaf0d37..d80fc31893f8 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java @@ -29,8 +29,6 @@ * * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum ListFeature implements Feature { SUPPORTS_SET, diff --git a/android/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java b/android/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java index dff7b124f1ef..45040c0249f3 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java @@ -29,8 +29,6 @@ * * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum MapFeature implements Feature { /** diff --git a/android/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java b/android/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java index 7b5dcd959ff5..2317e11bc807 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java @@ -28,8 +28,6 @@ * * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum SetFeature implements Feature { GENERAL_PURPOSE(CollectionFeature.GENERAL_PURPOSE); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapPutTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapPutTester.java index 4bb72a2f3888..33b2956dae2a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapPutTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapPutTester.java @@ -34,7 +34,6 @@ @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class BiMapPutTester extends AbstractBiMapTester { - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ZERO) public void testPutWithSameValueFails() { @@ -49,7 +48,6 @@ public void testPutWithSameValueFails() { expectAdded(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ZERO) public void testPutPresentKeyDifferentValue() { @@ -60,7 +58,6 @@ public void testPutPresentKeyDifferentValue() { expectContents(Helpers.mapEntry(k0(), v1())); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ZERO) public void putDistinctKeysDistinctValues() { @@ -69,7 +66,6 @@ public void putDistinctKeysDistinctValues() { expectAdded(e0(), e1()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ONE) public void testForcePutKeyPresent() { @@ -81,7 +77,6 @@ public void testForcePutKeyPresent() { assertTrue(getMap().containsKey(k0())); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ONE) public void testForcePutValuePresent() { @@ -92,7 +87,6 @@ public void testForcePutValuePresent() { assertFalse(getMap().containsKey(k0())); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(SEVERAL) public void testForcePutKeyAndValuePresent() { @@ -103,7 +97,6 @@ public void testForcePutKeyAndValuePresent() { assertFalse(getMap().containsValue(v0())); } - @SuppressWarnings("unchecked") @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_KEYS}) @CollectionSize.Require(ONE) public void testForcePutNullKeyPresent() { @@ -122,7 +115,6 @@ public void testForcePutNullKeyPresent() { assertEquals(1, getMap().size()); } - @SuppressWarnings("unchecked") @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES}) @CollectionSize.Require(ONE) public void testForcePutNullValuePresent() { @@ -143,7 +135,6 @@ public void testForcePutNullValuePresent() { // nb: inverse is run through its own entire suite - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ZERO) public void testInversePut() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapRemoveTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapRemoveTester.java index e54256ad864b..11d0ccc9bd80 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapRemoveTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapRemoveTester.java @@ -35,7 +35,6 @@ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class BiMapRemoveTester extends AbstractBiMapTester { - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveKeyRemovesFromInverse() { @@ -43,7 +42,6 @@ public void testRemoveKeyRemovesFromInverse() { expectMissing(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveKeyFromKeySetRemovesFromInverse() { @@ -51,7 +49,6 @@ public void testRemoveKeyFromKeySetRemovesFromInverse() { expectMissing(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveFromValuesRemovesFromInverse() { @@ -59,7 +56,6 @@ public void testRemoveFromValuesRemovesFromInverse() { expectMissing(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveFromInverseRemovesFromForward() { @@ -67,7 +63,6 @@ public void testRemoveFromInverseRemovesFromForward() { expectMissing(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveFromInverseKeySetRemovesFromForward() { @@ -75,7 +70,6 @@ public void testRemoveFromInverseKeySetRemovesFromForward() { expectMissing(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveFromInverseValuesRemovesFromInverse() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutAllTester.java index 243361680335..caa7d23c324c 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutAllTester.java @@ -34,7 +34,6 @@ public class ListMultimapPutAllTester extends AbstractListMultimapTester { @MapFeature.Require(SUPPORTS_PUT) public void testPutAllAddsAtEndInOrder() { - @SuppressWarnings("unchecked") List values = Arrays.asList(v3(), v1(), v4()); for (K k : sampleKeys()) { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapRemoveTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapRemoveTester.java index 04ac0a2bc5c3..c359fd3d26a3 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapRemoveTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapRemoveTester.java @@ -38,7 +38,6 @@ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListMultimapRemoveTester extends AbstractListMultimapTester { - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testMultimapRemoveDeletesFirstOccurrence() { @@ -49,7 +48,6 @@ public void testMultimapRemoveDeletesFirstOccurrence() { assertContentsInOrder(list, v1(), v0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testRemoveAtIndexFromGetPropagates() { @@ -66,7 +64,6 @@ public void testRemoveAtIndexFromGetPropagates() { } } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testRemoveAtIndexFromAsMapPropagates() { @@ -84,7 +81,6 @@ public void testRemoveAtIndexFromAsMapPropagates() { } } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testRemoveAtIndexFromAsMapEntrySetPropagates() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapReplaceValuesTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapReplaceValuesTester.java index b0701658fcbb..7b22073a441c 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapReplaceValuesTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapReplaceValuesTester.java @@ -34,7 +34,6 @@ public class ListMultimapReplaceValuesTester extends AbstractListMultimapTester { @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) public void testReplaceValuesPreservesOrder() { - @SuppressWarnings("unchecked") List values = Arrays.asList(v3(), v1(), v4()); for (K k : sampleKeys()) { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java index 8c1bdaad6694..8daff279465a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java @@ -31,8 +31,6 @@ * * @author Louis Wasserman */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum MultimapFeature implements Feature { VALUE_COLLECTIONS_SUPPORT_ITERATOR_REMOVE; diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapReplaceValuesTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapReplaceValuesTester.java index 3e2597d8dbf0..d0911046d05a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapReplaceValuesTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapReplaceValuesTester.java @@ -47,7 +47,6 @@ public class MultimapReplaceValuesTester @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE, ALLOWS_NULL_VALUES}) public void testReplaceValuesWithNullValue() { - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), null, v3()); multimap().replaceValues(k0(), values); assertGet(k0(), values); @@ -55,7 +54,6 @@ public void testReplaceValuesWithNullValue() { @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE, ALLOWS_NULL_KEYS}) public void testReplaceValuesWithNullKey() { - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), v2(), v3()); multimap().replaceValues(null, values); assertGet(null, values); @@ -64,7 +62,6 @@ public void testReplaceValuesWithNullKey() { @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) public void testReplaceEmptyValues() { int size = multimap().size(); - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), v2(), v3()); multimap().replaceValues(k3(), values); assertGet(k3(), values); @@ -75,7 +72,6 @@ public void testReplaceEmptyValues() { public void testReplaceValuesWithEmpty() { int size = multimap().size(); List oldValues = new ArrayList<>(multimap().get(k0())); - @SuppressWarnings("unchecked") List values = Collections.emptyList(); assertEquals(oldValues, new ArrayList(multimap().replaceValues(k0(), values))); assertGet(k0()); @@ -96,7 +92,6 @@ public void testReplaceValuesWithDuplicates() { @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) public void testReplaceNonEmptyValues() { List keys = Helpers.copyToList(multimap().keySet()); - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), v2(), v3()); for (K k : keys) { @@ -113,7 +108,6 @@ public void testReplaceNonEmptyValues() { @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) public void testReplaceValuesPropagatesToGet() { Collection getCollection = multimap().get(k0()); - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), v2(), v3()); multimap().replaceValues(k0(), values); assertContentsAnyOrder(getCollection, v0(), v2(), v3()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java index 97c24c98d277..74e8b55f4f18 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java @@ -455,7 +455,6 @@ public Collection create(Object... elements) { return multimapGenerator.create((Object[]) entries).values(); } - @SuppressWarnings("unchecked") @Override public V[] createArray(int length) { return ((TestMultimapGenerator) multimapGenerator.getInnerGenerator()) @@ -526,7 +525,6 @@ private Iterator sampleValuesIterator() { .iterator(); } - @SuppressWarnings("unchecked") @Override public K[] createArray(int length) { return ((TestMultimapGenerator) multimapGenerator.getInnerGenerator()) diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java index 34a8c725852d..9e47f31c5651 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java @@ -39,7 +39,6 @@ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class MultisetIteratorTester extends AbstractMultisetTester { - @SuppressWarnings("unchecked") @CollectionFeature.Require({SUPPORTS_ITERATOR_REMOVE, KNOWN_ORDER}) public void testRemovingIteratorKnownOrder() { new IteratorTester( @@ -54,7 +53,6 @@ protected Iterator newTargetIterator() { }.test(); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(value = SUPPORTS_ITERATOR_REMOVE, absent = KNOWN_ORDER) public void testRemovingIteratorUnknownOrder() { new IteratorTester( @@ -69,7 +67,6 @@ protected Iterator newTargetIterator() { }.test(); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(value = KNOWN_ORDER, absent = SUPPORTS_ITERATOR_REMOVE) public void testIteratorKnownOrder() { new IteratorTester( @@ -84,7 +81,6 @@ protected Iterator newTargetIterator() { }.test(); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(absent = {SUPPORTS_ITERATOR_REMOVE, KNOWN_ORDER}) public void testIteratorUnknownOrder() { new IteratorTester( diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java index ce8e283a9c3e..0276aa83e73b 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java @@ -79,7 +79,6 @@ public void setUp() throws Exception { } /** Resets the contents of sortedMultiset to have entries a, c, for the navigation tests. */ - @SuppressWarnings("unchecked") // Needed to stop Eclipse whining private void resetWithHole() { List container = new ArrayList<>(); @@ -167,7 +166,6 @@ public void testFirst() { assertEquals(a, sortedMultiset.firstEntry()); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testPollFirst() { @@ -222,7 +220,6 @@ public void testLast() { assertEquals(c, sortedMultiset.lastEntry()); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testPollLast() { @@ -453,7 +450,6 @@ public void testEmptyRangeSubMultiset(SortedMultiset multiset) { assertFalse(multiset.entrySet().iterator().hasNext()); } - @SuppressWarnings("unchecked") public void testEmptyRangeSubMultisetSupportingAdd(SortedMultiset multiset) { for (Entry entry : Arrays.asList(a, b, c)) { expectAddFailure(multiset, entry); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutAllTester.java index ca02b560326f..8adbe67704c8 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutAllTester.java @@ -36,7 +36,6 @@ public class SetMultimapPutAllTester extends AbstractMultimapTester valuesToPut = Arrays.asList(v0(), v1(), v0()); for (K k : sampleKeys()) { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapReplaceValuesTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapReplaceValuesTester.java index 67b6aec86590..40add4e9a13f 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapReplaceValuesTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapReplaceValuesTester.java @@ -36,7 +36,6 @@ public class SetMultimapReplaceValuesTester @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) public void testReplaceValuesHandlesDuplicates() { - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), v1(), v0()); for (K k : sampleKeys()) { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java index b44494b81ddf..c699d22fdff3 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java @@ -154,7 +154,6 @@ private TestSuite createSubMultisetSuite( SortedMultiset emptyMultiset = (SortedMultiset) delegate.create(); Comparator comparator = emptyMultiset.comparator(); SampleElements samples = delegate.samples(); - @SuppressWarnings("unchecked") List samplesList = Arrays.asList(samples.e0(), samples.e1(), samples.e2(), samples.e3(), samples.e4()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java index 5c21c9a93137..b4193ae1d0a8 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java @@ -43,7 +43,6 @@ * @author Chris Povirk * @author Kevin Bourrillion */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionAddAllTester extends AbstractCollectionTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java index bed257c97675..321bf9486e50 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java @@ -40,7 +40,6 @@ * @author Chris Povirk * @author Kevin Bourrillion */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionAddTester extends AbstractCollectionTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java index 8d03271cb7f1..7426c2c30bbd 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java @@ -37,7 +37,6 @@ * @author Kevin Bourrillion * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionContainsAllTester extends AbstractCollectionTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java index 75fc8b67761f..e1e87511ee3d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java @@ -42,7 +42,6 @@ * @author George van den Driessche * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionRemoveAllTester extends AbstractCollectionTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java index 49568fc28044..e13b919228c8 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java @@ -38,7 +38,6 @@ * * @author George van den Driessche */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionRemoveTester extends AbstractCollectionTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java index db7aef13929d..0fd8b3262a29 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java @@ -38,7 +38,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionRetainAllTester extends AbstractCollectionTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java index c3e338f1a450..e050dac6798f 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java @@ -36,7 +36,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListAddAllAtIndexTester extends AbstractListTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java index 1504f1a4b195..d408e49802ad 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java @@ -31,7 +31,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListAddAllTester extends AbstractListTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java index 32310b8d3815..d2902358d1ee 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java @@ -39,7 +39,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListAddAtIndexTester extends AbstractListTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java index 8559d3464d91..5c953ce4bf19 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java @@ -35,7 +35,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListAddTester extends AbstractListTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java index 513134cd446d..f010215b8dcb 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java @@ -32,7 +32,6 @@ * * @author George van den Driessche */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListRemoveAllTester extends AbstractListTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java index 96bd3b40042e..1c99c196a37e 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java @@ -50,7 +50,6 @@ public void testRetainAll_duplicatesKept() { expectContents(array); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testRetainAll_duplicatesRemoved() { @@ -63,7 +62,6 @@ public void testRetainAll_duplicatesRemoved() { expectContents(e2()); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testRetainAll_countIgnored() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java index 7a60add7c9a5..47080164dd4d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java @@ -45,7 +45,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListSubListTester extends AbstractListTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java index 21d89d8d68d7..d693e6b5e10f 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java @@ -47,7 +47,6 @@ * @author Chris Povirk * @author Kevin Bourrillion */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class MapPutAllTester extends AbstractMapTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java index b123f5bc5700..a81a5dd78a73 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java @@ -42,7 +42,6 @@ * @author Chris Povirk * @author Kevin Bourrillion */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class MapPutTester extends AbstractMapTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java index 00c074e5e8fc..0b87b94983ea 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java @@ -40,7 +40,6 @@ * @author George van den Driessche * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class MapRemoveTester extends AbstractMapTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java index 3b17289538c5..acffaa98380b 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java @@ -29,7 +29,6 @@ * * @author Jared Levy */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class QueueOfferTester extends AbstractQueueTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java index 544b14ab627b..03aff66077e4 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java @@ -33,7 +33,6 @@ * * @author Jared Levy */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class QueuePollTester extends AbstractQueueTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java index 2b02cea6e7e5..911de2d0baf0 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java @@ -34,7 +34,6 @@ * * @author Jared Levy */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class QueueRemoveTester extends AbstractQueueTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java index 8e917cde761a..b3893c1e46a0 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java @@ -31,7 +31,6 @@ * * @author Kevin Bourrillion */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class SetAddAllTester extends AbstractSetTester { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/SortedMapNavigationTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/SortedMapNavigationTester.java index 691fee139bcf..5a39ed4d43bc 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/SortedMapNavigationTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/SortedMapNavigationTester.java @@ -167,7 +167,6 @@ public void testSubMapIllegal() { @CollectionSize.Require(absent = ZERO) public void testOrderedByComparator() { - @SuppressWarnings("unchecked") Comparator comparator = navigableMap.comparator(); if (comparator == null) { comparator = diff --git a/android/guava-testlib/test/com/google/common/collect/testing/features/FeatureUtilTest.java b/android/guava-testlib/test/com/google/common/collect/testing/features/FeatureUtilTest.java index 130e86f878a1..9fda91f1215c 100644 --- a/android/guava-testlib/test/com/google/common/collect/testing/features/FeatureUtilTest.java +++ b/android/guava-testlib/test/com/google/common/collect/testing/features/FeatureUtilTest.java @@ -32,8 +32,6 @@ /** * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") public class FeatureUtilTest extends TestCase { interface ExampleBaseInterface { void behave(); diff --git a/android/guava-tests/test/com/google/common/base/EquivalenceTest.java b/android/guava-tests/test/com/google/common/base/EquivalenceTest.java index bb1d9ca76d87..9bc96b0d24e7 100644 --- a/android/guava-tests/test/com/google/common/base/EquivalenceTest.java +++ b/android/guava-tests/test/com/google/common/base/EquivalenceTest.java @@ -36,7 +36,6 @@ @ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) public class EquivalenceTest extends TestCase { - @SuppressWarnings("unchecked") // varargs public void testPairwiseEquivalent() { EquivalenceTester.of(Equivalence.equals().pairwise()) .addEquivalenceGroup(ImmutableList.of()) diff --git a/android/guava-tests/test/com/google/common/base/PredicatesTest.java b/android/guava-tests/test/com/google/common/base/PredicatesTest.java index 2f91da1665bb..afd9b45f3aaa 100644 --- a/android/guava-tests/test/com/google/common/base/PredicatesTest.java +++ b/android/guava-tests/test/com/google/common/base/PredicatesTest.java @@ -191,12 +191,10 @@ public void testNot_serialization() { * Tests for all the different flavors of Predicates.and(). */ - @SuppressWarnings("unchecked") // varargs public void testAnd_applyNoArgs() { assertEvalsToTrue(Predicates.and()); } - @SuppressWarnings("unchecked") // varargs public void testAnd_equalityNoArgs() { new EqualsTester() .addEqualityGroup(Predicates.and(), Predicates.and()) @@ -207,17 +205,14 @@ public void testAnd_equalityNoArgs() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testAnd_serializationNoArgs() { checkSerialization(Predicates.and()); } - @SuppressWarnings("unchecked") // varargs public void testAnd_applyOneArg() { assertEvalsLikeOdd(Predicates.and(isOdd())); } - @SuppressWarnings("unchecked") // varargs public void testAnd_equalityOneArg() { Object[] notEqualObjects = {Predicates.and(NEVER_REACHED, FALSE)}; new EqualsTester() @@ -231,7 +226,6 @@ public void testAnd_equalityOneArg() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testAnd_serializationOneArg() { checkSerialization(Predicates.and(isOdd())); } @@ -242,7 +236,6 @@ public void testAnd_applyBinary() { assertEvalsToFalse(Predicates.and(FALSE, NEVER_REACHED)); } - @SuppressWarnings("unchecked") // varargs public void testAnd_equalityBinary() { new EqualsTester() .addEqualityGroup(Predicates.and(TRUE, NEVER_REACHED), Predicates.and(TRUE, NEVER_REACHED)) @@ -258,7 +251,6 @@ public void testAnd_serializationBinary() { checkSerialization(Predicates.and(TRUE, isOdd())); } - @SuppressWarnings("unchecked") // varargs public void testAnd_applyTernary() { assertEvalsLikeOdd(Predicates.and(isOdd(), TRUE, TRUE)); assertEvalsLikeOdd(Predicates.and(TRUE, isOdd(), TRUE)); @@ -266,7 +258,6 @@ public void testAnd_applyTernary() { assertEvalsToFalse(Predicates.and(TRUE, FALSE, NEVER_REACHED)); } - @SuppressWarnings("unchecked") // varargs public void testAnd_equalityTernary() { new EqualsTester() .addEqualityGroup( @@ -280,12 +271,10 @@ public void testAnd_equalityTernary() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testAnd_serializationTernary() { checkSerialization(Predicates.and(TRUE, isOdd(), FALSE)); } - @SuppressWarnings("unchecked") // varargs public void testAnd_applyIterable() { Collection> empty = Arrays.asList(); assertEvalsToTrue(Predicates.and(empty)); @@ -294,7 +283,6 @@ public void testAnd_applyIterable() { assertEvalsToFalse(Predicates.and(Arrays.asList(FALSE, NEVER_REACHED))); } - @SuppressWarnings("unchecked") // varargs public void testAnd_equalityIterable() { new EqualsTester() .addEqualityGroup( @@ -308,7 +296,6 @@ public void testAnd_equalityIterable() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testAnd_serializationIterable() { checkSerialization(Predicates.and(Arrays.asList(TRUE, FALSE))); } @@ -349,12 +336,10 @@ public Iterator> iterator() { * Tests for all the different flavors of Predicates.or(). */ - @SuppressWarnings("unchecked") // varargs public void testOr_applyNoArgs() { assertEvalsToFalse(Predicates.or()); } - @SuppressWarnings("unchecked") // varargs public void testOr_equalityNoArgs() { new EqualsTester() .addEqualityGroup(Predicates.or(), Predicates.or()) @@ -365,18 +350,15 @@ public void testOr_equalityNoArgs() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testOr_serializationNoArgs() { checkSerialization(Predicates.or()); } - @SuppressWarnings("unchecked") // varargs public void testOr_applyOneArg() { assertEvalsToTrue(Predicates.or(TRUE)); assertEvalsToFalse(Predicates.or(FALSE)); } - @SuppressWarnings("unchecked") // varargs public void testOr_equalityOneArg() { new EqualsTester() .addEqualityGroup(Predicates.or(NEVER_REACHED), Predicates.or(NEVER_REACHED)) @@ -389,7 +371,6 @@ public void testOr_equalityOneArg() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testOr_serializationOneArg() { checkSerialization(Predicates.or(isOdd())); } @@ -404,7 +385,6 @@ public void testOr_applyBinary() { assertEvalsToTrue(trueOrAnything); } - @SuppressWarnings("unchecked") // varargs public void testOr_equalityBinary() { new EqualsTester() .addEqualityGroup(Predicates.or(FALSE, NEVER_REACHED), Predicates.or(FALSE, NEVER_REACHED)) @@ -420,7 +400,6 @@ public void testOr_serializationBinary() { checkSerialization(Predicates.or(isOdd(), TRUE)); } - @SuppressWarnings("unchecked") // varargs public void testOr_applyTernary() { assertEvalsLikeOdd(Predicates.or(isOdd(), FALSE, FALSE)); assertEvalsLikeOdd(Predicates.or(FALSE, isOdd(), FALSE)); @@ -428,7 +407,6 @@ public void testOr_applyTernary() { assertEvalsToTrue(Predicates.or(FALSE, TRUE, NEVER_REACHED)); } - @SuppressWarnings("unchecked") // varargs public void testOr_equalityTernary() { new EqualsTester() .addEqualityGroup( @@ -441,12 +419,10 @@ public void testOr_equalityTernary() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testOr_serializationTernary() { checkSerialization(Predicates.or(FALSE, isOdd(), TRUE)); } - @SuppressWarnings("unchecked") // varargs public void testOr_applyIterable() { Predicate<@Nullable Integer> vacuouslyFalse = Predicates.or(Collections.>emptyList()); @@ -462,7 +438,6 @@ public void testOr_applyIterable() { assertEvalsToTrue(trueAndFalse); } - @SuppressWarnings("unchecked") // varargs public void testOr_equalityIterable() { new EqualsTester() .addEqualityGroup( @@ -476,7 +451,6 @@ public void testOr_equalityIterable() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testOr_serializationIterable() { Predicate pre = Predicates.or(Arrays.asList(TRUE, FALSE)); Predicate post = SerializableTester.reserializeAndAssert(pre); @@ -793,7 +767,6 @@ public void testNullPointerExceptions() { tester.testAllPublicStaticMethods(Predicates.class); } - @SuppressWarnings("unchecked") // varargs @J2ktIncompatible @GwtIncompatible // SerializableTester public void testCascadingSerialization() throws Exception { diff --git a/android/guava-tests/test/com/google/common/cache/CacheBuilderFactory.java b/android/guava-tests/test/com/google/common/cache/CacheBuilderFactory.java index 77a4734fbba4..3caca22bb180 100644 --- a/android/guava-tests/test/com/google/common/cache/CacheBuilderFactory.java +++ b/android/guava-tests/test/com/google/common/cache/CacheBuilderFactory.java @@ -88,7 +88,6 @@ CacheBuilderFactory withValueStrengths(Set valueStrengths) { } Iterable> buildAllPermutations() { - @SuppressWarnings("unchecked") Iterable> combinations = buildCartesianProduct( concurrencyLevels, diff --git a/android/guava-tests/test/com/google/common/cache/CacheTesting.java b/android/guava-tests/test/com/google/common/cache/CacheTesting.java index 47a75c0abf69..85110409ef85 100644 --- a/android/guava-tests/test/com/google/common/cache/CacheTesting.java +++ b/android/guava-tests/test/com/google/common/cache/CacheTesting.java @@ -79,7 +79,6 @@ static void simulateValueReclamation(Cache cache, K key) { * that the given entry is a weak or soft reference, and throws an IllegalStateException if that * assumption does not hold. */ - @SuppressWarnings("unchecked") // the instanceof check and the cast generate this warning static void simulateKeyReclamation(Cache cache, K key) { ReferenceEntry entry = getReferenceEntry(cache, key); diff --git a/android/guava-tests/test/com/google/common/cache/LocalCacheTest.java b/android/guava-tests/test/com/google/common/cache/LocalCacheTest.java index cd1d340d5ce1..871d252cb171 100644 --- a/android/guava-tests/test/com/google/common/cache/LocalCacheTest.java +++ b/android/guava-tests/test/com/google/common/cache/LocalCacheTest.java @@ -2724,7 +2724,6 @@ private void testLoadThrows( * Returns an iterable containing all combinations of maximumSize, expireAfterAccess/Write, * weakKeys and weak/softValues. */ - @SuppressWarnings("unchecked") // varargs private static Iterable> allEntryTypeMakers() { List> result = newArrayList(allKeyValueStrengthMakers()); for (CacheBuilder builder : allKeyValueStrengthMakers()) { @@ -2746,7 +2745,6 @@ private static Iterable> allEntryTypeMakers() { } /** Returns an iterable containing all combinations of maximumSize and expireAfterAccess/Write. */ - @SuppressWarnings("unchecked") // varargs static Iterable> allEvictingMakers() { return ImmutableList.of( createCacheBuilder().maximumSize(SMALL_MAX_SIZE), @@ -2761,7 +2759,6 @@ static Iterable> allEvictingMakers() { } /** Returns an iterable containing all combinations weakKeys and weak/softValues. */ - @SuppressWarnings("unchecked") // varargs private static Iterable> allKeyValueStrengthMakers() { return ImmutableList.of( createCacheBuilder(), diff --git a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index 1333a65b7c28..15d0557f3c8d 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -57,7 +57,6 @@ public abstract class AbstractImmutableSetTest extends TestCase { protected abstract > Set of(E e1, E e2, E e3, E e4, E e5); - @SuppressWarnings("unchecked") protected abstract > Set of( E e1, E e2, E e3, E e4, E e5, E e6, E... rest); diff --git a/android/guava-tests/test/com/google/common/collect/ComparatorsTest.java b/android/guava-tests/test/com/google/common/collect/ComparatorsTest.java index 159dbf7c374c..1a39218b1ce4 100644 --- a/android/guava-tests/test/com/google/common/collect/ComparatorsTest.java +++ b/android/guava-tests/test/com/google/common/collect/ComparatorsTest.java @@ -35,7 +35,6 @@ @GwtCompatible @ElementTypesAreNonnullByDefault public class ComparatorsTest extends TestCase { - @SuppressWarnings("unchecked") // dang varargs public void testLexicographical() { Comparator comparator = Ordering.natural(); Comparator> lexy = Comparators.lexicographical(comparator); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableRangeSetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableRangeSetTest.java index 95ab09bbc062..b98aac9a572b 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableRangeSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableRangeSetTest.java @@ -367,7 +367,6 @@ public void testRemoveAllUnsupported() { @AndroidIncompatible // slow public void testExhaustive() { - @SuppressWarnings("unchecked") ImmutableSet> ranges = ImmutableSet.of( Range.all(), diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java index de70e96edc45..f5db91d4c483 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSetTest.java @@ -172,7 +172,6 @@ protected > Set of(E e1, E e2, E e3, E e4, E return ImmutableSet.of(e1, e2, e3, e4, e5); } - @SuppressWarnings("unchecked") @Override protected > Set of( E e1, E e2, E e3, E e4, E e5, E e6, E... rest) { diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index 9159b6ccae89..515ca0d9ff83 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -757,7 +757,6 @@ public void testViewSerialization() { Lists.newArrayList(SerializableTester.reserialize(map.values()))); } - @SuppressWarnings("unchecked") // varargs public void testHeadMapInclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).headMap("three", true); @@ -766,14 +765,12 @@ public void testHeadMapInclusive() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs public void testHeadMapExclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).headMap("three", false); assertThat(map.entrySet()).containsExactly(Maps.immutableEntry("one", 1)); } - @SuppressWarnings("unchecked") // varargs public void testTailMapInclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).tailMap("three", true); @@ -782,21 +779,18 @@ public void testTailMapInclusive() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs public void testTailMapExclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).tailMap("three", false); assertThat(map.entrySet()).containsExactly(Maps.immutableEntry("two", 2)); } - @SuppressWarnings("unchecked") // varargs public void testSubMapExclusiveExclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", false, "two", false); assertThat(map.entrySet()).containsExactly(Maps.immutableEntry("three", 3)); } - @SuppressWarnings("unchecked") // varargs public void testSubMapInclusiveExclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", true, "two", false); @@ -805,7 +799,6 @@ public void testSubMapInclusiveExclusive() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs public void testSubMapExclusiveInclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", false, "two", true); @@ -814,7 +807,6 @@ public void testSubMapExclusiveInclusive() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs public void testSubMapInclusiveInclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", true, "two", true); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java index cc8f0a3ec075..644d474b8d31 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java @@ -204,7 +204,6 @@ protected > SortedSet of(E e1, E e2, E e3, E return ImmutableSortedSet.of(e1, e2, e3, e4, e5); } - @SuppressWarnings("unchecked") @Override protected > SortedSet of( E e1, E e2, E e3, E e4, E e5, E e6, E... rest) { @@ -900,7 +899,6 @@ public void testLegacyComparable_copyOf_iterator() { } public void testLegacyComparable_builder_natural() { - @SuppressWarnings("unchecked") // Note: IntelliJ wrongly reports an error for this statement ImmutableSortedSet.Builder builder = ImmutableSortedSet.naturalOrder(); @@ -914,7 +912,6 @@ public void testLegacyComparable_builder_natural() { } public void testLegacyComparable_builder_reverse() { - @SuppressWarnings("unchecked") // Note: IntelliJ wrongly reports an error for this statement ImmutableSortedSet.Builder builder = ImmutableSortedSet.reverseOrder(); diff --git a/android/guava-tests/test/com/google/common/collect/IterablesTest.java b/android/guava-tests/test/com/google/common/collect/IterablesTest.java index fae3f88facbe..27f30295a807 100644 --- a/android/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -366,7 +366,6 @@ public void testConcatIterable() { List list1 = newArrayList(1); List list2 = newArrayList(4); - @SuppressWarnings("unchecked") List> input = newArrayList(list1, list2); Iterable result = Iterables.concat(input); @@ -388,7 +387,6 @@ public void testConcatVarargs() { List list3 = newArrayList(7, 8); List list4 = newArrayList(9); List list5 = newArrayList(10); - @SuppressWarnings("unchecked") Iterable result = Iterables.concat(list1, list2, list3, list4, list5); assertEquals(asList(1, 4, 7, 8, 9, 10), newArrayList(result)); assertEquals("[1, 4, 7, 8, 9, 10]", result.toString()); diff --git a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java index 01fd1e2ec408..bf525d53b9cd 100644 --- a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -719,7 +719,6 @@ protected Iterator newTargetIterator() { @GwtIncompatible // slow (~5s) public void testConcatNoIteratorsYieldsEmpty() { new EmptyIteratorTester() { - @SuppressWarnings("unchecked") @Override protected Iterator newTargetIterator() { return Iterators.concat(); @@ -730,7 +729,6 @@ protected Iterator newTargetIterator() { @GwtIncompatible // slow (~5s) public void testConcatOneEmptyIteratorYieldsEmpty() { new EmptyIteratorTester() { - @SuppressWarnings("unchecked") @Override protected Iterator newTargetIterator() { return Iterators.concat(iterateOver()); @@ -751,7 +749,6 @@ protected Iterator newTargetIterator() { @GwtIncompatible // slow (~3s) public void testConcatSingletonYieldsSingleton() { new SingletonIteratorTester() { - @SuppressWarnings("unchecked") @Override protected Iterator newTargetIterator() { return Iterators.concat(iterateOver(1)); @@ -823,7 +820,6 @@ public void testConcatPartiallyAdvancedFirst() { /** Illustrates the somewhat bizarre behavior when a null is passed in. */ public void testConcatContainingNull() { - @SuppressWarnings("unchecked") Iterator> input = asList(iterateOver(1, 2), null, iterateOver(3)).iterator(); Iterator result = Iterators.concat(input); assertEquals(1, (int) result.next()); @@ -841,7 +837,6 @@ public void testConcatContainingNull() { // There is no way to get "through" to the 3. Buh-bye } - @SuppressWarnings("unchecked") public void testConcatVarArgsContainingNull() { try { Iterators.concat(iterateOver(1, 2), null, iterateOver(3), iterateOver(4), iterateOver(5)); diff --git a/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java b/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java index fc5f1e058880..1a42d8f20d8d 100644 --- a/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java @@ -307,7 +307,6 @@ protected void verify(List elements) { @GwtIncompatible // unreasonably slow public void testEntriesIteration() { - @SuppressWarnings("unchecked") Set> set = Sets.newLinkedHashSet( asList( @@ -415,7 +414,6 @@ protected void verify(List elements) { @GwtIncompatible // unreasonably slow public void testAsSetIteration() { - @SuppressWarnings("unchecked") Set>> set = newLinkedHashSet( asList( diff --git a/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java index bfe000b61f13..6e7fa34954e2 100644 --- a/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java @@ -335,7 +335,6 @@ public void testEntriesAfterMultimapUpdate() { assertEquals(3, (int) entryb.getValue()); } - @SuppressWarnings("unchecked") @GwtIncompatible // unreasonably slow public void testEntriesIteration() { List> addItems = @@ -458,7 +457,6 @@ protected void verify(List elements) { }.test(); } - @SuppressWarnings("unchecked") @GwtIncompatible // unreasonably slow public void testAsSetIteration() { Set>> set = diff --git a/android/guava-tests/test/com/google/common/collect/ListsImplTest.java b/android/guava-tests/test/com/google/common/collect/ListsImplTest.java index 9fb4359180d4..b97f27278eea 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsImplTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsImplTest.java @@ -276,7 +276,6 @@ protected ArraysAsListExample(String name) { @Override public List createList(Class listType, Collection contents) { - @SuppressWarnings("unchecked") // safe by contract T[] array = Iterables.toArray(contents, listType); return Arrays.asList(array); } diff --git a/android/guava-tests/test/com/google/common/collect/ListsTest.java b/android/guava-tests/test/com/google/common/collect/ListsTest.java index c7ce4ad03396..5411cd529ce9 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsTest.java @@ -579,26 +579,22 @@ private static List list(E... elements) { return ImmutableList.copyOf(elements); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary1x1() { assertThat(Lists.cartesianProduct(list(1), list(2))).contains(list(1, 2)); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary1x2() { assertThat(Lists.cartesianProduct(list(1), list(2, 3))) .containsExactly(list(1, 2), list(1, 3)) .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary2x2() { assertThat(Lists.cartesianProduct(list(1, 2), list(3, 4))) .containsExactly(list(1, 3), list(1, 4), list(2, 3), list(2, 4)) .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_2x2x2() { assertThat(Lists.cartesianProduct(list(0, 1), list(0, 1), list(0, 1))) .containsExactly( @@ -613,7 +609,6 @@ public void testCartesianProduct_2x2x2() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_contains() { List> actual = Lists.cartesianProduct(list(1, 2), list(3, 4)); assertTrue(actual.contains(list(1, 3))); @@ -645,7 +640,6 @@ public void testCartesianProduct_lastIndexOf() { assertThat(actual.lastIndexOf(list(1, 1, 1))).isEqualTo(-1); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_unrelatedTypes() { List x = list(1, 2); List y = list("3", "4"); @@ -660,7 +654,6 @@ public void testCartesianProduct_unrelatedTypes() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProductTooBig() { List list = Collections.nCopies(10000, "foo"); try { diff --git a/android/guava-tests/test/com/google/common/collect/MapMakerInternalMapTest.java b/android/guava-tests/test/com/google/common/collect/MapMakerInternalMapTest.java index 453e3e74d7a5..1590399dc37f 100644 --- a/android/guava-tests/test/com/google/common/collect/MapMakerInternalMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapMakerInternalMapTest.java @@ -841,7 +841,6 @@ public void testDrainValueReferenceQueueOnWrite() { Object valueTwo = new Object(); map.put(keyOne, valueOne); - @SuppressWarnings("unchecked") WeakValueEntry entry = (WeakValueEntry) segment.getEntry(keyOne, hashOne); WeakValueReference valueReference = entry.getValueReference(); @@ -902,7 +901,6 @@ public void testDrainValueReferenceQueueOnRead() { Object keyTwo = new Object(); map.put(keyOne, valueOne); - @SuppressWarnings("unchecked") WeakValueEntry entry = (WeakValueEntry) segment.getEntry(keyOne, hashOne); WeakValueReference valueReference = entry.getValueReference(); diff --git a/android/guava-tests/test/com/google/common/collect/OrderingTest.java b/android/guava-tests/test/com/google/common/collect/OrderingTest.java index dab0259f78aa..eeb2b33e11e4 100644 --- a/android/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/android/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -412,7 +412,6 @@ public void testOnResultOf_chained() { assertEquals("Ordering.natural().reverse().onResultOf(StringLength)", comparator.toString()); } - @SuppressWarnings("unchecked") // dang varargs public void testLexicographical() { Ordering ordering = Ordering.natural(); Ordering> lexy = ordering.lexicographical(); @@ -951,7 +950,7 @@ void testIsOrdered() { assertTrue(ordering.isStrictlyOrdered(strictlyOrderedList)); } - @SuppressWarnings("unchecked") // generic arrays and unchecked cast + // generic arrays and unchecked cast void testMinAndMax() { List shuffledList = Lists.newArrayList(strictlyOrderedList); shuffledList = shuffledCopy(shuffledList, new Random(5)); @@ -1015,7 +1014,6 @@ Scenario mutate(Scenario scenario) { NULLS_FIRST { @Override Scenario mutate(Scenario scenario) { - @SuppressWarnings("unchecked") List newList = Lists.newArrayList((T) null); for (T t : scenario.strictlyOrderedList) { if (t != null) { diff --git a/android/guava-tests/test/com/google/common/collect/SetsTest.java b/android/guava-tests/test/com/google/common/collect/SetsTest.java index 6171a25748da..61f7ec62da62 100644 --- a/android/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/android/guava-tests/test/com/google/common/collect/SetsTest.java @@ -680,34 +680,26 @@ public void testNewSetFromMapIllegal() { } } - // TODO: the overwhelming number of suppressions below suggests that maybe - // it's not worth having a varargs form of this method at all... - /** The 0-ary cartesian product is a single empty list. */ - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_zeroary() { assertThat(Sets.cartesianProduct()).containsExactly(list()); } /** A unary cartesian product is one list of size 1 for each element in the input set. */ - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_unary() { assertThat(Sets.cartesianProduct(set(1, 2))).containsExactly(list(1), list(2)); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary0x0() { Set mt = emptySet(); assertEmpty(Sets.cartesianProduct(mt, mt)); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary0x1() { Set mt = emptySet(); assertEmpty(Sets.cartesianProduct(mt, set(1))); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary1x0() { Set mt = emptySet(); assertEmpty(Sets.cartesianProduct(set(1), mt)); @@ -719,26 +711,22 @@ private static void assertEmpty(Set> set) { assertFalse(set.iterator().hasNext()); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary1x1() { assertThat(Sets.cartesianProduct(set(1), set(2))).contains(list(1, 2)); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary1x2() { assertThat(Sets.cartesianProduct(set(1), set(2, 3))) .containsExactly(list(1, 2), list(1, 3)) .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary2x2() { assertThat(Sets.cartesianProduct(set(1, 2), set(3, 4))) .containsExactly(list(1, 3), list(1, 4), list(2, 3), list(2, 4)) .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_2x2x2() { assertThat(Sets.cartesianProduct(set(0, 1), set(0, 1), set(0, 1))) .containsExactly( @@ -753,7 +741,6 @@ public void testCartesianProduct_2x2x2() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_contains() { Set> actual = Sets.cartesianProduct(set(1, 2), set(3, 4)); assertTrue(actual.contains(list(1, 3))); @@ -778,7 +765,6 @@ public void testCartesianProduct_equals() { .testEquals(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_unrelatedTypes() { Set x = set(1, 2); Set y = set("3", "4"); @@ -793,7 +779,6 @@ public void testCartesianProduct_unrelatedTypes() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProductTooBig() { Set set = ContiguousSet.create(Range.closed(0, 10000), DiscreteDomain.integers()); try { @@ -803,7 +788,6 @@ public void testCartesianProductTooBig() { } } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_hashCode() { // Run through the same cartesian products we tested above diff --git a/android/guava-tests/test/com/google/common/primitives/CharsTest.java b/android/guava-tests/test/com/google/common/primitives/CharsTest.java index 7c0739c457da..a662adbb737b 100644 --- a/android/guava-tests/test/com/google/common/primitives/CharsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/CharsTest.java @@ -41,7 +41,6 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -@SuppressWarnings("cast") // redundant casts are intentional and harmless public class CharsTest extends TestCase { private static final char[] EMPTY = {}; private static final char[] ARRAY1 = {(char) 1}; diff --git a/android/guava-tests/test/com/google/common/primitives/LongsTest.java b/android/guava-tests/test/com/google/common/primitives/LongsTest.java index 0875b5d566a2..7ca44ca3bfc4 100644 --- a/android/guava-tests/test/com/google/common/primitives/LongsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/LongsTest.java @@ -45,7 +45,6 @@ */ @ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) -@SuppressWarnings("cast") // redundant casts are intentional and harmless public class LongsTest extends TestCase { private static final long[] EMPTY = {}; private static final long[] ARRAY1 = {(long) 1}; diff --git a/android/guava-tests/test/com/google/common/primitives/ShortsTest.java b/android/guava-tests/test/com/google/common/primitives/ShortsTest.java index 18430e307016..1f1f5fc3859a 100644 --- a/android/guava-tests/test/com/google/common/primitives/ShortsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/ShortsTest.java @@ -42,7 +42,6 @@ */ @ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) -@SuppressWarnings("cast") // redundant casts are intentional and harmless public class ShortsTest extends TestCase { private static final short[] EMPTY = {}; private static final short[] ARRAY1 = {(short) 1}; diff --git a/android/guava-tests/test/com/google/common/primitives/SignedBytesTest.java b/android/guava-tests/test/com/google/common/primitives/SignedBytesTest.java index a141d72bb4e6..404cf6864267 100644 --- a/android/guava-tests/test/com/google/common/primitives/SignedBytesTest.java +++ b/android/guava-tests/test/com/google/common/primitives/SignedBytesTest.java @@ -37,7 +37,6 @@ */ @ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) -@SuppressWarnings("cast") // redundant casts are intentional and harmless public class SignedBytesTest extends TestCase { private static final byte[] EMPTY = {}; private static final byte[] ARRAY1 = {(byte) 1}; diff --git a/android/guava-tests/test/com/google/common/primitives/UnsignedBytesTest.java b/android/guava-tests/test/com/google/common/primitives/UnsignedBytesTest.java index 10f9a662b8a6..842d0b386983 100644 --- a/android/guava-tests/test/com/google/common/primitives/UnsignedBytesTest.java +++ b/android/guava-tests/test/com/google/common/primitives/UnsignedBytesTest.java @@ -274,7 +274,6 @@ public void testLexicographicalComparator() { assertThat(SerializableTester.reserialize(javaImpl)).isSameInstanceAs(javaImpl); } - @SuppressWarnings("unchecked") public void testLexicographicalComparatorLongInputs() { Random rnd = new Random(); for (Comparator comparator : diff --git a/android/guava-tests/test/com/google/common/reflect/InvokableTest.java b/android/guava-tests/test/com/google/common/reflect/InvokableTest.java index 54f20a53771d..2b367c3b820c 100644 --- a/android/guava-tests/test/com/google/common/reflect/InvokableTest.java +++ b/android/guava-tests/test/com/google/common/reflect/InvokableTest.java @@ -228,7 +228,6 @@ WithConstructorAndTypeParameter() {} } public void testConstructor_returnType_hasTypeParameter() throws Exception { - @SuppressWarnings("rawtypes") // Foo.class for Foo is always raw type Class type = WithConstructorAndTypeParameter.class; @SuppressWarnings("rawtypes") // Foo.class Constructor constructor = type.getDeclaredConstructor(); diff --git a/android/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java b/android/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java index 157dcda0a20b..abedb4e527b2 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java @@ -1101,7 +1101,6 @@ public void testCatchingAsync_resultCancelledBeforeFallback() throws Exception { @J2ktIncompatible @GwtIncompatible // mocks // TODO(cpovirk): eliminate use of mocks - @SuppressWarnings("unchecked") public void testCatchingAsync_resultCancelledAfterFallback() throws Exception { final SettableFuture secondary = SettableFuture.create(); final RuntimeException raisedException = new RuntimeException(); @@ -2199,7 +2198,6 @@ public void testAllAsList() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); SettableFuture future3 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2, future3); // Attach a listener @@ -2233,7 +2231,6 @@ public void testAllAsList_emptyList() throws Exception { public void testAllAsList_emptyArray() throws Exception { SingleCallListener listener = new SingleCallListener(); listener.expectCall(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(); compound.addListener(listener, directExecutor()); assertThat(getDone(compound)).isEmpty(); @@ -2244,7 +2241,6 @@ public void testAllAsList_failure() throws Exception { SingleCallListener listener = new SingleCallListener(); SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2); compound.addListener(listener, directExecutor()); @@ -2309,7 +2305,6 @@ public void testAllAsList_cancelled() throws Exception { SingleCallListener listener = new SingleCallListener(); SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2); compound.addListener(listener, directExecutor()); @@ -2329,7 +2324,6 @@ public void testAllAsList_cancelled() throws Exception { public void testAllAsList_resultCancelled() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2); future2.set(DATA2); @@ -2373,7 +2367,6 @@ public void testAllAsList_resultCancelled_withSecondaryListFuture() throws Excep public void testAllAsList_resultInterrupted() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2); future2.set(DATA2); @@ -2401,7 +2394,6 @@ public void testAllAsList_doneFutures() throws Exception { future2.set(DATA2); future3.set(DATA3); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2, future3); // Attach a listener @@ -2416,7 +2408,6 @@ public void testAllAsList_doneFutures() throws Exception { } /** A single non-error failure is not logged because it is reported via the output future. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_exception() throws Exception { try { getDone(allAsList(immediateFailedFuture(new MyException()))); @@ -2429,7 +2420,6 @@ public void testAllAsList_logging_exception() throws Exception { } /** Ensure that errors are always logged. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_error() throws Exception { try { getDone(allAsList(immediateFailedFuture(new MyError()))); @@ -2443,7 +2433,6 @@ public void testAllAsList_logging_error() throws Exception { } /** All as list will log extra exceptions that have already occurred. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_multipleExceptions_alreadyDone() throws Exception { try { getDone( @@ -2459,7 +2448,6 @@ public void testAllAsList_logging_multipleExceptions_alreadyDone() throws Except } /** All as list will log extra exceptions that occur later. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_multipleExceptions_doneLater() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); @@ -2482,7 +2470,6 @@ public void testAllAsList_logging_multipleExceptions_doneLater() throws Exceptio } /** The same exception happening on multiple futures should not be logged. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_same_exception() throws Exception { try { MyException sameInstance = new MyException(); @@ -2558,7 +2545,6 @@ public void run() { /** * Different exceptions happening on multiple futures with the same cause should not be logged. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_same_cause() throws Exception { try { MyException exception1 = new MyException(); @@ -3438,7 +3424,6 @@ public void testSuccessfulAsList() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); SettableFuture future3 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2, future3); // Attach a listener @@ -3472,7 +3457,6 @@ public void testSuccessfulAsList_emptyList() throws Exception { public void testSuccessfulAsList_emptyArray() throws Exception { SingleCallListener listener = new SingleCallListener(); listener.expectCall(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(); compound.addListener(listener, directExecutor()); assertThat(getDone(compound)).isEmpty(); @@ -3483,7 +3467,6 @@ public void testSuccessfulAsList_partialFailure() throws Exception { SingleCallListener listener = new SingleCallListener(); SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); compound.addListener(listener, directExecutor()); @@ -3502,7 +3485,6 @@ public void testSuccessfulAsList_totalFailure() throws Exception { SingleCallListener listener = new SingleCallListener(); SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); compound.addListener(listener, directExecutor()); @@ -3521,7 +3503,6 @@ public void testSuccessfulAsList_cancelled() throws Exception { SingleCallListener listener = new SingleCallListener(); SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); compound.addListener(listener, directExecutor()); @@ -3539,7 +3520,6 @@ public void testSuccessfulAsList_cancelled() throws Exception { public void testSuccessfulAsList_resultCancelled() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); future2.set(DATA2); @@ -3576,7 +3556,6 @@ private static void doTestSuccessfulAsList_resultCancelledRacingInputDone() thro */ final SettableFuture future1 = SettableFuture.create(); final SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); future1.addListener( @@ -3611,7 +3590,6 @@ public void run() { public void testSuccessfulAsList_resultInterrupted() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); future2.set(DATA2); @@ -3627,7 +3605,6 @@ public void testSuccessfulAsList_mixed() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); SettableFuture future3 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2, future3); compound.addListener(listener, directExecutor()); @@ -3647,7 +3624,6 @@ public void testSuccessfulAsList_mixed() throws Exception { /** Non-Error exceptions are never logged. */ @J2ktIncompatible // TODO(b/324550390): Enable - @SuppressWarnings("unchecked") public void testSuccessfulAsList_logging_exception() throws Exception { assertEquals( newArrayList((Object) null), @@ -3671,7 +3647,6 @@ public void testSuccessfulAsList_logging_exception() throws Exception { /** Ensure that errors are always logged. */ @J2ktIncompatible // TODO(b/324550390): Enable - @SuppressWarnings("unchecked") public void testSuccessfulAsList_logging_error() throws Exception { assertEquals( newArrayList((Object) null), diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java index d96c4d1f5a79..f65a35fa2ace 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -166,7 +166,6 @@ public static , V> ImmutableSortedMap of( * * @throws IllegalArgumentException if any two keys are equal according to their natural ordering */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2, K k3, V v3) { return fromEntries(entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3)); @@ -178,7 +177,6 @@ public static , V> ImmutableSortedMap of( * * @throws IllegalArgumentException if any two keys are equal according to their natural ordering */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { return fromEntries(entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3), entryOf(k4, v4)); @@ -190,7 +188,6 @@ public static , V> ImmutableSortedMap of( * * @throws IllegalArgumentException if any two keys are equal according to their natural ordering */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { return fromEntries( @@ -204,7 +201,6 @@ public static , V> ImmutableSortedMap of( * @throws IllegalArgumentException if any two keys are equal according to their natural ordering * @since 31.0 */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6) { return fromEntries( @@ -223,7 +219,6 @@ public static , V> ImmutableSortedMap of( * @throws IllegalArgumentException if any two keys are equal according to their natural ordering * @since 31.0 */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7) { return fromEntries( @@ -279,7 +274,6 @@ public static , V> ImmutableSortedMap of( * @throws IllegalArgumentException if any two keys are equal according to their natural ordering * @since 31.0 */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, @@ -318,7 +312,6 @@ public static , V> ImmutableSortedMap of( * @throws IllegalArgumentException if any two keys are equal according to their natural ordering * @since 31.0 */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, @@ -623,7 +616,6 @@ public static class Builder extends ImmutableMap.Builder { * Creates a new builder. The returned builder is equivalent to the builder generated by {@link * ImmutableSortedMap#orderedBy}. */ - @SuppressWarnings("unchecked") public Builder(Comparator comparator) { this(comparator, ImmutableCollection.Builder.DEFAULT_INITIAL_CAPACITY); } diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java index c6a57824f139..088e5b4c128e 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -106,7 +106,6 @@ public static > ImmutableSortedSet of(E eleme * * @throws NullPointerException if any element is null */ - @SuppressWarnings("unchecked") public static > ImmutableSortedSet of(E e1, E e2) { return construct(Ordering.natural(), 2, e1, e2); } @@ -130,7 +129,6 @@ public static > ImmutableSortedSet of(E e1, E * * @throws NullPointerException if any element is null */ - @SuppressWarnings("unchecked") public static > ImmutableSortedSet of(E e1, E e2, E e3, E e4) { return construct(Ordering.natural(), 4, e1, e2, e3, e4); } diff --git a/android/guava/src/com/google/common/collect/Multisets.java b/android/guava/src/com/google/common/collect/Multisets.java index 9cebe58f4995..83777c9353dc 100644 --- a/android/guava/src/com/google/common/collect/Multisets.java +++ b/android/guava/src/com/google/common/collect/Multisets.java @@ -1044,10 +1044,6 @@ abstract static class EntrySet @Override public boolean contains(@CheckForNull Object o) { if (o instanceof Entry) { - /* - * The GWT compiler wrongly issues a warning here. - */ - @SuppressWarnings("cast") Entry entry = (Entry) o; if (entry.getCount() <= 0) { return false; @@ -1058,8 +1054,6 @@ public boolean contains(@CheckForNull Object o) { return false; } - // GWT compiler warning; see contains(). - @SuppressWarnings("cast") @Override public boolean remove(@CheckForNull Object object) { if (object instanceof Multiset.Entry) { diff --git a/android/guava/src/com/google/common/collect/Ordering.java b/android/guava/src/com/google/common/collect/Ordering.java index d29a3b0d8f79..7d2b05b50c39 100644 --- a/android/guava/src/com/google/common/collect/Ordering.java +++ b/android/guava/src/com/google/common/collect/Ordering.java @@ -282,7 +282,6 @@ public static Ordering explicit(T leastValue, T... remainingValuesInOrder * @since 13.0 */ @GwtCompatible(serializable = true) - @SuppressWarnings("unchecked") public static Ordering<@Nullable Object> allEqual() { return AllEqualOrdering.INSTANCE; } diff --git a/android/guava/src/com/google/common/collect/Sets.java b/android/guava/src/com/google/common/collect/Sets.java index 17c3752abd1d..737a00d555c1 100644 --- a/android/guava/src/com/google/common/collect/Sets.java +++ b/android/guava/src/com/google/common/collect/Sets.java @@ -1079,7 +1079,6 @@ public boolean contains(@CheckForNull Object element) { * @since 14.0 */ @GwtIncompatible // NavigableSet - @SuppressWarnings("unchecked") public static NavigableSet filter( NavigableSet unfiltered, Predicate predicate) { if (unfiltered instanceof FilteredSet) { diff --git a/android/guava/src/com/google/common/graph/DirectedGraphConnections.java b/android/guava/src/com/google/common/graph/DirectedGraphConnections.java index 0feb973f3f79..76c214de61bd 100644 --- a/android/guava/src/com/google/common/graph/DirectedGraphConnections.java +++ b/android/guava/src/com/google/common/graph/DirectedGraphConnections.java @@ -432,7 +432,6 @@ public V value(N node) { return (V) value; } - @SuppressWarnings("unchecked") @Override public void removePredecessor(N node) { checkNotNull(node); diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java index 02efe3066393..0c752581318d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java @@ -50,8 +50,6 @@ public abstract class AbstractCollectionTestSuiteBuilder< B extends AbstractCollectionTestSuiteBuilder, E> extends PerCollectionSizeTestSuiteBuilder, Collection, E> { - // Class parameters must be raw. - @SuppressWarnings("unchecked") @Override protected List> getTesters() { return Arrays.>asList( diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java index a3d0de0473db..d857e6b4b5b7 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java @@ -229,12 +229,10 @@ protected int getNullLocation() { return getNumElements() / 2; } - @SuppressWarnings("unchecked") protected MinimalCollection createDisjointCollection() { return MinimalCollection.of(e3(), e4()); } - @SuppressWarnings("unchecked") protected MinimalCollection emptyCollection() { return MinimalCollection.of(); } diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java index 43a3d066d620..c00322b26cb8 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java @@ -557,7 +557,6 @@ void executeAndCompare(ListIterator reference, Iterator target) { } }; - @SuppressWarnings("unchecked") List>> iteratorStimuli() { return Arrays.asList(hasNext, next, remove); } @@ -605,7 +604,6 @@ void executeAndCompare(ListIterator reference, ListIterator target) { } }; - @SuppressWarnings("unchecked") List>> listIteratorStimuli() { return Arrays.asList(hasPrevious, nextIndex, previousIndex, previous, add, set); } diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java index 2f322971785a..91f6971a45a5 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java @@ -140,7 +140,6 @@ protected void expectNullValueMissingWhenNullValuesUnsupported(String message) { } } - @SuppressWarnings("unchecked") @Override protected MinimalCollection> createDisjointCollection() { return MinimalCollection.of(e3(), e4()); diff --git a/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java b/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java index a04d3ffe300a..ec60fd4482c9 100644 --- a/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java @@ -462,7 +462,6 @@ public SortedMapSubmapTestMapGenerator( // derive values for inclusive filtering from the input samples SampleElements> samples = delegate.samples(); - @SuppressWarnings("unchecked") // no elements are inserted into the array List> samplesList = Arrays.asList(samples.e0(), samples.e1(), samples.e2(), samples.e3(), samples.e4()); Collections.sort(samplesList, entryComparator); diff --git a/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java index d1ce3413dd78..f47067967fce 100644 --- a/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java @@ -73,7 +73,6 @@ public static MapTestSuiteBuilder using(TestMapGenerator gene return new MapTestSuiteBuilder().usingGenerator(generator); } - @SuppressWarnings("unchecked") // Class parameters must be raw. @Override protected List> getTesters() { return Arrays.>asList( diff --git a/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java b/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java index 1ff3facc4fd4..de031c9f46bf 100644 --- a/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java @@ -67,7 +67,6 @@ public T createTestSubject() { @Override public Collection getSampleElements(int howMany) { SampleElements samples = samples(); - @SuppressWarnings("unchecked") List allSampleElements = Arrays.asList(samples.e0(), samples.e1(), samples.e2(), samples.e3(), samples.e4()); return new ArrayList<>(allSampleElements.subList(0, howMany)); diff --git a/guava-testlib/src/com/google/common/collect/testing/SafeTreeMap.java b/guava-testlib/src/com/google/common/collect/testing/SafeTreeMap.java index c284619da15d..c958dee8ec6e 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SafeTreeMap.java +++ b/guava-testlib/src/com/google/common/collect/testing/SafeTreeMap.java @@ -91,7 +91,6 @@ public void clear() { delegate.clear(); } - @SuppressWarnings("unchecked") @Override public Comparator comparator() { Comparator comparator = delegate.comparator(); diff --git a/guava-testlib/src/com/google/common/collect/testing/SafeTreeSet.java b/guava-testlib/src/com/google/common/collect/testing/SafeTreeSet.java index ddb628656b89..d75559d7de33 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SafeTreeSet.java +++ b/guava-testlib/src/com/google/common/collect/testing/SafeTreeSet.java @@ -92,7 +92,6 @@ public void clear() { delegate.clear(); } - @SuppressWarnings("unchecked") @Override public Comparator comparator() { Comparator comparator = delegate.comparator(); diff --git a/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java index 0f0a1235f018..b9ae729f38dd 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java @@ -31,8 +31,6 @@ * * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum CollectionFeature implements Feature { /** diff --git a/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java b/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java index cc627bb5cb99..0b4722860751 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java @@ -42,8 +42,6 @@ * * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum CollectionSize implements Feature, Comparable { /** Test an empty collection. */ diff --git a/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java index 1427efaf0d37..d80fc31893f8 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java @@ -29,8 +29,6 @@ * * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum ListFeature implements Feature { SUPPORTS_SET, diff --git a/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java index dff7b124f1ef..45040c0249f3 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java @@ -29,8 +29,6 @@ * * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum MapFeature implements Feature { /** diff --git a/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java index 7b5dcd959ff5..2317e11bc807 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java @@ -28,8 +28,6 @@ * * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum SetFeature implements Feature { GENERAL_PURPOSE(CollectionFeature.GENERAL_PURPOSE); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapPutTester.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapPutTester.java index 4bb72a2f3888..33b2956dae2a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/BiMapPutTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/BiMapPutTester.java @@ -34,7 +34,6 @@ @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class BiMapPutTester extends AbstractBiMapTester { - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ZERO) public void testPutWithSameValueFails() { @@ -49,7 +48,6 @@ public void testPutWithSameValueFails() { expectAdded(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ZERO) public void testPutPresentKeyDifferentValue() { @@ -60,7 +58,6 @@ public void testPutPresentKeyDifferentValue() { expectContents(Helpers.mapEntry(k0(), v1())); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ZERO) public void putDistinctKeysDistinctValues() { @@ -69,7 +66,6 @@ public void putDistinctKeysDistinctValues() { expectAdded(e0(), e1()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ONE) public void testForcePutKeyPresent() { @@ -81,7 +77,6 @@ public void testForcePutKeyPresent() { assertTrue(getMap().containsKey(k0())); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ONE) public void testForcePutValuePresent() { @@ -92,7 +87,6 @@ public void testForcePutValuePresent() { assertFalse(getMap().containsKey(k0())); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(SEVERAL) public void testForcePutKeyAndValuePresent() { @@ -103,7 +97,6 @@ public void testForcePutKeyAndValuePresent() { assertFalse(getMap().containsValue(v0())); } - @SuppressWarnings("unchecked") @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_KEYS}) @CollectionSize.Require(ONE) public void testForcePutNullKeyPresent() { @@ -122,7 +115,6 @@ public void testForcePutNullKeyPresent() { assertEquals(1, getMap().size()); } - @SuppressWarnings("unchecked") @MapFeature.Require({SUPPORTS_PUT, ALLOWS_NULL_VALUES}) @CollectionSize.Require(ONE) public void testForcePutNullValuePresent() { @@ -143,7 +135,6 @@ public void testForcePutNullValuePresent() { // nb: inverse is run through its own entire suite - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_PUT) @CollectionSize.Require(ZERO) public void testInversePut() { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapRemoveTester.java index e54256ad864b..11d0ccc9bd80 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/BiMapRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/BiMapRemoveTester.java @@ -35,7 +35,6 @@ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class BiMapRemoveTester extends AbstractBiMapTester { - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveKeyRemovesFromInverse() { @@ -43,7 +42,6 @@ public void testRemoveKeyRemovesFromInverse() { expectMissing(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveKeyFromKeySetRemovesFromInverse() { @@ -51,7 +49,6 @@ public void testRemoveKeyFromKeySetRemovesFromInverse() { expectMissing(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveFromValuesRemovesFromInverse() { @@ -59,7 +56,6 @@ public void testRemoveFromValuesRemovesFromInverse() { expectMissing(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveFromInverseRemovesFromForward() { @@ -67,7 +63,6 @@ public void testRemoveFromInverseRemovesFromForward() { expectMissing(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveFromInverseKeySetRemovesFromForward() { @@ -75,7 +70,6 @@ public void testRemoveFromInverseKeySetRemovesFromForward() { expectMissing(e0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(absent = ZERO) public void testRemoveFromInverseValuesRemovesFromInverse() { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutAllTester.java b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutAllTester.java index 243361680335..caa7d23c324c 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapPutAllTester.java @@ -34,7 +34,6 @@ public class ListMultimapPutAllTester extends AbstractListMultimapTester { @MapFeature.Require(SUPPORTS_PUT) public void testPutAllAddsAtEndInOrder() { - @SuppressWarnings("unchecked") List values = Arrays.asList(v3(), v1(), v4()); for (K k : sampleKeys()) { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapRemoveTester.java index 04ac0a2bc5c3..c359fd3d26a3 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapRemoveTester.java @@ -38,7 +38,6 @@ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListMultimapRemoveTester extends AbstractListMultimapTester { - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testMultimapRemoveDeletesFirstOccurrence() { @@ -49,7 +48,6 @@ public void testMultimapRemoveDeletesFirstOccurrence() { assertContentsInOrder(list, v1(), v0()); } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testRemoveAtIndexFromGetPropagates() { @@ -66,7 +64,6 @@ public void testRemoveAtIndexFromGetPropagates() { } } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testRemoveAtIndexFromAsMapPropagates() { @@ -84,7 +81,6 @@ public void testRemoveAtIndexFromAsMapPropagates() { } } - @SuppressWarnings("unchecked") @MapFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testRemoveAtIndexFromAsMapEntrySetPropagates() { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapReplaceValuesTester.java b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapReplaceValuesTester.java index b0701658fcbb..7b22073a441c 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapReplaceValuesTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapReplaceValuesTester.java @@ -34,7 +34,6 @@ public class ListMultimapReplaceValuesTester extends AbstractListMultimapTester { @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) public void testReplaceValuesPreservesOrder() { - @SuppressWarnings("unchecked") List values = Arrays.asList(v3(), v1(), v4()); for (K k : sampleKeys()) { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java index 8c1bdaad6694..8daff279465a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java @@ -31,8 +31,6 @@ * * @author Louis Wasserman */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") @GwtCompatible public enum MultimapFeature implements Feature { VALUE_COLLECTIONS_SUPPORT_ITERATOR_REMOVE; diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapReplaceValuesTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapReplaceValuesTester.java index 3e2597d8dbf0..d0911046d05a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapReplaceValuesTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultimapReplaceValuesTester.java @@ -47,7 +47,6 @@ public class MultimapReplaceValuesTester @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE, ALLOWS_NULL_VALUES}) public void testReplaceValuesWithNullValue() { - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), null, v3()); multimap().replaceValues(k0(), values); assertGet(k0(), values); @@ -55,7 +54,6 @@ public void testReplaceValuesWithNullValue() { @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE, ALLOWS_NULL_KEYS}) public void testReplaceValuesWithNullKey() { - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), v2(), v3()); multimap().replaceValues(null, values); assertGet(null, values); @@ -64,7 +62,6 @@ public void testReplaceValuesWithNullKey() { @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) public void testReplaceEmptyValues() { int size = multimap().size(); - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), v2(), v3()); multimap().replaceValues(k3(), values); assertGet(k3(), values); @@ -75,7 +72,6 @@ public void testReplaceEmptyValues() { public void testReplaceValuesWithEmpty() { int size = multimap().size(); List oldValues = new ArrayList<>(multimap().get(k0())); - @SuppressWarnings("unchecked") List values = Collections.emptyList(); assertEquals(oldValues, new ArrayList(multimap().replaceValues(k0(), values))); assertGet(k0()); @@ -96,7 +92,6 @@ public void testReplaceValuesWithDuplicates() { @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) public void testReplaceNonEmptyValues() { List keys = Helpers.copyToList(multimap().keySet()); - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), v2(), v3()); for (K k : keys) { @@ -113,7 +108,6 @@ public void testReplaceNonEmptyValues() { @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) public void testReplaceValuesPropagatesToGet() { Collection getCollection = multimap().get(k0()); - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), v2(), v3()); multimap().replaceValues(k0(), values); assertContentsAnyOrder(getCollection, v0(), v2(), v3()); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java index af9d261c3262..e2dbefe6115b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java @@ -456,7 +456,6 @@ public Collection create(Object... elements) { return multimapGenerator.create((Object[]) entries).values(); } - @SuppressWarnings("unchecked") @Override public V[] createArray(int length) { return ((TestMultimapGenerator) multimapGenerator.getInnerGenerator()) @@ -527,7 +526,6 @@ private Iterator sampleValuesIterator() { .iterator(); } - @SuppressWarnings("unchecked") @Override public K[] createArray(int length) { return ((TestMultimapGenerator) multimapGenerator.getInnerGenerator()) diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java index 34a8c725852d..9e47f31c5651 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java @@ -39,7 +39,6 @@ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class MultisetIteratorTester extends AbstractMultisetTester { - @SuppressWarnings("unchecked") @CollectionFeature.Require({SUPPORTS_ITERATOR_REMOVE, KNOWN_ORDER}) public void testRemovingIteratorKnownOrder() { new IteratorTester( @@ -54,7 +53,6 @@ protected Iterator newTargetIterator() { }.test(); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(value = SUPPORTS_ITERATOR_REMOVE, absent = KNOWN_ORDER) public void testRemovingIteratorUnknownOrder() { new IteratorTester( @@ -69,7 +67,6 @@ protected Iterator newTargetIterator() { }.test(); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(value = KNOWN_ORDER, absent = SUPPORTS_ITERATOR_REMOVE) public void testIteratorKnownOrder() { new IteratorTester( @@ -84,7 +81,6 @@ protected Iterator newTargetIterator() { }.test(); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(absent = {SUPPORTS_ITERATOR_REMOVE, KNOWN_ORDER}) public void testIteratorUnknownOrder() { new IteratorTester( diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java index ce8e283a9c3e..0276aa83e73b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetNavigationTester.java @@ -79,7 +79,6 @@ public void setUp() throws Exception { } /** Resets the contents of sortedMultiset to have entries a, c, for the navigation tests. */ - @SuppressWarnings("unchecked") // Needed to stop Eclipse whining private void resetWithHole() { List container = new ArrayList<>(); @@ -167,7 +166,6 @@ public void testFirst() { assertEquals(a, sortedMultiset.firstEntry()); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testPollFirst() { @@ -222,7 +220,6 @@ public void testLast() { assertEquals(c, sortedMultiset.lastEntry()); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testPollLast() { @@ -453,7 +450,6 @@ public void testEmptyRangeSubMultiset(SortedMultiset multiset) { assertFalse(multiset.entrySet().iterator().hasNext()); } - @SuppressWarnings("unchecked") public void testEmptyRangeSubMultisetSupportingAdd(SortedMultiset multiset) { for (Entry entry : Arrays.asList(a, b, c)) { expectAddFailure(multiset, entry); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutAllTester.java b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutAllTester.java index ca02b560326f..8adbe67704c8 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapPutAllTester.java @@ -36,7 +36,6 @@ public class SetMultimapPutAllTester extends AbstractMultimapTester valuesToPut = Arrays.asList(v0(), v1(), v0()); for (K k : sampleKeys()) { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapReplaceValuesTester.java b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapReplaceValuesTester.java index 67b6aec86590..40add4e9a13f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapReplaceValuesTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapReplaceValuesTester.java @@ -36,7 +36,6 @@ public class SetMultimapReplaceValuesTester @MapFeature.Require({SUPPORTS_PUT, SUPPORTS_REMOVE}) public void testReplaceValuesHandlesDuplicates() { - @SuppressWarnings("unchecked") List values = Arrays.asList(v0(), v1(), v0()); for (K k : sampleKeys()) { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java index b44494b81ddf..c699d22fdff3 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java @@ -154,7 +154,6 @@ private TestSuite createSubMultisetSuite( SortedMultiset emptyMultiset = (SortedMultiset) delegate.create(); Comparator comparator = emptyMultiset.comparator(); SampleElements samples = delegate.samples(); - @SuppressWarnings("unchecked") List samplesList = Arrays.asList(samples.e0(), samples.e1(), samples.e2(), samples.e3(), samples.e4()); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java index 5c21c9a93137..b4193ae1d0a8 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java @@ -43,7 +43,6 @@ * @author Chris Povirk * @author Kevin Bourrillion */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionAddAllTester extends AbstractCollectionTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java index bed257c97675..321bf9486e50 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java @@ -40,7 +40,6 @@ * @author Chris Povirk * @author Kevin Bourrillion */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionAddTester extends AbstractCollectionTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java index 8d03271cb7f1..7426c2c30bbd 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionContainsAllTester.java @@ -37,7 +37,6 @@ * @author Kevin Bourrillion * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionContainsAllTester extends AbstractCollectionTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java index 75fc8b67761f..e1e87511ee3d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveAllTester.java @@ -42,7 +42,6 @@ * @author George van den Driessche * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionRemoveAllTester extends AbstractCollectionTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveIfTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveIfTester.java index bc0139f8414d..05bbc417586a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveIfTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveIfTester.java @@ -39,7 +39,6 @@ * @author Louis Wasserman */ @GwtCompatible -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionRemoveIfTester extends AbstractCollectionTester { @CollectionFeature.Require(SUPPORTS_ITERATOR_REMOVE) diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java index 49568fc28044..e13b919228c8 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRemoveTester.java @@ -38,7 +38,6 @@ * * @author George van den Driessche */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionRemoveTester extends AbstractCollectionTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java index db7aef13929d..0fd8b3262a29 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionRetainAllTester.java @@ -38,7 +38,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class CollectionRetainAllTester extends AbstractCollectionTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java index c3e338f1a450..e050dac6798f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllAtIndexTester.java @@ -36,7 +36,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListAddAllAtIndexTester extends AbstractListTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java index 1504f1a4b195..d408e49802ad 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAllTester.java @@ -31,7 +31,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListAddAllTester extends AbstractListTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java index 32310b8d3815..d2902358d1ee 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java @@ -39,7 +39,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListAddAtIndexTester extends AbstractListTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java index 8559d3464d91..5c953ce4bf19 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java @@ -35,7 +35,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListAddTester extends AbstractListTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java index 513134cd446d..f010215b8dcb 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListRemoveAllTester.java @@ -32,7 +32,6 @@ * * @author George van den Driessche */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListRemoveAllTester extends AbstractListTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java index 96bd3b40042e..1c99c196a37e 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListRetainAllTester.java @@ -50,7 +50,6 @@ public void testRetainAll_duplicatesKept() { expectContents(array); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testRetainAll_duplicatesRemoved() { @@ -63,7 +62,6 @@ public void testRetainAll_duplicatesRemoved() { expectContents(e2()); } - @SuppressWarnings("unchecked") @CollectionFeature.Require(SUPPORTS_REMOVE) @CollectionSize.Require(SEVERAL) public void testRetainAll_countIgnored() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java index 7a60add7c9a5..47080164dd4d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java @@ -45,7 +45,6 @@ * * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class ListSubListTester extends AbstractListTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java index 21d89d8d68d7..d693e6b5e10f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java @@ -47,7 +47,6 @@ * @author Chris Povirk * @author Kevin Bourrillion */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class MapPutAllTester extends AbstractMapTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java index b123f5bc5700..a81a5dd78a73 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java @@ -42,7 +42,6 @@ * @author Chris Povirk * @author Kevin Bourrillion */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class MapPutTester extends AbstractMapTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java index 00c074e5e8fc..0b87b94983ea 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapRemoveTester.java @@ -40,7 +40,6 @@ * @author George van den Driessche * @author Chris Povirk */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class MapRemoveTester extends AbstractMapTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java index 3b17289538c5..acffaa98380b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueueOfferTester.java @@ -29,7 +29,6 @@ * * @author Jared Levy */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class QueueOfferTester extends AbstractQueueTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java index 544b14ab627b..03aff66077e4 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueuePollTester.java @@ -33,7 +33,6 @@ * * @author Jared Levy */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class QueuePollTester extends AbstractQueueTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java index 2b02cea6e7e5..911de2d0baf0 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/QueueRemoveTester.java @@ -34,7 +34,6 @@ * * @author Jared Levy */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class QueueRemoveTester extends AbstractQueueTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java index 8e917cde761a..b3893c1e46a0 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddAllTester.java @@ -31,7 +31,6 @@ * * @author Kevin Bourrillion */ -@SuppressWarnings("unchecked") // too many "unchecked generic array creations" @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. public class SetAddAllTester extends AbstractSetTester { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SortedMapNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SortedMapNavigationTester.java index 691fee139bcf..5a39ed4d43bc 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SortedMapNavigationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SortedMapNavigationTester.java @@ -167,7 +167,6 @@ public void testSubMapIllegal() { @CollectionSize.Require(absent = ZERO) public void testOrderedByComparator() { - @SuppressWarnings("unchecked") Comparator comparator = navigableMap.comparator(); if (comparator == null) { comparator = diff --git a/guava-testlib/test/com/google/common/collect/testing/features/FeatureUtilTest.java b/guava-testlib/test/com/google/common/collect/testing/features/FeatureUtilTest.java index 130e86f878a1..9fda91f1215c 100644 --- a/guava-testlib/test/com/google/common/collect/testing/features/FeatureUtilTest.java +++ b/guava-testlib/test/com/google/common/collect/testing/features/FeatureUtilTest.java @@ -32,8 +32,6 @@ /** * @author George van den Driessche */ -// Enum values use constructors with generic varargs. -@SuppressWarnings("unchecked") public class FeatureUtilTest extends TestCase { interface ExampleBaseInterface { void behave(); diff --git a/guava-tests/test/com/google/common/base/EquivalenceTest.java b/guava-tests/test/com/google/common/base/EquivalenceTest.java index bb1d9ca76d87..9bc96b0d24e7 100644 --- a/guava-tests/test/com/google/common/base/EquivalenceTest.java +++ b/guava-tests/test/com/google/common/base/EquivalenceTest.java @@ -36,7 +36,6 @@ @ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) public class EquivalenceTest extends TestCase { - @SuppressWarnings("unchecked") // varargs public void testPairwiseEquivalent() { EquivalenceTester.of(Equivalence.equals().pairwise()) .addEquivalenceGroup(ImmutableList.of()) diff --git a/guava-tests/test/com/google/common/base/PredicatesTest.java b/guava-tests/test/com/google/common/base/PredicatesTest.java index 2f91da1665bb..afd9b45f3aaa 100644 --- a/guava-tests/test/com/google/common/base/PredicatesTest.java +++ b/guava-tests/test/com/google/common/base/PredicatesTest.java @@ -191,12 +191,10 @@ public void testNot_serialization() { * Tests for all the different flavors of Predicates.and(). */ - @SuppressWarnings("unchecked") // varargs public void testAnd_applyNoArgs() { assertEvalsToTrue(Predicates.and()); } - @SuppressWarnings("unchecked") // varargs public void testAnd_equalityNoArgs() { new EqualsTester() .addEqualityGroup(Predicates.and(), Predicates.and()) @@ -207,17 +205,14 @@ public void testAnd_equalityNoArgs() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testAnd_serializationNoArgs() { checkSerialization(Predicates.and()); } - @SuppressWarnings("unchecked") // varargs public void testAnd_applyOneArg() { assertEvalsLikeOdd(Predicates.and(isOdd())); } - @SuppressWarnings("unchecked") // varargs public void testAnd_equalityOneArg() { Object[] notEqualObjects = {Predicates.and(NEVER_REACHED, FALSE)}; new EqualsTester() @@ -231,7 +226,6 @@ public void testAnd_equalityOneArg() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testAnd_serializationOneArg() { checkSerialization(Predicates.and(isOdd())); } @@ -242,7 +236,6 @@ public void testAnd_applyBinary() { assertEvalsToFalse(Predicates.and(FALSE, NEVER_REACHED)); } - @SuppressWarnings("unchecked") // varargs public void testAnd_equalityBinary() { new EqualsTester() .addEqualityGroup(Predicates.and(TRUE, NEVER_REACHED), Predicates.and(TRUE, NEVER_REACHED)) @@ -258,7 +251,6 @@ public void testAnd_serializationBinary() { checkSerialization(Predicates.and(TRUE, isOdd())); } - @SuppressWarnings("unchecked") // varargs public void testAnd_applyTernary() { assertEvalsLikeOdd(Predicates.and(isOdd(), TRUE, TRUE)); assertEvalsLikeOdd(Predicates.and(TRUE, isOdd(), TRUE)); @@ -266,7 +258,6 @@ public void testAnd_applyTernary() { assertEvalsToFalse(Predicates.and(TRUE, FALSE, NEVER_REACHED)); } - @SuppressWarnings("unchecked") // varargs public void testAnd_equalityTernary() { new EqualsTester() .addEqualityGroup( @@ -280,12 +271,10 @@ public void testAnd_equalityTernary() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testAnd_serializationTernary() { checkSerialization(Predicates.and(TRUE, isOdd(), FALSE)); } - @SuppressWarnings("unchecked") // varargs public void testAnd_applyIterable() { Collection> empty = Arrays.asList(); assertEvalsToTrue(Predicates.and(empty)); @@ -294,7 +283,6 @@ public void testAnd_applyIterable() { assertEvalsToFalse(Predicates.and(Arrays.asList(FALSE, NEVER_REACHED))); } - @SuppressWarnings("unchecked") // varargs public void testAnd_equalityIterable() { new EqualsTester() .addEqualityGroup( @@ -308,7 +296,6 @@ public void testAnd_equalityIterable() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testAnd_serializationIterable() { checkSerialization(Predicates.and(Arrays.asList(TRUE, FALSE))); } @@ -349,12 +336,10 @@ public Iterator> iterator() { * Tests for all the different flavors of Predicates.or(). */ - @SuppressWarnings("unchecked") // varargs public void testOr_applyNoArgs() { assertEvalsToFalse(Predicates.or()); } - @SuppressWarnings("unchecked") // varargs public void testOr_equalityNoArgs() { new EqualsTester() .addEqualityGroup(Predicates.or(), Predicates.or()) @@ -365,18 +350,15 @@ public void testOr_equalityNoArgs() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testOr_serializationNoArgs() { checkSerialization(Predicates.or()); } - @SuppressWarnings("unchecked") // varargs public void testOr_applyOneArg() { assertEvalsToTrue(Predicates.or(TRUE)); assertEvalsToFalse(Predicates.or(FALSE)); } - @SuppressWarnings("unchecked") // varargs public void testOr_equalityOneArg() { new EqualsTester() .addEqualityGroup(Predicates.or(NEVER_REACHED), Predicates.or(NEVER_REACHED)) @@ -389,7 +371,6 @@ public void testOr_equalityOneArg() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testOr_serializationOneArg() { checkSerialization(Predicates.or(isOdd())); } @@ -404,7 +385,6 @@ public void testOr_applyBinary() { assertEvalsToTrue(trueOrAnything); } - @SuppressWarnings("unchecked") // varargs public void testOr_equalityBinary() { new EqualsTester() .addEqualityGroup(Predicates.or(FALSE, NEVER_REACHED), Predicates.or(FALSE, NEVER_REACHED)) @@ -420,7 +400,6 @@ public void testOr_serializationBinary() { checkSerialization(Predicates.or(isOdd(), TRUE)); } - @SuppressWarnings("unchecked") // varargs public void testOr_applyTernary() { assertEvalsLikeOdd(Predicates.or(isOdd(), FALSE, FALSE)); assertEvalsLikeOdd(Predicates.or(FALSE, isOdd(), FALSE)); @@ -428,7 +407,6 @@ public void testOr_applyTernary() { assertEvalsToTrue(Predicates.or(FALSE, TRUE, NEVER_REACHED)); } - @SuppressWarnings("unchecked") // varargs public void testOr_equalityTernary() { new EqualsTester() .addEqualityGroup( @@ -441,12 +419,10 @@ public void testOr_equalityTernary() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testOr_serializationTernary() { checkSerialization(Predicates.or(FALSE, isOdd(), TRUE)); } - @SuppressWarnings("unchecked") // varargs public void testOr_applyIterable() { Predicate<@Nullable Integer> vacuouslyFalse = Predicates.or(Collections.>emptyList()); @@ -462,7 +438,6 @@ public void testOr_applyIterable() { assertEvalsToTrue(trueAndFalse); } - @SuppressWarnings("unchecked") // varargs public void testOr_equalityIterable() { new EqualsTester() .addEqualityGroup( @@ -476,7 +451,6 @@ public void testOr_equalityIterable() { @J2ktIncompatible @GwtIncompatible // SerializableTester - @SuppressWarnings("unchecked") // varargs public void testOr_serializationIterable() { Predicate pre = Predicates.or(Arrays.asList(TRUE, FALSE)); Predicate post = SerializableTester.reserializeAndAssert(pre); @@ -793,7 +767,6 @@ public void testNullPointerExceptions() { tester.testAllPublicStaticMethods(Predicates.class); } - @SuppressWarnings("unchecked") // varargs @J2ktIncompatible @GwtIncompatible // SerializableTester public void testCascadingSerialization() throws Exception { diff --git a/guava-tests/test/com/google/common/cache/CacheBuilderFactory.java b/guava-tests/test/com/google/common/cache/CacheBuilderFactory.java index 77a4734fbba4..3caca22bb180 100644 --- a/guava-tests/test/com/google/common/cache/CacheBuilderFactory.java +++ b/guava-tests/test/com/google/common/cache/CacheBuilderFactory.java @@ -88,7 +88,6 @@ CacheBuilderFactory withValueStrengths(Set valueStrengths) { } Iterable> buildAllPermutations() { - @SuppressWarnings("unchecked") Iterable> combinations = buildCartesianProduct( concurrencyLevels, diff --git a/guava-tests/test/com/google/common/cache/CacheTesting.java b/guava-tests/test/com/google/common/cache/CacheTesting.java index 47a75c0abf69..85110409ef85 100644 --- a/guava-tests/test/com/google/common/cache/CacheTesting.java +++ b/guava-tests/test/com/google/common/cache/CacheTesting.java @@ -79,7 +79,6 @@ static void simulateValueReclamation(Cache cache, K key) { * that the given entry is a weak or soft reference, and throws an IllegalStateException if that * assumption does not hold. */ - @SuppressWarnings("unchecked") // the instanceof check and the cast generate this warning static void simulateKeyReclamation(Cache cache, K key) { ReferenceEntry entry = getReferenceEntry(cache, key); diff --git a/guava-tests/test/com/google/common/cache/LocalCacheTest.java b/guava-tests/test/com/google/common/cache/LocalCacheTest.java index a16c0ab37039..83292d1368c1 100644 --- a/guava-tests/test/com/google/common/cache/LocalCacheTest.java +++ b/guava-tests/test/com/google/common/cache/LocalCacheTest.java @@ -2773,7 +2773,6 @@ private void testLoadThrows( * Returns an iterable containing all combinations of maximumSize, expireAfterAccess/Write, * weakKeys and weak/softValues. */ - @SuppressWarnings("unchecked") // varargs private static Iterable> allEntryTypeMakers() { List> result = newArrayList(allKeyValueStrengthMakers()); for (CacheBuilder builder : allKeyValueStrengthMakers()) { @@ -2795,7 +2794,6 @@ private static Iterable> allEntryTypeMakers() { } /** Returns an iterable containing all combinations of maximumSize and expireAfterAccess/Write. */ - @SuppressWarnings("unchecked") // varargs static Iterable> allEvictingMakers() { return ImmutableList.of( createCacheBuilder().maximumSize(SMALL_MAX_SIZE), @@ -2810,7 +2808,6 @@ static Iterable> allEvictingMakers() { } /** Returns an iterable containing all combinations weakKeys and weak/softValues. */ - @SuppressWarnings("unchecked") // varargs private static Iterable> allKeyValueStrengthMakers() { return ImmutableList.of( createCacheBuilder(), diff --git a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index 1333a65b7c28..15d0557f3c8d 100644 --- a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -57,7 +57,6 @@ public abstract class AbstractImmutableSetTest extends TestCase { protected abstract > Set of(E e1, E e2, E e3, E e4, E e5); - @SuppressWarnings("unchecked") protected abstract > Set of( E e1, E e2, E e3, E e4, E e5, E e6, E... rest); diff --git a/guava-tests/test/com/google/common/collect/ComparatorsTest.java b/guava-tests/test/com/google/common/collect/ComparatorsTest.java index 8d658a7837ad..dabbd353c075 100644 --- a/guava-tests/test/com/google/common/collect/ComparatorsTest.java +++ b/guava-tests/test/com/google/common/collect/ComparatorsTest.java @@ -38,7 +38,6 @@ @GwtCompatible @ElementTypesAreNonnullByDefault public class ComparatorsTest extends TestCase { - @SuppressWarnings("unchecked") // dang varargs public void testLexicographical() { Comparator comparator = Ordering.natural(); Comparator> lexy = Comparators.lexicographical(comparator); diff --git a/guava-tests/test/com/google/common/collect/ImmutableRangeSetTest.java b/guava-tests/test/com/google/common/collect/ImmutableRangeSetTest.java index 378841cbd87f..22ea11f23248 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableRangeSetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableRangeSetTest.java @@ -368,7 +368,6 @@ public void testRemoveAllUnsupported() { @AndroidIncompatible // slow public void testExhaustive() { - @SuppressWarnings("unchecked") ImmutableSet> ranges = ImmutableSet.of( Range.all(), diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetTest.java index feb042e3c91b..b03e00ba3bce 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSetTest.java @@ -197,7 +197,6 @@ protected > Set of(E e1, E e2, E e3, E e4, E return ImmutableSet.of(e1, e2, e3, e4, e5); } - @SuppressWarnings("unchecked") @Override protected > Set of( E e1, E e2, E e3, E e4, E e5, E e6, E... rest) { diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index 94de5462dd65..da675f066989 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -783,7 +783,6 @@ public void testViewSerialization() { Lists.newArrayList(SerializableTester.reserialize(map.values()))); } - @SuppressWarnings("unchecked") // varargs public void testHeadMapInclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).headMap("three", true); @@ -792,14 +791,12 @@ public void testHeadMapInclusive() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs public void testHeadMapExclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).headMap("three", false); assertThat(map.entrySet()).containsExactly(Maps.immutableEntry("one", 1)); } - @SuppressWarnings("unchecked") // varargs public void testTailMapInclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).tailMap("three", true); @@ -808,21 +805,18 @@ public void testTailMapInclusive() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs public void testTailMapExclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).tailMap("three", false); assertThat(map.entrySet()).containsExactly(Maps.immutableEntry("two", 2)); } - @SuppressWarnings("unchecked") // varargs public void testSubMapExclusiveExclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", false, "two", false); assertThat(map.entrySet()).containsExactly(Maps.immutableEntry("three", 3)); } - @SuppressWarnings("unchecked") // varargs public void testSubMapInclusiveExclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", true, "two", false); @@ -831,7 +825,6 @@ public void testSubMapInclusiveExclusive() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs public void testSubMapExclusiveInclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", false, "two", true); @@ -840,7 +833,6 @@ public void testSubMapExclusiveInclusive() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs public void testSubMapInclusiveInclusive() { Map map = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3).subMap("one", true, "two", true); diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java index b91d6ac66fae..32c1b81dcb00 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java @@ -209,7 +209,6 @@ protected > SortedSet of(E e1, E e2, E e3, E return ImmutableSortedSet.of(e1, e2, e3, e4, e5); } - @SuppressWarnings("unchecked") @Override protected > SortedSet of( E e1, E e2, E e3, E e4, E e5, E e6, E... rest) { @@ -951,7 +950,6 @@ public void testLegacyComparable_copyOf_iterator() { } public void testLegacyComparable_builder_natural() { - @SuppressWarnings("unchecked") // Note: IntelliJ wrongly reports an error for this statement ImmutableSortedSet.Builder builder = ImmutableSortedSet.naturalOrder(); @@ -965,7 +963,6 @@ public void testLegacyComparable_builder_natural() { } public void testLegacyComparable_builder_reverse() { - @SuppressWarnings("unchecked") // Note: IntelliJ wrongly reports an error for this statement ImmutableSortedSet.Builder builder = ImmutableSortedSet.reverseOrder(); diff --git a/guava-tests/test/com/google/common/collect/IterablesTest.java b/guava-tests/test/com/google/common/collect/IterablesTest.java index 92ac0157436c..3d67a04bba4a 100644 --- a/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -395,7 +395,6 @@ public void testConcatIterable() { List list1 = newArrayList(1); List list2 = newArrayList(4); - @SuppressWarnings("unchecked") List> input = newArrayList(list1, list2); Iterable result = Iterables.concat(input); @@ -417,7 +416,6 @@ public void testConcatVarargs() { List list3 = newArrayList(7, 8); List list4 = newArrayList(9); List list5 = newArrayList(10); - @SuppressWarnings("unchecked") Iterable result = Iterables.concat(list1, list2, list3, list4, list5); assertEquals(asList(1, 4, 7, 8, 9, 10), newArrayList(result)); assertEquals("[1, 4, 7, 8, 9, 10]", result.toString()); diff --git a/guava-tests/test/com/google/common/collect/IteratorsTest.java b/guava-tests/test/com/google/common/collect/IteratorsTest.java index 01fd1e2ec408..bf525d53b9cd 100644 --- a/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -719,7 +719,6 @@ protected Iterator newTargetIterator() { @GwtIncompatible // slow (~5s) public void testConcatNoIteratorsYieldsEmpty() { new EmptyIteratorTester() { - @SuppressWarnings("unchecked") @Override protected Iterator newTargetIterator() { return Iterators.concat(); @@ -730,7 +729,6 @@ protected Iterator newTargetIterator() { @GwtIncompatible // slow (~5s) public void testConcatOneEmptyIteratorYieldsEmpty() { new EmptyIteratorTester() { - @SuppressWarnings("unchecked") @Override protected Iterator newTargetIterator() { return Iterators.concat(iterateOver()); @@ -751,7 +749,6 @@ protected Iterator newTargetIterator() { @GwtIncompatible // slow (~3s) public void testConcatSingletonYieldsSingleton() { new SingletonIteratorTester() { - @SuppressWarnings("unchecked") @Override protected Iterator newTargetIterator() { return Iterators.concat(iterateOver(1)); @@ -823,7 +820,6 @@ public void testConcatPartiallyAdvancedFirst() { /** Illustrates the somewhat bizarre behavior when a null is passed in. */ public void testConcatContainingNull() { - @SuppressWarnings("unchecked") Iterator> input = asList(iterateOver(1, 2), null, iterateOver(3)).iterator(); Iterator result = Iterators.concat(input); assertEquals(1, (int) result.next()); @@ -841,7 +837,6 @@ public void testConcatContainingNull() { // There is no way to get "through" to the 3. Buh-bye } - @SuppressWarnings("unchecked") public void testConcatVarArgsContainingNull() { try { Iterators.concat(iterateOver(1, 2), null, iterateOver(3), iterateOver(4), iterateOver(5)); diff --git a/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java b/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java index 1ab7b48b8941..04670b945ab8 100644 --- a/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java @@ -308,7 +308,6 @@ protected void verify(List elements) { @GwtIncompatible // unreasonably slow public void testEntriesIteration() { - @SuppressWarnings("unchecked") Set> set = Sets.newLinkedHashSet( asList( @@ -416,7 +415,6 @@ protected void verify(List elements) { @GwtIncompatible // unreasonably slow public void testAsSetIteration() { - @SuppressWarnings("unchecked") Set>> set = newLinkedHashSet( asList( diff --git a/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java b/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java index 434acbb6367d..53419d7659fc 100644 --- a/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java @@ -334,7 +334,6 @@ public void testEntriesAfterMultimapUpdate() { assertEquals(3, (int) entryb.getValue()); } - @SuppressWarnings("unchecked") @GwtIncompatible // unreasonably slow public void testEntriesIteration() { List> addItems = @@ -457,7 +456,6 @@ protected void verify(List elements) { }.test(); } - @SuppressWarnings("unchecked") @GwtIncompatible // unreasonably slow public void testAsSetIteration() { Set>> set = diff --git a/guava-tests/test/com/google/common/collect/ListsImplTest.java b/guava-tests/test/com/google/common/collect/ListsImplTest.java index f4c0362a41a1..b6c7ad5e05e7 100644 --- a/guava-tests/test/com/google/common/collect/ListsImplTest.java +++ b/guava-tests/test/com/google/common/collect/ListsImplTest.java @@ -276,7 +276,6 @@ protected ArraysAsListExample(String name) { @Override public List createList(Class listType, Collection contents) { - @SuppressWarnings("unchecked") // safe by contract T[] array = Iterables.toArray(contents, listType); return Arrays.asList(array); } diff --git a/guava-tests/test/com/google/common/collect/ListsTest.java b/guava-tests/test/com/google/common/collect/ListsTest.java index c7ce4ad03396..5411cd529ce9 100644 --- a/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/guava-tests/test/com/google/common/collect/ListsTest.java @@ -579,26 +579,22 @@ private static List list(E... elements) { return ImmutableList.copyOf(elements); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary1x1() { assertThat(Lists.cartesianProduct(list(1), list(2))).contains(list(1, 2)); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary1x2() { assertThat(Lists.cartesianProduct(list(1), list(2, 3))) .containsExactly(list(1, 2), list(1, 3)) .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary2x2() { assertThat(Lists.cartesianProduct(list(1, 2), list(3, 4))) .containsExactly(list(1, 3), list(1, 4), list(2, 3), list(2, 4)) .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_2x2x2() { assertThat(Lists.cartesianProduct(list(0, 1), list(0, 1), list(0, 1))) .containsExactly( @@ -613,7 +609,6 @@ public void testCartesianProduct_2x2x2() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_contains() { List> actual = Lists.cartesianProduct(list(1, 2), list(3, 4)); assertTrue(actual.contains(list(1, 3))); @@ -645,7 +640,6 @@ public void testCartesianProduct_lastIndexOf() { assertThat(actual.lastIndexOf(list(1, 1, 1))).isEqualTo(-1); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_unrelatedTypes() { List x = list(1, 2); List y = list("3", "4"); @@ -660,7 +654,6 @@ public void testCartesianProduct_unrelatedTypes() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProductTooBig() { List list = Collections.nCopies(10000, "foo"); try { diff --git a/guava-tests/test/com/google/common/collect/MapMakerInternalMapTest.java b/guava-tests/test/com/google/common/collect/MapMakerInternalMapTest.java index 453e3e74d7a5..1590399dc37f 100644 --- a/guava-tests/test/com/google/common/collect/MapMakerInternalMapTest.java +++ b/guava-tests/test/com/google/common/collect/MapMakerInternalMapTest.java @@ -841,7 +841,6 @@ public void testDrainValueReferenceQueueOnWrite() { Object valueTwo = new Object(); map.put(keyOne, valueOne); - @SuppressWarnings("unchecked") WeakValueEntry entry = (WeakValueEntry) segment.getEntry(keyOne, hashOne); WeakValueReference valueReference = entry.getValueReference(); @@ -902,7 +901,6 @@ public void testDrainValueReferenceQueueOnRead() { Object keyTwo = new Object(); map.put(keyOne, valueOne); - @SuppressWarnings("unchecked") WeakValueEntry entry = (WeakValueEntry) segment.getEntry(keyOne, hashOne); WeakValueReference valueReference = entry.getValueReference(); diff --git a/guava-tests/test/com/google/common/collect/OrderingTest.java b/guava-tests/test/com/google/common/collect/OrderingTest.java index dab0259f78aa..eeb2b33e11e4 100644 --- a/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -412,7 +412,6 @@ public void testOnResultOf_chained() { assertEquals("Ordering.natural().reverse().onResultOf(StringLength)", comparator.toString()); } - @SuppressWarnings("unchecked") // dang varargs public void testLexicographical() { Ordering ordering = Ordering.natural(); Ordering> lexy = ordering.lexicographical(); @@ -951,7 +950,7 @@ void testIsOrdered() { assertTrue(ordering.isStrictlyOrdered(strictlyOrderedList)); } - @SuppressWarnings("unchecked") // generic arrays and unchecked cast + // generic arrays and unchecked cast void testMinAndMax() { List shuffledList = Lists.newArrayList(strictlyOrderedList); shuffledList = shuffledCopy(shuffledList, new Random(5)); @@ -1015,7 +1014,6 @@ Scenario mutate(Scenario scenario) { NULLS_FIRST { @Override Scenario mutate(Scenario scenario) { - @SuppressWarnings("unchecked") List newList = Lists.newArrayList((T) null); for (T t : scenario.strictlyOrderedList) { if (t != null) { diff --git a/guava-tests/test/com/google/common/collect/SetsTest.java b/guava-tests/test/com/google/common/collect/SetsTest.java index 97585aa44872..c23d6dbe1563 100644 --- a/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/guava-tests/test/com/google/common/collect/SetsTest.java @@ -711,34 +711,26 @@ public void testNewSetFromMapIllegal() { } } - // TODO: the overwhelming number of suppressions below suggests that maybe - // it's not worth having a varargs form of this method at all... - /** The 0-ary cartesian product is a single empty list. */ - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_zeroary() { assertThat(Sets.cartesianProduct()).containsExactly(list()); } /** A unary cartesian product is one list of size 1 for each element in the input set. */ - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_unary() { assertThat(Sets.cartesianProduct(set(1, 2))).containsExactly(list(1), list(2)); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary0x0() { Set mt = emptySet(); assertEmpty(Sets.cartesianProduct(mt, mt)); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary0x1() { Set mt = emptySet(); assertEmpty(Sets.cartesianProduct(mt, set(1))); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary1x0() { Set mt = emptySet(); assertEmpty(Sets.cartesianProduct(set(1), mt)); @@ -750,26 +742,22 @@ private static void assertEmpty(Set> set) { assertFalse(set.iterator().hasNext()); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary1x1() { assertThat(Sets.cartesianProduct(set(1), set(2))).contains(list(1, 2)); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary1x2() { assertThat(Sets.cartesianProduct(set(1), set(2, 3))) .containsExactly(list(1, 2), list(1, 3)) .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_binary2x2() { assertThat(Sets.cartesianProduct(set(1, 2), set(3, 4))) .containsExactly(list(1, 3), list(1, 4), list(2, 3), list(2, 4)) .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_2x2x2() { assertThat(Sets.cartesianProduct(set(0, 1), set(0, 1), set(0, 1))) .containsExactly( @@ -784,7 +772,6 @@ public void testCartesianProduct_2x2x2() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_contains() { Set> actual = Sets.cartesianProduct(set(1, 2), set(3, 4)); assertTrue(actual.contains(list(1, 3))); @@ -809,7 +796,6 @@ public void testCartesianProduct_equals() { .testEquals(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_unrelatedTypes() { Set x = set(1, 2); Set y = set("3", "4"); @@ -824,7 +810,6 @@ public void testCartesianProduct_unrelatedTypes() { .inOrder(); } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProductTooBig() { Set set = ContiguousSet.create(Range.closed(0, 10000), DiscreteDomain.integers()); try { @@ -834,7 +819,6 @@ public void testCartesianProductTooBig() { } } - @SuppressWarnings("unchecked") // varargs! public void testCartesianProduct_hashCode() { // Run through the same cartesian products we tested above diff --git a/guava-tests/test/com/google/common/primitives/CharsTest.java b/guava-tests/test/com/google/common/primitives/CharsTest.java index 7c0739c457da..a662adbb737b 100644 --- a/guava-tests/test/com/google/common/primitives/CharsTest.java +++ b/guava-tests/test/com/google/common/primitives/CharsTest.java @@ -41,7 +41,6 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -@SuppressWarnings("cast") // redundant casts are intentional and harmless public class CharsTest extends TestCase { private static final char[] EMPTY = {}; private static final char[] ARRAY1 = {(char) 1}; diff --git a/guava-tests/test/com/google/common/primitives/LongsTest.java b/guava-tests/test/com/google/common/primitives/LongsTest.java index 0875b5d566a2..7ca44ca3bfc4 100644 --- a/guava-tests/test/com/google/common/primitives/LongsTest.java +++ b/guava-tests/test/com/google/common/primitives/LongsTest.java @@ -45,7 +45,6 @@ */ @ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) -@SuppressWarnings("cast") // redundant casts are intentional and harmless public class LongsTest extends TestCase { private static final long[] EMPTY = {}; private static final long[] ARRAY1 = {(long) 1}; diff --git a/guava-tests/test/com/google/common/primitives/ShortsTest.java b/guava-tests/test/com/google/common/primitives/ShortsTest.java index 18430e307016..1f1f5fc3859a 100644 --- a/guava-tests/test/com/google/common/primitives/ShortsTest.java +++ b/guava-tests/test/com/google/common/primitives/ShortsTest.java @@ -42,7 +42,6 @@ */ @ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) -@SuppressWarnings("cast") // redundant casts are intentional and harmless public class ShortsTest extends TestCase { private static final short[] EMPTY = {}; private static final short[] ARRAY1 = {(short) 1}; diff --git a/guava-tests/test/com/google/common/primitives/SignedBytesTest.java b/guava-tests/test/com/google/common/primitives/SignedBytesTest.java index a141d72bb4e6..404cf6864267 100644 --- a/guava-tests/test/com/google/common/primitives/SignedBytesTest.java +++ b/guava-tests/test/com/google/common/primitives/SignedBytesTest.java @@ -37,7 +37,6 @@ */ @ElementTypesAreNonnullByDefault @GwtCompatible(emulated = true) -@SuppressWarnings("cast") // redundant casts are intentional and harmless public class SignedBytesTest extends TestCase { private static final byte[] EMPTY = {}; private static final byte[] ARRAY1 = {(byte) 1}; diff --git a/guava-tests/test/com/google/common/primitives/UnsignedBytesTest.java b/guava-tests/test/com/google/common/primitives/UnsignedBytesTest.java index 10f9a662b8a6..842d0b386983 100644 --- a/guava-tests/test/com/google/common/primitives/UnsignedBytesTest.java +++ b/guava-tests/test/com/google/common/primitives/UnsignedBytesTest.java @@ -274,7 +274,6 @@ public void testLexicographicalComparator() { assertThat(SerializableTester.reserialize(javaImpl)).isSameInstanceAs(javaImpl); } - @SuppressWarnings("unchecked") public void testLexicographicalComparatorLongInputs() { Random rnd = new Random(); for (Comparator comparator : diff --git a/guava-tests/test/com/google/common/reflect/InvokableTest.java b/guava-tests/test/com/google/common/reflect/InvokableTest.java index 721351a3b18a..b98a1834e014 100644 --- a/guava-tests/test/com/google/common/reflect/InvokableTest.java +++ b/guava-tests/test/com/google/common/reflect/InvokableTest.java @@ -228,7 +228,6 @@ WithConstructorAndTypeParameter() {} } public void testConstructor_returnType_hasTypeParameter() throws Exception { - @SuppressWarnings("rawtypes") // Foo.class for Foo is always raw type Class type = WithConstructorAndTypeParameter.class; @SuppressWarnings("rawtypes") // Foo.class Constructor constructor = type.getDeclaredConstructor(); diff --git a/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java b/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java index 157dcda0a20b..abedb4e527b2 100644 --- a/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/FuturesTest.java @@ -1101,7 +1101,6 @@ public void testCatchingAsync_resultCancelledBeforeFallback() throws Exception { @J2ktIncompatible @GwtIncompatible // mocks // TODO(cpovirk): eliminate use of mocks - @SuppressWarnings("unchecked") public void testCatchingAsync_resultCancelledAfterFallback() throws Exception { final SettableFuture secondary = SettableFuture.create(); final RuntimeException raisedException = new RuntimeException(); @@ -2199,7 +2198,6 @@ public void testAllAsList() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); SettableFuture future3 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2, future3); // Attach a listener @@ -2233,7 +2231,6 @@ public void testAllAsList_emptyList() throws Exception { public void testAllAsList_emptyArray() throws Exception { SingleCallListener listener = new SingleCallListener(); listener.expectCall(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(); compound.addListener(listener, directExecutor()); assertThat(getDone(compound)).isEmpty(); @@ -2244,7 +2241,6 @@ public void testAllAsList_failure() throws Exception { SingleCallListener listener = new SingleCallListener(); SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2); compound.addListener(listener, directExecutor()); @@ -2309,7 +2305,6 @@ public void testAllAsList_cancelled() throws Exception { SingleCallListener listener = new SingleCallListener(); SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2); compound.addListener(listener, directExecutor()); @@ -2329,7 +2324,6 @@ public void testAllAsList_cancelled() throws Exception { public void testAllAsList_resultCancelled() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2); future2.set(DATA2); @@ -2373,7 +2367,6 @@ public void testAllAsList_resultCancelled_withSecondaryListFuture() throws Excep public void testAllAsList_resultInterrupted() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2); future2.set(DATA2); @@ -2401,7 +2394,6 @@ public void testAllAsList_doneFutures() throws Exception { future2.set(DATA2); future3.set(DATA3); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = allAsList(future1, future2, future3); // Attach a listener @@ -2416,7 +2408,6 @@ public void testAllAsList_doneFutures() throws Exception { } /** A single non-error failure is not logged because it is reported via the output future. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_exception() throws Exception { try { getDone(allAsList(immediateFailedFuture(new MyException()))); @@ -2429,7 +2420,6 @@ public void testAllAsList_logging_exception() throws Exception { } /** Ensure that errors are always logged. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_error() throws Exception { try { getDone(allAsList(immediateFailedFuture(new MyError()))); @@ -2443,7 +2433,6 @@ public void testAllAsList_logging_error() throws Exception { } /** All as list will log extra exceptions that have already occurred. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_multipleExceptions_alreadyDone() throws Exception { try { getDone( @@ -2459,7 +2448,6 @@ public void testAllAsList_logging_multipleExceptions_alreadyDone() throws Except } /** All as list will log extra exceptions that occur later. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_multipleExceptions_doneLater() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); @@ -2482,7 +2470,6 @@ public void testAllAsList_logging_multipleExceptions_doneLater() throws Exceptio } /** The same exception happening on multiple futures should not be logged. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_same_exception() throws Exception { try { MyException sameInstance = new MyException(); @@ -2558,7 +2545,6 @@ public void run() { /** * Different exceptions happening on multiple futures with the same cause should not be logged. */ - @SuppressWarnings("unchecked") public void testAllAsList_logging_same_cause() throws Exception { try { MyException exception1 = new MyException(); @@ -3438,7 +3424,6 @@ public void testSuccessfulAsList() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); SettableFuture future3 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2, future3); // Attach a listener @@ -3472,7 +3457,6 @@ public void testSuccessfulAsList_emptyList() throws Exception { public void testSuccessfulAsList_emptyArray() throws Exception { SingleCallListener listener = new SingleCallListener(); listener.expectCall(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(); compound.addListener(listener, directExecutor()); assertThat(getDone(compound)).isEmpty(); @@ -3483,7 +3467,6 @@ public void testSuccessfulAsList_partialFailure() throws Exception { SingleCallListener listener = new SingleCallListener(); SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); compound.addListener(listener, directExecutor()); @@ -3502,7 +3485,6 @@ public void testSuccessfulAsList_totalFailure() throws Exception { SingleCallListener listener = new SingleCallListener(); SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); compound.addListener(listener, directExecutor()); @@ -3521,7 +3503,6 @@ public void testSuccessfulAsList_cancelled() throws Exception { SingleCallListener listener = new SingleCallListener(); SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); compound.addListener(listener, directExecutor()); @@ -3539,7 +3520,6 @@ public void testSuccessfulAsList_cancelled() throws Exception { public void testSuccessfulAsList_resultCancelled() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); future2.set(DATA2); @@ -3576,7 +3556,6 @@ private static void doTestSuccessfulAsList_resultCancelledRacingInputDone() thro */ final SettableFuture future1 = SettableFuture.create(); final SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); future1.addListener( @@ -3611,7 +3590,6 @@ public void run() { public void testSuccessfulAsList_resultInterrupted() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2); future2.set(DATA2); @@ -3627,7 +3605,6 @@ public void testSuccessfulAsList_mixed() throws Exception { SettableFuture future1 = SettableFuture.create(); SettableFuture future2 = SettableFuture.create(); SettableFuture future3 = SettableFuture.create(); - @SuppressWarnings("unchecked") // array is never modified ListenableFuture> compound = successfulAsList(future1, future2, future3); compound.addListener(listener, directExecutor()); @@ -3647,7 +3624,6 @@ public void testSuccessfulAsList_mixed() throws Exception { /** Non-Error exceptions are never logged. */ @J2ktIncompatible // TODO(b/324550390): Enable - @SuppressWarnings("unchecked") public void testSuccessfulAsList_logging_exception() throws Exception { assertEquals( newArrayList((Object) null), @@ -3671,7 +3647,6 @@ public void testSuccessfulAsList_logging_exception() throws Exception { /** Ensure that errors are always logged. */ @J2ktIncompatible // TODO(b/324550390): Enable - @SuppressWarnings("unchecked") public void testSuccessfulAsList_logging_error() throws Exception { assertEquals( newArrayList((Object) null), diff --git a/guava/src/com/google/common/collect/ImmutableSortedMap.java b/guava/src/com/google/common/collect/ImmutableSortedMap.java index 93731eaa62ad..ff404a6d66f3 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -169,7 +169,6 @@ public static , V> ImmutableSortedMap of( * * @throws IllegalArgumentException if any two keys are equal according to their natural ordering */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2, K k3, V v3) { return fromEntries(entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3)); @@ -181,7 +180,6 @@ public static , V> ImmutableSortedMap of( * * @throws IllegalArgumentException if any two keys are equal according to their natural ordering */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4) { return fromEntries(entryOf(k1, v1), entryOf(k2, v2), entryOf(k3, v3), entryOf(k4, v4)); @@ -193,7 +191,6 @@ public static , V> ImmutableSortedMap of( * * @throws IllegalArgumentException if any two keys are equal according to their natural ordering */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5) { return fromEntries( @@ -207,7 +204,6 @@ public static , V> ImmutableSortedMap of( * @throws IllegalArgumentException if any two keys are equal according to their natural ordering * @since 31.0 */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6) { return fromEntries( @@ -226,7 +222,6 @@ public static , V> ImmutableSortedMap of( * @throws IllegalArgumentException if any two keys are equal according to their natural ordering * @since 31.0 */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2, K k3, V v3, K k4, V v4, K k5, V v5, K k6, V v6, K k7, V v7) { return fromEntries( @@ -282,7 +277,6 @@ public static , V> ImmutableSortedMap of( * @throws IllegalArgumentException if any two keys are equal according to their natural ordering * @since 31.0 */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, @@ -321,7 +315,6 @@ public static , V> ImmutableSortedMap of( * @throws IllegalArgumentException if any two keys are equal according to their natural ordering * @since 31.0 */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, @@ -624,7 +617,6 @@ public static class Builder extends ImmutableMap.Builder { * Creates a new builder. The returned builder is equivalent to the builder generated by {@link * ImmutableSortedMap#orderedBy}. */ - @SuppressWarnings("unchecked") public Builder(Comparator comparator) { this.comparator = checkNotNull(comparator); } diff --git a/guava/src/com/google/common/collect/ImmutableSortedSet.java b/guava/src/com/google/common/collect/ImmutableSortedSet.java index dc88e3983d26..ecac832e3bdc 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -112,7 +112,6 @@ public static > ImmutableSortedSet of(E eleme * * @throws NullPointerException if any element is null */ - @SuppressWarnings("unchecked") public static > ImmutableSortedSet of(E e1, E e2) { return construct(Ordering.natural(), 2, e1, e2); } @@ -136,7 +135,6 @@ public static > ImmutableSortedSet of(E e1, E * * @throws NullPointerException if any element is null */ - @SuppressWarnings("unchecked") public static > ImmutableSortedSet of(E e1, E e2, E e3, E e4) { return construct(Ordering.natural(), 4, e1, e2, e3, e4); } diff --git a/guava/src/com/google/common/collect/Multisets.java b/guava/src/com/google/common/collect/Multisets.java index 7a0eb10a358c..7268248ef1a3 100644 --- a/guava/src/com/google/common/collect/Multisets.java +++ b/guava/src/com/google/common/collect/Multisets.java @@ -1030,10 +1030,6 @@ abstract static class EntrySet @Override public boolean contains(@CheckForNull Object o) { if (o instanceof Entry) { - /* - * The GWT compiler wrongly issues a warning here. - */ - @SuppressWarnings("cast") Entry entry = (Entry) o; if (entry.getCount() <= 0) { return false; @@ -1044,8 +1040,6 @@ public boolean contains(@CheckForNull Object o) { return false; } - // GWT compiler warning; see contains(). - @SuppressWarnings("cast") @Override public boolean remove(@CheckForNull Object object) { if (object instanceof Multiset.Entry) { diff --git a/guava/src/com/google/common/collect/Ordering.java b/guava/src/com/google/common/collect/Ordering.java index d29a3b0d8f79..7d2b05b50c39 100644 --- a/guava/src/com/google/common/collect/Ordering.java +++ b/guava/src/com/google/common/collect/Ordering.java @@ -282,7 +282,6 @@ public static Ordering explicit(T leastValue, T... remainingValuesInOrder * @since 13.0 */ @GwtCompatible(serializable = true) - @SuppressWarnings("unchecked") public static Ordering<@Nullable Object> allEqual() { return AllEqualOrdering.INSTANCE; } diff --git a/guava/src/com/google/common/collect/Sets.java b/guava/src/com/google/common/collect/Sets.java index e23cba84026e..f89c4768f52b 100644 --- a/guava/src/com/google/common/collect/Sets.java +++ b/guava/src/com/google/common/collect/Sets.java @@ -1125,7 +1125,6 @@ public boolean contains(@CheckForNull Object element) { * @since 14.0 */ @GwtIncompatible // NavigableSet - @SuppressWarnings("unchecked") public static NavigableSet filter( NavigableSet unfiltered, Predicate predicate) { if (unfiltered instanceof FilteredSet) { diff --git a/guava/src/com/google/common/graph/DirectedGraphConnections.java b/guava/src/com/google/common/graph/DirectedGraphConnections.java index 0feb973f3f79..76c214de61bd 100644 --- a/guava/src/com/google/common/graph/DirectedGraphConnections.java +++ b/guava/src/com/google/common/graph/DirectedGraphConnections.java @@ -432,7 +432,6 @@ public V value(N node) { return (V) value; } - @SuppressWarnings("unchecked") @Override public void removePredecessor(N node) { checkNotNull(node); From dd582b3a255f7fc4f6b65e84e67450b7c778ded6 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 20 Feb 2024 09:00:12 -0800 Subject: [PATCH 157/216] Bump Truth to 1.4.1. RELNOTES=n/a PiperOrigin-RevId: 608624272 --- android/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index 49ccb931a562..76db2085eb64 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -14,7 +14,7 @@ %regex[.*.class] - 1.4.0 + 1.4.1 3.0.2 3.42.0 2.24.1 diff --git a/pom.xml b/pom.xml index 8d3fc5f34a18..559d252b478d 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ %regex[.*.class] - 1.4.0 + 1.4.1 3.0.2 3.42.0 2.24.1 From 9700e787b234cb1f8a9e49eff67712331fa7d53c Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Tue, 20 Feb 2024 13:51:43 -0800 Subject: [PATCH 158/216] Fix testing-j2objc when built with no-wrapper-methods This target previously broke when built with --j2objc_translation_flags=--no-wrapper-methods. The root cause appears to be special handling of methods that begin with "new". This CL changes the name of the private "newMatchResult" method to "createMatchResult" which eliminates the issue. RELNOTES=Allows building testing package with --j2objc_translation_flags=--no-wrapper-methods PiperOrigin-RevId: 608726803 --- .../src/com/google/common/testing/ArbitraryInstances.java | 4 ++-- .../src/com/google/common/testing/ArbitraryInstances.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/guava-testlib/src/com/google/common/testing/ArbitraryInstances.java b/android/guava-testlib/src/com/google/common/testing/ArbitraryInstances.java index c47ea9113f17..27956012d9f1 100644 --- a/android/guava-testlib/src/com/google/common/testing/ArbitraryInstances.java +++ b/android/guava-testlib/src/com/google/common/testing/ArbitraryInstances.java @@ -186,7 +186,7 @@ public int compare(Field left, Field right) { * in Android) requires a successful match in order to generate a {@code MatchResult}: * http://goo.gl/5VQFmC */ - private static MatchResult newMatchResult() { + private static MatchResult createMatchResult() { Matcher matcher = Pattern.compile(".").matcher("X"); matcher.find(); return matcher.toMatchResult(); @@ -204,7 +204,7 @@ private static MatchResult newMatchResult() { .put(CharSequence.class, "") .put(String.class, "") .put(Pattern.class, Pattern.compile("")) - .put(MatchResult.class, newMatchResult()) + .put(MatchResult.class, createMatchResult()) .put(TimeUnit.class, TimeUnit.SECONDS) .put(Charset.class, Charsets.UTF_8) .put(Currency.class, Currency.getInstance(Locale.US)) diff --git a/guava-testlib/src/com/google/common/testing/ArbitraryInstances.java b/guava-testlib/src/com/google/common/testing/ArbitraryInstances.java index 9e4ab85febde..0727beee95dd 100644 --- a/guava-testlib/src/com/google/common/testing/ArbitraryInstances.java +++ b/guava-testlib/src/com/google/common/testing/ArbitraryInstances.java @@ -191,7 +191,7 @@ public int compare(Field left, Field right) { * in Android) requires a successful match in order to generate a {@code MatchResult}: * http://goo.gl/5VQFmC */ - private static MatchResult newMatchResult() { + private static MatchResult createMatchResult() { Matcher matcher = Pattern.compile(".").matcher("X"); matcher.find(); return matcher.toMatchResult(); @@ -209,7 +209,7 @@ private static MatchResult newMatchResult() { .put(CharSequence.class, "") .put(String.class, "") .put(Pattern.class, Pattern.compile("")) - .put(MatchResult.class, newMatchResult()) + .put(MatchResult.class, createMatchResult()) .put(TimeUnit.class, TimeUnit.SECONDS) .put(Charset.class, Charsets.UTF_8) .put(Currency.class, Currency.getInstance(Locale.US)) From c200ab0e99c965588c889f0a512058f5144b165f Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Wed, 21 Feb 2024 02:13:32 -0800 Subject: [PATCH 159/216] Add some `@Nullable`s to collection tests (prep for running on J2KT) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These should be only “boring” cases. There’ll be smaller changes for “interesting” cases (so that those don’t get buried among all the boring ones). There are some new casts to immediately remove the newly-added nullability again in tests meant to provoke null pointer exceptions. RELNOTES=n/a PiperOrigin-RevId: 608912815 --- .../collect/AbstractImmutableSetTest.java | 21 +++---- .../common/collect/AbstractIteratorTest.java | 7 ++- .../common/collect/AbstractMapEntryTest.java | 6 +- .../AbstractMapsTransformValuesTest.java | 4 +- .../google/common/collect/ArrayTableTest.java | 5 +- .../common/collect/Collections2Test.java | 2 +- .../common/collect/GeneralRangeTest.java | 22 +++---- .../common/collect/ImmutableBiMapTest.java | 12 ++-- .../collect/ImmutableListMultimapTest.java | 19 +++--- .../common/collect/ImmutableListTest.java | 38 ++++++------ .../common/collect/ImmutableMapTest.java | 12 ++-- .../common/collect/ImmutableMultimapTest.java | 3 +- .../common/collect/ImmutableMultisetTest.java | 13 ++-- .../collect/ImmutableSetMultimapTest.java | 19 +++--- .../collect/ImmutableSortedMapTest.java | 11 ++-- .../common/collect/ImmutableTableTest.java | 3 +- .../google/common/collect/IterablesTest.java | 17 +++--- .../google/common/collect/IteratorsTest.java | 7 ++- .../collect/LinkedHashMultimapTest.java | 15 ++--- .../collect/LinkedListMultimapTest.java | 11 ++-- .../google/common/collect/ListsImplTest.java | 5 +- .../com/google/common/collect/MapsTest.java | 20 ++++--- ...ansformValuesUnmodifiableIteratorTest.java | 6 +- .../collect/MinMaxPriorityQueueTest.java | 8 ++- .../collect/MultisetsImmutableEntryTest.java | 4 +- .../google/common/collect/OrderingTest.java | 59 ++++++++++--------- .../common/collect/PeekingIteratorTest.java | 7 ++- .../com/google/common/collect/RangeTest.java | 9 +-- .../collect/RegularImmutableAsListTest.java | 3 +- .../collect/SimpleAbstractMultisetTest.java | 5 +- .../collect/TreeMultimapExplicitTest.java | 31 +++++----- .../common/collect/TreeMultisetTest.java | 3 +- .../collect/AbstractImmutableSetTest.java | 21 +++---- .../common/collect/AbstractIteratorTest.java | 7 ++- .../common/collect/AbstractMapEntryTest.java | 6 +- .../AbstractMapsTransformValuesTest.java | 4 +- .../google/common/collect/ArrayTableTest.java | 5 +- .../common/collect/Collections2Test.java | 2 +- .../common/collect/GeneralRangeTest.java | 22 +++---- .../common/collect/ImmutableBiMapTest.java | 12 ++-- .../collect/ImmutableListMultimapTest.java | 19 +++--- .../common/collect/ImmutableListTest.java | 38 ++++++------ .../common/collect/ImmutableMapTest.java | 12 ++-- .../common/collect/ImmutableMultimapTest.java | 3 +- .../common/collect/ImmutableMultisetTest.java | 12 ++-- .../collect/ImmutableSetMultimapTest.java | 19 +++--- .../collect/ImmutableSortedMapTest.java | 11 ++-- .../common/collect/ImmutableTableTest.java | 3 +- .../google/common/collect/IterablesTest.java | 17 +++--- .../google/common/collect/IteratorsTest.java | 7 ++- .../collect/LinkedHashMultimapTest.java | 15 ++--- .../collect/LinkedListMultimapTest.java | 11 ++-- .../google/common/collect/ListsImplTest.java | 5 +- .../com/google/common/collect/MapsTest.java | 20 ++++--- ...ansformValuesUnmodifiableIteratorTest.java | 6 +- .../collect/MinMaxPriorityQueueTest.java | 8 ++- .../common/collect/MoreCollectorsTest.java | 3 +- .../collect/MultisetsImmutableEntryTest.java | 4 +- .../google/common/collect/OrderingTest.java | 59 ++++++++++--------- .../common/collect/PeekingIteratorTest.java | 7 ++- .../com/google/common/collect/RangeTest.java | 9 +-- .../collect/RegularImmutableAsListTest.java | 3 +- .../collect/SimpleAbstractMultisetTest.java | 5 +- .../collect/TreeMultimapExplicitTest.java | 31 +++++----- .../common/collect/TreeMultisetTest.java | 3 +- 65 files changed, 445 insertions(+), 371 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index 15d0557f3c8d..c8989d34d884 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -34,6 +34,7 @@ import java.util.List; import java.util.Set; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Base class for {@link ImmutableSet} and {@link ImmutableSortedSet} tests. @@ -139,9 +140,9 @@ public void testCopyOf_nullArray() { } public void testCopyOf_arrayContainingOnlyNull() { - String[] array = new String[] {null}; + @Nullable String[] array = new @Nullable String[] {null}; try { - copyOf(array); + copyOf((String[]) array); fail(); } catch (NullPointerException expected) { } @@ -176,9 +177,9 @@ public void testCopyOf_collection_general() { } public void testCopyOf_collectionContainingNull() { - Collection c = MinimalCollection.of("a", null, "b"); + Collection<@Nullable String> c = MinimalCollection.of("a", null, "b"); try { - copyOf(c); + copyOf((Collection) c); fail(); } catch (NullPointerException expected) { } @@ -226,9 +227,9 @@ public void testCopyOf_iterator_general() { } public void testCopyOf_iteratorContainingNull() { - Iterator c = Iterators.forArray("a", null, "b"); + Iterator<@Nullable String> c = Iterators.forArray("a", null, "b"); try { - copyOf(c); + copyOf((Iterator) c); fail(); } catch (NullPointerException expected) { } @@ -455,16 +456,16 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } builder = this.builder(); - List listWithNulls = asList("a", null, "b"); + List<@Nullable String> listWithNulls = asList("a", null, "b"); try { - builder.addAll(listWithNulls); + builder.addAll((List) listWithNulls); fail("expected NullPointerException"); // COV_NF_LINE } catch (NullPointerException expected) { } - Iterable iterableWithNulls = MinimalIterable.of("a", null, "b"); + Iterable<@Nullable String> iterableWithNulls = MinimalIterable.of("a", null, "b"); try { - builder.addAll(iterableWithNulls); + builder.addAll((Iterable) iterableWithNulls); fail("expected NullPointerException"); // COV_NF_LINE } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java b/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java index 4811080f977d..67ba8759d85d 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java @@ -24,6 +24,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@code AbstractIterator}. @@ -44,7 +45,7 @@ public void testDefaultBehaviorOfNextAndHasNext() { private int rep; @Override - public Integer computeNext() { + public @Nullable Integer computeNext() { switch (rep++) { case 0: return 0; @@ -89,7 +90,7 @@ public void testDefaultBehaviorOfPeek() { private int rep; @Override - public Integer computeNext() { + public @Nullable Integer computeNext() { switch (rep++) { case 0: return 0; @@ -160,7 +161,7 @@ public void testDefaultBehaviorOfPeekForEmptyIteration() { private boolean alreadyCalledEndOfData; @Override - public Integer computeNext() { + public @Nullable Integer computeNext() { if (alreadyCalledEndOfData) { fail("Should not have been invoked again"); } diff --git a/android/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java b/android/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java index a5460ba5718e..00af21e1248e 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java @@ -33,7 +33,8 @@ public class AbstractMapEntryTest extends TestCase { private static final @Nullable String NK = null; private static final @Nullable Integer NV = null; - private static Entry entry(final K key, final V value) { + private static Entry entry( + final K key, final V value) { return new AbstractMapEntry() { @Override public K getKey() { @@ -47,7 +48,8 @@ public V getValue() { }; } - private static Entry control(K key, V value) { + private static Entry control( + K key, V value) { return Collections.singletonMap(key, value).entrySet().iterator().next(); } diff --git a/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java b/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java index cf6c74eb9140..3a46bb4c3034 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java @@ -115,14 +115,14 @@ public void testTransformRemoveEntry() { } public void testTransformEqualityOfMapsWithNullValues() { - Map underlying = Maps.newHashMap(); + Map underlying = Maps.newHashMap(); underlying.put("a", null); underlying.put("b", ""); Map map = Maps.transformValues( underlying, - new Function() { + new Function<@Nullable String, Boolean>() { @Override public Boolean apply(@Nullable String from) { return from == null; diff --git a/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java b/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java index 9f4be6cf9426..77abcc3e0734 100644 --- a/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java @@ -29,6 +29,7 @@ import com.google.common.testing.SerializableTester; import java.util.Arrays; import java.util.Map; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link ArrayTable}. @@ -161,7 +162,7 @@ public void testHashCode() { @Override public void testRow() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Map expected = Maps.newHashMap(); + Map expected = Maps.newHashMap(); expected.put(1, 'a'); expected.put(3, 'c'); expected.put(2, null); @@ -171,7 +172,7 @@ public void testRow() { @Override public void testColumn() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Map expected = Maps.newHashMap(); + Map expected = Maps.newHashMap(); expected.put("foo", 'a'); expected.put("bar", 'b'); expected.put("cat", null); diff --git a/android/guava-tests/test/com/google/common/collect/Collections2Test.java b/android/guava-tests/test/com/google/common/collect/Collections2Test.java index 3c2920b46524..b14550a4719d 100644 --- a/android/guava-tests/test/com/google/common/collect/Collections2Test.java +++ b/android/guava-tests/test/com/google/common/collect/Collections2Test.java @@ -482,7 +482,7 @@ private void assertPermutationsCount(int expected, Collection> permu } public void testToStringImplWithNullEntries() throws Exception { - List list = Lists.newArrayList(); + List<@Nullable String> list = Lists.newArrayList(); list.add("foo"); list.add(null); diff --git a/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java b/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java index 9994c4bcec11..d2b1d488878d 100644 --- a/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java +++ b/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java @@ -25,6 +25,7 @@ import java.util.Arrays; import java.util.List; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@code GeneralRange}. @@ -34,9 +35,9 @@ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public class GeneralRangeTest extends TestCase { - private static final Ordering ORDERING = Ordering.natural().nullsFirst(); + private static final Ordering<@Nullable Integer> ORDERING = Ordering.natural().nullsFirst(); - private static final List IN_ORDER_VALUES = Arrays.asList(null, 1, 2, 3, 4, 5); + private static final List<@Nullable Integer> IN_ORDER_VALUES = Arrays.asList(null, 1, 2, 3, 4, 5); public void testCreateEmptyRangeFails() { for (BoundType lboundType : BoundType.values()) { @@ -53,7 +54,7 @@ public void testCreateEmptyRangeFails() { public void testCreateEmptyRangeOpenOpenFails() { for (Integer i : IN_ORDER_VALUES) { try { - GeneralRange.range(ORDERING, i, OPEN, i, OPEN); + GeneralRange.<@Nullable Integer>range(ORDERING, i, OPEN, i, OPEN); fail("Expected IAE"); } catch (IllegalArgumentException expected) { } @@ -62,7 +63,7 @@ public void testCreateEmptyRangeOpenOpenFails() { public void testCreateEmptyRangeClosedOpenSucceeds() { for (Integer i : IN_ORDER_VALUES) { - GeneralRange range = GeneralRange.range(ORDERING, i, CLOSED, i, OPEN); + GeneralRange<@Nullable Integer> range = GeneralRange.range(ORDERING, i, CLOSED, i, OPEN); for (Integer j : IN_ORDER_VALUES) { assertFalse(range.contains(j)); } @@ -71,7 +72,7 @@ public void testCreateEmptyRangeClosedOpenSucceeds() { public void testCreateEmptyRangeOpenClosedSucceeds() { for (Integer i : IN_ORDER_VALUES) { - GeneralRange range = GeneralRange.range(ORDERING, i, OPEN, i, CLOSED); + GeneralRange<@Nullable Integer> range = GeneralRange.range(ORDERING, i, OPEN, i, CLOSED); for (Integer j : IN_ORDER_VALUES) { assertFalse(range.contains(j)); } @@ -80,7 +81,7 @@ public void testCreateEmptyRangeOpenClosedSucceeds() { public void testCreateSingletonRangeSucceeds() { for (Integer i : IN_ORDER_VALUES) { - GeneralRange range = GeneralRange.range(ORDERING, i, CLOSED, i, CLOSED); + GeneralRange<@Nullable Integer> range = GeneralRange.range(ORDERING, i, CLOSED, i, CLOSED); for (Integer j : IN_ORDER_VALUES) { assertEquals(Objects.equal(i, j), range.contains(j)); } @@ -88,7 +89,7 @@ public void testCreateSingletonRangeSucceeds() { } public void testSingletonRange() { - GeneralRange range = GeneralRange.range(ORDERING, 3, CLOSED, 3, CLOSED); + GeneralRange<@Nullable Integer> range = GeneralRange.range(ORDERING, 3, CLOSED, 3, CLOSED); for (Integer i : IN_ORDER_VALUES) { assertEquals(ORDERING.compare(i, 3) == 0, range.contains(i)); } @@ -96,7 +97,7 @@ public void testSingletonRange() { public void testLowerRange() { for (BoundType lBoundType : BoundType.values()) { - GeneralRange range = GeneralRange.downTo(ORDERING, 3, lBoundType); + GeneralRange<@Nullable Integer> range = GeneralRange.downTo(ORDERING, 3, lBoundType); for (Integer i : IN_ORDER_VALUES) { assertEquals( ORDERING.compare(i, 3) > 0 || (ORDERING.compare(i, 3) == 0 && lBoundType == CLOSED), @@ -111,7 +112,7 @@ public void testLowerRange() { public void testUpperRange() { for (BoundType lBoundType : BoundType.values()) { - GeneralRange range = GeneralRange.upTo(ORDERING, 3, lBoundType); + GeneralRange<@Nullable Integer> range = GeneralRange.upTo(ORDERING, 3, lBoundType); for (Integer i : IN_ORDER_VALUES) { assertEquals( ORDERING.compare(i, 3) < 0 || (ORDERING.compare(i, 3) == 0 && lBoundType == CLOSED), @@ -128,7 +129,8 @@ public void testDoublyBoundedAgainstRange() { for (BoundType lboundType : BoundType.values()) { for (BoundType uboundType : BoundType.values()) { Range range = Range.range(2, lboundType, 4, uboundType); - GeneralRange gRange = GeneralRange.range(ORDERING, 2, lboundType, 4, uboundType); + GeneralRange<@Nullable Integer> gRange = + GeneralRange.range(ORDERING, 2, lboundType, 4, uboundType); for (Integer i : IN_ORDER_VALUES) { assertEquals(i != null && range.contains(i), gRange.contains(i)); } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java index af2978e4c247..36afc8f53a09 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java @@ -40,6 +40,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link ImmutableBiMap}. @@ -494,21 +495,22 @@ public void testOfEntries() { } public void testOfEntriesNull() { - Entry nullKey = entry(null, 23); + Entry<@Nullable Integer, Integer> nullKey = entry(null, 23); try { - ImmutableBiMap.ofEntries(nullKey); + ImmutableBiMap.ofEntries((Entry) nullKey); fail(); } catch (NullPointerException expected) { } - Entry nullValue = entry(23, null); + Entry nullValue = + ImmutableBiMapTest.<@Nullable Integer>entry(23, null); try { - ImmutableBiMap.ofEntries(nullValue); + ImmutableBiMap.ofEntries((Entry) nullValue); fail(); } catch (NullPointerException expected) { } } - private static Entry entry(T key, T value) { + private static Entry entry(T key, T value) { return new AbstractMap.SimpleImmutableEntry<>(key, value); } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java index cc8b3764149a..59c8e3361214 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java @@ -39,6 +39,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link ImmutableListMultimap}. @@ -106,7 +107,7 @@ public void testBuilder_withImmutableEntryAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableEntry() { @@ -216,8 +217,8 @@ public void testBuilderPutAllMultimapWithDuplicates() { } public void testBuilderPutNullKey() { - Multimap toPut = LinkedListMultimap.create(); - toPut.put("foo", null); + Multimap<@Nullable String, Integer> toPut = LinkedListMultimap.create(); + toPut.put(null, 1); ImmutableListMultimap.Builder builder = ImmutableListMultimap.builder(); try { builder.put(null, 1); @@ -235,15 +236,15 @@ public void testBuilderPutNullKey() { } catch (NullPointerException expected) { } try { - builder.putAll(toPut); + builder.putAll((Multimap) toPut); fail(); } catch (NullPointerException expected) { } } public void testBuilderPutNullValue() { - Multimap toPut = LinkedListMultimap.create(); - toPut.put(null, 1); + Multimap toPut = LinkedListMultimap.create(); + toPut.put("foo", null); ImmutableListMultimap.Builder builder = ImmutableListMultimap.builder(); try { builder.put("foo", null); @@ -261,7 +262,7 @@ public void testBuilderPutNullValue() { } catch (NullPointerException expected) { } try { - builder.putAll(toPut); + builder.putAll((Multimap) toPut); fail(); } catch (NullPointerException expected) { } @@ -372,10 +373,10 @@ public void testCopyOfImmutableListMultimap() { } public void testCopyOfNullKey() { - ArrayListMultimap input = ArrayListMultimap.create(); + ArrayListMultimap<@Nullable String, Integer> input = ArrayListMultimap.create(); input.put(null, 1); try { - ImmutableListMultimap.copyOf(input); + ImmutableListMultimap.copyOf((ArrayListMultimap) input); fail(); } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java index c333d5b09233..7fe9305ac6b9 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java @@ -46,6 +46,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link ImmutableList}. @@ -241,9 +242,9 @@ public void testCopyOf_nullArray() { } public void testCopyOf_arrayContainingOnlyNull() { - String[] array = new String[] {null}; + @Nullable String[] array = new @Nullable String[] {null}; try { - ImmutableList.copyOf(array); + ImmutableList.copyOf((String[]) array); fail(); } catch (NullPointerException expected) { } @@ -273,9 +274,9 @@ public void testCopyOf_collection_general() { } public void testCopyOf_collectionContainingNull() { - Collection c = MinimalCollection.of("a", null, "b"); + Collection<@Nullable String> c = MinimalCollection.of("a", null, "b"); try { - ImmutableList.copyOf(c); + ImmutableList.copyOf((Collection) c); fail(); } catch (NullPointerException expected) { } @@ -300,9 +301,10 @@ public void testCopyOf_iterator_general() { } public void testCopyOf_iteratorContainingNull() { - Iterator iterator = asList("a", null, "b").iterator(); + Iterator<@Nullable String> iterator = + Arrays.<@Nullable String>asList("a", null, "b").iterator(); try { - ImmutableList.copyOf(iterator); + ImmutableList.copyOf((Iterator) iterator); fail(); } catch (NullPointerException expected) { } @@ -367,10 +369,10 @@ public void testCopyOf_shortcut_immutableList() { } public void testBuilderAddArrayHandlesNulls() { - String[] elements = {"a", null, "b"}; + @Nullable String[] elements = new @Nullable String[] {"a", null, "b"}; ImmutableList.Builder builder = ImmutableList.builder(); try { - builder.add(elements); + builder.add((String[]) elements); fail("Expected NullPointerException"); } catch (NullPointerException expected) { } @@ -388,10 +390,10 @@ public void testBuilderAddArrayHandlesNulls() { } public void testBuilderAddCollectionHandlesNulls() { - List elements = Arrays.asList("a", null, "b"); + List<@Nullable String> elements = Arrays.asList("a", null, "b"); ImmutableList.Builder builder = ImmutableList.builder(); try { - builder.addAll(elements); + builder.addAll((List) elements); fail("Expected NullPointerException"); } catch (NullPointerException expected) { } @@ -419,9 +421,9 @@ public void testSortedCopyOf_natural_singleton() { } public void testSortedCopyOf_natural_containsNull() { - Collection c = MinimalCollection.of(1, 3, null, 2); + Collection<@Nullable Integer> c = MinimalCollection.of(1, 3, null, 2); try { - ImmutableList.sortedCopyOf(c); + ImmutableList.sortedCopyOf((Collection) c); fail("Expected NPE"); } catch (NullPointerException expected) { } @@ -446,9 +448,9 @@ public void testSortedCopyOf_singleton() { } public void testSortedCopyOf_containsNull() { - Collection c = MinimalCollection.of("a", "b", "A", null, "c"); + Collection<@Nullable String> c = MinimalCollection.of("a", "b", "A", null, "c"); try { - ImmutableList.sortedCopyOf(String.CASE_INSENSITIVE_ORDER, c); + ImmutableList.sortedCopyOf(String.CASE_INSENSITIVE_ORDER, (Collection) c); fail("Expected NPE"); } catch (NullPointerException expected) { } @@ -625,9 +627,9 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } builder = ImmutableList.builder(); - List listWithNulls = asList("a", null, "b"); + List<@Nullable String> listWithNulls = asList("a", null, "b"); try { - builder.addAll(listWithNulls); + builder.addAll((List) listWithNulls); fail("expected NullPointerException"); } catch (NullPointerException expected) { } @@ -640,9 +642,9 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } catch (NullPointerException expected) { } - Iterable iterableWithNulls = MinimalIterable.of("a", null, "b"); + Iterable<@Nullable String> iterableWithNulls = MinimalIterable.of("a", null, "b"); try { - builder.addAll(iterableWithNulls); + builder.addAll((Iterable) iterableWithNulls); fail("expected NullPointerException"); } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java index c5dccbdde8e5..95f690e96ade 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMapTest.java @@ -298,7 +298,7 @@ public void testBuilder_withImmutableEntryAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableEntry() { @@ -1069,15 +1069,15 @@ public void testEquals() { } public void testOfEntriesNull() { - Entry nullKey = entry(null, 23); + Entry<@Nullable Integer, @Nullable Integer> nullKey = entry(null, 23); try { - ImmutableMap.ofEntries(nullKey); + ImmutableMap.ofEntries((Entry) nullKey); fail(); } catch (NullPointerException expected) { } - Entry nullValue = entry(23, null); + Entry<@Nullable Integer, @Nullable Integer> nullValue = entry(23, null); try { - ImmutableMap.ofEntries(nullValue); + ImmutableMap.ofEntries((Entry) nullValue); fail(); } catch (NullPointerException expected) { } @@ -1095,7 +1095,7 @@ private static Map map(T... keysAndValues) { return map; } - private static Entry entry(T key, T value) { + private static Entry entry(T key, T value) { return new AbstractMap.SimpleImmutableEntry<>(key, value); } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java index 57be835c72fa..6eba7af61c87 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java @@ -28,6 +28,7 @@ import java.util.Arrays; import java.util.Map.Entry; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link ImmutableMultimap}. @@ -59,7 +60,7 @@ public void testBuilder_withImmutableEntryAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableEntry() { diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java index 27100cc06af0..1bf1f4f841f5 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java @@ -45,6 +45,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link ImmutableMultiset}. @@ -208,9 +209,9 @@ public void testCreation_arrayOfArray() { } public void testCreation_arrayContainingOnlyNull() { - String[] array = new String[] {null}; + @Nullable String[] array = new @Nullable String[] {null}; try { - ImmutableMultiset.copyOf(array); + ImmutableMultiset.copyOf((String[]) array); fail(); } catch (NullPointerException expected) { } @@ -236,9 +237,9 @@ public void testCopyOf_collection_general() { } public void testCopyOf_collectionContainingNull() { - Collection c = MinimalCollection.of("a", null, "b"); + Collection<@Nullable String> c = MinimalCollection.of("a", null, "b"); try { - ImmutableMultiset.copyOf(c); + ImmutableMultiset.copyOf((Collection) c); fail(); } catch (NullPointerException expected) { } @@ -421,9 +422,9 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } builder = ImmutableMultiset.builder(); - List listWithNulls = asList("a", null, "b"); + List<@Nullable String> listWithNulls = asList("a", null, "b"); try { - builder.addAll(listWithNulls); + builder.addAll((List) listWithNulls); fail("expected NullPointerException"); } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java index f8cafc79725c..33c6c0f0c570 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java @@ -39,6 +39,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link ImmutableSetMultimap}. @@ -106,7 +107,7 @@ public void testBuilder_withImmutableEntryAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableEntry() { @@ -204,8 +205,8 @@ public void testBuilderPutAllMultimapWithDuplicates() { } public void testBuilderPutNullKey() { - Multimap toPut = LinkedListMultimap.create(); - toPut.put("foo", null); + Multimap<@Nullable String, Integer> toPut = LinkedListMultimap.create(); + toPut.put(null, 1); ImmutableSetMultimap.Builder builder = ImmutableSetMultimap.builder(); try { builder.put(null, 1); @@ -223,15 +224,15 @@ public void testBuilderPutNullKey() { } catch (NullPointerException expected) { } try { - builder.putAll(toPut); + builder.putAll((Multimap) toPut); fail(); } catch (NullPointerException expected) { } } public void testBuilderPutNullValue() { - Multimap toPut = LinkedListMultimap.create(); - toPut.put(null, 1); + Multimap toPut = LinkedListMultimap.create(); + toPut.put("foo", null); ImmutableSetMultimap.Builder builder = ImmutableSetMultimap.builder(); try { builder.put("foo", null); @@ -249,7 +250,7 @@ public void testBuilderPutNullValue() { } catch (NullPointerException expected) { } try { - builder.putAll(toPut); + builder.putAll((Multimap) toPut); fail(); } catch (NullPointerException expected) { } @@ -385,10 +386,10 @@ public void testCopyOfImmutableSetMultimap() { } public void testCopyOfNullKey() { - HashMultimap input = HashMultimap.create(); + HashMultimap<@Nullable String, Integer> input = HashMultimap.create(); input.put(null, 1); try { - ImmutableSetMultimap.copyOf(input); + ImmutableSetMultimap.copyOf((Multimap) input); fail(); } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index 515ca0d9ff83..1bdc6092f4f7 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -41,6 +41,7 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import junit.framework.Test; @@ -180,7 +181,7 @@ public void testBuilder_withImmutableEntryAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableEntry() { @@ -676,13 +677,13 @@ public void testNullPointers() { public void testNullValuesInCopyOfMap() { for (int i = 1; i <= 10; i++) { for (int j = 0; j < i; j++) { - Map source = new TreeMap<>(); + Map source = new TreeMap<>(); for (int k = 0; k < i; k++) { source.put(k, k); } source.put(j, null); try { - ImmutableSortedMap.copyOf(source); + ImmutableSortedMap.copyOf((Map) source); fail("Expected NullPointerException in copyOf(" + source + ")"); } catch (NullPointerException expected) { } @@ -693,13 +694,13 @@ public void testNullValuesInCopyOfMap() { public void testNullValuesInCopyOfEntries() { for (int i = 1; i <= 10; i++) { for (int j = 0; j < i; j++) { - Map source = new TreeMap<>(); + Map source = new TreeMap<>(); for (int k = 0; k < i; k++) { source.put(k, k); } source.put(j, null); try { - ImmutableSortedMap.copyOf(source.entrySet()); + ImmutableSortedMap.copyOf((Set>) source.entrySet()); fail("Expected NullPointerException in copyOf(" + source.entrySet() + ")"); } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java index 3d3655d6b655..f3f4267e590d 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.SerializableTester; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests common methods in {@link ImmutableTable} @@ -102,7 +103,7 @@ public void testBuilder_withImmutableCellAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableCell() { diff --git a/android/guava-tests/test/com/google/common/collect/IterablesTest.java b/android/guava-tests/test/com/google/common/collect/IterablesTest.java index 27f30295a807..7bf229a1dd6c 100644 --- a/android/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -48,6 +48,7 @@ import java.util.SortedSet; import junit.framework.AssertionFailedError; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@code Iterables}. @@ -104,7 +105,7 @@ public Iterator iterator() { } public void test_contains_null_set_yes() { - Iterable set = Sets.newHashSet("a", null, "b"); + Iterable<@Nullable String> set = Sets.newHashSet("a", null, "b"); assertTrue(Iterables.contains(set, null)); } @@ -124,7 +125,7 @@ public void test_contains_null_iterable_no() { } public void test_contains_nonnull_set_yes() { - Iterable set = Sets.newHashSet("a", null, "b"); + Iterable<@Nullable String> set = Sets.newHashSet("a", null, "b"); assertTrue(Iterables.contains(set, "b")); } @@ -300,13 +301,13 @@ public Integer apply(String from) { } public void testPoorlyBehavedTransform() { - List input = asList("1", null, "3"); + List<@Nullable String> input = asList("1", null, "3"); Iterable result = Iterables.transform( input, - new Function() { + new Function<@Nullable String, Integer>() { @Override - public Integer apply(String from) { + public Integer apply(@Nullable String from) { return Integer.valueOf(from); } }); @@ -322,13 +323,13 @@ public Integer apply(String from) { } public void testNullFriendlyTransform() { - List input = asList(1, 2, null, 3); + List<@Nullable Integer> input = asList(1, 2, null, 3); Iterable result = Iterables.transform( input, - new Function() { + new Function<@Nullable Integer, String>() { @Override - public String apply(Integer from) { + public String apply(@Nullable Integer from) { return String.valueOf(from); } }); diff --git a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java index bf525d53b9cd..76ed1451d6cf 100644 --- a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -59,6 +59,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@code Iterators}. @@ -516,9 +517,9 @@ public void testNullFriendlyTransform() { Iterator result = Iterators.transform( input, - new Function() { + new Function<@Nullable Integer, String>() { @Override - public String apply(Integer from) { + public String apply(@Nullable Integer from) { return String.valueOf(from); } }); @@ -1524,7 +1525,7 @@ public void testAdvance_illegalArgument() { } public void testFrequency() { - List list = newArrayList("a", null, "b", null, "a", null); + List<@Nullable String> list = newArrayList("a", null, "b", null, "a", null); assertEquals(2, Iterators.frequency(list.iterator(), "a")); assertEquals(1, Iterators.frequency(list.iterator(), "b")); assertEquals(0, Iterators.frequency(list.iterator(), "c")); diff --git a/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java b/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java index 1a42d8f20d8d..e234b0f163d4 100644 --- a/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java @@ -44,6 +44,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit tests for {@code LinkedHashMultimap}. @@ -207,7 +208,7 @@ public void testOrderingUpdates() { } public void testToStringNullExact() { - Multimap multimap = LinkedHashMultimap.create(); + Multimap<@Nullable String, @Nullable Integer> multimap = LinkedHashMultimap.create(); multimap.put("foo", 3); multimap.put("foo", -1); @@ -287,7 +288,7 @@ public void testGetIteration() { MODIFIABLE, newLinkedHashSet(asList(2, 3, 4, 7, 8)), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -318,7 +319,7 @@ public void testEntriesIteration() { new IteratorTester>( 6, MODIFIABLE, set, IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator> newTargetIterator() { @@ -343,7 +344,7 @@ public void testKeysIteration() { MODIFIABLE, newArrayList("foo", "foo", "bar", "bar", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -365,7 +366,7 @@ protected void verify(List elements) { public void testValuesIteration() { new IteratorTester( 6, MODIFIABLE, newArrayList(2, 3, 4, 5, 6), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -390,7 +391,7 @@ public void testKeySetIteration() { MODIFIABLE, newLinkedHashSet(asList("foo", "bar", "baz", "dog", "cat")), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -424,7 +425,7 @@ public void testAsSetIteration() { Maps.immutableEntry("cat", (Collection) Sets.newHashSet(12, 13, 14)))); new IteratorTester>>( 6, MODIFIABLE, set, IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator>> newTargetIterator() { diff --git a/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java index 6e7fa34954e2..a8c6fd83a11e 100644 --- a/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java @@ -49,6 +49,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@code LinkedListMultimap}. @@ -353,7 +354,7 @@ public void testEntriesIteration() { Maps.immutableEntry("foo", 6)); new ListIteratorTester>( 3, addItems, ImmutableList.of(SUPPORTS_REMOVE), list, startIndex) { - private LinkedListMultimap multimap; + private @Nullable LinkedListMultimap multimap; @Override protected ListIterator> newTargetIterator() { @@ -379,7 +380,7 @@ public void testKeysIteration() { MODIFIABLE, newArrayList("foo", "foo", "bar", "bar", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -408,7 +409,7 @@ public void testValuesIteration() { ImmutableList.of(SUPPORTS_REMOVE, SUPPORTS_SET), Lists.newArrayList(2, 3, 4, 5, 6), startIndex) { - private LinkedListMultimap multimap; + private @Nullable LinkedListMultimap multimap; @Override protected ListIterator newTargetIterator() { @@ -435,7 +436,7 @@ public void testKeySetIteration() { MODIFIABLE, newLinkedHashSet(asList("foo", "bar", "baz", "dog", "cat")), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -470,7 +471,7 @@ public void testAsSetIteration() { new IteratorTester>>( 6, MODIFIABLE, set, IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator>> newTargetIterator() { diff --git a/android/guava-tests/test/com/google/common/collect/ListsImplTest.java b/android/guava-tests/test/com/google/common/collect/ListsImplTest.java index b97f27278eea..4e2788b3f4cc 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsImplTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsImplTest.java @@ -33,6 +33,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** Tests the package level *impl methods directly using various types of lists. */ @GwtCompatible(emulated = true) @@ -96,7 +97,7 @@ private static TestSuite createExampleSuite(ListExample example) { return resultSuite; } - private ListExample example; + private @Nullable ListExample example; private ListExample getExample() { // because sometimes one version with a null example is created. @@ -142,7 +143,7 @@ public void testEqualsImpl() { assertThat(Lists.equalsImpl(base, copy)).isTrue(); assertThat(Lists.equalsImpl(base, otherType)).isTrue(); - List unEqualItems = + List<@Nullable Object> unEqualItems = Arrays.asList(outOfOrder, diffValue, diffLength, empty, null, new Object()); for (Object other : unEqualItems) { assertWithMessage("%s", other).that(Lists.equalsImpl(base, other)).isFalse(); diff --git a/android/guava-tests/test/com/google/common/collect/MapsTest.java b/android/guava-tests/test/com/google/common/collect/MapsTest.java index e920f5f2a423..506939340670 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsTest.java @@ -61,6 +61,7 @@ import java.util.TreeMap; import java.util.concurrent.ConcurrentMap; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@code Maps}. @@ -372,7 +373,7 @@ public void testEnumMapWithInitialEmptyMap() { } public void testToStringImplWithNullKeys() throws Exception { - Map hashmap = Maps.newHashMap(); + Map<@Nullable String, String> hashmap = Maps.newHashMap(); hashmap.put("foo", "bar"); hashmap.put(null, "baz"); @@ -380,7 +381,7 @@ public void testToStringImplWithNullKeys() throws Exception { } public void testToStringImplWithNullValues() throws Exception { - Map hashmap = Maps.newHashMap(); + Map hashmap = Maps.newHashMap(); hashmap.put("foo", "bar"); hashmap.put("baz", null); @@ -956,9 +957,9 @@ public void testToMapWithDuplicateKeys() { } public void testToMapWithNullKeys() { - Iterable strings = Arrays.asList("one", null, "three"); + Iterable<@Nullable String> strings = Arrays.asList("one", null, "three"); try { - Maps.toMap(strings, Functions.constant("foo")); + Maps.toMap((Iterable) strings, Functions.constant("foo")); fail(); } catch (NullPointerException expected) { } @@ -1019,9 +1020,9 @@ public void testUniqueIndexDuplicates() { /** Null values are not allowed. */ public void testUniqueIndexNullValue() { - List listWithNull = Lists.newArrayList((String) null); + List<@Nullable String> listWithNull = Lists.newArrayList((String) null); try { - Maps.uniqueIndex(listWithNull, Functions.constant(1)); + Maps.uniqueIndex((List) listWithNull, Functions.constant(1)); fail(); } catch (NullPointerException expected) { } @@ -1192,12 +1193,12 @@ public void testAsConverter_isAView() throws Exception { } public void testAsConverter_withNullMapping() throws Exception { - BiMap biMap = HashBiMap.create(); + BiMap biMap = HashBiMap.create(); biMap.put("one", 1); biMap.put("two", 2); biMap.put("three", null); try { - Maps.asConverter(biMap).convert("three"); + Maps.asConverter((BiMap) biMap).convert("three"); fail(); } catch (IllegalArgumentException expected) { } @@ -1308,7 +1309,8 @@ public void testImmutableEntry() { } public void testImmutableEntryNull() { - Entry e = Maps.immutableEntry((String) null, (Integer) null); + Entry<@Nullable String, @Nullable Integer> e = + Maps.immutableEntry((String) null, (Integer) null); assertNull(e.getKey()); assertNull(e.getValue()); try { diff --git a/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java b/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java index 87ba989f95fb..049c1ea7df85 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java @@ -224,14 +224,14 @@ public void testTransformRemoveEntry() { } public void testTransformEqualityOfMapsWithNullValues() { - Map underlying = Maps.newHashMap(); + Map underlying = Maps.newHashMap(); underlying.put("a", null); underlying.put("b", ""); - Map map = + Map<@Nullable String, Boolean> map = Maps.transformValues( underlying, - new Function() { + new Function<@Nullable String, Boolean>() { @Override public Boolean apply(@Nullable String from) { return from == null; diff --git a/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java b/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java index 0d922df46a18..71e4ac4cd75e 100644 --- a/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java +++ b/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java @@ -48,6 +48,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link MinMaxPriorityQueue}. @@ -510,7 +511,7 @@ private > void runIterator(final List values, int ste IteratorFeature.MODIFIABLE, Lists.newLinkedList(values), IteratorTester.KnownOrder.UNKNOWN_ORDER) { - private MinMaxPriorityQueue mmHeap; + private @Nullable MinMaxPriorityQueue mmHeap; @Override protected Iterator newTargetIterator() { @@ -946,7 +947,8 @@ private static void assertIntactUsingStartedWith( } } - private static void assertEqualsUsingSeed(long seed, Object expected, Object actual) { + private static void assertEqualsUsingSeed( + long seed, @Nullable Object expected, @Nullable Object actual) { if (!equal(actual, expected)) { // fail(), but with the JUnit-supplied message. assertEquals("Using seed " + seed, expected, actual); @@ -954,7 +956,7 @@ private static void assertEqualsUsingSeed(long seed, Object expected, Object act } private static void assertEqualsUsingStartedWith( - Collection startedWith, Object expected, Object actual) { + Collection startedWith, @Nullable Object expected, @Nullable Object actual) { if (!equal(actual, expected)) { // fail(), but with the JUnit-supplied message. assertEquals("Started with " + startedWith, expected, actual); diff --git a/android/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java b/android/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java index 15c0901b15bc..792520f8881b 100644 --- a/android/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java @@ -32,11 +32,11 @@ public class MultisetsImmutableEntryTest extends TestCase { private static final @Nullable String NE = null; - private static Entry entry(final E element, final int count) { + private static Entry entry(final E element, final int count) { return Multisets.immutableEntry(element, count); } - private static Entry control(E element, int count) { + private static Entry control(E element, int count) { return HashMultiset.create(Collections.nCopies(count, element)).entrySet().iterator().next(); } diff --git a/android/guava-tests/test/com/google/common/collect/OrderingTest.java b/android/guava-tests/test/com/google/common/collect/OrderingTest.java index eeb2b33e11e4..fabdc67a2150 100644 --- a/android/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/android/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -57,7 +57,7 @@ public class OrderingTest extends TestCase { private final Ordering numberOrdering = new NumberOrdering(); public void testAllEqual() { - Ordering comparator = Ordering.allEqual(); + Ordering<@Nullable Object> comparator = Ordering.allEqual(); assertSame(comparator, comparator.reverse()); assertEquals(0, comparator.compare(null, null)); @@ -74,19 +74,24 @@ public void testAllEqual() { // From https://github.com/google/guava/issues/1342 public void testComplicatedOrderingExample() { Integer nullInt = (Integer) null; - Ordering> example = - Ordering.natural().nullsFirst().reverse().lexicographical().reverse().nullsLast(); - List list1 = Lists.newArrayList(); - List list2 = Lists.newArrayList(1); - List list3 = Lists.newArrayList(1, 1); - List list4 = Lists.newArrayList(1, 2); - List list5 = Lists.newArrayList(1, null, 2); - List list6 = Lists.newArrayList(2); - List list7 = Lists.newArrayList(nullInt); - List list8 = Lists.newArrayList(nullInt, nullInt); - List> list = + Ordering<@Nullable Iterable<@Nullable Integer>> example = + Ordering.natural() + .nullsFirst() + .reverse() + .lexicographical() + .reverse() + .>nullsLast(); + List<@Nullable Integer> list1 = Lists.newArrayList(); + List<@Nullable Integer> list2 = Lists.newArrayList(1); + List<@Nullable Integer> list3 = Lists.newArrayList(1, 1); + List<@Nullable Integer> list4 = Lists.newArrayList(1, 2); + List<@Nullable Integer> list5 = Lists.newArrayList(1, null, 2); + List<@Nullable Integer> list6 = Lists.newArrayList(2); + List<@Nullable Integer> list7 = Lists.newArrayList(nullInt); + List<@Nullable Integer> list8 = Lists.newArrayList(nullInt, nullInt); + List<@Nullable List<@Nullable Integer>> list = Lists.newArrayList(list1, list2, list3, list4, list5, list6, list7, list8, null); - List> sorted = example.sortedCopy(list); + List<@Nullable List<@Nullable Integer>> sorted = example.sortedCopy(list); // [[null, null], [null], [1, null, 2], [1, 1], [1, 2], [1], [2], [], null] assertThat(sorted) @@ -912,7 +917,7 @@ private static void testExhaustively( verifyScenario(starter, 0); } - private static void verifyScenario(Scenario scenario, int level) { + private static void verifyScenario(Scenario scenario, int level) { scenario.testCompareTo(); scenario.testIsOrdered(); scenario.testMinAndMax(); @@ -930,7 +935,7 @@ private static void verifyScenario(Scenario scenario, int level) { * An aggregation of an ordering with a list (of size > 1) that should prove to be in strictly * increasing order according to that ordering. */ - private static class Scenario { + private static class Scenario { final Ordering ordering; final List strictlyOrderedList; final T[] emptyArray; @@ -1005,7 +1010,7 @@ void testSortedCopy() { private enum OrderingMutation { REVERSE { @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List newList = Lists.newArrayList(scenario.strictlyOrderedList); Collections.reverse(newList); return new Scenario(scenario.ordering.reverse(), newList, scenario.emptyArray); @@ -1013,7 +1018,7 @@ Scenario mutate(Scenario scenario) { }, NULLS_FIRST { @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List newList = Lists.newArrayList((T) null); for (T t : scenario.strictlyOrderedList) { if (t != null) { @@ -1025,7 +1030,7 @@ Scenario mutate(Scenario scenario) { }, NULLS_LAST { @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List newList = Lists.newArrayList(); for (T t : scenario.strictlyOrderedList) { if (t != null) { @@ -1038,12 +1043,12 @@ Scenario mutate(Scenario scenario) { }, ON_RESULT_OF { @Override - Scenario mutate(final Scenario scenario) { + Scenario mutate(final Scenario scenario) { Ordering ordering = scenario.ordering.onResultOf( new Function() { @Override - public T apply(@Nullable Integer from) { + public T apply(Integer from) { return scenario.strictlyOrderedList.get(from); } }); @@ -1057,7 +1062,7 @@ public T apply(@Nullable Integer from) { COMPOUND_THIS_WITH_NATURAL { @SuppressWarnings("unchecked") // raw array @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List> composites = Lists.newArrayList(); for (T t : scenario.strictlyOrderedList) { composites.add(new Composite(t, 1)); @@ -1074,7 +1079,7 @@ Scenario mutate(Scenario scenario) { COMPOUND_NATURAL_WITH_THIS { @SuppressWarnings("unchecked") // raw array @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List> composites = Lists.newArrayList(); for (T t : scenario.strictlyOrderedList) { composites.add(new Composite(t, 1)); @@ -1091,7 +1096,7 @@ Scenario mutate(Scenario scenario) { LEXICOGRAPHICAL { @SuppressWarnings("unchecked") // dang varargs @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List> words = Lists.newArrayList(); words.add(Collections.emptyList()); for (T t : scenario.strictlyOrderedList) { @@ -1106,14 +1111,14 @@ Scenario mutate(Scenario scenario) { }, ; - abstract Scenario mutate(Scenario scenario); + abstract Scenario mutate(Scenario scenario); } /** * A dummy object we create so that we can have something meaningful to have a compound ordering * over. */ - private static class Composite implements Comparable> { + private static class Composite implements Comparable> { final T value; final int rank; @@ -1129,7 +1134,7 @@ public int compareTo(Composite that) { return Ints.compare(rank, that.rank); } - static Function, T> getValueFunction() { + static Function, T> getValueFunction() { return new Function, T>() { @Override public T apply(Composite from) { @@ -1149,7 +1154,7 @@ public void testNullPointerExceptions() { tester.testAllPublicInstanceMethods(Ordering.usingToString().nullsFirst()); } - private static List shuffledCopy(List in, Random random) { + private static List shuffledCopy(List in, Random random) { List mutable = newArrayList(in); List out = newArrayList(); while (!mutable.isEmpty()) { diff --git a/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java b/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java index e732a88c4290..d070936c3bac 100644 --- a/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java @@ -30,6 +30,7 @@ import java.util.List; import java.util.NoSuchElementException; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link PeekingIterator}. @@ -50,9 +51,9 @@ public class PeekingIteratorTest extends TestCase { * PeekingIterator#remove()} removes the same elements as the reference's iterator {@code * #remove()}. */ - private static class PeekingIteratorTester extends IteratorTester { + private static class PeekingIteratorTester extends IteratorTester { private Iterable master; - private List targetList; + private @Nullable List targetList; public PeekingIteratorTester(Collection master) { super(master.size() + 3, MODIFIABLE, master, IteratorTester.KnownOrder.KNOWN_ORDER); @@ -74,7 +75,7 @@ protected void verify(List elements) { } } - private void actsLikeIteratorHelper(final List list) { + private void actsLikeIteratorHelper(final List list) { // Check with modifiable copies of the list new PeekingIteratorTester(list).test(); diff --git a/android/guava-tests/test/com/google/common/collect/RangeTest.java b/android/guava-tests/test/com/google/common/collect/RangeTest.java index cb18804a8bcd..cfc191716ad7 100644 --- a/android/guava-tests/test/com/google/common/collect/RangeTest.java +++ b/android/guava-tests/test/com/google/common/collect/RangeTest.java @@ -33,6 +33,7 @@ import java.util.List; import java.util.NoSuchElementException; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link Range}. @@ -675,15 +676,15 @@ public void testEncloseAll_empty() { } public void testEncloseAll_nullValue() { - List nullFirst = Lists.newArrayList(null, 0); + List<@Nullable Integer> nullFirst = Lists.newArrayList(null, 0); try { - Range.encloseAll(nullFirst); + Range.encloseAll((List) nullFirst); fail(); } catch (NullPointerException expected) { } - List nullNotFirst = Lists.newArrayList(0, null); + List<@Nullable Integer> nullNotFirst = Lists.newArrayList(0, null); try { - Range.encloseAll(nullNotFirst); + Range.encloseAll((List) nullNotFirst); fail(); } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java b/android/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java index 76086cef997c..3f1f75d78ac5 100644 --- a/android/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java +++ b/android/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java @@ -16,6 +16,7 @@ import com.google.common.annotations.GwtCompatible; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link RegularImmutableAsList}. @@ -32,7 +33,7 @@ public class RegularImmutableAsListTest extends TestCase { public void testDoesntCheckForNull() { ImmutableSet set = ImmutableSet.of(1, 2, 3); ImmutableList unused = - new RegularImmutableAsList(set, new Object[] {null, null, null}); + new RegularImmutableAsList(set, new @Nullable Object[] {null, null, null}); // shouldn't throw! } } diff --git a/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java b/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java index e3671bcb0277..d7a281ae8e33 100644 --- a/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java @@ -95,7 +95,8 @@ public void testRemoveUnsupported() { assertTrue(multiset.contains("a")); } - private static class NoRemoveMultiset extends AbstractMultiset implements Serializable { + private static class NoRemoveMultiset extends AbstractMultiset + implements Serializable { final Map backingMap = Maps.newHashMap(); @Override @@ -119,7 +120,7 @@ public int count(@Nullable Object element) { } @Override - public int add(@Nullable E element, int occurrences) { + public int add(E element, int occurrences) { checkArgument(occurrences >= 0); Integer frequency = backingMap.get(element); if (frequency == null) { diff --git a/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java b/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java index 65e83157678f..601709b105e6 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java @@ -63,16 +63,16 @@ public int compare(@Nullable String first, @Nullable String second) { } /** Decreasing integer values. A {@code null} comes before any non-null value. */ - private static final Comparator DECREASING_INT_COMPARATOR = - Ordering.natural().reverse().nullsFirst(); + private static final Comparator<@Nullable Integer> DECREASING_INT_COMPARATOR = + Ordering.natural().reverse().nullsFirst(); private SetMultimap create() { return TreeMultimap.create(StringLength.COMPARATOR, DECREASING_INT_COMPARATOR); } /** Create and populate a {@code TreeMultimap} with explicit comparators. */ - private TreeMultimap createPopulate() { - TreeMultimap multimap = + private TreeMultimap<@Nullable String, @Nullable Integer> createPopulate() { + TreeMultimap<@Nullable String, @Nullable Integer> multimap = TreeMultimap.create(StringLength.COMPARATOR, DECREASING_INT_COMPARATOR); multimap.put("google", 2); multimap.put("google", 6); @@ -115,25 +115,25 @@ public void testToString() { } public void testGetComparator() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertEquals(StringLength.COMPARATOR, multimap.keyComparator()); assertEquals(DECREASING_INT_COMPARATOR, multimap.valueComparator()); } public void testOrderedGet() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertThat(multimap.get(null)).containsExactly(7, 3, 1).inOrder(); assertThat(multimap.get("google")).containsExactly(6, 2).inOrder(); assertThat(multimap.get("tree")).containsExactly(null, 0).inOrder(); } public void testOrderedKeySet() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertThat(multimap.keySet()).containsExactly(null, "tree", "google").inOrder(); } public void testOrderedAsMapEntries() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); Iterator>> iterator = multimap.asMap().entrySet().iterator(); Entry> entry = iterator.next(); assertEquals(null, entry.getKey()); @@ -147,7 +147,7 @@ public void testOrderedAsMapEntries() { } public void testOrderedEntries() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertThat(multimap.entries()) .containsExactly( Maps.immutableEntry((String) null, 7), @@ -161,12 +161,12 @@ public void testOrderedEntries() { } public void testOrderedValues() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertThat(multimap.values()).containsExactly(7, 3, 1, null, 0, 6, 2).inOrder(); } public void testComparator() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertEquals(DECREASING_INT_COMPARATOR, multimap.get("foo").comparator()); assertEquals(DECREASING_INT_COMPARATOR, multimap.get("missing").comparator()); } @@ -187,8 +187,8 @@ public void testMultimapComparators() { } public void testSortedKeySet() { - TreeMultimap multimap = createPopulate(); - SortedSet keySet = multimap.keySet(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); + SortedSet<@Nullable String> keySet = multimap.keySet(); assertEquals(null, keySet.first()); assertEquals("google", keySet.last()); @@ -200,8 +200,9 @@ public void testSortedKeySet() { @GwtIncompatible // SerializableTester public void testExplicitComparatorSerialization() { - TreeMultimap multimap = createPopulate(); - TreeMultimap copy = SerializableTester.reserializeAndAssert(multimap); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> copy = + SerializableTester.reserializeAndAssert(multimap); assertThat(copy.values()).containsExactly(7, 3, 1, null, 0, 6, 2).inOrder(); assertThat(copy.keySet()).containsExactly(null, "tree", "google").inOrder(); assertEquals(multimap.keyComparator(), copy.keyComparator()); diff --git a/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java b/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java index 159545a984f5..0077b75d168a 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java @@ -41,6 +41,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link TreeMultiset}. @@ -298,7 +299,7 @@ public void testNullAcceptingComparator() throws Exception { assertThat(ms).containsExactly(null, null, null, "a", "b", "b").inOrder(); assertEquals(3, ms.count(null)); - SortedSet elementSet = ms.elementSet(); + SortedSet<@Nullable String> elementSet = ms.elementSet(); assertEquals(null, elementSet.first()); assertEquals("b", elementSet.last()); assertEquals(comparator, elementSet.comparator()); diff --git a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index 15d0557f3c8d..c8989d34d884 100644 --- a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -34,6 +34,7 @@ import java.util.List; import java.util.Set; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Base class for {@link ImmutableSet} and {@link ImmutableSortedSet} tests. @@ -139,9 +140,9 @@ public void testCopyOf_nullArray() { } public void testCopyOf_arrayContainingOnlyNull() { - String[] array = new String[] {null}; + @Nullable String[] array = new @Nullable String[] {null}; try { - copyOf(array); + copyOf((String[]) array); fail(); } catch (NullPointerException expected) { } @@ -176,9 +177,9 @@ public void testCopyOf_collection_general() { } public void testCopyOf_collectionContainingNull() { - Collection c = MinimalCollection.of("a", null, "b"); + Collection<@Nullable String> c = MinimalCollection.of("a", null, "b"); try { - copyOf(c); + copyOf((Collection) c); fail(); } catch (NullPointerException expected) { } @@ -226,9 +227,9 @@ public void testCopyOf_iterator_general() { } public void testCopyOf_iteratorContainingNull() { - Iterator c = Iterators.forArray("a", null, "b"); + Iterator<@Nullable String> c = Iterators.forArray("a", null, "b"); try { - copyOf(c); + copyOf((Iterator) c); fail(); } catch (NullPointerException expected) { } @@ -455,16 +456,16 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } builder = this.builder(); - List listWithNulls = asList("a", null, "b"); + List<@Nullable String> listWithNulls = asList("a", null, "b"); try { - builder.addAll(listWithNulls); + builder.addAll((List) listWithNulls); fail("expected NullPointerException"); // COV_NF_LINE } catch (NullPointerException expected) { } - Iterable iterableWithNulls = MinimalIterable.of("a", null, "b"); + Iterable<@Nullable String> iterableWithNulls = MinimalIterable.of("a", null, "b"); try { - builder.addAll(iterableWithNulls); + builder.addAll((Iterable) iterableWithNulls); fail("expected NullPointerException"); // COV_NF_LINE } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java b/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java index 4811080f977d..67ba8759d85d 100644 --- a/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractIteratorTest.java @@ -24,6 +24,7 @@ import java.util.Iterator; import java.util.NoSuchElementException; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@code AbstractIterator}. @@ -44,7 +45,7 @@ public void testDefaultBehaviorOfNextAndHasNext() { private int rep; @Override - public Integer computeNext() { + public @Nullable Integer computeNext() { switch (rep++) { case 0: return 0; @@ -89,7 +90,7 @@ public void testDefaultBehaviorOfPeek() { private int rep; @Override - public Integer computeNext() { + public @Nullable Integer computeNext() { switch (rep++) { case 0: return 0; @@ -160,7 +161,7 @@ public void testDefaultBehaviorOfPeekForEmptyIteration() { private boolean alreadyCalledEndOfData; @Override - public Integer computeNext() { + public @Nullable Integer computeNext() { if (alreadyCalledEndOfData) { fail("Should not have been invoked again"); } diff --git a/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java b/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java index a5460ba5718e..00af21e1248e 100644 --- a/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractMapEntryTest.java @@ -33,7 +33,8 @@ public class AbstractMapEntryTest extends TestCase { private static final @Nullable String NK = null; private static final @Nullable Integer NV = null; - private static Entry entry(final K key, final V value) { + private static Entry entry( + final K key, final V value) { return new AbstractMapEntry() { @Override public K getKey() { @@ -47,7 +48,8 @@ public V getValue() { }; } - private static Entry control(K key, V value) { + private static Entry control( + K key, V value) { return Collections.singletonMap(key, value).entrySet().iterator().next(); } diff --git a/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java b/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java index cf6c74eb9140..3a46bb4c3034 100644 --- a/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java @@ -115,14 +115,14 @@ public void testTransformRemoveEntry() { } public void testTransformEqualityOfMapsWithNullValues() { - Map underlying = Maps.newHashMap(); + Map underlying = Maps.newHashMap(); underlying.put("a", null); underlying.put("b", ""); Map map = Maps.transformValues( underlying, - new Function() { + new Function<@Nullable String, Boolean>() { @Override public Boolean apply(@Nullable String from) { return from == null; diff --git a/guava-tests/test/com/google/common/collect/ArrayTableTest.java b/guava-tests/test/com/google/common/collect/ArrayTableTest.java index 9f4be6cf9426..77abcc3e0734 100644 --- a/guava-tests/test/com/google/common/collect/ArrayTableTest.java +++ b/guava-tests/test/com/google/common/collect/ArrayTableTest.java @@ -29,6 +29,7 @@ import com.google.common.testing.SerializableTester; import java.util.Arrays; import java.util.Map; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link ArrayTable}. @@ -161,7 +162,7 @@ public void testHashCode() { @Override public void testRow() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Map expected = Maps.newHashMap(); + Map expected = Maps.newHashMap(); expected.put(1, 'a'); expected.put(3, 'c'); expected.put(2, null); @@ -171,7 +172,7 @@ public void testRow() { @Override public void testColumn() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Map expected = Maps.newHashMap(); + Map expected = Maps.newHashMap(); expected.put("foo", 'a'); expected.put("bar", 'b'); expected.put("cat", null); diff --git a/guava-tests/test/com/google/common/collect/Collections2Test.java b/guava-tests/test/com/google/common/collect/Collections2Test.java index 3c2920b46524..b14550a4719d 100644 --- a/guava-tests/test/com/google/common/collect/Collections2Test.java +++ b/guava-tests/test/com/google/common/collect/Collections2Test.java @@ -482,7 +482,7 @@ private void assertPermutationsCount(int expected, Collection> permu } public void testToStringImplWithNullEntries() throws Exception { - List list = Lists.newArrayList(); + List<@Nullable String> list = Lists.newArrayList(); list.add("foo"); list.add(null); diff --git a/guava-tests/test/com/google/common/collect/GeneralRangeTest.java b/guava-tests/test/com/google/common/collect/GeneralRangeTest.java index 9994c4bcec11..d2b1d488878d 100644 --- a/guava-tests/test/com/google/common/collect/GeneralRangeTest.java +++ b/guava-tests/test/com/google/common/collect/GeneralRangeTest.java @@ -25,6 +25,7 @@ import java.util.Arrays; import java.util.List; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@code GeneralRange}. @@ -34,9 +35,9 @@ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public class GeneralRangeTest extends TestCase { - private static final Ordering ORDERING = Ordering.natural().nullsFirst(); + private static final Ordering<@Nullable Integer> ORDERING = Ordering.natural().nullsFirst(); - private static final List IN_ORDER_VALUES = Arrays.asList(null, 1, 2, 3, 4, 5); + private static final List<@Nullable Integer> IN_ORDER_VALUES = Arrays.asList(null, 1, 2, 3, 4, 5); public void testCreateEmptyRangeFails() { for (BoundType lboundType : BoundType.values()) { @@ -53,7 +54,7 @@ public void testCreateEmptyRangeFails() { public void testCreateEmptyRangeOpenOpenFails() { for (Integer i : IN_ORDER_VALUES) { try { - GeneralRange.range(ORDERING, i, OPEN, i, OPEN); + GeneralRange.<@Nullable Integer>range(ORDERING, i, OPEN, i, OPEN); fail("Expected IAE"); } catch (IllegalArgumentException expected) { } @@ -62,7 +63,7 @@ public void testCreateEmptyRangeOpenOpenFails() { public void testCreateEmptyRangeClosedOpenSucceeds() { for (Integer i : IN_ORDER_VALUES) { - GeneralRange range = GeneralRange.range(ORDERING, i, CLOSED, i, OPEN); + GeneralRange<@Nullable Integer> range = GeneralRange.range(ORDERING, i, CLOSED, i, OPEN); for (Integer j : IN_ORDER_VALUES) { assertFalse(range.contains(j)); } @@ -71,7 +72,7 @@ public void testCreateEmptyRangeClosedOpenSucceeds() { public void testCreateEmptyRangeOpenClosedSucceeds() { for (Integer i : IN_ORDER_VALUES) { - GeneralRange range = GeneralRange.range(ORDERING, i, OPEN, i, CLOSED); + GeneralRange<@Nullable Integer> range = GeneralRange.range(ORDERING, i, OPEN, i, CLOSED); for (Integer j : IN_ORDER_VALUES) { assertFalse(range.contains(j)); } @@ -80,7 +81,7 @@ public void testCreateEmptyRangeOpenClosedSucceeds() { public void testCreateSingletonRangeSucceeds() { for (Integer i : IN_ORDER_VALUES) { - GeneralRange range = GeneralRange.range(ORDERING, i, CLOSED, i, CLOSED); + GeneralRange<@Nullable Integer> range = GeneralRange.range(ORDERING, i, CLOSED, i, CLOSED); for (Integer j : IN_ORDER_VALUES) { assertEquals(Objects.equal(i, j), range.contains(j)); } @@ -88,7 +89,7 @@ public void testCreateSingletonRangeSucceeds() { } public void testSingletonRange() { - GeneralRange range = GeneralRange.range(ORDERING, 3, CLOSED, 3, CLOSED); + GeneralRange<@Nullable Integer> range = GeneralRange.range(ORDERING, 3, CLOSED, 3, CLOSED); for (Integer i : IN_ORDER_VALUES) { assertEquals(ORDERING.compare(i, 3) == 0, range.contains(i)); } @@ -96,7 +97,7 @@ public void testSingletonRange() { public void testLowerRange() { for (BoundType lBoundType : BoundType.values()) { - GeneralRange range = GeneralRange.downTo(ORDERING, 3, lBoundType); + GeneralRange<@Nullable Integer> range = GeneralRange.downTo(ORDERING, 3, lBoundType); for (Integer i : IN_ORDER_VALUES) { assertEquals( ORDERING.compare(i, 3) > 0 || (ORDERING.compare(i, 3) == 0 && lBoundType == CLOSED), @@ -111,7 +112,7 @@ public void testLowerRange() { public void testUpperRange() { for (BoundType lBoundType : BoundType.values()) { - GeneralRange range = GeneralRange.upTo(ORDERING, 3, lBoundType); + GeneralRange<@Nullable Integer> range = GeneralRange.upTo(ORDERING, 3, lBoundType); for (Integer i : IN_ORDER_VALUES) { assertEquals( ORDERING.compare(i, 3) < 0 || (ORDERING.compare(i, 3) == 0 && lBoundType == CLOSED), @@ -128,7 +129,8 @@ public void testDoublyBoundedAgainstRange() { for (BoundType lboundType : BoundType.values()) { for (BoundType uboundType : BoundType.values()) { Range range = Range.range(2, lboundType, 4, uboundType); - GeneralRange gRange = GeneralRange.range(ORDERING, 2, lboundType, 4, uboundType); + GeneralRange<@Nullable Integer> gRange = + GeneralRange.range(ORDERING, 2, lboundType, 4, uboundType); for (Integer i : IN_ORDER_VALUES) { assertEquals(i != null && range.contains(i), gRange.contains(i)); } diff --git a/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java index b567ef0e3b69..0b2d1296d667 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableBiMapTest.java @@ -47,6 +47,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link ImmutableBiMap}. @@ -520,21 +521,22 @@ public void testOfEntries() { } public void testOfEntriesNull() { - Entry nullKey = entry(null, 23); + Entry<@Nullable Integer, Integer> nullKey = entry(null, 23); try { - ImmutableBiMap.ofEntries(nullKey); + ImmutableBiMap.ofEntries((Entry) nullKey); fail(); } catch (NullPointerException expected) { } - Entry nullValue = entry(23, null); + Entry nullValue = + ImmutableBiMapTest.<@Nullable Integer>entry(23, null); try { - ImmutableBiMap.ofEntries(nullValue); + ImmutableBiMap.ofEntries((Entry) nullValue); fail(); } catch (NullPointerException expected) { } } - private static Entry entry(T key, T value) { + private static Entry entry(T key, T value) { return new AbstractMap.SimpleImmutableEntry<>(key, value); } diff --git a/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java index f2166336c958..acd02621bb5d 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java @@ -45,6 +45,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link ImmutableListMultimap}. @@ -112,7 +113,7 @@ public void testBuilder_withImmutableEntryAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableEntry() { @@ -222,8 +223,8 @@ public void testBuilderPutAllMultimapWithDuplicates() { } public void testBuilderPutNullKey() { - Multimap toPut = LinkedListMultimap.create(); - toPut.put("foo", null); + Multimap<@Nullable String, Integer> toPut = LinkedListMultimap.create(); + toPut.put(null, 1); ImmutableListMultimap.Builder builder = ImmutableListMultimap.builder(); try { builder.put(null, 1); @@ -241,15 +242,15 @@ public void testBuilderPutNullKey() { } catch (NullPointerException expected) { } try { - builder.putAll(toPut); + builder.putAll((Multimap) toPut); fail(); } catch (NullPointerException expected) { } } public void testBuilderPutNullValue() { - Multimap toPut = LinkedListMultimap.create(); - toPut.put(null, 1); + Multimap toPut = LinkedListMultimap.create(); + toPut.put("foo", null); ImmutableListMultimap.Builder builder = ImmutableListMultimap.builder(); try { builder.put("foo", null); @@ -267,7 +268,7 @@ public void testBuilderPutNullValue() { } catch (NullPointerException expected) { } try { - builder.putAll(toPut); + builder.putAll((Multimap) toPut); fail(); } catch (NullPointerException expected) { } @@ -378,10 +379,10 @@ public void testCopyOfImmutableListMultimap() { } public void testCopyOfNullKey() { - ArrayListMultimap input = ArrayListMultimap.create(); + ArrayListMultimap<@Nullable String, Integer> input = ArrayListMultimap.create(); input.put(null, 1); try { - ImmutableListMultimap.copyOf(input); + ImmutableListMultimap.copyOf((ArrayListMultimap) input); fail(); } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/ImmutableListTest.java b/guava-tests/test/com/google/common/collect/ImmutableListTest.java index eed63d403cfd..d804778b5fb6 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableListTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableListTest.java @@ -47,6 +47,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link ImmutableList}. @@ -242,9 +243,9 @@ public void testCopyOf_nullArray() { } public void testCopyOf_arrayContainingOnlyNull() { - String[] array = new String[] {null}; + @Nullable String[] array = new @Nullable String[] {null}; try { - ImmutableList.copyOf(array); + ImmutableList.copyOf((String[]) array); fail(); } catch (NullPointerException expected) { } @@ -274,9 +275,9 @@ public void testCopyOf_collection_general() { } public void testCopyOf_collectionContainingNull() { - Collection c = MinimalCollection.of("a", null, "b"); + Collection<@Nullable String> c = MinimalCollection.of("a", null, "b"); try { - ImmutableList.copyOf(c); + ImmutableList.copyOf((Collection) c); fail(); } catch (NullPointerException expected) { } @@ -301,9 +302,10 @@ public void testCopyOf_iterator_general() { } public void testCopyOf_iteratorContainingNull() { - Iterator iterator = asList("a", null, "b").iterator(); + Iterator<@Nullable String> iterator = + Arrays.<@Nullable String>asList("a", null, "b").iterator(); try { - ImmutableList.copyOf(iterator); + ImmutableList.copyOf((Iterator) iterator); fail(); } catch (NullPointerException expected) { } @@ -368,10 +370,10 @@ public void testCopyOf_shortcut_immutableList() { } public void testBuilderAddArrayHandlesNulls() { - String[] elements = {"a", null, "b"}; + @Nullable String[] elements = new @Nullable String[] {"a", null, "b"}; ImmutableList.Builder builder = ImmutableList.builder(); try { - builder.add(elements); + builder.add((String[]) elements); fail("Expected NullPointerException"); } catch (NullPointerException expected) { } @@ -389,10 +391,10 @@ public void testBuilderAddArrayHandlesNulls() { } public void testBuilderAddCollectionHandlesNulls() { - List elements = Arrays.asList("a", null, "b"); + List<@Nullable String> elements = Arrays.asList("a", null, "b"); ImmutableList.Builder builder = ImmutableList.builder(); try { - builder.addAll(elements); + builder.addAll((List) elements); fail("Expected NullPointerException"); } catch (NullPointerException expected) { } @@ -420,9 +422,9 @@ public void testSortedCopyOf_natural_singleton() { } public void testSortedCopyOf_natural_containsNull() { - Collection c = MinimalCollection.of(1, 3, null, 2); + Collection<@Nullable Integer> c = MinimalCollection.of(1, 3, null, 2); try { - ImmutableList.sortedCopyOf(c); + ImmutableList.sortedCopyOf((Collection) c); fail("Expected NPE"); } catch (NullPointerException expected) { } @@ -447,9 +449,9 @@ public void testSortedCopyOf_singleton() { } public void testSortedCopyOf_containsNull() { - Collection c = MinimalCollection.of("a", "b", "A", null, "c"); + Collection<@Nullable String> c = MinimalCollection.of("a", "b", "A", null, "c"); try { - ImmutableList.sortedCopyOf(String.CASE_INSENSITIVE_ORDER, c); + ImmutableList.sortedCopyOf(String.CASE_INSENSITIVE_ORDER, (Collection) c); fail("Expected NPE"); } catch (NullPointerException expected) { } @@ -623,9 +625,9 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } builder = ImmutableList.builder(); - List listWithNulls = asList("a", null, "b"); + List<@Nullable String> listWithNulls = asList("a", null, "b"); try { - builder.addAll(listWithNulls); + builder.addAll((List) listWithNulls); fail("expected NullPointerException"); } catch (NullPointerException expected) { } @@ -638,9 +640,9 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } catch (NullPointerException expected) { } - Iterable iterableWithNulls = MinimalIterable.of("a", null, "b"); + Iterable<@Nullable String> iterableWithNulls = MinimalIterable.of("a", null, "b"); try { - builder.addAll(iterableWithNulls); + builder.addAll((Iterable) iterableWithNulls); fail("expected NullPointerException"); } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/ImmutableMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMapTest.java index ad8948f24d26..2718e98db9c7 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMapTest.java @@ -325,7 +325,7 @@ public void testBuilder_withImmutableEntryAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableEntry() { @@ -1168,15 +1168,15 @@ public void testEquals() { } public void testOfEntriesNull() { - Entry nullKey = entry(null, 23); + Entry<@Nullable Integer, @Nullable Integer> nullKey = entry(null, 23); try { - ImmutableMap.ofEntries(nullKey); + ImmutableMap.ofEntries((Entry) nullKey); fail(); } catch (NullPointerException expected) { } - Entry nullValue = entry(23, null); + Entry<@Nullable Integer, @Nullable Integer> nullValue = entry(23, null); try { - ImmutableMap.ofEntries(nullValue); + ImmutableMap.ofEntries((Entry) nullValue); fail(); } catch (NullPointerException expected) { } @@ -1194,7 +1194,7 @@ private static Map map(T... keysAndValues) { return map; } - private static Entry entry(T key, T value) { + private static Entry entry(T key, T value) { return new AbstractMap.SimpleImmutableEntry<>(key, value); } diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java index 57be835c72fa..6eba7af61c87 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMultimapTest.java @@ -28,6 +28,7 @@ import java.util.Arrays; import java.util.Map.Entry; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link ImmutableMultimap}. @@ -59,7 +60,7 @@ public void testBuilder_withImmutableEntryAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableEntry() { diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java index 0ae9a4f63d75..3e556c35c9fc 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java @@ -227,9 +227,9 @@ public void testCreation_arrayOfArray() { } public void testCreation_arrayContainingOnlyNull() { - String[] array = new String[] {null}; + @Nullable String[] array = new @Nullable String[] {null}; try { - ImmutableMultiset.copyOf(array); + ImmutableMultiset.copyOf((String[]) array); fail(); } catch (NullPointerException expected) { } @@ -255,9 +255,9 @@ public void testCopyOf_collection_general() { } public void testCopyOf_collectionContainingNull() { - Collection c = MinimalCollection.of("a", null, "b"); + Collection<@Nullable String> c = MinimalCollection.of("a", null, "b"); try { - ImmutableMultiset.copyOf(c); + ImmutableMultiset.copyOf((Collection) c); fail(); } catch (NullPointerException expected) { } @@ -528,9 +528,9 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } builder = ImmutableMultiset.builder(); - List listWithNulls = asList("a", null, "b"); + List<@Nullable String> listWithNulls = asList("a", null, "b"); try { - builder.addAll(listWithNulls); + builder.addAll((List) listWithNulls); fail("expected NullPointerException"); } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java index 36a9f945ddf7..6115cdddd584 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java @@ -45,6 +45,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link ImmutableSetMultimap}. @@ -112,7 +113,7 @@ public void testBuilder_withImmutableEntryAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableEntry() { @@ -210,8 +211,8 @@ public void testBuilderPutAllMultimapWithDuplicates() { } public void testBuilderPutNullKey() { - Multimap toPut = LinkedListMultimap.create(); - toPut.put("foo", null); + Multimap<@Nullable String, Integer> toPut = LinkedListMultimap.create(); + toPut.put(null, 1); ImmutableSetMultimap.Builder builder = ImmutableSetMultimap.builder(); try { builder.put(null, 1); @@ -229,15 +230,15 @@ public void testBuilderPutNullKey() { } catch (NullPointerException expected) { } try { - builder.putAll(toPut); + builder.putAll((Multimap) toPut); fail(); } catch (NullPointerException expected) { } } public void testBuilderPutNullValue() { - Multimap toPut = LinkedListMultimap.create(); - toPut.put(null, 1); + Multimap toPut = LinkedListMultimap.create(); + toPut.put("foo", null); ImmutableSetMultimap.Builder builder = ImmutableSetMultimap.builder(); try { builder.put("foo", null); @@ -255,7 +256,7 @@ public void testBuilderPutNullValue() { } catch (NullPointerException expected) { } try { - builder.putAll(toPut); + builder.putAll((Multimap) toPut); fail(); } catch (NullPointerException expected) { } @@ -391,10 +392,10 @@ public void testCopyOfImmutableSetMultimap() { } public void testCopyOfNullKey() { - HashMultimap input = HashMultimap.create(); + HashMultimap<@Nullable String, Integer> input = HashMultimap.create(); input.put(null, 1); try { - ImmutableSetMultimap.copyOf(input); + ImmutableSetMultimap.copyOf((Multimap) input); fail(); } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index da675f066989..badaf835ccdf 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -44,6 +44,7 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.Map.Entry; +import java.util.Set; import java.util.SortedMap; import java.util.TreeMap; import java.util.function.BiPredicate; @@ -186,7 +187,7 @@ public void testBuilder_withImmutableEntryAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableEntry() { @@ -702,13 +703,13 @@ public void testNullPointers() { public void testNullValuesInCopyOfMap() { for (int i = 1; i <= 10; i++) { for (int j = 0; j < i; j++) { - Map source = new TreeMap<>(); + Map source = new TreeMap<>(); for (int k = 0; k < i; k++) { source.put(k, k); } source.put(j, null); try { - ImmutableSortedMap.copyOf(source); + ImmutableSortedMap.copyOf((Map) source); fail("Expected NullPointerException in copyOf(" + source + ")"); } catch (NullPointerException expected) { } @@ -719,13 +720,13 @@ public void testNullValuesInCopyOfMap() { public void testNullValuesInCopyOfEntries() { for (int i = 1; i <= 10; i++) { for (int j = 0; j < i; j++) { - Map source = new TreeMap<>(); + Map source = new TreeMap<>(); for (int k = 0; k < i; k++) { source.put(k, k); } source.put(j, null); try { - ImmutableSortedMap.copyOf(source.entrySet()); + ImmutableSortedMap.copyOf((Set>) source.entrySet()); fail("Expected NullPointerException in copyOf(" + source.entrySet() + ")"); } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/ImmutableTableTest.java b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java index 04de1572bc9a..3b0548ba4992 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableTableTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java @@ -25,6 +25,7 @@ import com.google.common.testing.CollectorTester; import com.google.common.testing.SerializableTester; import java.util.stream.Collector; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests common methods in {@link ImmutableTable} @@ -108,7 +109,7 @@ public void testBuilder_withImmutableCellAndNullContents() { } private static class StringHolder { - String string; + @Nullable String string; } public void testBuilder_withMutableCell() { diff --git a/guava-tests/test/com/google/common/collect/IterablesTest.java b/guava-tests/test/com/google/common/collect/IterablesTest.java index 3d67a04bba4a..c930aa351062 100644 --- a/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -48,6 +48,7 @@ import java.util.SortedSet; import junit.framework.AssertionFailedError; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@code Iterables}. @@ -104,7 +105,7 @@ public Iterator iterator() { } public void test_contains_null_set_yes() { - Iterable set = Sets.newHashSet("a", null, "b"); + Iterable<@Nullable String> set = Sets.newHashSet("a", null, "b"); assertTrue(Iterables.contains(set, null)); } @@ -124,7 +125,7 @@ public void test_contains_null_iterable_no() { } public void test_contains_nonnull_set_yes() { - Iterable set = Sets.newHashSet("a", null, "b"); + Iterable<@Nullable String> set = Sets.newHashSet("a", null, "b"); assertTrue(Iterables.contains(set, "b")); } @@ -329,13 +330,13 @@ public String apply(Integer from) { } public void testPoorlyBehavedTransform() { - List input = asList("1", null, "3"); + List<@Nullable String> input = asList("1", null, "3"); Iterable result = Iterables.transform( input, - new Function() { + new Function<@Nullable String, Integer>() { @Override - public Integer apply(String from) { + public Integer apply(@Nullable String from) { return Integer.valueOf(from); } }); @@ -351,13 +352,13 @@ public Integer apply(String from) { } public void testNullFriendlyTransform() { - List input = asList(1, 2, null, 3); + List<@Nullable Integer> input = asList(1, 2, null, 3); Iterable result = Iterables.transform( input, - new Function() { + new Function<@Nullable Integer, String>() { @Override - public String apply(Integer from) { + public String apply(@Nullable Integer from) { return String.valueOf(from); } }); diff --git a/guava-tests/test/com/google/common/collect/IteratorsTest.java b/guava-tests/test/com/google/common/collect/IteratorsTest.java index bf525d53b9cd..76ed1451d6cf 100644 --- a/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -59,6 +59,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@code Iterators}. @@ -516,9 +517,9 @@ public void testNullFriendlyTransform() { Iterator result = Iterators.transform( input, - new Function() { + new Function<@Nullable Integer, String>() { @Override - public String apply(Integer from) { + public String apply(@Nullable Integer from) { return String.valueOf(from); } }); @@ -1524,7 +1525,7 @@ public void testAdvance_illegalArgument() { } public void testFrequency() { - List list = newArrayList("a", null, "b", null, "a", null); + List<@Nullable String> list = newArrayList("a", null, "b", null, "a", null); assertEquals(2, Iterators.frequency(list.iterator(), "a")); assertEquals(1, Iterators.frequency(list.iterator(), "b")); assertEquals(0, Iterators.frequency(list.iterator(), "c")); diff --git a/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java b/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java index 04670b945ab8..625e1892c992 100644 --- a/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/LinkedHashMultimapTest.java @@ -45,6 +45,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit tests for {@code LinkedHashMultimap}. @@ -208,7 +209,7 @@ public void testOrderingUpdates() { } public void testToStringNullExact() { - Multimap multimap = LinkedHashMultimap.create(); + Multimap<@Nullable String, @Nullable Integer> multimap = LinkedHashMultimap.create(); multimap.put("foo", 3); multimap.put("foo", -1); @@ -288,7 +289,7 @@ public void testGetIteration() { MODIFIABLE, newLinkedHashSet(asList(2, 3, 4, 7, 8)), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -319,7 +320,7 @@ public void testEntriesIteration() { new IteratorTester>( 6, MODIFIABLE, set, IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator> newTargetIterator() { @@ -344,7 +345,7 @@ public void testKeysIteration() { MODIFIABLE, newArrayList("foo", "foo", "bar", "bar", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -366,7 +367,7 @@ protected void verify(List elements) { public void testValuesIteration() { new IteratorTester( 6, MODIFIABLE, newArrayList(2, 3, 4, 5, 6), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -391,7 +392,7 @@ public void testKeySetIteration() { MODIFIABLE, newLinkedHashSet(asList("foo", "bar", "baz", "dog", "cat")), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -425,7 +426,7 @@ public void testAsSetIteration() { Maps.immutableEntry("cat", (Collection) Sets.newHashSet(12, 13, 14)))); new IteratorTester>>( 6, MODIFIABLE, set, IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator>> newTargetIterator() { diff --git a/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java b/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java index 53419d7659fc..524740a3df5d 100644 --- a/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/LinkedListMultimapTest.java @@ -48,6 +48,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@code LinkedListMultimap}. @@ -352,7 +353,7 @@ public void testEntriesIteration() { Maps.immutableEntry("foo", 6)); new ListIteratorTester>( 3, addItems, ImmutableList.of(SUPPORTS_REMOVE), list, startIndex) { - private LinkedListMultimap multimap; + private @Nullable LinkedListMultimap multimap; @Override protected ListIterator> newTargetIterator() { @@ -378,7 +379,7 @@ public void testKeysIteration() { MODIFIABLE, newArrayList("foo", "foo", "bar", "bar", "foo"), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -407,7 +408,7 @@ public void testValuesIteration() { ImmutableList.of(SUPPORTS_REMOVE, SUPPORTS_SET), Lists.newArrayList(2, 3, 4, 5, 6), startIndex) { - private LinkedListMultimap multimap; + private @Nullable LinkedListMultimap multimap; @Override protected ListIterator newTargetIterator() { @@ -434,7 +435,7 @@ public void testKeySetIteration() { MODIFIABLE, newLinkedHashSet(asList("foo", "bar", "baz", "dog", "cat")), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -469,7 +470,7 @@ public void testAsSetIteration() { new IteratorTester>>( 6, MODIFIABLE, set, IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator>> newTargetIterator() { diff --git a/guava-tests/test/com/google/common/collect/ListsImplTest.java b/guava-tests/test/com/google/common/collect/ListsImplTest.java index b6c7ad5e05e7..5780fe1f2218 100644 --- a/guava-tests/test/com/google/common/collect/ListsImplTest.java +++ b/guava-tests/test/com/google/common/collect/ListsImplTest.java @@ -33,6 +33,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** Tests the package level *impl methods directly using various types of lists. */ @GwtCompatible(emulated = true) @@ -96,7 +97,7 @@ private static TestSuite createExampleSuite(ListExample example) { return resultSuite; } - private ListExample example; + private @Nullable ListExample example; private ListExample getExample() { // because sometimes one version with a null example is created. @@ -142,7 +143,7 @@ public void testEqualsImpl() { assertThat(Lists.equalsImpl(base, copy)).isTrue(); assertThat(Lists.equalsImpl(base, otherType)).isTrue(); - List unEqualItems = + List<@Nullable Object> unEqualItems = Arrays.asList(outOfOrder, diffValue, diffLength, empty, null, new Object()); for (Object other : unEqualItems) { assertWithMessage("%s", other).that(Lists.equalsImpl(base, other)).isFalse(); diff --git a/guava-tests/test/com/google/common/collect/MapsTest.java b/guava-tests/test/com/google/common/collect/MapsTest.java index fc51b72630d4..54d8d2cc3585 100644 --- a/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/guava-tests/test/com/google/common/collect/MapsTest.java @@ -61,6 +61,7 @@ import java.util.TreeMap; import java.util.concurrent.ConcurrentMap; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@code Maps}. @@ -372,7 +373,7 @@ public void testEnumMapWithInitialEmptyMap() { } public void testToStringImplWithNullKeys() throws Exception { - Map hashmap = Maps.newHashMap(); + Map<@Nullable String, String> hashmap = Maps.newHashMap(); hashmap.put("foo", "bar"); hashmap.put(null, "baz"); @@ -380,7 +381,7 @@ public void testToStringImplWithNullKeys() throws Exception { } public void testToStringImplWithNullValues() throws Exception { - Map hashmap = Maps.newHashMap(); + Map hashmap = Maps.newHashMap(); hashmap.put("foo", "bar"); hashmap.put("baz", null); @@ -956,9 +957,9 @@ public void testToMapWithDuplicateKeys() { } public void testToMapWithNullKeys() { - Iterable strings = Arrays.asList("one", null, "three"); + Iterable<@Nullable String> strings = Arrays.asList("one", null, "three"); try { - Maps.toMap(strings, Functions.constant("foo")); + Maps.toMap((Iterable) strings, Functions.constant("foo")); fail(); } catch (NullPointerException expected) { } @@ -1019,9 +1020,9 @@ public void testUniqueIndexDuplicates() { /** Null values are not allowed. */ public void testUniqueIndexNullValue() { - List listWithNull = Lists.newArrayList((String) null); + List<@Nullable String> listWithNull = Lists.newArrayList((String) null); try { - Maps.uniqueIndex(listWithNull, Functions.constant(1)); + Maps.uniqueIndex((List) listWithNull, Functions.constant(1)); fail(); } catch (NullPointerException expected) { } @@ -1192,12 +1193,12 @@ public void testAsConverter_isAView() throws Exception { } public void testAsConverter_withNullMapping() throws Exception { - BiMap biMap = HashBiMap.create(); + BiMap biMap = HashBiMap.create(); biMap.put("one", 1); biMap.put("two", 2); biMap.put("three", null); try { - Maps.asConverter(biMap).convert("three"); + Maps.asConverter((BiMap) biMap).convert("three"); fail(); } catch (IllegalArgumentException expected) { } @@ -1353,7 +1354,8 @@ public void testImmutableEntry() { } public void testImmutableEntryNull() { - Entry e = Maps.immutableEntry((String) null, (Integer) null); + Entry<@Nullable String, @Nullable Integer> e = + Maps.immutableEntry((String) null, (Integer) null); assertNull(e.getKey()); assertNull(e.getValue()); try { diff --git a/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java b/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java index 87ba989f95fb..049c1ea7df85 100644 --- a/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java @@ -224,14 +224,14 @@ public void testTransformRemoveEntry() { } public void testTransformEqualityOfMapsWithNullValues() { - Map underlying = Maps.newHashMap(); + Map underlying = Maps.newHashMap(); underlying.put("a", null); underlying.put("b", ""); - Map map = + Map<@Nullable String, Boolean> map = Maps.transformValues( underlying, - new Function() { + new Function<@Nullable String, Boolean>() { @Override public Boolean apply(@Nullable String from) { return from == null; diff --git a/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java index 0d922df46a18..71e4ac4cd75e 100644 --- a/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java +++ b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java @@ -48,6 +48,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link MinMaxPriorityQueue}. @@ -510,7 +511,7 @@ private > void runIterator(final List values, int ste IteratorFeature.MODIFIABLE, Lists.newLinkedList(values), IteratorTester.KnownOrder.UNKNOWN_ORDER) { - private MinMaxPriorityQueue mmHeap; + private @Nullable MinMaxPriorityQueue mmHeap; @Override protected Iterator newTargetIterator() { @@ -946,7 +947,8 @@ private static void assertIntactUsingStartedWith( } } - private static void assertEqualsUsingSeed(long seed, Object expected, Object actual) { + private static void assertEqualsUsingSeed( + long seed, @Nullable Object expected, @Nullable Object actual) { if (!equal(actual, expected)) { // fail(), but with the JUnit-supplied message. assertEquals("Using seed " + seed, expected, actual); @@ -954,7 +956,7 @@ private static void assertEqualsUsingSeed(long seed, Object expected, Object act } private static void assertEqualsUsingStartedWith( - Collection startedWith, Object expected, Object actual) { + Collection startedWith, @Nullable Object expected, @Nullable Object actual) { if (!equal(actual, expected)) { // fail(), but with the JUnit-supplied message. assertEquals("Started with " + startedWith, expected, actual); diff --git a/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java b/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java index 664fb283bc39..f6b327000c92 100644 --- a/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java +++ b/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java @@ -22,6 +22,7 @@ import java.util.NoSuchElementException; import java.util.stream.Stream; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@code MoreCollectors}. @@ -40,7 +41,7 @@ public void testToOptionalSingleton() { } public void testToOptionalNull() { - Stream stream = Stream.of((Object) null); + Stream<@Nullable Object> stream = Stream.of((Object) null); try { stream.collect(MoreCollectors.toOptional()); fail("Expected NullPointerException"); diff --git a/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java b/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java index 15c0901b15bc..792520f8881b 100644 --- a/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java +++ b/guava-tests/test/com/google/common/collect/MultisetsImmutableEntryTest.java @@ -32,11 +32,11 @@ public class MultisetsImmutableEntryTest extends TestCase { private static final @Nullable String NE = null; - private static Entry entry(final E element, final int count) { + private static Entry entry(final E element, final int count) { return Multisets.immutableEntry(element, count); } - private static Entry control(E element, int count) { + private static Entry control(E element, int count) { return HashMultiset.create(Collections.nCopies(count, element)).entrySet().iterator().next(); } diff --git a/guava-tests/test/com/google/common/collect/OrderingTest.java b/guava-tests/test/com/google/common/collect/OrderingTest.java index eeb2b33e11e4..fabdc67a2150 100644 --- a/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -57,7 +57,7 @@ public class OrderingTest extends TestCase { private final Ordering numberOrdering = new NumberOrdering(); public void testAllEqual() { - Ordering comparator = Ordering.allEqual(); + Ordering<@Nullable Object> comparator = Ordering.allEqual(); assertSame(comparator, comparator.reverse()); assertEquals(0, comparator.compare(null, null)); @@ -74,19 +74,24 @@ public void testAllEqual() { // From https://github.com/google/guava/issues/1342 public void testComplicatedOrderingExample() { Integer nullInt = (Integer) null; - Ordering> example = - Ordering.natural().nullsFirst().reverse().lexicographical().reverse().nullsLast(); - List list1 = Lists.newArrayList(); - List list2 = Lists.newArrayList(1); - List list3 = Lists.newArrayList(1, 1); - List list4 = Lists.newArrayList(1, 2); - List list5 = Lists.newArrayList(1, null, 2); - List list6 = Lists.newArrayList(2); - List list7 = Lists.newArrayList(nullInt); - List list8 = Lists.newArrayList(nullInt, nullInt); - List> list = + Ordering<@Nullable Iterable<@Nullable Integer>> example = + Ordering.natural() + .nullsFirst() + .reverse() + .lexicographical() + .reverse() + .>nullsLast(); + List<@Nullable Integer> list1 = Lists.newArrayList(); + List<@Nullable Integer> list2 = Lists.newArrayList(1); + List<@Nullable Integer> list3 = Lists.newArrayList(1, 1); + List<@Nullable Integer> list4 = Lists.newArrayList(1, 2); + List<@Nullable Integer> list5 = Lists.newArrayList(1, null, 2); + List<@Nullable Integer> list6 = Lists.newArrayList(2); + List<@Nullable Integer> list7 = Lists.newArrayList(nullInt); + List<@Nullable Integer> list8 = Lists.newArrayList(nullInt, nullInt); + List<@Nullable List<@Nullable Integer>> list = Lists.newArrayList(list1, list2, list3, list4, list5, list6, list7, list8, null); - List> sorted = example.sortedCopy(list); + List<@Nullable List<@Nullable Integer>> sorted = example.sortedCopy(list); // [[null, null], [null], [1, null, 2], [1, 1], [1, 2], [1], [2], [], null] assertThat(sorted) @@ -912,7 +917,7 @@ private static void testExhaustively( verifyScenario(starter, 0); } - private static void verifyScenario(Scenario scenario, int level) { + private static void verifyScenario(Scenario scenario, int level) { scenario.testCompareTo(); scenario.testIsOrdered(); scenario.testMinAndMax(); @@ -930,7 +935,7 @@ private static void verifyScenario(Scenario scenario, int level) { * An aggregation of an ordering with a list (of size > 1) that should prove to be in strictly * increasing order according to that ordering. */ - private static class Scenario { + private static class Scenario { final Ordering ordering; final List strictlyOrderedList; final T[] emptyArray; @@ -1005,7 +1010,7 @@ void testSortedCopy() { private enum OrderingMutation { REVERSE { @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List newList = Lists.newArrayList(scenario.strictlyOrderedList); Collections.reverse(newList); return new Scenario(scenario.ordering.reverse(), newList, scenario.emptyArray); @@ -1013,7 +1018,7 @@ Scenario mutate(Scenario scenario) { }, NULLS_FIRST { @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List newList = Lists.newArrayList((T) null); for (T t : scenario.strictlyOrderedList) { if (t != null) { @@ -1025,7 +1030,7 @@ Scenario mutate(Scenario scenario) { }, NULLS_LAST { @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List newList = Lists.newArrayList(); for (T t : scenario.strictlyOrderedList) { if (t != null) { @@ -1038,12 +1043,12 @@ Scenario mutate(Scenario scenario) { }, ON_RESULT_OF { @Override - Scenario mutate(final Scenario scenario) { + Scenario mutate(final Scenario scenario) { Ordering ordering = scenario.ordering.onResultOf( new Function() { @Override - public T apply(@Nullable Integer from) { + public T apply(Integer from) { return scenario.strictlyOrderedList.get(from); } }); @@ -1057,7 +1062,7 @@ public T apply(@Nullable Integer from) { COMPOUND_THIS_WITH_NATURAL { @SuppressWarnings("unchecked") // raw array @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List> composites = Lists.newArrayList(); for (T t : scenario.strictlyOrderedList) { composites.add(new Composite(t, 1)); @@ -1074,7 +1079,7 @@ Scenario mutate(Scenario scenario) { COMPOUND_NATURAL_WITH_THIS { @SuppressWarnings("unchecked") // raw array @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List> composites = Lists.newArrayList(); for (T t : scenario.strictlyOrderedList) { composites.add(new Composite(t, 1)); @@ -1091,7 +1096,7 @@ Scenario mutate(Scenario scenario) { LEXICOGRAPHICAL { @SuppressWarnings("unchecked") // dang varargs @Override - Scenario mutate(Scenario scenario) { + Scenario mutate(Scenario scenario) { List> words = Lists.newArrayList(); words.add(Collections.emptyList()); for (T t : scenario.strictlyOrderedList) { @@ -1106,14 +1111,14 @@ Scenario mutate(Scenario scenario) { }, ; - abstract Scenario mutate(Scenario scenario); + abstract Scenario mutate(Scenario scenario); } /** * A dummy object we create so that we can have something meaningful to have a compound ordering * over. */ - private static class Composite implements Comparable> { + private static class Composite implements Comparable> { final T value; final int rank; @@ -1129,7 +1134,7 @@ public int compareTo(Composite that) { return Ints.compare(rank, that.rank); } - static Function, T> getValueFunction() { + static Function, T> getValueFunction() { return new Function, T>() { @Override public T apply(Composite from) { @@ -1149,7 +1154,7 @@ public void testNullPointerExceptions() { tester.testAllPublicInstanceMethods(Ordering.usingToString().nullsFirst()); } - private static List shuffledCopy(List in, Random random) { + private static List shuffledCopy(List in, Random random) { List mutable = newArrayList(in); List out = newArrayList(); while (!mutable.isEmpty()) { diff --git a/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java b/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java index e732a88c4290..d070936c3bac 100644 --- a/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java @@ -30,6 +30,7 @@ import java.util.List; import java.util.NoSuchElementException; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link PeekingIterator}. @@ -50,9 +51,9 @@ public class PeekingIteratorTest extends TestCase { * PeekingIterator#remove()} removes the same elements as the reference's iterator {@code * #remove()}. */ - private static class PeekingIteratorTester extends IteratorTester { + private static class PeekingIteratorTester extends IteratorTester { private Iterable master; - private List targetList; + private @Nullable List targetList; public PeekingIteratorTester(Collection master) { super(master.size() + 3, MODIFIABLE, master, IteratorTester.KnownOrder.KNOWN_ORDER); @@ -74,7 +75,7 @@ protected void verify(List elements) { } } - private void actsLikeIteratorHelper(final List list) { + private void actsLikeIteratorHelper(final List list) { // Check with modifiable copies of the list new PeekingIteratorTester(list).test(); diff --git a/guava-tests/test/com/google/common/collect/RangeTest.java b/guava-tests/test/com/google/common/collect/RangeTest.java index cb18804a8bcd..cfc191716ad7 100644 --- a/guava-tests/test/com/google/common/collect/RangeTest.java +++ b/guava-tests/test/com/google/common/collect/RangeTest.java @@ -33,6 +33,7 @@ import java.util.List; import java.util.NoSuchElementException; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link Range}. @@ -675,15 +676,15 @@ public void testEncloseAll_empty() { } public void testEncloseAll_nullValue() { - List nullFirst = Lists.newArrayList(null, 0); + List<@Nullable Integer> nullFirst = Lists.newArrayList(null, 0); try { - Range.encloseAll(nullFirst); + Range.encloseAll((List) nullFirst); fail(); } catch (NullPointerException expected) { } - List nullNotFirst = Lists.newArrayList(0, null); + List<@Nullable Integer> nullNotFirst = Lists.newArrayList(0, null); try { - Range.encloseAll(nullNotFirst); + Range.encloseAll((List) nullNotFirst); fail(); } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java b/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java index 76086cef997c..3f1f75d78ac5 100644 --- a/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java +++ b/guava-tests/test/com/google/common/collect/RegularImmutableAsListTest.java @@ -16,6 +16,7 @@ import com.google.common.annotations.GwtCompatible; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link RegularImmutableAsList}. @@ -32,7 +33,7 @@ public class RegularImmutableAsListTest extends TestCase { public void testDoesntCheckForNull() { ImmutableSet set = ImmutableSet.of(1, 2, 3); ImmutableList unused = - new RegularImmutableAsList(set, new Object[] {null, null, null}); + new RegularImmutableAsList(set, new @Nullable Object[] {null, null, null}); // shouldn't throw! } } diff --git a/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java b/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java index e3671bcb0277..d7a281ae8e33 100644 --- a/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/SimpleAbstractMultisetTest.java @@ -95,7 +95,8 @@ public void testRemoveUnsupported() { assertTrue(multiset.contains("a")); } - private static class NoRemoveMultiset extends AbstractMultiset implements Serializable { + private static class NoRemoveMultiset extends AbstractMultiset + implements Serializable { final Map backingMap = Maps.newHashMap(); @Override @@ -119,7 +120,7 @@ public int count(@Nullable Object element) { } @Override - public int add(@Nullable E element, int occurrences) { + public int add(E element, int occurrences) { checkArgument(occurrences >= 0); Integer frequency = backingMap.get(element); if (frequency == null) { diff --git a/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java b/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java index 65e83157678f..601709b105e6 100644 --- a/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java +++ b/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java @@ -63,16 +63,16 @@ public int compare(@Nullable String first, @Nullable String second) { } /** Decreasing integer values. A {@code null} comes before any non-null value. */ - private static final Comparator DECREASING_INT_COMPARATOR = - Ordering.natural().reverse().nullsFirst(); + private static final Comparator<@Nullable Integer> DECREASING_INT_COMPARATOR = + Ordering.natural().reverse().nullsFirst(); private SetMultimap create() { return TreeMultimap.create(StringLength.COMPARATOR, DECREASING_INT_COMPARATOR); } /** Create and populate a {@code TreeMultimap} with explicit comparators. */ - private TreeMultimap createPopulate() { - TreeMultimap multimap = + private TreeMultimap<@Nullable String, @Nullable Integer> createPopulate() { + TreeMultimap<@Nullable String, @Nullable Integer> multimap = TreeMultimap.create(StringLength.COMPARATOR, DECREASING_INT_COMPARATOR); multimap.put("google", 2); multimap.put("google", 6); @@ -115,25 +115,25 @@ public void testToString() { } public void testGetComparator() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertEquals(StringLength.COMPARATOR, multimap.keyComparator()); assertEquals(DECREASING_INT_COMPARATOR, multimap.valueComparator()); } public void testOrderedGet() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertThat(multimap.get(null)).containsExactly(7, 3, 1).inOrder(); assertThat(multimap.get("google")).containsExactly(6, 2).inOrder(); assertThat(multimap.get("tree")).containsExactly(null, 0).inOrder(); } public void testOrderedKeySet() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertThat(multimap.keySet()).containsExactly(null, "tree", "google").inOrder(); } public void testOrderedAsMapEntries() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); Iterator>> iterator = multimap.asMap().entrySet().iterator(); Entry> entry = iterator.next(); assertEquals(null, entry.getKey()); @@ -147,7 +147,7 @@ public void testOrderedAsMapEntries() { } public void testOrderedEntries() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertThat(multimap.entries()) .containsExactly( Maps.immutableEntry((String) null, 7), @@ -161,12 +161,12 @@ public void testOrderedEntries() { } public void testOrderedValues() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertThat(multimap.values()).containsExactly(7, 3, 1, null, 0, 6, 2).inOrder(); } public void testComparator() { - TreeMultimap multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertEquals(DECREASING_INT_COMPARATOR, multimap.get("foo").comparator()); assertEquals(DECREASING_INT_COMPARATOR, multimap.get("missing").comparator()); } @@ -187,8 +187,8 @@ public void testMultimapComparators() { } public void testSortedKeySet() { - TreeMultimap multimap = createPopulate(); - SortedSet keySet = multimap.keySet(); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); + SortedSet<@Nullable String> keySet = multimap.keySet(); assertEquals(null, keySet.first()); assertEquals("google", keySet.last()); @@ -200,8 +200,9 @@ public void testSortedKeySet() { @GwtIncompatible // SerializableTester public void testExplicitComparatorSerialization() { - TreeMultimap multimap = createPopulate(); - TreeMultimap copy = SerializableTester.reserializeAndAssert(multimap); + TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); + TreeMultimap<@Nullable String, @Nullable Integer> copy = + SerializableTester.reserializeAndAssert(multimap); assertThat(copy.values()).containsExactly(7, 3, 1, null, 0, 6, 2).inOrder(); assertThat(copy.keySet()).containsExactly(null, "tree", "google").inOrder(); assertEquals(multimap.keyComparator(), copy.keyComparator()); diff --git a/guava-tests/test/com/google/common/collect/TreeMultisetTest.java b/guava-tests/test/com/google/common/collect/TreeMultisetTest.java index 159545a984f5..0077b75d168a 100644 --- a/guava-tests/test/com/google/common/collect/TreeMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/TreeMultisetTest.java @@ -41,6 +41,7 @@ import junit.framework.Test; import junit.framework.TestCase; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@link TreeMultiset}. @@ -298,7 +299,7 @@ public void testNullAcceptingComparator() throws Exception { assertThat(ms).containsExactly(null, null, null, "a", "b", "b").inOrder(); assertEquals(3, ms.count(null)); - SortedSet elementSet = ms.elementSet(); + SortedSet<@Nullable String> elementSet = ms.elementSet(); assertEquals(null, elementSet.first()); assertEquals("b", elementSet.last()); assertEquals(comparator, elementSet.comparator()); From 4148c5bc8de12a392287c4d0ce08ee53e9832176 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Wed, 21 Feb 2024 08:18:11 -0800 Subject: [PATCH 160/216] Remove `@J2ktIncompatible` from `toImmutableEnumMap` MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Its tests are all passing on J2KT locally. I think some problems with J2KT’s handling of recursive generics (`E extends Enum`) have been fixed since the annotation was added. RELNOTES=n/a PiperOrigin-RevId: 609000790 --- .../src/com/google/common/collect/CollectCollectors.java | 4 ---- android/guava/src/com/google/common/collect/Maps.java | 2 -- guava/src/com/google/common/collect/CollectCollectors.java | 4 ---- guava/src/com/google/common/collect/Maps.java | 2 -- 4 files changed, 12 deletions(-) diff --git a/android/guava/src/com/google/common/collect/CollectCollectors.java b/android/guava/src/com/google/common/collect/CollectCollectors.java index b9ae7cba091a..0bcb60c9c7b7 100644 --- a/android/guava/src/com/google/common/collect/CollectCollectors.java +++ b/android/guava/src/com/google/common/collect/CollectCollectors.java @@ -22,7 +22,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Preconditions; import java.util.Collection; import java.util.Comparator; @@ -263,7 +262,6 @@ ImmutableSet toImmutableSet() { new Collector.Characteristics[0]); } - @J2ktIncompatible static , V> Collector> toImmutableEnumMap( Function keyFunction, @@ -292,7 +290,6 @@ ImmutableSet toImmutableSet() { Collector.Characteristics.UNORDERED); } - @J2ktIncompatible static , V> Collector> toImmutableEnumMap( Function keyFunction, @@ -319,7 +316,6 @@ ImmutableSet toImmutableSet() { EnumMapAccumulator::toImmutableMap); } - @J2ktIncompatible @IgnoreJRERequirement // see enclosing class (whose annotation Animal Sniffer ignores here...) private static class EnumMapAccumulator, V> { private final BinaryOperator mergeFunction; diff --git a/android/guava/src/com/google/common/collect/Maps.java b/android/guava/src/com/google/common/collect/Maps.java index 2a743c64a1c4..7dcba2044557 100644 --- a/android/guava/src/com/google/common/collect/Maps.java +++ b/android/guava/src/com/google/common/collect/Maps.java @@ -190,7 +190,6 @@ public static , V> ImmutableMap immutableEnumMap( * java.util.function.Function) Collectors.toMap(Function, Function)}, which throws an {@code * IllegalStateException}.) */ - @J2ktIncompatible @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) @IgnoreJRERequirement // Users will use this only if they're already using streams. static , V> @@ -209,7 +208,6 @@ public static , V> ImmutableMap immutableEnumMap( *

    If the mapped keys contain duplicates, the values are merged using the specified merging * function. */ - @J2ktIncompatible @SuppressWarnings({"AndroidJdkLibsChecker", "Java7ApiChecker"}) @IgnoreJRERequirement // Users will use this only if they're already using streams. static , V> diff --git a/guava/src/com/google/common/collect/CollectCollectors.java b/guava/src/com/google/common/collect/CollectCollectors.java index 2b23bd25af45..5f1ce943795a 100644 --- a/guava/src/com/google/common/collect/CollectCollectors.java +++ b/guava/src/com/google/common/collect/CollectCollectors.java @@ -22,7 +22,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Preconditions; import java.util.Collection; import java.util.Comparator; @@ -259,7 +258,6 @@ ImmutableSet toImmutableSet() { new Collector.Characteristics[0]); } - @J2ktIncompatible static , V> Collector> toImmutableEnumMap( Function keyFunction, @@ -288,7 +286,6 @@ ImmutableSet toImmutableSet() { Collector.Characteristics.UNORDERED); } - @J2ktIncompatible static , V> Collector> toImmutableEnumMap( Function keyFunction, @@ -315,7 +312,6 @@ ImmutableSet toImmutableSet() { EnumMapAccumulator::toImmutableMap); } - @J2ktIncompatible private static class EnumMapAccumulator, V> { private final BinaryOperator mergeFunction; @CheckForNull private EnumMap map = null; diff --git a/guava/src/com/google/common/collect/Maps.java b/guava/src/com/google/common/collect/Maps.java index 38c01dde7e9f..1ae8664a77cc 100644 --- a/guava/src/com/google/common/collect/Maps.java +++ b/guava/src/com/google/common/collect/Maps.java @@ -197,7 +197,6 @@ public static , V> ImmutableMap immutableEnumMap( * * @since 21.0 */ - @J2ktIncompatible public static , V> Collector> toImmutableEnumMap( java.util.function.Function keyFunction, @@ -216,7 +215,6 @@ public static , V> ImmutableMap immutableEnumMap( * * @since 21.0 */ - @J2ktIncompatible public static , V> Collector> toImmutableEnumMap( java.util.function.Function keyFunction, From 2da8a3b68dab01e6d26d4a232c12c7325b0a9a63 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Wed, 21 Feb 2024 08:45:47 -0800 Subject: [PATCH 161/216] Make `com.google.common.collect.testing` compile with J2kt Includes additional nullness changes that are not required for compilation, but to make the tests built on top of it pass. RELNOTES=n/a PiperOrigin-RevId: 609008463 --- .../testing/AbstractCollectionTester.java | 4 +- .../testing/AbstractContainerTester.java | 6 +- .../testing/AbstractIteratorTester.java | 9 +-- .../collect/testing/AbstractMapTester.java | 3 +- .../collect/testing/AbstractTester.java | 4 ++ .../testing/DerivedCollectionGenerators.java | 33 ++++++---- .../common/collect/testing/Helpers.java | 27 ++++---- .../collect/testing/IteratorTester.java | 5 +- .../collect/testing/ListIteratorTester.java | 5 +- .../collect/testing/MapInterfaceTest.java | 33 ++++++---- .../collect/testing/MinimalCollection.java | 20 +++--- .../collect/testing/MinimalIterable.java | 6 +- .../common/collect/testing/MinimalSet.java | 14 +++-- .../collect/testing/OneSizeGenerator.java | 5 +- .../OneSizeTestContainerGenerator.java | 4 +- .../collect/testing/SampleElements.java | 7 ++- .../testing/TestCharacterListGenerator.java | 1 + .../testing/TestCollectionGenerator.java | 5 +- .../testing/TestCollidingSetGenerator.java | 1 + .../testing/TestContainerGenerator.java | 4 +- .../collect/testing/TestEnumMapGenerator.java | 1 + .../collect/testing/TestEnumSetGenerator.java | 1 + .../testing/TestIntegerSetGenerator.java | 1 + .../TestIntegerSortedSetGenerator.java | 1 + .../collect/testing/TestListGenerator.java | 4 +- .../testing/TestMapEntrySetGenerator.java | 6 +- .../collect/testing/TestMapGenerator.java | 5 +- .../collect/testing/TestQueueGenerator.java | 4 +- .../collect/testing/TestSetGenerator.java | 4 +- .../testing/TestSortedMapGenerator.java | 5 +- .../testing/TestSortedSetGenerator.java | 4 +- .../TestStringCollectionGenerator.java | 1 + .../testing/TestStringListGenerator.java | 1 + .../testing/TestStringMapGenerator.java | 1 + .../testing/TestStringQueueGenerator.java | 1 + .../testing/TestStringSetGenerator.java | 1 + .../testing/TestStringSortedMapGenerator.java | 1 + .../testing/TestStringSortedSetGenerator.java | 1 + .../collect/testing/TestSubjectGenerator.java | 4 +- .../TestUnhashableCollectionGenerator.java | 1 + .../testing/google/AbstractBiMapTester.java | 8 ++- .../google/AbstractListMultimapTester.java | 6 +- .../google/AbstractMultimapTester.java | 19 ++++-- .../AbstractMultisetSetCountTester.java | 3 + .../testing/google/BiMapGenerators.java | 1 + .../testing/google/BiMapInverseTester.java | 3 + .../DerivedGoogleCollectionGenerators.java | 9 ++- .../ElementTypesAreNonnullByDefault.java | 41 ++++++++++++ .../testing/google/ListGenerators.java | 1 + .../google/ListMultimapAsMapTester.java | 5 +- .../collect/testing/google/MapGenerators.java | 3 +- .../testing/google/MultimapEqualsTester.java | 5 +- .../testing/google/MultimapPutTester.java | 5 +- .../testing/google/MultimapSizeTester.java | 5 +- .../testing/google/MultisetCountTester.java | 2 + .../google/MultisetElementSetTester.java | 2 + .../google/MultisetIteratorTester.java | 6 +- .../testing/google/MultisetRemoveTester.java | 2 + .../collect/testing/google/SetGenerators.java | 3 +- .../google/SetMultimapAsMapTester.java | 5 +- .../testing/google/SortedMapGenerators.java | 3 +- .../testing/google/TestBiMapGenerator.java | 5 +- .../google/TestEnumMultisetGenerator.java | 1 + .../google/TestListMultimapGenerator.java | 4 +- .../testing/google/TestMultimapGenerator.java | 5 +- .../testing/google/TestMultisetGenerator.java | 5 +- .../google/TestStringBiMapGenerator.java | 1 + .../TestStringListMultimapGenerator.java | 1 + .../google/TestStringMultisetGenerator.java | 1 + .../TestStringSetMultimapGenerator.java | 1 + .../google/UnmodifiableCollectionTests.java | 24 ++++--- .../testing/testers/AbstractListTester.java | 4 +- .../testers/CollectionAddAllTester.java | 8 ++- .../testing/testers/CollectionAddTester.java | 4 ++ .../testers/CollectionCreationTester.java | 2 + .../testers/CollectionIteratorTester.java | 5 +- .../testers/CollectionToArrayTester.java | 2 + .../ConcurrentMapPutIfAbsentTester.java | 1 + .../testers/ConcurrentMapRemoveTester.java | 1 + .../ConcurrentMapReplaceEntryTester.java | 1 + .../testers/ConcurrentMapReplaceTester.java | 1 + .../ElementTypesAreNonnullByDefault.java | 41 ++++++++++++ .../testing/testers/ListAddAtIndexTester.java | 2 + .../testing/testers/ListAddTester.java | 2 + .../testing/testers/ListHashCodeTester.java | 2 + .../testers/ListListIteratorTester.java | 7 ++- .../testing/testers/ListSetTester.java | 2 + .../testing/testers/ListSubListTester.java | 4 ++ .../testing/testers/MapCreationTester.java | 2 + .../testing/testers/MapEntrySetTester.java | 6 ++ .../testing/testers/MapPutAllTester.java | 7 ++- .../collect/testing/testers/MapPutTester.java | 2 + .../collect/testing/testers/SetAddTester.java | 2 + .../testing/testers/SetHashCodeTester.java | 2 + .../testers/SortedSetNavigationTester.java | 10 +-- .../testing/AbstractCollectionTester.java | 4 +- .../testing/AbstractContainerTester.java | 6 +- .../testing/AbstractIteratorTester.java | 9 +-- .../collect/testing/AbstractMapTester.java | 3 +- .../collect/testing/AbstractTester.java | 4 ++ .../testing/DerivedCollectionGenerators.java | 33 ++++++---- .../common/collect/testing/Helpers.java | 27 ++++---- .../collect/testing/IteratorTester.java | 5 +- .../collect/testing/ListIteratorTester.java | 5 +- .../collect/testing/MapInterfaceTest.java | 33 ++++++---- .../collect/testing/MinimalCollection.java | 20 +++--- .../collect/testing/MinimalIterable.java | 6 +- .../common/collect/testing/MinimalSet.java | 14 +++-- .../collect/testing/OneSizeGenerator.java | 5 +- .../OneSizeTestContainerGenerator.java | 4 +- .../collect/testing/SampleElements.java | 7 ++- .../collect/testing/SpliteratorTester.java | 62 ++++++++++++------- .../testing/TestCharacterListGenerator.java | 1 + .../testing/TestCollectionGenerator.java | 5 +- .../testing/TestCollidingSetGenerator.java | 1 + .../testing/TestContainerGenerator.java | 4 +- .../collect/testing/TestEnumMapGenerator.java | 1 + .../collect/testing/TestEnumSetGenerator.java | 1 + .../testing/TestIntegerSetGenerator.java | 1 + .../TestIntegerSortedSetGenerator.java | 1 + .../collect/testing/TestListGenerator.java | 4 +- .../testing/TestMapEntrySetGenerator.java | 6 +- .../collect/testing/TestMapGenerator.java | 5 +- .../collect/testing/TestQueueGenerator.java | 4 +- .../collect/testing/TestSetGenerator.java | 4 +- .../testing/TestSortedMapGenerator.java | 5 +- .../testing/TestSortedSetGenerator.java | 4 +- .../TestStringCollectionGenerator.java | 1 + .../testing/TestStringListGenerator.java | 1 + .../testing/TestStringMapGenerator.java | 1 + .../testing/TestStringQueueGenerator.java | 1 + .../testing/TestStringSetGenerator.java | 1 + .../testing/TestStringSortedMapGenerator.java | 1 + .../testing/TestStringSortedSetGenerator.java | 1 + .../collect/testing/TestSubjectGenerator.java | 4 +- .../TestUnhashableCollectionGenerator.java | 1 + .../testing/google/AbstractBiMapTester.java | 8 ++- .../google/AbstractListMultimapTester.java | 6 +- .../google/AbstractMultimapTester.java | 19 ++++-- .../AbstractMultisetSetCountTester.java | 3 + .../testing/google/BiMapGenerators.java | 1 + .../testing/google/BiMapInverseTester.java | 3 + .../DerivedGoogleCollectionGenerators.java | 9 ++- .../ElementTypesAreNonnullByDefault.java | 41 ++++++++++++ .../testing/google/ListGenerators.java | 1 + .../google/ListMultimapAsMapTester.java | 5 +- .../collect/testing/google/MapGenerators.java | 3 +- .../testing/google/MultimapEqualsTester.java | 5 +- .../testing/google/MultimapPutTester.java | 5 +- .../testing/google/MultimapSizeTester.java | 5 +- .../testing/google/MultisetCountTester.java | 2 + .../google/MultisetElementSetTester.java | 2 + .../google/MultisetForEachEntryTester.java | 2 + .../google/MultisetIteratorTester.java | 6 +- .../testing/google/MultisetRemoveTester.java | 2 + .../collect/testing/google/SetGenerators.java | 3 +- .../google/SetMultimapAsMapTester.java | 5 +- .../testing/google/SortedMapGenerators.java | 3 +- .../testing/google/TestBiMapGenerator.java | 5 +- .../google/TestEnumMultisetGenerator.java | 1 + .../google/TestListMultimapGenerator.java | 4 +- .../testing/google/TestMultimapGenerator.java | 5 +- .../testing/google/TestMultisetGenerator.java | 5 +- .../google/TestStringBiMapGenerator.java | 1 + .../TestStringListMultimapGenerator.java | 1 + .../google/TestStringMultisetGenerator.java | 1 + .../TestStringSetMultimapGenerator.java | 1 + .../google/UnmodifiableCollectionTests.java | 24 ++++--- .../testing/testers/AbstractListTester.java | 4 +- .../testers/CollectionAddAllTester.java | 8 ++- .../testing/testers/CollectionAddTester.java | 4 ++ .../testers/CollectionCreationTester.java | 2 + .../testers/CollectionIteratorTester.java | 5 +- .../testers/CollectionSpliteratorTester.java | 3 + .../testers/CollectionToArrayTester.java | 2 + .../ConcurrentMapPutIfAbsentTester.java | 1 + .../testers/ConcurrentMapRemoveTester.java | 1 + .../ConcurrentMapReplaceEntryTester.java | 1 + .../testers/ConcurrentMapReplaceTester.java | 1 + .../ElementTypesAreNonnullByDefault.java | 41 ++++++++++++ .../testing/testers/ListAddAtIndexTester.java | 2 + .../testing/testers/ListAddTester.java | 2 + .../testing/testers/ListHashCodeTester.java | 2 + .../testers/ListListIteratorTester.java | 7 ++- .../testing/testers/ListSetTester.java | 2 + .../testing/testers/ListSubListTester.java | 4 ++ .../testing/testers/MapCreationTester.java | 2 + .../testing/testers/MapEntrySetTester.java | 6 ++ .../testing/testers/MapMergeTester.java | 2 + .../testing/testers/MapPutAllTester.java | 7 ++- .../collect/testing/testers/MapPutTester.java | 2 + .../collect/testing/testers/SetAddTester.java | 2 + .../testing/testers/SetHashCodeTester.java | 2 + .../testers/SortedSetNavigationTester.java | 10 +-- 194 files changed, 900 insertions(+), 267 deletions(-) create mode 100644 android/guava-testlib/src/com/google/common/collect/testing/google/ElementTypesAreNonnullByDefault.java create mode 100644 android/guava-testlib/src/com/google/common/collect/testing/testers/ElementTypesAreNonnullByDefault.java create mode 100644 guava-testlib/src/com/google/common/collect/testing/google/ElementTypesAreNonnullByDefault.java create mode 100644 guava-testlib/src/com/google/common/collect/testing/testers/ElementTypesAreNonnullByDefault.java diff --git a/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java b/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java index 23420c375aab..55b62198e665 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.util.Collection; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -29,7 +30,8 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public abstract class AbstractCollectionTester +@ElementTypesAreNonnullByDefault +public abstract class AbstractCollectionTester extends AbstractContainerTester, E> { // TODO: replace this with an accessor. diff --git a/android/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java b/android/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java index d857e6b4b5b7..816dc1f11d95 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java @@ -24,6 +24,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -36,7 +37,8 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public abstract class AbstractContainerTester +@ElementTypesAreNonnullByDefault +public abstract class AbstractContainerTester extends AbstractTester> { protected SampleElements samples; protected C container; @@ -174,7 +176,7 @@ protected E[] createOrderedArray() { return array; } - public static class ArrayWithDuplicate { + public static class ArrayWithDuplicate { public final E[] elements; public final E duplicate; diff --git a/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java b/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java index 4b92db5f82ac..0b34c6ce5fdb 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java @@ -42,7 +42,8 @@ * @author Chris Povirk */ @GwtCompatible -abstract class AbstractIteratorTester> { +@ElementTypesAreNonnullByDefault +abstract class AbstractIteratorTester> { private Stimulus[] stimuli; private final Iterator elementsToInsert; private final Set features; @@ -461,7 +462,7 @@ private > void internalExecuteAndCompare( private static final IteratorOperation NEXT_METHOD = new IteratorOperation() { @Override - public Object execute(Iterator iterator) { + public @Nullable Object execute(Iterator iterator) { return iterator.next(); } }; @@ -469,7 +470,7 @@ public Object execute(Iterator iterator) { private static final IteratorOperation PREVIOUS_METHOD = new IteratorOperation() { @Override - public Object execute(Iterator iterator) { + public @Nullable Object execute(Iterator iterator) { return ((ListIterator) iterator).previous(); } }; @@ -500,7 +501,7 @@ private final IteratorOperation newSetMethod() { }; } - abstract static class Stimulus> { + abstract static class Stimulus> { private final String toString; protected Stimulus(String toString) { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java b/android/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java index 91f6971a45a5..e0cea14b8f4a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java @@ -38,7 +38,8 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public abstract class AbstractMapTester +@ElementTypesAreNonnullByDefault +public abstract class AbstractMapTester extends AbstractContainerTester, Entry> { protected Map getMap() { return container; diff --git a/android/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java b/android/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java index cd9cbfdea95e..953f990df6e7 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import junit.framework.TestCase; import org.checkerframework.checker.nullness.qual.Nullable; @@ -33,6 +34,7 @@ * @author George van den Driessche */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class AbstractTester extends TestCase { private G subjectGenerator; private String suiteName; @@ -74,11 +76,13 @@ public G getSubjectGenerator() { } /** Returns the name of the test method invoked by this test instance. */ + @J2ktIncompatible @GwtIncompatible // not used under GWT, and super.getName() is not available under J2CL public final String getTestMethodName() { return super.getName(); } + @J2ktIncompatible @GwtIncompatible // not used under GWT, and super.getName() is not available under J2CL @Override public String getName() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java b/android/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java index ec60fd4482c9..43684d8a671b 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java @@ -33,6 +33,7 @@ import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Derived suite generators, split out of the suite builders so that they are available to GWT. @@ -40,8 +41,9 @@ * @author George van den Driessche */ @GwtCompatible +@ElementTypesAreNonnullByDefault public final class DerivedCollectionGenerators { - public static class MapEntrySetGenerator + public static class MapEntrySetGenerator implements TestSetGenerator>, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> mapGenerator; @@ -79,8 +81,9 @@ public OneSizeTestContainerGenerator, Entry> getInnerGenerator() // TODO: investigate some API changes to SampleElements that would tidy up // parts of the following classes. - static TestSetGenerator keySetGenerator( - OneSizeTestContainerGenerator, Entry> mapGenerator) { + static + TestSetGenerator keySetGenerator( + OneSizeTestContainerGenerator, Entry> mapGenerator) { TestContainerGenerator, Entry> generator = mapGenerator.getInnerGenerator(); if (generator instanceof TestSortedMapGenerator && ((TestSortedMapGenerator) generator).create().keySet() instanceof SortedSet) { @@ -90,7 +93,8 @@ static TestSetGenerator keySetGenerator( } } - public static class MapKeySetGenerator implements TestSetGenerator, DerivedGenerator { + public static class MapKeySetGenerator + implements TestSetGenerator, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> mapGenerator; private final SampleElements samples; @@ -159,8 +163,9 @@ public OneSizeTestContainerGenerator, Entry> getInnerGenerator() } } - public static class MapSortedKeySetGenerator extends MapKeySetGenerator - implements TestSortedSetGenerator, DerivedGenerator { + public static class MapSortedKeySetGenerator< + K extends @Nullable Object, V extends @Nullable Object> + extends MapKeySetGenerator implements TestSortedSetGenerator, DerivedGenerator { private final TestSortedMapGenerator delegate; public MapSortedKeySetGenerator( @@ -195,7 +200,8 @@ public K aboveSamplesGreater() { } } - public static class MapValueCollectionGenerator + public static class MapValueCollectionGenerator< + K extends @Nullable Object, V extends @Nullable Object> implements TestCollectionGenerator, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> mapGenerator; private final SampleElements samples; @@ -276,7 +282,8 @@ public OneSizeTestContainerGenerator, Entry> getInnerGenerator() } // TODO(cpovirk): could something like this be used elsewhere, e.g., ReserializedListGenerator? - static class ForwardingTestMapGenerator implements TestMapGenerator { + static class ForwardingTestMapGenerator + implements TestMapGenerator { TestMapGenerator delegate; ForwardingTestMapGenerator(TestMapGenerator delegate) { @@ -321,7 +328,8 @@ public enum Bound { NO_BOUND; } - public static class SortedSetSubsetTestSetGenerator implements TestSortedSetGenerator { + public static class SortedSetSubsetTestSetGenerator + implements TestSortedSetGenerator { final Bound to; final Bound from; final E firstInclusive; @@ -397,7 +405,7 @@ public SortedSet create(Object... elements) { } // the regular values should be visible after filtering - List allEntries = new ArrayList<>(); + List<@Nullable Object> allEntries = new ArrayList<>(); allEntries.addAll(extremeValues); allEntries.addAll(normalValues); SortedSet set = delegate.create(allEntries.toArray()); @@ -443,8 +451,9 @@ public E aboveSamplesGreater() { * TODO(cpovirk): surely we can find a less ugly solution than a class that accepts 3 parameters, * exposes as many getters, does work in the constructor, and has both a superclass and a subclass */ - public static class SortedMapSubmapTestMapGenerator extends ForwardingTestMapGenerator - implements TestSortedMapGenerator { + public static class SortedMapSubmapTestMapGenerator< + K extends @Nullable Object, V extends @Nullable Object> + extends ForwardingTestMapGenerator implements TestSortedMapGenerator { final Bound to; final Bound from; final K firstInclusive; diff --git a/android/guava-testlib/src/com/google/common/collect/testing/Helpers.java b/android/guava-testlib/src/com/google/common/collect/testing/Helpers.java index 290e8e300f77..49182b105485 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/Helpers.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/Helpers.java @@ -196,7 +196,7 @@ public static void assertContainsAllOf(Iterable actual, Object... expected) { return modified; } - static Iterable reverse(List list) { + static Iterable reverse(List list) { return new Iterable() { @Override public Iterator iterator() { @@ -221,7 +221,7 @@ public void remove() { }; } - static Iterator cycle(Iterable iterable) { + static Iterator cycle(Iterable iterable) { return new Iterator() { Iterator iterator = Collections.emptySet().iterator(); @@ -245,7 +245,7 @@ public void remove() { }; } - static T get(Iterator iterator, int position) { + static T get(Iterator iterator, int position) { for (int i = 0; i < position; i++) { iterator.next(); } @@ -269,14 +269,14 @@ public EntryComparator(@Nullable Comparator keyComparator) { @Override @SuppressWarnings("unchecked") // no less safe than putting it in the map! public int compare(Entry a, Entry b) { - return (keyComparator == null) - ? ((Comparable) a.getKey()).compareTo(b.getKey()) - : keyComparator.compare(a.getKey(), b.getKey()); + return (keyComparator == null) + ? ((Comparable) a.getKey()).compareTo(b.getKey()) + : keyComparator.compare(a.getKey(), b.getKey()); } } - public static Comparator> entryComparator( - @Nullable Comparator keyComparator) { + public static + Comparator> entryComparator(@Nullable Comparator keyComparator) { return new EntryComparator(keyComparator); } @@ -287,7 +287,7 @@ public static Comparator> entryComparator( * * @see #testComparator(Comparator, List) */ - public static void testComparator( + public static void testComparator( Comparator comparator, T... valuesInExpectedOrder) { testComparator(comparator, Arrays.asList(valuesInExpectedOrder)); } @@ -477,10 +477,11 @@ public int compare(Comparable left, Comparable right) { } }; - @J2ktIncompatible - public static Iterable> orderEntriesByKey( - List> insertionOrder) { - sort(insertionOrder, Helpers.entryComparator(NATURAL_ORDER)); + public static + Iterable> orderEntriesByKey(List> insertionOrder) { + @SuppressWarnings("unchecked") // assume any Comparable is Comparable + Comparator keyComparator = (Comparator) NATURAL_ORDER; + sort(insertionOrder, Helpers.entryComparator(keyComparator)); return insertionOrder; } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java b/android/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java index fdc418a73745..01409884607a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Collections; import java.util.Iterator; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A utility for testing an Iterator implementation by comparing its behavior to that of a "known @@ -84,7 +85,9 @@ * @author Chris Povirk */ @GwtCompatible -public abstract class IteratorTester extends AbstractIteratorTester> { +@ElementTypesAreNonnullByDefault +public abstract class IteratorTester + extends AbstractIteratorTester> { /** * Creates an IteratorTester. * diff --git a/android/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java b/android/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java index 126eb860780d..a781d0ab0266 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import java.util.ListIterator; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A utility similar to {@link IteratorTester} for testing a {@link ListIterator} against a known @@ -35,7 +36,9 @@ * @author Chris Povirk */ @GwtCompatible -public abstract class ListIteratorTester extends AbstractIteratorTester> { +@ElementTypesAreNonnullByDefault +public abstract class ListIteratorTester + extends AbstractIteratorTester> { protected ListIteratorTester( int steps, Iterable elementsToInsert, diff --git a/android/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java b/android/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java index 067973c2a13e..e30287317a78 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java @@ -19,6 +19,7 @@ import static java.util.Collections.singleton; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -28,6 +29,7 @@ import java.util.Map.Entry; import java.util.Set; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests representing the contract of {@link Map}. Concrete subclasses of this base class test @@ -42,7 +44,9 @@ // check the order if so. // TODO: Refactor to share code with SetTestBuilder etc. @GwtCompatible -public abstract class MapInterfaceTest extends TestCase { +@ElementTypesAreNonnullByDefault +public abstract class MapInterfaceTest + extends TestCase { /** A key type that is not assignable to any classes but Object. */ private static final class IncompatibleKeyType { @@ -285,6 +289,7 @@ public void testClear() { assertInvariants(map); } + @J2ktIncompatible // https://youtrack.jetbrains.com/issue/KT-58242/ undefined behavior (crash) public void testContainsKey() { Map map; K unmappedKey; @@ -368,6 +373,7 @@ public void testEntrySetForEmptyMap() { assertInvariants(map); } + @J2ktIncompatible // https://youtrack.jetbrains.com/issue/KT-58242/ undefined behavior (crash) public void testEntrySetContainsEntryIncompatibleKey() { Map map; Set> entrySet; @@ -414,9 +420,10 @@ public void testEntrySetContainsEntryNullKeyPresent() { } map.put(null, unmappedValue); - Entry entry = mapEntry(null, unmappedValue); + Entry<@Nullable K, V> entry = mapEntry(null, unmappedValue); assertTrue(entrySet.contains(entry)); - assertFalse(entrySet.contains(mapEntry(null, null))); + Entry<@Nullable K, @Nullable V> nonEntry = mapEntry(null, null); + assertFalse(entrySet.contains(nonEntry)); } public void testEntrySetContainsEntryNullKeyMissing() { @@ -436,14 +443,15 @@ public void testEntrySetContainsEntryNullKeyMissing() { } catch (UnsupportedOperationException e) { return; } - Entry entry = mapEntry(null, unmappedValue); + Entry<@Nullable K, V> nullKeyEntry = mapEntry(null, unmappedValue); try { - assertFalse(entrySet.contains(entry)); + assertFalse(entrySet.contains(nullKeyEntry)); } catch (NullPointerException e) { assertFalse(allowsNullKeys); } + Entry<@Nullable K, @Nullable V> nullKeyValueEntry = mapEntry(null, null); try { - assertFalse(entrySet.contains(mapEntry(null, null))); + assertFalse(entrySet.contains(nullKeyValueEntry)); } catch (NullPointerException e) { assertFalse(allowsNullKeys && allowsNullValues); } @@ -590,7 +598,7 @@ public void testEntrySetRemoveNullKeyPresent() { map.put(null, unmappedValue); assertEquals(unmappedValue, map.get(null)); assertTrue(map.containsKey(null)); - Entry entry = mapEntry(null, unmappedValue); + Entry<@Nullable K, V> entry = mapEntry(null, unmappedValue); assertTrue(entrySet.remove(entry)); assertNull(map.get(null)); assertFalse(map.containsKey(null)); @@ -605,7 +613,7 @@ public void testEntrySetRemoveNullKeyMissing() { } Set> entrySet = map.entrySet(); - Entry entry = mapEntry(null, getValueNotInPopulatedMap()); + Entry<@Nullable K, V> entry = mapEntry(null, getValueNotInPopulatedMap()); int initialSize = map.size(); if (supportsRemove) { try { @@ -768,9 +776,9 @@ public void testEntrySetAddAndAddAll() { Map map = makeEitherMap(); Set> entrySet = map.entrySet(); - Entry entryToAdd = mapEntry(null, null); + Entry<@Nullable K, @Nullable V> entryToAdd = mapEntry(null, null); try { - entrySet.add(entryToAdd); + entrySet.add((Entry) entryToAdd); fail("Expected UnsupportedOperationException or NullPointerException."); } catch (UnsupportedOperationException | NullPointerException e) { // Expected. @@ -778,7 +786,7 @@ public void testEntrySetAddAndAddAll() { assertInvariants(map); try { - entrySet.addAll(singleton(entryToAdd)); + entrySet.addAll(singleton((Entry) entryToAdd)); fail("Expected UnsupportedOperationException or NullPointerException."); } catch (UnsupportedOperationException | NullPointerException e) { // Expected. @@ -1616,7 +1624,8 @@ public void testValuesClear() { assertInvariants(map); } - static Entry mapEntry(K key, V value) { + static Entry mapEntry( + K key, V value) { return Collections.singletonMap(key, value).entrySet().iterator().next(); } } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java b/android/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java index 2adf0725147d..6887cabb1abc 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java @@ -21,6 +21,8 @@ import java.util.Arrays; import java.util.Collection; import java.util.Iterator; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A simplistic collection which implements only the bare minimum allowed by the spec, and throws @@ -29,24 +31,26 @@ * @author Kevin Bourrillion */ @GwtCompatible -public class MinimalCollection extends AbstractCollection { +@ElementTypesAreNonnullByDefault +public class MinimalCollection extends AbstractCollection { // TODO: expose allow nulls parameter? - public static MinimalCollection of(E... contents) { + public static MinimalCollection of(E... contents) { return new MinimalCollection<>(Object.class, true, contents); } // TODO: use this - public static MinimalCollection ofClassAndContents(Class type, E... contents) { + public static MinimalCollection ofClassAndContents( + Class type, E... contents) { return new MinimalCollection<>(type, true, contents); } private final E[] contents; - private final Class type; + private final Class type; private final boolean allowNulls; // Package-private so that it can be extended. - MinimalCollection(Class type, boolean allowNulls, E... contents) { + MinimalCollection(Class type, boolean allowNulls, E... contents) { // TODO: consider making it shuffle the contents to test iteration order. this.contents = Platform.clone(contents); this.type = type; @@ -67,7 +71,7 @@ public int size() { } @Override - public boolean contains(Object object) { + public boolean contains(@Nullable Object object) { if (!allowNulls) { // behave badly if (object == null) { @@ -97,8 +101,8 @@ public Iterator iterator() { } @Override - public Object[] toArray() { - Object[] result = new Object[contents.length]; + public @Nullable Object[] toArray() { + @Nullable Object[] result = new @Nullable Object[contents.length]; System.arraycopy(contents, 0, result, 0, contents.length); return result; } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java b/android/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java index 816a9737794f..7b06f78ed261 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java @@ -48,9 +48,9 @@ * @author Kevin Bourrillion */ @GwtCompatible -public final class MinimalIterable implements Iterable { +public final class MinimalIterable implements Iterable { /** Returns an iterable whose iterator returns the given elements in order. */ - public static MinimalIterable of(E... elements) { + public static MinimalIterable of(E... elements) { // Make sure to get an unmodifiable iterator return new MinimalIterable<>(Arrays.asList(elements).iterator()); } @@ -60,7 +60,7 @@ public static MinimalIterable of(E... elements) { * out of the source collection at the time this method is called. */ @SuppressWarnings("unchecked") // Es come in, Es go out - public static MinimalIterable from(Collection elements) { + public static MinimalIterable from(Collection elements) { return (MinimalIterable) of(elements.toArray()); } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java b/android/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java index 4027684b42c8..23e1c76d777f 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java @@ -22,6 +22,7 @@ import java.util.Collection; import java.util.List; import java.util.Set; +import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -32,20 +33,21 @@ * @author Regina O'Dell */ @GwtCompatible -public class MinimalSet extends MinimalCollection implements Set { +@ElementTypesAreNonnullByDefault +public class MinimalSet extends MinimalCollection implements Set { @SuppressWarnings("unchecked") // empty Object[] as E[] - public static MinimalSet of(E... contents) { + public static MinimalSet of(E... contents) { return ofClassAndContents(Object.class, (E[]) new Object[0], Arrays.asList(contents)); } @SuppressWarnings("unchecked") // empty Object[] as E[] - public static MinimalSet from(Collection contents) { + public static MinimalSet from(Collection contents) { return ofClassAndContents(Object.class, (E[]) new Object[0], contents); } - public static MinimalSet ofClassAndContents( - Class type, E[] emptyArrayForContents, Iterable contents) { + public static MinimalSet ofClassAndContents( + Class type, E[] emptyArrayForContents, Iterable contents) { List setContents = new ArrayList<>(); for (E e : contents) { if (!setContents.contains(e)) { @@ -55,7 +57,7 @@ public static MinimalSet ofClassAndContents( return new MinimalSet<>(type, setContents.toArray(emptyArrayForContents)); } - private MinimalSet(Class type, E... contents) { + private MinimalSet(Class type, E... contents) { super(type, true, contents); } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java index de031c9f46bf..5540b8ae6b45 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java @@ -22,6 +22,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Generator for collection of a particular size. @@ -29,7 +30,9 @@ * @author George van den Driessche */ @GwtCompatible -public final class OneSizeGenerator implements OneSizeTestContainerGenerator { +@ElementTypesAreNonnullByDefault +public final class OneSizeGenerator + implements OneSizeTestContainerGenerator { private final TestContainerGenerator generator; private final CollectionSize collectionSize; diff --git a/android/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java index 7e727cd8242b..9cb5a87e79e6 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionSize; import java.util.Collection; +import org.checkerframework.checker.nullness.qual.Nullable; /** * The subject-generator interface accepted by Collection testers, for testing a Collection at one @@ -31,7 +32,8 @@ * @author George van den Driessche */ @GwtCompatible -public interface OneSizeTestContainerGenerator +@ElementTypesAreNonnullByDefault +public interface OneSizeTestContainerGenerator extends TestSubjectGenerator, TestContainerGenerator { TestContainerGenerator getInnerGenerator(); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/SampleElements.java b/android/guava-testlib/src/com/google/common/collect/testing/SampleElements.java index 9fed1fbe8ed3..1b009b3bd330 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/SampleElements.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/SampleElements.java @@ -29,7 +29,8 @@ * @author Kevin Bourrillion */ @GwtCompatible -public class SampleElements implements Iterable { +@ElementTypesAreNonnullByDefault +public class SampleElements implements Iterable { // TODO: rename e3, e4 => missing1, missing2 private final E e0; private final E e1; @@ -89,8 +90,8 @@ public Ints() { } } - public static SampleElements> mapEntries( - SampleElements keys, SampleElements values) { + public static + SampleElements> mapEntries(SampleElements keys, SampleElements values) { return new SampleElements<>( Helpers.mapEntry(keys.e0(), values.e0()), Helpers.mapEntry(keys.e1(), values.e1()), diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestCharacterListGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestCharacterListGenerator.java index b7542b55b654..07b465bb889a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestCharacterListGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestCharacterListGenerator.java @@ -27,6 +27,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestCharacterListGenerator implements TestListGenerator { @Override public SampleElements samples() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java index f1df8c9da0d8..63c35be86abc 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Collection; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates collections, containing sample elements, to be tested. @@ -25,4 +26,6 @@ * @author Kevin Bourrillion */ @GwtCompatible -public interface TestCollectionGenerator extends TestContainerGenerator, E> {} +@ElementTypesAreNonnullByDefault +public interface TestCollectionGenerator + extends TestContainerGenerator, E> {} diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java index 6aa0c33d3852..b26a6a5832f9 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java @@ -26,6 +26,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestCollidingSetGenerator implements TestSetGenerator { @Override public SampleElements samples() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java index d08cf90c27d2..c6792bfdf519 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import org.checkerframework.checker.nullness.qual.Nullable; /** * To be implemented by test generators of things that can contain elements. Such things include @@ -29,7 +30,8 @@ * @author George van den Driessche */ @GwtCompatible -public interface TestContainerGenerator { +@ElementTypesAreNonnullByDefault +public interface TestContainerGenerator { /** Returns the sample elements that this generate populates its container with. */ SampleElements samples(); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java index c117fcda749a..56bd92d84bb5 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java @@ -29,6 +29,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestEnumMapGenerator implements TestMapGenerator { @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java index 88391ef03be7..d284807d33f6 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java @@ -28,6 +28,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestEnumSetGenerator implements TestSetGenerator { @Override public SampleElements samples() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestIntegerSetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestIntegerSetGenerator.java index 9cd9ecb43d6b..633329c1e626 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestIntegerSetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestIntegerSetGenerator.java @@ -27,6 +27,7 @@ * @author Gregory Kick */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestIntegerSetGenerator implements TestSetGenerator { @Override public SampleElements samples() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestIntegerSortedSetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestIntegerSortedSetGenerator.java index babac37bcd79..137d36b75ba5 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestIntegerSortedSetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestIntegerSortedSetGenerator.java @@ -28,6 +28,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestIntegerSortedSetGenerator extends TestIntegerSetGenerator { @Override protected abstract SortedSet create(Integer[] elements); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java index 99f95d0af0be..34117f898874 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates sets, containing sample elements, to be tested. @@ -25,7 +26,8 @@ * @author Kevin Bourrillion */ @GwtCompatible -public interface TestListGenerator extends TestCollectionGenerator { +@ElementTypesAreNonnullByDefault +public interface TestListGenerator extends TestCollectionGenerator { @Override List create(Object... elements); } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java index 0c298cc1226b..2d51c2ab3cfd 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java @@ -21,6 +21,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates map entries using sample keys and sample values. @@ -28,7 +29,10 @@ * @author Jesse Wilson */ @GwtCompatible -public abstract class TestMapEntrySetGenerator implements TestSetGenerator> { +@ElementTypesAreNonnullByDefault +public abstract class TestMapEntrySetGenerator< + K extends @Nullable Object, V extends @Nullable Object> + implements TestSetGenerator> { private final SampleElements keys; private final SampleElements values; diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java index 2267a04f5250..efc85fc5563b 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Map; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates maps, containing sample elements, to be tested. @@ -25,7 +26,9 @@ * @author George van den Driessche */ @GwtCompatible -public interface TestMapGenerator extends TestContainerGenerator, Map.Entry> { +@ElementTypesAreNonnullByDefault +public interface TestMapGenerator + extends TestContainerGenerator, Map.Entry> { K[] createKeyArray(int length); V[] createValueArray(int length); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java index 939b48583d4b..c5b093b1880d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Queue; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates queues, containing sample elements, to be tested. @@ -25,7 +26,8 @@ * @author Jared Levy */ @GwtCompatible -public interface TestQueueGenerator extends TestCollectionGenerator { +@ElementTypesAreNonnullByDefault +public interface TestQueueGenerator extends TestCollectionGenerator { @Override Queue create(Object... elements); } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java index 680ff44eee16..2ed582aa7a36 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates sets, containing sample elements, to be tested. @@ -25,7 +26,8 @@ * @author Kevin Bourrillion */ @GwtCompatible -public interface TestSetGenerator extends TestCollectionGenerator { +@ElementTypesAreNonnullByDefault +public interface TestSetGenerator extends TestCollectionGenerator { @Override Set create(Object... elements); } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestSortedMapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestSortedMapGenerator.java index 5d902189cd76..107a8e76cea7 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestSortedMapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestSortedMapGenerator.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Map.Entry; import java.util.SortedMap; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates sorted maps, containing sample elements, to be tested. @@ -26,7 +27,9 @@ * @author Louis Wasserman */ @GwtCompatible -public interface TestSortedMapGenerator extends TestMapGenerator { +@ElementTypesAreNonnullByDefault +public interface TestSortedMapGenerator + extends TestMapGenerator { @Override SortedMap create(Object... elements); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestSortedSetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestSortedSetGenerator.java index 8f7ee5c76f7a..10abd8b4d171 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestSortedSetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestSortedSetGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.SortedSet; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates sorted sets, containing sample elements, to be tested. @@ -25,7 +26,8 @@ * @author Louis Wasserman */ @GwtCompatible -public interface TestSortedSetGenerator extends TestSetGenerator { +@ElementTypesAreNonnullByDefault +public interface TestSortedSetGenerator extends TestSetGenerator { @Override SortedSet create(Object... elements); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java index f9c58cd7f333..081e9eaddd26 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringCollectionGenerator implements TestCollectionGenerator { @Override public SampleElements samples() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java index 7e22ab143059..fe1de2eb2450 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java @@ -26,6 +26,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringListGenerator implements TestListGenerator { @Override public SampleElements samples() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java index 3449d3a9c3f4..c7aa85cc82a2 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java @@ -29,6 +29,7 @@ * @author George van den Driessche */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringMapGenerator implements TestMapGenerator { @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java index 16cb2539d1f3..1102c3456bd0 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringQueueGenerator implements TestQueueGenerator { @Override public SampleElements samples() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java index 1724bb2c8dc6..2949e4aca819 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java @@ -27,6 +27,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringSetGenerator implements TestSetGenerator { @Override public SampleElements samples() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestStringSortedMapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestStringSortedMapGenerator.java index c1878bea2214..49ce6786db2d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestStringSortedMapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestStringSortedMapGenerator.java @@ -29,6 +29,7 @@ * @author Chris Povirk */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringSortedMapGenerator extends TestStringMapGenerator implements TestSortedMapGenerator { @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java index 7f5453d63cd9..1c695f961faf 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringSortedSetGenerator extends TestStringSetGenerator implements TestSortedSetGenerator { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java index 4a8ae76a8f40..431e7e8103d7 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java @@ -17,6 +17,7 @@ package com.google.common.collect.testing; import com.google.common.annotations.GwtCompatible; +import org.checkerframework.checker.nullness.qual.Nullable; /** * To be implemented by test generators that can produce test subjects without requiring any @@ -26,6 +27,7 @@ * @author George van den Driessche */ @GwtCompatible -public interface TestSubjectGenerator { +@ElementTypesAreNonnullByDefault +public interface TestSubjectGenerator { T createTestSubject(); } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java index 9b4602d045d8..d4d772b81e1d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java @@ -27,6 +27,7 @@ * @author Regina O'Dell */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestUnhashableCollectionGenerator> implements TestCollectionGenerator { @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractBiMapTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractBiMapTester.java index 85ddb447648b..8ca0bb42ce5d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractBiMapTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractBiMapTester.java @@ -24,19 +24,23 @@ import java.util.Collection; import java.util.List; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** Skeleton for a tester of a {@code BiMap}. */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public abstract class AbstractBiMapTester extends AbstractMapTester { +@ElementTypesAreNonnullByDefault +public abstract class AbstractBiMapTester + extends AbstractMapTester { @Override protected BiMap getMap() { return (BiMap) super.getMap(); } - static Entry reverseEntry(Entry entry) { + static Entry reverseEntry( + Entry entry) { return Helpers.mapEntry(entry.getValue(), entry.getKey()); } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractListMultimapTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractListMultimapTester.java index 7bce8b012072..306fec7f1b70 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractListMultimapTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractListMultimapTester.java @@ -20,6 +20,7 @@ import com.google.common.collect.ListMultimap; import java.util.Arrays; import java.util.Collection; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -29,7 +30,8 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class AbstractListMultimapTester +@ElementTypesAreNonnullByDefault +public class AbstractListMultimapTester extends AbstractMultimapTester> { @Override @@ -38,7 +40,7 @@ protected void assertGet(K key, V... values) { } @Override - protected void assertGet(K key, Collection values) { + protected void assertGet(K key, Collection values) { assertEqualInOrder(values, multimap().get(key)); if (!values.isEmpty()) { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultimapTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultimapTester.java index 92d82c6af38e..46ead57e57e3 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultimapTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultimapTester.java @@ -28,6 +28,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -37,7 +38,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public abstract class AbstractMultimapTester> +@ElementTypesAreNonnullByDefault +public abstract class AbstractMultimapTester< + K extends @Nullable Object, V extends @Nullable Object, M extends Multimap> extends AbstractContainerTester> { private M multimap; @@ -46,7 +49,9 @@ protected M multimap() { return multimap; } - /** @return an array of the proper size with {@code null} as the key of the middle element. */ + /** + * @return an array of the proper size with {@code null} as the key of the middle element. + */ protected Entry[] createArrayWithNullKey() { Entry[] array = createSamplesArray(); int nullKeyLocation = getNullLocation(); @@ -55,7 +60,9 @@ protected Entry[] createArrayWithNullKey() { return array; } - /** @return an array of the proper size with {@code null} as the value of the middle element. */ + /** + * @return an array of the proper size with {@code null} as the value of the middle element. + */ protected Entry[] createArrayWithNullValue() { Entry[] array = createSamplesArray(); int nullValueLocation = getNullLocation(); @@ -134,7 +141,9 @@ protected Multimap resetContainer(Entry... newContents) { return multimap; } - /** @see AbstractContainerTester#resetContainer() */ + /** + * @see AbstractContainerTester#resetContainer() + */ protected void resetCollection() { resetContainer(); } @@ -143,7 +152,7 @@ protected void assertGet(K key, V... values) { assertGet(key, Arrays.asList(values)); } - protected void assertGet(K key, Collection values) { + protected void assertGet(K key, Collection values) { assertEqualIgnoringOrder(values, multimap().get(key)); if (!values.isEmpty()) { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java index cd28cdc2810b..b493378b5fb8 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java @@ -26,6 +26,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.Multiset; import com.google.common.collect.Multiset.Entry; import com.google.common.collect.testing.Helpers; @@ -384,6 +385,7 @@ public void testSetCount_negative_removeUnsupported() { * Returns {@link Method} instances for the {@code setCount()} tests that assume multisets support * duplicates so that the test of {@code Multisets.forSet()} can suppress them. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getSetCountDuplicateInitializingMethods() { return Arrays.asList( @@ -392,6 +394,7 @@ public static List getSetCountDuplicateInitializingMethods() { getMethod("testSetCount_threeToOne_supported")); } + @J2ktIncompatible @GwtIncompatible // reflection private static Method getMethod(String methodName) { return Helpers.getMethod(AbstractMultisetSetCountTester.class, methodName); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java b/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java index 13efdcd6d1be..260a160fbb94 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java @@ -31,6 +31,7 @@ * @author Hayward Chan */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class BiMapGenerators { public static class ImmutableBiMapGenerator extends TestStringBiMapGenerator { @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapInverseTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapInverseTester.java index 984558e2b72d..f151d8fbaf63 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapInverseTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapInverseTester.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.BiMap; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; @@ -72,11 +73,13 @@ private static class BiMapPair implements Serializable { * Returns {@link Method} instances for the tests that assume that the inverse will be the same * after serialization. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getInverseSameAfterSerializingMethods() { return Collections.singletonList(getMethod("testInverseSerialization")); } + @J2ktIncompatible @GwtIncompatible // reflection private static Method getMethod(String methodName) { return Helpers.getMethod(BiMapInverseTester.class, methodName); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java b/android/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java index 35579a01d758..dcd9e649fb67 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java @@ -31,6 +31,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Derived suite generators for Guava collection interfaces, split out of the suite builders so that @@ -39,8 +40,10 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public final class DerivedGoogleCollectionGenerators { - public static class MapGenerator implements TestMapGenerator, DerivedGenerator { + public static class MapGenerator + implements TestMapGenerator, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> generator; @@ -87,7 +90,7 @@ public TestSubjectGenerator getInnerGenerator() { } } - public static class InverseBiMapGenerator + public static class InverseBiMapGenerator implements TestBiMapGenerator, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> generator; @@ -151,7 +154,7 @@ public TestSubjectGenerator getInnerGenerator() { } } - public static class BiMapValueSetGenerator + public static class BiMapValueSetGenerator implements TestSetGenerator, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> mapGenerator; private final SampleElements samples; diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/ElementTypesAreNonnullByDefault.java b/android/guava-testlib/src/com/google/common/collect/testing/google/ElementTypesAreNonnullByDefault.java new file mode 100644 index 000000000000..c666efdcbff8 --- /dev/null +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/ElementTypesAreNonnullByDefault.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2021 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.common.collect.testing.google; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import com.google.common.annotations.GwtCompatible; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; + +/** + * Marks all "top-level" types as non-null in a way that is recognized by Kotlin. Note that this + * unfortunately includes type-variable usages, so we also provide {@link ParametricNullness} to + * "undo" it as best we can. + */ +@GwtCompatible +@Retention(RUNTIME) +@Target(TYPE) +@TypeQualifierDefault({FIELD, METHOD, PARAMETER}) +@Nonnull +@interface ElementTypesAreNonnullByDefault {} diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java b/android/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java index 0839f09188ae..86e638b009cc 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java @@ -37,6 +37,7 @@ * @author Hayward Chan */ @GwtCompatible +@ElementTypesAreNonnullByDefault public final class ListGenerators { private ListGenerators() {} diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapAsMapTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapAsMapTester.java index ca6f21af2c55..08f77c653d29 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapAsMapTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapAsMapTester.java @@ -32,6 +32,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -43,7 +44,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class ListMultimapAsMapTester extends AbstractListMultimapTester { +@ElementTypesAreNonnullByDefault +public class ListMultimapAsMapTester + extends AbstractListMultimapTester { public void testAsMapValuesImplementList() { for (Collection valueCollection : multimap().asMap().values()) { assertTrue(valueCollection instanceof List); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java index 35063e815d0b..f3e2c246555a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java @@ -46,6 +46,7 @@ * @author Hayward Chan */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MapGenerators { public static class ImmutableMapGenerator extends TestStringMapGenerator { @Override @@ -232,7 +233,7 @@ public String[] createKeyArray(int length) { @Override @SuppressWarnings({"unchecked", "rawtypes"}) // needed for arrays - public ImmutableSet[] createValueArray(int length) { + public Collection[] createValueArray(int length) { return new ImmutableSet[length]; } } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapEqualsTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapEqualsTester.java index 21163602eecc..d4c01bc01313 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapEqualsTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapEqualsTester.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -36,7 +37,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class MultimapEqualsTester extends AbstractMultimapTester> { +@ElementTypesAreNonnullByDefault +public class MultimapEqualsTester + extends AbstractMultimapTester> { public void testEqualsTrue() { new EqualsTester() .addEqualityGroup(multimap(), getSubjectGenerator().create(getSampleElements().toArray())) diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutTester.java index c108e8525ca4..5bf9df12a0ae 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutTester.java @@ -35,6 +35,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -44,7 +45,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class MultimapPutTester extends AbstractMultimapTester> { +@ElementTypesAreNonnullByDefault +public class MultimapPutTester + extends AbstractMultimapTester> { @MapFeature.Require(absent = SUPPORTS_PUT) public void testPutUnsupported() { try { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapSizeTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapSizeTester.java index 23d6bdf043e3..a783f44acf45 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapSizeTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapSizeTester.java @@ -28,6 +28,7 @@ import com.google.common.collect.testing.features.MapFeature; import java.util.Collection; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -37,7 +38,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class MultimapSizeTester extends AbstractMultimapTester> { +@ElementTypesAreNonnullByDefault +public class MultimapSizeTester + extends AbstractMultimapTester> { public void testSize() { int expectedSize = getNumElements(); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetCountTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetCountTester.java index 7c07cd33d06c..ab62c29cc0aa 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetCountTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetCountTester.java @@ -23,6 +23,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionFeature; @@ -86,6 +87,7 @@ public void testCount_wrongType() { * Returns {@link Method} instances for the read tests that assume multisets support duplicates so * that the test of {@code Multisets.forSet()} can suppress them. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getCountDuplicateInitializingMethods() { return Arrays.asList(Helpers.getMethod(MultisetCountTester.class, "testCount_3")); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetElementSetTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetElementSetTester.java index baa6071f84bf..193fc62098db 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetElementSetTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetElementSetTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -99,6 +100,7 @@ public void testElementSetClear() { * Returns {@link Method} instances for the read tests that assume multisets support duplicates so * that the test of {@code Multisets.forSet()} can suppress them. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getElementSetDuplicateInitializingMethods() { return Arrays.asList( diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java index 9e47f31c5651..090ff4d581e7 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.features.CollectionFeature; @@ -28,6 +29,7 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -38,7 +40,8 @@ */ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class MultisetIteratorTester extends AbstractMultisetTester { +@ElementTypesAreNonnullByDefault +public class MultisetIteratorTester extends AbstractMultisetTester { @CollectionFeature.Require({SUPPORTS_ITERATOR_REMOVE, KNOWN_ORDER}) public void testRemovingIteratorKnownOrder() { new IteratorTester( @@ -99,6 +102,7 @@ protected Iterator newTargetIterator() { * Returns {@link Method} instances for the tests that assume multisets support duplicates so that * the test of {@code Multisets.forSet()} can suppress them. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getIteratorDuplicateInitializingMethods() { return Arrays.asList( diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetRemoveTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetRemoveTester.java index e6594c18a2d1..e31dee7726e1 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetRemoveTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetRemoveTester.java @@ -25,6 +25,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionFeature; @@ -188,6 +189,7 @@ public void testRetainAllIgnoresCount() { * Returns {@link Method} instances for the remove tests that assume multisets support duplicates * so that the test of {@code Multisets.forSet()} can suppress them. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getRemoveDuplicateInitializingMethods() { return Arrays.asList( diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java b/android/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java index 0b55a2798ae1..f6b51743a54f 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java @@ -59,6 +59,7 @@ * @author Hayward Chan */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SetGenerators { public static class ImmutableSetCopyOfGenerator extends TestStringSetGenerator { @@ -400,7 +401,7 @@ protected SortedSet create(Integer[] elements) { /** Sorts the elements in reverse natural order. */ @Override public List order(List insertionOrder) { - Collections.sort(insertionOrder, Ordering.natural().reverse()); + Collections.sort(insertionOrder, Ordering.natural().reverse()); return insertionOrder; } } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapAsMapTester.java b/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapAsMapTester.java index 6e7995720846..0a42414172e6 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapAsMapTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapAsMapTester.java @@ -32,6 +32,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -43,7 +44,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class SetMultimapAsMapTester extends AbstractMultimapTester> { +@ElementTypesAreNonnullByDefault +public class SetMultimapAsMapTester + extends AbstractMultimapTester> { public void testAsMapValuesImplementSet() { for (Collection valueCollection : multimap().asMap().values()) { assertTrue(valueCollection instanceof Set); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java b/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java index 424fbb17efe3..f98674a5068e 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java @@ -42,6 +42,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class SortedMapGenerators { public static class ImmutableSortedMapGenerator extends TestStringSortedMapGenerator { @Override @@ -116,7 +117,7 @@ protected List create(String[] elements) { @Override public List order(List insertionOrder) { - return Ordering.natural().sortedCopy(insertionOrder); + return Ordering.natural().sortedCopy(insertionOrder); } } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestBiMapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestBiMapGenerator.java index 11c353b6bbce..5194e50c603a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestBiMapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestBiMapGenerator.java @@ -20,6 +20,7 @@ import com.google.common.collect.BiMap; import com.google.common.collect.testing.TestContainerGenerator; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates bimaps, containing sample entries, to be tested. @@ -27,7 +28,9 @@ * @author Louis Wasserman */ @GwtCompatible -public interface TestBiMapGenerator extends TestContainerGenerator, Entry> { +@ElementTypesAreNonnullByDefault +public interface TestBiMapGenerator + extends TestContainerGenerator, Entry> { K[] createKeyArray(int length); V[] createValueArray(int length); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java index 851e221896c0..c9d4652fbd3d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java @@ -30,6 +30,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestEnumMultisetGenerator implements TestMultisetGenerator { @Override public SampleElements samples() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestListMultimapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestListMultimapGenerator.java index 1ab668fb92b0..6a71573f11b6 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestListMultimapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestListMultimapGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.ListMultimap; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A generator for {@code ListMultimap} implementations based on test data. @@ -25,5 +26,6 @@ * @author Louis Wasserman */ @GwtCompatible -public interface TestListMultimapGenerator +@ElementTypesAreNonnullByDefault +public interface TestListMultimapGenerator extends TestMultimapGenerator> {} diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestMultimapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestMultimapGenerator.java index 06ce43f306c9..79c6874bffbb 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestMultimapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestMultimapGenerator.java @@ -22,6 +22,7 @@ import com.google.common.collect.testing.TestContainerGenerator; import java.util.Collection; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates multimaps, containing sample elements, to be tested. @@ -29,7 +30,9 @@ * @author Louis Wasserman */ @GwtCompatible -public interface TestMultimapGenerator> +@ElementTypesAreNonnullByDefault +public interface TestMultimapGenerator< + K extends @Nullable Object, V extends @Nullable Object, M extends Multimap> extends TestContainerGenerator> { K[] createKeyArray(int length); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestMultisetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestMultisetGenerator.java index d3b5acd49d7e..272313253dea 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestMultisetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestMultisetGenerator.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.Multiset; import com.google.common.collect.testing.TestCollectionGenerator; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates multisets, containing sample elements, to be tested. @@ -26,7 +27,9 @@ * @author Jared Levy */ @GwtCompatible -public interface TestMultisetGenerator extends TestCollectionGenerator { +@ElementTypesAreNonnullByDefault +public interface TestMultisetGenerator + extends TestCollectionGenerator { @Override Multiset create(Object... elements); } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java index d475397edd21..2232c494d075 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java @@ -32,6 +32,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringBiMapGenerator implements TestBiMapGenerator { @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java index 64b33af0a6e7..5ad6c53f755d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java @@ -30,6 +30,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringListMultimapGenerator implements TestListMultimapGenerator { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringMultisetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringMultisetGenerator.java index eeacf5d1932c..b7b2558d9919 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringMultisetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringMultisetGenerator.java @@ -28,6 +28,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringMultisetGenerator implements TestMultisetGenerator { @Override public SampleElements samples() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java index e49ccffed7a8..27e43a805d93 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java @@ -29,6 +29,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringSetMultimapGenerator implements TestSetMultimapGenerator { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java b/android/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java index 40b2c859d20c..4fb1bc76cf74 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java @@ -35,6 +35,7 @@ import java.util.List; import java.util.Map.Entry; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A series of tests that support asserting that collections cannot be modified, either through @@ -43,11 +44,13 @@ * @author Robert Konigsberg */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableCollectionTests { public static void assertMapEntryIsUnmodifiable(Entry entry) { try { - entry.setValue(null); + Entry nullableValueEntry = (Entry) entry; + nullableValueEntry.setValue(null); fail("setValue on unmodifiable Map.Entry succeeded"); } catch (UnsupportedOperationException expected) { } @@ -109,7 +112,8 @@ public static void assertIteratorsInOrder( * @param sampleElement an element of the same type as that contained by {@code collection}. * {@code collection} may or may not have {@code sampleElement} as a member. */ - public static void assertCollectionIsUnmodifiable(Collection collection, E sampleElement) { + public static void assertCollectionIsUnmodifiable( + Collection collection, E sampleElement) { Collection siblingCollection = new ArrayList<>(); siblingCollection.add(sampleElement); @@ -181,7 +185,8 @@ public static void assertCollectionIsUnmodifiable(Collection collection, * @param sampleElement an element of the same type as that contained by {@code set}. {@code set} * may or may not have {@code sampleElement} as a member. */ - public static void assertSetIsUnmodifiable(Set set, E sampleElement) { + public static void assertSetIsUnmodifiable( + Set set, E sampleElement) { assertCollectionIsUnmodifiable(set, sampleElement); } @@ -201,7 +206,8 @@ public static void assertSetIsUnmodifiable(Set set, E sampleElement) { * @param sampleElement an element of the same type as that contained by {@code multiset}. {@code * multiset} may or may not have {@code sampleElement} as a member. */ - public static void assertMultisetIsUnmodifiable(Multiset multiset, E sampleElement) { + public static void assertMultisetIsUnmodifiable( + Multiset multiset, E sampleElement) { Multiset copy = LinkedHashMultiset.create(multiset); assertCollectionsAreEquivalent(multiset, copy); @@ -263,8 +269,8 @@ public E getElement() { * @param sampleValue a key of the same type as that contained by {@code multimap}. {@code * multimap} may or may not have {@code sampleValue} as a key. */ - public static void assertMultimapIsUnmodifiable( - Multimap multimap, K sampleKey, V sampleValue) { + public static + void assertMultimapIsUnmodifiable(Multimap multimap, K sampleKey, V sampleValue) { List> originalEntries = Collections.unmodifiableList(Lists.newArrayList(multimap.entries())); @@ -403,13 +409,13 @@ public static void assertMultimapIsUnmodifiable( assertMultimapRemainsUnmodified(multimap, originalEntries); } - private static void assertCollectionsAreEquivalent( + private static void assertCollectionsAreEquivalent( Collection expected, Collection actual) { assertIteratorsInOrder(expected.iterator(), actual.iterator()); } - private static void assertMultimapRemainsUnmodified( - Multimap expected, List> actual) { + private static + void assertMultimapRemainsUnmodified(Multimap expected, List> actual) { assertIteratorsInOrder(expected.entries().iterator(), actual.iterator()); } } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java index 5275acb250e0..d6ecb9a50c4a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java @@ -21,6 +21,7 @@ import com.google.common.collect.testing.Helpers; import java.util.Collection; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -29,8 +30,9 @@ * @author George van den Driessche */ @GwtCompatible +@ElementTypesAreNonnullByDefault @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class AbstractListTester extends AbstractCollectionTester { +public class AbstractListTester extends AbstractCollectionTester { /* * Previously we had a field named list that was initialized to the value of * collection in setUp(), but that caused problems when a tester changed the diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java index b4193ae1d0a8..09094ac23b84 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java @@ -25,6 +25,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.MinimalCollection; @@ -34,6 +35,7 @@ import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -45,7 +47,8 @@ */ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class CollectionAddAllTester extends AbstractCollectionTester { +public class CollectionAddAllTester + extends AbstractCollectionTester { @CollectionFeature.Require(SUPPORTS_ADD) public void testAddAll_supportedNothing() { assertFalse("addAll(nothing) should return false", collection.addAll(emptyCollection())); @@ -166,6 +169,7 @@ public void testAddAll_nullCollectionReference() { * suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddAllNullUnsupportedMethod() { return Helpers.getMethod(CollectionAddAllTester.class, "testAddAll_nullUnsupported"); @@ -177,6 +181,7 @@ public static Method getAddAllNullUnsupportedMethod() { * figure out what to do with {@code ConcurrentHashMap} support for * {@code entrySet().add()}. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddAllUnsupportedNonePresentMethod() { return Helpers.getMethod(CollectionAddAllTester.class, "testAddAll_unsupportedNonePresent"); @@ -188,6 +193,7 @@ public static Method getAddAllUnsupportedNonePresentMethod() { * figure out what to do with {@code ConcurrentHashMap} support for * {@code entrySet().add()}. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddAllUnsupportedSomePresentMethod() { return Helpers.getMethod(CollectionAddAllTester.class, "testAddAll_unsupportedSomePresent"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java index 321bf9486e50..5b64d4790fe4 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; @@ -111,6 +112,7 @@ public void testAddConcurrentWithIteration() { * will be to permit them, as it seems more likely that code would depend on that behavior than on * the other. Thus, we say the bug is in add(), which fails to support null. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddNullSupportedMethod() { return Helpers.getMethod(CollectionAddTester.class, "testAdd_nullSupported"); @@ -122,6 +124,7 @@ public static Method getAddNullSupportedMethod() { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddNullUnsupportedMethod() { return Helpers.getMethod(CollectionAddTester.class, "testAdd_nullUnsupported"); @@ -133,6 +136,7 @@ public static Method getAddNullUnsupportedMethod() { * what to do with {@code ConcurrentHashMap} support for {@code * entrySet().add()}. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddUnsupportedNotPresentMethod() { return Helpers.getMethod(CollectionAddTester.class, "testAdd_unsupportedNotPresent"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java index c2a0b68efaa0..61aa0f54d775 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; @@ -64,6 +65,7 @@ public void testCreateWithNull_unsupported() { * can suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getCreateWithNullUnsupportedMethod() { return Helpers.getMethod(CollectionCreationTester.class, "testCreateWithNull_unsupported"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java index 1699fe19dced..f4f05b4d5d4b 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java @@ -39,6 +39,7 @@ import java.util.Map.Entry; import java.util.NoSuchElementException; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -49,7 +50,9 @@ */ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class CollectionIteratorTester extends AbstractCollectionTester { +@ElementTypesAreNonnullByDefault +public class CollectionIteratorTester + extends AbstractCollectionTester { public void testIterator() { List iteratorElements = new ArrayList<>(); for (E element : collection) { // uses iterator() diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java index b40fc3636943..f6b8064b9a4d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.WrongType; @@ -194,6 +195,7 @@ private void expectArrayContentsInOrder(List expected, Object[] actual) { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 6260652 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getToArrayIsPlainObjectArrayMethod() { return Helpers.getMethod(CollectionToArrayTester.class, "testToArray_isPlainObjectArray"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapPutIfAbsentTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapPutIfAbsentTester.java index 955123658144..c0293f625152 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapPutIfAbsentTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapPutIfAbsentTester.java @@ -39,6 +39,7 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. +@ElementTypesAreNonnullByDefault public class ConcurrentMapPutIfAbsentTester extends AbstractMapTester { @Override protected ConcurrentMap getMap() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapRemoveTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapRemoveTester.java index 87cc319b3b18..b96dda1f5f4f 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapRemoveTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapRemoveTester.java @@ -36,6 +36,7 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. +@ElementTypesAreNonnullByDefault public class ConcurrentMapRemoveTester extends AbstractMapTester { @Override protected ConcurrentMap getMap() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceEntryTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceEntryTester.java index 57f631cd8b24..544afc1c2e3a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceEntryTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceEntryTester.java @@ -37,6 +37,7 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. +@ElementTypesAreNonnullByDefault public class ConcurrentMapReplaceEntryTester extends AbstractMapTester { @Override protected ConcurrentMap getMap() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceTester.java index f0bc16447239..3e4255283e4d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceTester.java @@ -38,6 +38,7 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. +@ElementTypesAreNonnullByDefault public class ConcurrentMapReplaceTester extends AbstractMapTester { @Override protected ConcurrentMap getMap() { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ElementTypesAreNonnullByDefault.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ElementTypesAreNonnullByDefault.java new file mode 100644 index 000000000000..6d5d26c79493 --- /dev/null +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ElementTypesAreNonnullByDefault.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2021 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.common.collect.testing.testers; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import com.google.common.annotations.GwtCompatible; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; + +/** + * Marks all "top-level" types as non-null in a way that is recognized by Kotlin. Note that this + * unfortunately includes type-variable usages, so we also provide {@link ParametricNullness} to + * "undo" it as best we can. + */ +@GwtCompatible +@Retention(RUNTIME) +@Target(TYPE) +@TypeQualifierDefault({FIELD, METHOD, PARAMETER}) +@Nonnull +@interface ElementTypesAreNonnullByDefault {} diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java index d2902358d1ee..f48f0b309a84 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -153,6 +154,7 @@ public void testAddAtIndex_tooLarge() { * Returns the {@link Method} instance for {@link #testAddAtIndex_nullSupported()} so that tests * can suppress it. See {@link CollectionAddTester#getAddNullSupportedMethod()} for details. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddNullSupportedMethod() { return Helpers.getMethod(ListAddAtIndexTester.class, "testAddAtIndex_nullSupported"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java index 5c953ce4bf19..1f85c13f6b30 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -75,6 +76,7 @@ public void testAdd_supportedNullPresent() { * Returns the {@link Method} instance for {@link #testAdd_supportedNullPresent()} so that tests * can suppress it. See {@link CollectionAddTester#getAddNullSupportedMethod()} for details. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddSupportedNullPresentMethod() { return Helpers.getMethod(ListAddTester.class, "testAdd_supportedNullPresent"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java index 93a8526791d8..b6c6ef520339 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import java.lang.reflect.Method; import org.junit.Ignore; @@ -45,6 +46,7 @@ public void testHashCode() { * Returns the {@link Method} instance for {@link #testHashCode()} so that list tests on * unhashable objects can suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()}. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getHashCodeMethod() { return Helpers.getMethod(ListHashCodeTester.class, "testHashCode"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java index 0d4b13e68413..8f8b3567faeb 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java @@ -26,6 +26,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.IteratorFeature; import com.google.common.collect.testing.ListIteratorTester; @@ -36,6 +37,7 @@ import java.util.ListIterator; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -47,7 +49,8 @@ */ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class ListListIteratorTester extends AbstractListTester { +@ElementTypesAreNonnullByDefault +public class ListListIteratorTester extends AbstractListTester { @CollectionFeature.Require(absent = SUPPORTS_REMOVE) @ListFeature.Require(absent = {SUPPORTS_SET, SUPPORTS_ADD_WITH_INDEX}) public void testListIterator_unmodifiable() { @@ -111,6 +114,7 @@ public void testListIterator_atSize() { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 6570575 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getListIteratorFullyModifiableMethod() { return Helpers.getMethod(ListListIteratorTester.class, "testListIterator_fullyModifiable"); @@ -120,6 +124,7 @@ public static Method getListIteratorFullyModifiableMethod() { * Returns the {@link Method} instance for {@link #testListIterator_unmodifiable()} so that it can * be suppressed in GWT tests. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getListIteratorUnmodifiableMethod() { return Helpers.getMethod(ListListIteratorTester.class, "testListIterator_unmodifiable"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java index 844f1b4d6052..49ee7892d45b 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -142,6 +143,7 @@ private int aValidIndex() { * will be to permit them, as it seems more likely that code would depend on that behavior than on * the other. Thus, we say the bug is in set(), which fails to support null. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSetNullSupportedMethod() { return Helpers.getMethod(ListSetTester.class, "testSet_null"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java index 47080164dd4d..5732b6f6464c 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java @@ -27,6 +27,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -318,6 +319,7 @@ public void testReserializeSubList() { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 6570631 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSubListOriginalListSetAffectsSubListMethod() { return getMethod(ListSubListTester.class, "testSubList_originalListSetAffectsSubList"); @@ -330,6 +332,7 @@ public static Method getSubListOriginalListSetAffectsSubListMethod() { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 6570631 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSubListOriginalListSetAffectsSubListLargeListMethod() { return getMethod(ListSubListTester.class, "testSubList_originalListSetAffectsSubListLargeList"); @@ -342,6 +345,7 @@ public static Method getSubListOriginalListSetAffectsSubListLargeListMethod() { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 6570575 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSubListSubListRemoveAffectsOriginalLargeListMethod() { return getMethod(ListSubListTester.class, "testSubList_subListRemoveAffectsOriginalLargeList"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java index 0810dea28a54..f3ee117f63b5 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionSize; @@ -147,6 +148,7 @@ private void expectFirstRemoved(Entry[] entries) { * tests can suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getCreateWithNullKeyUnsupportedMethod() { return Helpers.getMethod(MapCreationTester.class, "testCreateWithNullKeyUnsupported"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapEntrySetTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapEntrySetTester.java index 537f091b4a06..28583b485994 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapEntrySetTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapEntrySetTester.java @@ -27,6 +27,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; @@ -141,26 +142,31 @@ public void testSetValueWithNullValuesAbsent() { expectUnchanged(); } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getContainsEntryWithIncomparableKeyMethod() { return Helpers.getMethod(MapEntrySetTester.class, "testContainsEntryWithIncomparableKey"); } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getContainsEntryWithIncomparableValueMethod() { return Helpers.getMethod(MapEntrySetTester.class, "testContainsEntryWithIncomparableValue"); } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSetValueMethod() { return Helpers.getMethod(MapEntrySetTester.class, "testSetValue"); } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSetValueWithNullValuesPresentMethod() { return Helpers.getMethod(MapEntrySetTester.class, "testSetValueWithNullValuesPresent"); } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSetValueWithNullValuesAbsentMethod() { return Helpers.getMethod(MapEntrySetTester.class, "testSetValueWithNullValuesAbsent"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java index d693e6b5e10f..387b25462c64 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java @@ -25,6 +25,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.MinimalCollection; @@ -38,6 +39,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -49,7 +51,9 @@ */ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class MapPutAllTester extends AbstractMapTester { +@ElementTypesAreNonnullByDefault +public class MapPutAllTester + extends AbstractMapTester { private List> containsNullKey; private List> containsNullValue; @@ -195,6 +199,7 @@ private void putAll(Iterable> entries) { * can suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getPutAllNullKeyUnsupportedMethod() { return Helpers.getMethod(MapPutAllTester.class, "testPutAll_nullKeyUnsupported"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java index a81a5dd78a73..059b46c47bc7 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionSize; @@ -256,6 +257,7 @@ private V put(Entry entry) { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getPutNullKeyUnsupportedMethod() { return Helpers.getMethod(MapPutTester.class, "testPut_nullKeyUnsupported"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java index 197496827e01..30aab56e195b 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -57,6 +58,7 @@ public void testAdd_supportedNullPresent() { * Returns the {@link Method} instance for {@link #testAdd_supportedNullPresent()} so that tests * can suppress it. See {@link CollectionAddTester#getAddNullSupportedMethod()} for details. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddSupportedNullPresentMethod() { return Helpers.getMethod(SetAddTester.class, "testAdd_supportedNullPresent"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java index 5f60327d47af..3b06c5bd21f1 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -69,6 +70,7 @@ public void testHashCode_containingNull() { * hashCode()} on the set values so that set tests on unhashable objects can suppress it with * {@code FeatureSpecificTestSuiteBuilder.suppressing()}. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method[] getHashCodeMethods() { return new Method[] { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/SortedSetNavigationTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/SortedSetNavigationTester.java index bf5ac223a9c5..82a9582d8173 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/SortedSetNavigationTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/SortedSetNavigationTester.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.NoSuchElementException; import java.util.SortedSet; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -38,13 +39,14 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class SortedSetNavigationTester extends AbstractSetTester { +@ElementTypesAreNonnullByDefault +public class SortedSetNavigationTester extends AbstractSetTester { private SortedSet sortedSet; private List values; - private E a; - private E b; - private E c; + private @Nullable E a; + private @Nullable E b; + private @Nullable E c; @Override public void setUp() throws Exception { diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java index 23420c375aab..55b62198e665 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTester.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.util.Collection; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -29,7 +30,8 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public abstract class AbstractCollectionTester +@ElementTypesAreNonnullByDefault +public abstract class AbstractCollectionTester extends AbstractContainerTester, E> { // TODO: replace this with an accessor. diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java index d857e6b4b5b7..816dc1f11d95 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractContainerTester.java @@ -24,6 +24,7 @@ import java.util.Collection; import java.util.Collections; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -36,7 +37,8 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public abstract class AbstractContainerTester +@ElementTypesAreNonnullByDefault +public abstract class AbstractContainerTester extends AbstractTester> { protected SampleElements samples; protected C container; @@ -174,7 +176,7 @@ protected E[] createOrderedArray() { return array; } - public static class ArrayWithDuplicate { + public static class ArrayWithDuplicate { public final E[] elements; public final E duplicate; diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java index c00322b26cb8..21a4ee331737 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java @@ -42,7 +42,8 @@ * @author Chris Povirk */ @GwtCompatible -abstract class AbstractIteratorTester> { +@ElementTypesAreNonnullByDefault +abstract class AbstractIteratorTester> { private Stimulus[] stimuli; private final Iterator elementsToInsert; private final Set features; @@ -477,7 +478,7 @@ private > void internalExecuteAndCompare( private static final IteratorOperation NEXT_METHOD = new IteratorOperation() { @Override - public Object execute(Iterator iterator) { + public @Nullable Object execute(Iterator iterator) { return iterator.next(); } }; @@ -485,7 +486,7 @@ public Object execute(Iterator iterator) { private static final IteratorOperation PREVIOUS_METHOD = new IteratorOperation() { @Override - public Object execute(Iterator iterator) { + public @Nullable Object execute(Iterator iterator) { return ((ListIterator) iterator).previous(); } }; @@ -516,7 +517,7 @@ private final IteratorOperation newSetMethod() { }; } - abstract static class Stimulus> { + abstract static class Stimulus> { private final String toString; protected Stimulus(String toString) { diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java index 91f6971a45a5..e0cea14b8f4a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractMapTester.java @@ -38,7 +38,8 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public abstract class AbstractMapTester +@ElementTypesAreNonnullByDefault +public abstract class AbstractMapTester extends AbstractContainerTester, Entry> { protected Map getMap() { return container; diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java index cd9cbfdea95e..953f990df6e7 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractTester.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import junit.framework.TestCase; import org.checkerframework.checker.nullness.qual.Nullable; @@ -33,6 +34,7 @@ * @author George van den Driessche */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class AbstractTester extends TestCase { private G subjectGenerator; private String suiteName; @@ -74,11 +76,13 @@ public G getSubjectGenerator() { } /** Returns the name of the test method invoked by this test instance. */ + @J2ktIncompatible @GwtIncompatible // not used under GWT, and super.getName() is not available under J2CL public final String getTestMethodName() { return super.getName(); } + @J2ktIncompatible @GwtIncompatible // not used under GWT, and super.getName() is not available under J2CL @Override public String getName() { diff --git a/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java b/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java index ec60fd4482c9..43684d8a671b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/DerivedCollectionGenerators.java @@ -33,6 +33,7 @@ import java.util.Set; import java.util.SortedMap; import java.util.SortedSet; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Derived suite generators, split out of the suite builders so that they are available to GWT. @@ -40,8 +41,9 @@ * @author George van den Driessche */ @GwtCompatible +@ElementTypesAreNonnullByDefault public final class DerivedCollectionGenerators { - public static class MapEntrySetGenerator + public static class MapEntrySetGenerator implements TestSetGenerator>, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> mapGenerator; @@ -79,8 +81,9 @@ public OneSizeTestContainerGenerator, Entry> getInnerGenerator() // TODO: investigate some API changes to SampleElements that would tidy up // parts of the following classes. - static TestSetGenerator keySetGenerator( - OneSizeTestContainerGenerator, Entry> mapGenerator) { + static + TestSetGenerator keySetGenerator( + OneSizeTestContainerGenerator, Entry> mapGenerator) { TestContainerGenerator, Entry> generator = mapGenerator.getInnerGenerator(); if (generator instanceof TestSortedMapGenerator && ((TestSortedMapGenerator) generator).create().keySet() instanceof SortedSet) { @@ -90,7 +93,8 @@ static TestSetGenerator keySetGenerator( } } - public static class MapKeySetGenerator implements TestSetGenerator, DerivedGenerator { + public static class MapKeySetGenerator + implements TestSetGenerator, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> mapGenerator; private final SampleElements samples; @@ -159,8 +163,9 @@ public OneSizeTestContainerGenerator, Entry> getInnerGenerator() } } - public static class MapSortedKeySetGenerator extends MapKeySetGenerator - implements TestSortedSetGenerator, DerivedGenerator { + public static class MapSortedKeySetGenerator< + K extends @Nullable Object, V extends @Nullable Object> + extends MapKeySetGenerator implements TestSortedSetGenerator, DerivedGenerator { private final TestSortedMapGenerator delegate; public MapSortedKeySetGenerator( @@ -195,7 +200,8 @@ public K aboveSamplesGreater() { } } - public static class MapValueCollectionGenerator + public static class MapValueCollectionGenerator< + K extends @Nullable Object, V extends @Nullable Object> implements TestCollectionGenerator, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> mapGenerator; private final SampleElements samples; @@ -276,7 +282,8 @@ public OneSizeTestContainerGenerator, Entry> getInnerGenerator() } // TODO(cpovirk): could something like this be used elsewhere, e.g., ReserializedListGenerator? - static class ForwardingTestMapGenerator implements TestMapGenerator { + static class ForwardingTestMapGenerator + implements TestMapGenerator { TestMapGenerator delegate; ForwardingTestMapGenerator(TestMapGenerator delegate) { @@ -321,7 +328,8 @@ public enum Bound { NO_BOUND; } - public static class SortedSetSubsetTestSetGenerator implements TestSortedSetGenerator { + public static class SortedSetSubsetTestSetGenerator + implements TestSortedSetGenerator { final Bound to; final Bound from; final E firstInclusive; @@ -397,7 +405,7 @@ public SortedSet create(Object... elements) { } // the regular values should be visible after filtering - List allEntries = new ArrayList<>(); + List<@Nullable Object> allEntries = new ArrayList<>(); allEntries.addAll(extremeValues); allEntries.addAll(normalValues); SortedSet set = delegate.create(allEntries.toArray()); @@ -443,8 +451,9 @@ public E aboveSamplesGreater() { * TODO(cpovirk): surely we can find a less ugly solution than a class that accepts 3 parameters, * exposes as many getters, does work in the constructor, and has both a superclass and a subclass */ - public static class SortedMapSubmapTestMapGenerator extends ForwardingTestMapGenerator - implements TestSortedMapGenerator { + public static class SortedMapSubmapTestMapGenerator< + K extends @Nullable Object, V extends @Nullable Object> + extends ForwardingTestMapGenerator implements TestSortedMapGenerator { final Bound to; final Bound from; final K firstInclusive; diff --git a/guava-testlib/src/com/google/common/collect/testing/Helpers.java b/guava-testlib/src/com/google/common/collect/testing/Helpers.java index 290e8e300f77..49182b105485 100644 --- a/guava-testlib/src/com/google/common/collect/testing/Helpers.java +++ b/guava-testlib/src/com/google/common/collect/testing/Helpers.java @@ -196,7 +196,7 @@ public static void assertContainsAllOf(Iterable actual, Object... expected) { return modified; } - static Iterable reverse(List list) { + static Iterable reverse(List list) { return new Iterable() { @Override public Iterator iterator() { @@ -221,7 +221,7 @@ public void remove() { }; } - static Iterator cycle(Iterable iterable) { + static Iterator cycle(Iterable iterable) { return new Iterator() { Iterator iterator = Collections.emptySet().iterator(); @@ -245,7 +245,7 @@ public void remove() { }; } - static T get(Iterator iterator, int position) { + static T get(Iterator iterator, int position) { for (int i = 0; i < position; i++) { iterator.next(); } @@ -269,14 +269,14 @@ public EntryComparator(@Nullable Comparator keyComparator) { @Override @SuppressWarnings("unchecked") // no less safe than putting it in the map! public int compare(Entry a, Entry b) { - return (keyComparator == null) - ? ((Comparable) a.getKey()).compareTo(b.getKey()) - : keyComparator.compare(a.getKey(), b.getKey()); + return (keyComparator == null) + ? ((Comparable) a.getKey()).compareTo(b.getKey()) + : keyComparator.compare(a.getKey(), b.getKey()); } } - public static Comparator> entryComparator( - @Nullable Comparator keyComparator) { + public static + Comparator> entryComparator(@Nullable Comparator keyComparator) { return new EntryComparator(keyComparator); } @@ -287,7 +287,7 @@ public static Comparator> entryComparator( * * @see #testComparator(Comparator, List) */ - public static void testComparator( + public static void testComparator( Comparator comparator, T... valuesInExpectedOrder) { testComparator(comparator, Arrays.asList(valuesInExpectedOrder)); } @@ -477,10 +477,11 @@ public int compare(Comparable left, Comparable right) { } }; - @J2ktIncompatible - public static Iterable> orderEntriesByKey( - List> insertionOrder) { - sort(insertionOrder, Helpers.entryComparator(NATURAL_ORDER)); + public static + Iterable> orderEntriesByKey(List> insertionOrder) { + @SuppressWarnings("unchecked") // assume any Comparable is Comparable + Comparator keyComparator = (Comparator) NATURAL_ORDER; + sort(insertionOrder, Helpers.entryComparator(keyComparator)); return insertionOrder; } diff --git a/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java index fdc418a73745..01409884607a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/IteratorTester.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Collections; import java.util.Iterator; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A utility for testing an Iterator implementation by comparing its behavior to that of a "known @@ -84,7 +85,9 @@ * @author Chris Povirk */ @GwtCompatible -public abstract class IteratorTester extends AbstractIteratorTester> { +@ElementTypesAreNonnullByDefault +public abstract class IteratorTester + extends AbstractIteratorTester> { /** * Creates an IteratorTester. * diff --git a/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java index 126eb860780d..a781d0ab0266 100644 --- a/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/ListIteratorTester.java @@ -20,6 +20,7 @@ import java.util.ArrayList; import java.util.List; import java.util.ListIterator; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A utility similar to {@link IteratorTester} for testing a {@link ListIterator} against a known @@ -35,7 +36,9 @@ * @author Chris Povirk */ @GwtCompatible -public abstract class ListIteratorTester extends AbstractIteratorTester> { +@ElementTypesAreNonnullByDefault +public abstract class ListIteratorTester + extends AbstractIteratorTester> { protected ListIteratorTester( int steps, Iterable elementsToInsert, diff --git a/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java b/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java index 067973c2a13e..e30287317a78 100644 --- a/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java +++ b/guava-testlib/src/com/google/common/collect/testing/MapInterfaceTest.java @@ -19,6 +19,7 @@ import static java.util.Collections.singleton; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.J2ktIncompatible; import java.util.Arrays; import java.util.Collection; import java.util.Collections; @@ -28,6 +29,7 @@ import java.util.Map.Entry; import java.util.Set; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests representing the contract of {@link Map}. Concrete subclasses of this base class test @@ -42,7 +44,9 @@ // check the order if so. // TODO: Refactor to share code with SetTestBuilder etc. @GwtCompatible -public abstract class MapInterfaceTest extends TestCase { +@ElementTypesAreNonnullByDefault +public abstract class MapInterfaceTest + extends TestCase { /** A key type that is not assignable to any classes but Object. */ private static final class IncompatibleKeyType { @@ -285,6 +289,7 @@ public void testClear() { assertInvariants(map); } + @J2ktIncompatible // https://youtrack.jetbrains.com/issue/KT-58242/ undefined behavior (crash) public void testContainsKey() { Map map; K unmappedKey; @@ -368,6 +373,7 @@ public void testEntrySetForEmptyMap() { assertInvariants(map); } + @J2ktIncompatible // https://youtrack.jetbrains.com/issue/KT-58242/ undefined behavior (crash) public void testEntrySetContainsEntryIncompatibleKey() { Map map; Set> entrySet; @@ -414,9 +420,10 @@ public void testEntrySetContainsEntryNullKeyPresent() { } map.put(null, unmappedValue); - Entry entry = mapEntry(null, unmappedValue); + Entry<@Nullable K, V> entry = mapEntry(null, unmappedValue); assertTrue(entrySet.contains(entry)); - assertFalse(entrySet.contains(mapEntry(null, null))); + Entry<@Nullable K, @Nullable V> nonEntry = mapEntry(null, null); + assertFalse(entrySet.contains(nonEntry)); } public void testEntrySetContainsEntryNullKeyMissing() { @@ -436,14 +443,15 @@ public void testEntrySetContainsEntryNullKeyMissing() { } catch (UnsupportedOperationException e) { return; } - Entry entry = mapEntry(null, unmappedValue); + Entry<@Nullable K, V> nullKeyEntry = mapEntry(null, unmappedValue); try { - assertFalse(entrySet.contains(entry)); + assertFalse(entrySet.contains(nullKeyEntry)); } catch (NullPointerException e) { assertFalse(allowsNullKeys); } + Entry<@Nullable K, @Nullable V> nullKeyValueEntry = mapEntry(null, null); try { - assertFalse(entrySet.contains(mapEntry(null, null))); + assertFalse(entrySet.contains(nullKeyValueEntry)); } catch (NullPointerException e) { assertFalse(allowsNullKeys && allowsNullValues); } @@ -590,7 +598,7 @@ public void testEntrySetRemoveNullKeyPresent() { map.put(null, unmappedValue); assertEquals(unmappedValue, map.get(null)); assertTrue(map.containsKey(null)); - Entry entry = mapEntry(null, unmappedValue); + Entry<@Nullable K, V> entry = mapEntry(null, unmappedValue); assertTrue(entrySet.remove(entry)); assertNull(map.get(null)); assertFalse(map.containsKey(null)); @@ -605,7 +613,7 @@ public void testEntrySetRemoveNullKeyMissing() { } Set> entrySet = map.entrySet(); - Entry entry = mapEntry(null, getValueNotInPopulatedMap()); + Entry<@Nullable K, V> entry = mapEntry(null, getValueNotInPopulatedMap()); int initialSize = map.size(); if (supportsRemove) { try { @@ -768,9 +776,9 @@ public void testEntrySetAddAndAddAll() { Map map = makeEitherMap(); Set> entrySet = map.entrySet(); - Entry entryToAdd = mapEntry(null, null); + Entry<@Nullable K, @Nullable V> entryToAdd = mapEntry(null, null); try { - entrySet.add(entryToAdd); + entrySet.add((Entry) entryToAdd); fail("Expected UnsupportedOperationException or NullPointerException."); } catch (UnsupportedOperationException | NullPointerException e) { // Expected. @@ -778,7 +786,7 @@ public void testEntrySetAddAndAddAll() { assertInvariants(map); try { - entrySet.addAll(singleton(entryToAdd)); + entrySet.addAll(singleton((Entry) entryToAdd)); fail("Expected UnsupportedOperationException or NullPointerException."); } catch (UnsupportedOperationException | NullPointerException e) { // Expected. @@ -1616,7 +1624,8 @@ public void testValuesClear() { assertInvariants(map); } - static Entry mapEntry(K key, V value) { + static Entry mapEntry( + K key, V value) { return Collections.singletonMap(key, value).entrySet().iterator().next(); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java b/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java index 2adf0725147d..6887cabb1abc 100644 --- a/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java +++ b/guava-testlib/src/com/google/common/collect/testing/MinimalCollection.java @@ -21,6 +21,8 @@ import java.util.Arrays; import java.util.Collection; import java.util.Iterator; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A simplistic collection which implements only the bare minimum allowed by the spec, and throws @@ -29,24 +31,26 @@ * @author Kevin Bourrillion */ @GwtCompatible -public class MinimalCollection extends AbstractCollection { +@ElementTypesAreNonnullByDefault +public class MinimalCollection extends AbstractCollection { // TODO: expose allow nulls parameter? - public static MinimalCollection of(E... contents) { + public static MinimalCollection of(E... contents) { return new MinimalCollection<>(Object.class, true, contents); } // TODO: use this - public static MinimalCollection ofClassAndContents(Class type, E... contents) { + public static MinimalCollection ofClassAndContents( + Class type, E... contents) { return new MinimalCollection<>(type, true, contents); } private final E[] contents; - private final Class type; + private final Class type; private final boolean allowNulls; // Package-private so that it can be extended. - MinimalCollection(Class type, boolean allowNulls, E... contents) { + MinimalCollection(Class type, boolean allowNulls, E... contents) { // TODO: consider making it shuffle the contents to test iteration order. this.contents = Platform.clone(contents); this.type = type; @@ -67,7 +71,7 @@ public int size() { } @Override - public boolean contains(Object object) { + public boolean contains(@Nullable Object object) { if (!allowNulls) { // behave badly if (object == null) { @@ -97,8 +101,8 @@ public Iterator iterator() { } @Override - public Object[] toArray() { - Object[] result = new Object[contents.length]; + public @Nullable Object[] toArray() { + @Nullable Object[] result = new @Nullable Object[contents.length]; System.arraycopy(contents, 0, result, 0, contents.length); return result; } diff --git a/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java b/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java index 816a9737794f..7b06f78ed261 100644 --- a/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java +++ b/guava-testlib/src/com/google/common/collect/testing/MinimalIterable.java @@ -48,9 +48,9 @@ * @author Kevin Bourrillion */ @GwtCompatible -public final class MinimalIterable implements Iterable { +public final class MinimalIterable implements Iterable { /** Returns an iterable whose iterator returns the given elements in order. */ - public static MinimalIterable of(E... elements) { + public static MinimalIterable of(E... elements) { // Make sure to get an unmodifiable iterator return new MinimalIterable<>(Arrays.asList(elements).iterator()); } @@ -60,7 +60,7 @@ public static MinimalIterable of(E... elements) { * out of the source collection at the time this method is called. */ @SuppressWarnings("unchecked") // Es come in, Es go out - public static MinimalIterable from(Collection elements) { + public static MinimalIterable from(Collection elements) { return (MinimalIterable) of(elements.toArray()); } diff --git a/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java b/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java index 4027684b42c8..23e1c76d777f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java +++ b/guava-testlib/src/com/google/common/collect/testing/MinimalSet.java @@ -22,6 +22,7 @@ import java.util.Collection; import java.util.List; import java.util.Set; +import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -32,20 +33,21 @@ * @author Regina O'Dell */ @GwtCompatible -public class MinimalSet extends MinimalCollection implements Set { +@ElementTypesAreNonnullByDefault +public class MinimalSet extends MinimalCollection implements Set { @SuppressWarnings("unchecked") // empty Object[] as E[] - public static MinimalSet of(E... contents) { + public static MinimalSet of(E... contents) { return ofClassAndContents(Object.class, (E[]) new Object[0], Arrays.asList(contents)); } @SuppressWarnings("unchecked") // empty Object[] as E[] - public static MinimalSet from(Collection contents) { + public static MinimalSet from(Collection contents) { return ofClassAndContents(Object.class, (E[]) new Object[0], contents); } - public static MinimalSet ofClassAndContents( - Class type, E[] emptyArrayForContents, Iterable contents) { + public static MinimalSet ofClassAndContents( + Class type, E[] emptyArrayForContents, Iterable contents) { List setContents = new ArrayList<>(); for (E e : contents) { if (!setContents.contains(e)) { @@ -55,7 +57,7 @@ public static MinimalSet ofClassAndContents( return new MinimalSet<>(type, setContents.toArray(emptyArrayForContents)); } - private MinimalSet(Class type, E... contents) { + private MinimalSet(Class type, E... contents) { super(type, true, contents); } diff --git a/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java b/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java index de031c9f46bf..5540b8ae6b45 100644 --- a/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/OneSizeGenerator.java @@ -22,6 +22,7 @@ import java.util.Arrays; import java.util.Collection; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Generator for collection of a particular size. @@ -29,7 +30,9 @@ * @author George van den Driessche */ @GwtCompatible -public final class OneSizeGenerator implements OneSizeTestContainerGenerator { +@ElementTypesAreNonnullByDefault +public final class OneSizeGenerator + implements OneSizeTestContainerGenerator { private final TestContainerGenerator generator; private final CollectionSize collectionSize; diff --git a/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java b/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java index 7e727cd8242b..9cb5a87e79e6 100644 --- a/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/OneSizeTestContainerGenerator.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.testing.features.CollectionSize; import java.util.Collection; +import org.checkerframework.checker.nullness.qual.Nullable; /** * The subject-generator interface accepted by Collection testers, for testing a Collection at one @@ -31,7 +32,8 @@ * @author George van den Driessche */ @GwtCompatible -public interface OneSizeTestContainerGenerator +@ElementTypesAreNonnullByDefault +public interface OneSizeTestContainerGenerator extends TestSubjectGenerator, TestContainerGenerator { TestContainerGenerator getInnerGenerator(); diff --git a/guava-testlib/src/com/google/common/collect/testing/SampleElements.java b/guava-testlib/src/com/google/common/collect/testing/SampleElements.java index 9fed1fbe8ed3..1b009b3bd330 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SampleElements.java +++ b/guava-testlib/src/com/google/common/collect/testing/SampleElements.java @@ -29,7 +29,8 @@ * @author Kevin Bourrillion */ @GwtCompatible -public class SampleElements implements Iterable { +@ElementTypesAreNonnullByDefault +public class SampleElements implements Iterable { // TODO: rename e3, e4 => missing1, missing2 private final E e0; private final E e1; @@ -89,8 +90,8 @@ public Ints() { } } - public static SampleElements> mapEntries( - SampleElements keys, SampleElements values) { + public static + SampleElements> mapEntries(SampleElements keys, SampleElements values) { return new SampleElements<>( Helpers.mapEntry(keys.e0(), values.e0()), Helpers.mapEntry(keys.e1(), values.e1()), diff --git a/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java index 28868cad94e3..e6c637f9f6d9 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java @@ -22,7 +22,6 @@ import static com.google.common.collect.testing.Platform.format; import static java.util.Arrays.asList; import static java.util.Collections.unmodifiableSet; -import static java.util.Comparator.naturalOrder; import static junit.framework.Assert.assertEquals; import static junit.framework.Assert.assertFalse; import static junit.framework.Assert.assertTrue; @@ -40,6 +39,7 @@ import java.util.List; import java.util.Set; import java.util.Spliterator; +import java.util.Spliterator.OfPrimitive; import java.util.function.Consumer; import java.util.function.Function; import java.util.function.Supplier; @@ -47,7 +47,8 @@ /** Tester for {@code Spliterator} implementations. */ @GwtCompatible -public final class SpliteratorTester { +@ElementTypesAreNonnullByDefault +public final class SpliteratorTester { /** Return type from "contains the following elements" assertions. */ public interface Ordered { /** @@ -57,7 +58,7 @@ public interface Ordered { void inOrder(); } - private abstract static class GeneralSpliterator { + private abstract static class GeneralSpliterator { final Spliterator spliterator; GeneralSpliterator(Spliterator spliterator) { @@ -68,7 +69,7 @@ private abstract static class GeneralSpliterator { abstract boolean tryAdvance(Consumer action); - abstract GeneralSpliterator trySplit(); + abstract @Nullable GeneralSpliterator trySplit(); final int characteristics() { return spliterator.characteristics(); @@ -91,7 +92,8 @@ final boolean hasCharacteristics(int characteristics) { } } - private static final class GeneralSpliteratorOfObject extends GeneralSpliterator { + private static final class GeneralSpliteratorOfObject + extends GeneralSpliterator { GeneralSpliteratorOfObject(Spliterator spliterator) { super(spliterator); } @@ -113,31 +115,33 @@ boolean tryAdvance(Consumer action) { } } - private static final class GeneralSpliteratorOfPrimitive extends GeneralSpliterator { - final Spliterator.OfPrimitive spliterator; + private static final class GeneralSpliteratorOfPrimitive< + E extends @Nullable Object, C, S extends Spliterator.OfPrimitive> + extends GeneralSpliterator { + final OfPrimitive spliteratorOfPrimitive; final Function, C> consumerizer; GeneralSpliteratorOfPrimitive( - Spliterator.OfPrimitive spliterator, + Spliterator.OfPrimitive spliterator, Function, C> consumerizer) { super(spliterator); - this.spliterator = spliterator; + this.spliteratorOfPrimitive = spliterator; this.consumerizer = consumerizer; } @Override void forEachRemaining(Consumer action) { - spliterator.forEachRemaining(consumerizer.apply(action)); + spliteratorOfPrimitive.forEachRemaining(consumerizer.apply(action)); } @Override boolean tryAdvance(Consumer action) { - return spliterator.tryAdvance(consumerizer.apply(action)); + return spliteratorOfPrimitive.tryAdvance(consumerizer.apply(action)); } @Override @Nullable GeneralSpliterator trySplit() { - Spliterator.OfPrimitive split = spliterator.trySplit(); + Spliterator.OfPrimitive split = spliteratorOfPrimitive.trySplit(); return split == null ? null : new GeneralSpliteratorOfPrimitive<>(split, consumerizer); } } @@ -149,13 +153,15 @@ boolean tryAdvance(Consumer action) { enum SpliteratorDecompositionStrategy { NO_SPLIT_FOR_EACH_REMAINING { @Override - void forEach(GeneralSpliterator spliterator, Consumer consumer) { + void forEach( + GeneralSpliterator spliterator, Consumer consumer) { spliterator.forEachRemaining(consumer); } }, NO_SPLIT_TRY_ADVANCE { @Override - void forEach(GeneralSpliterator spliterator, Consumer consumer) { + void forEach( + GeneralSpliterator spliterator, Consumer consumer) { while (spliterator.tryAdvance(consumer)) { // do nothing } @@ -163,7 +169,8 @@ void forEach(GeneralSpliterator spliterator, Consumer consumer }, MAXIMUM_SPLIT { @Override - void forEach(GeneralSpliterator spliterator, Consumer consumer) { + void forEach( + GeneralSpliterator spliterator, Consumer consumer) { for (GeneralSpliterator prefix = trySplitTestingSize(spliterator); prefix != null; prefix = trySplitTestingSize(spliterator)) { @@ -183,7 +190,8 @@ void forEach(GeneralSpliterator spliterator, Consumer consumer }, ALTERNATE_ADVANCE_AND_SPLIT { @Override - void forEach(GeneralSpliterator spliterator, Consumer consumer) { + void forEach( + GeneralSpliterator spliterator, Consumer consumer) { while (spliterator.tryAdvance(consumer)) { GeneralSpliterator prefix = trySplitTestingSize(spliterator); if (prefix != null) { @@ -193,13 +201,14 @@ void forEach(GeneralSpliterator spliterator, Consumer consumer } }; - abstract void forEach(GeneralSpliterator spliterator, Consumer consumer); + abstract void forEach( + GeneralSpliterator spliterator, Consumer consumer); static final Set ALL_STRATEGIES = unmodifiableSet(new LinkedHashSet<>(asList(values()))); } - private static @Nullable GeneralSpliterator trySplitTestingSize( + private static @Nullable GeneralSpliterator trySplitTestingSize( GeneralSpliterator spliterator) { boolean subsized = spliterator.hasCharacteristics(Spliterator.SUBSIZED); long originalSize = spliterator.estimateSize(); @@ -234,12 +243,15 @@ void forEach(GeneralSpliterator spliterator, Consumer consumer return trySplit; } - public static SpliteratorTester of(Supplier> spliteratorSupplier) { + public static SpliteratorTester of( + Supplier> spliteratorSupplier) { return new SpliteratorTester<>( ImmutableSet.of(() -> new GeneralSpliteratorOfObject<>(spliteratorSupplier.get()))); } - /** @since 28.1 */ + /** + * @since 28.1 + */ public static SpliteratorTester ofInt(Supplier spliteratorSupplier) { return new SpliteratorTester<>( ImmutableSet.of( @@ -247,7 +259,9 @@ public static SpliteratorTester ofInt(Supplier split () -> new GeneralSpliteratorOfPrimitive<>(spliteratorSupplier.get(), c -> c::accept))); } - /** @since 28.1 */ + /** + * @since 28.1 + */ public static SpliteratorTester ofLong(Supplier spliteratorSupplier) { return new SpliteratorTester<>( ImmutableSet.of( @@ -255,7 +269,9 @@ public static SpliteratorTester ofLong(Supplier splite () -> new GeneralSpliteratorOfPrimitive<>(spliteratorSupplier.get(), c -> c::accept))); } - /** @since 28.1 */ + /** + * @since 28.1 + */ public static SpliteratorTester ofDouble( Supplier spliteratorSupplier) { return new SpliteratorTester<>( @@ -295,7 +311,7 @@ public final Ordered expect(Iterable elements) { if ((characteristics & Spliterator.SORTED) != 0) { Comparator comparator = spliterator.getComparator(); if (comparator == null) { - comparator = (Comparator) naturalOrder(); + comparator = (Comparator) Comparator.naturalOrder(); } assertTrue(Ordering.from(comparator).isOrdered(resultsForStrategy)); } diff --git a/guava-testlib/src/com/google/common/collect/testing/TestCharacterListGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestCharacterListGenerator.java index b7542b55b654..07b465bb889a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestCharacterListGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestCharacterListGenerator.java @@ -27,6 +27,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestCharacterListGenerator implements TestListGenerator { @Override public SampleElements samples() { diff --git a/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java index f1df8c9da0d8..63c35be86abc 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestCollectionGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Collection; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates collections, containing sample elements, to be tested. @@ -25,4 +26,6 @@ * @author Kevin Bourrillion */ @GwtCompatible -public interface TestCollectionGenerator extends TestContainerGenerator, E> {} +@ElementTypesAreNonnullByDefault +public interface TestCollectionGenerator + extends TestContainerGenerator, E> {} diff --git a/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java index 6aa0c33d3852..b26a6a5832f9 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestCollidingSetGenerator.java @@ -26,6 +26,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestCollidingSetGenerator implements TestSetGenerator { @Override public SampleElements samples() { diff --git a/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java index d08cf90c27d2..c6792bfdf519 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestContainerGenerator.java @@ -20,6 +20,7 @@ import java.util.Collection; import java.util.List; import java.util.Map; +import org.checkerframework.checker.nullness.qual.Nullable; /** * To be implemented by test generators of things that can contain elements. Such things include @@ -29,7 +30,8 @@ * @author George van den Driessche */ @GwtCompatible -public interface TestContainerGenerator { +@ElementTypesAreNonnullByDefault +public interface TestContainerGenerator { /** Returns the sample elements that this generate populates its container with. */ SampleElements samples(); diff --git a/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java index c117fcda749a..56bd92d84bb5 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java @@ -29,6 +29,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestEnumMapGenerator implements TestMapGenerator { @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java index 88391ef03be7..d284807d33f6 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestEnumSetGenerator.java @@ -28,6 +28,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestEnumSetGenerator implements TestSetGenerator { @Override public SampleElements samples() { diff --git a/guava-testlib/src/com/google/common/collect/testing/TestIntegerSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestIntegerSetGenerator.java index 9cd9ecb43d6b..633329c1e626 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestIntegerSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestIntegerSetGenerator.java @@ -27,6 +27,7 @@ * @author Gregory Kick */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestIntegerSetGenerator implements TestSetGenerator { @Override public SampleElements samples() { diff --git a/guava-testlib/src/com/google/common/collect/testing/TestIntegerSortedSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestIntegerSortedSetGenerator.java index babac37bcd79..137d36b75ba5 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestIntegerSortedSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestIntegerSortedSetGenerator.java @@ -28,6 +28,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestIntegerSortedSetGenerator extends TestIntegerSetGenerator { @Override protected abstract SortedSet create(Integer[] elements); diff --git a/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java index 99f95d0af0be..34117f898874 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestListGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates sets, containing sample elements, to be tested. @@ -25,7 +26,8 @@ * @author Kevin Bourrillion */ @GwtCompatible -public interface TestListGenerator extends TestCollectionGenerator { +@ElementTypesAreNonnullByDefault +public interface TestListGenerator extends TestCollectionGenerator { @Override List create(Object... elements); } diff --git a/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java index 0c298cc1226b..2d51c2ab3cfd 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java @@ -21,6 +21,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates map entries using sample keys and sample values. @@ -28,7 +29,10 @@ * @author Jesse Wilson */ @GwtCompatible -public abstract class TestMapEntrySetGenerator implements TestSetGenerator> { +@ElementTypesAreNonnullByDefault +public abstract class TestMapEntrySetGenerator< + K extends @Nullable Object, V extends @Nullable Object> + implements TestSetGenerator> { private final SampleElements keys; private final SampleElements values; diff --git a/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java index 2267a04f5250..efc85fc5563b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestMapGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Map; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates maps, containing sample elements, to be tested. @@ -25,7 +26,9 @@ * @author George van den Driessche */ @GwtCompatible -public interface TestMapGenerator extends TestContainerGenerator, Map.Entry> { +@ElementTypesAreNonnullByDefault +public interface TestMapGenerator + extends TestContainerGenerator, Map.Entry> { K[] createKeyArray(int length); V[] createValueArray(int length); diff --git a/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java index 939b48583d4b..c5b093b1880d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestQueueGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Queue; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates queues, containing sample elements, to be tested. @@ -25,7 +26,8 @@ * @author Jared Levy */ @GwtCompatible -public interface TestQueueGenerator extends TestCollectionGenerator { +@ElementTypesAreNonnullByDefault +public interface TestQueueGenerator extends TestCollectionGenerator { @Override Queue create(Object... elements); } diff --git a/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java index 680ff44eee16..2ed582aa7a36 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestSetGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates sets, containing sample elements, to be tested. @@ -25,7 +26,8 @@ * @author Kevin Bourrillion */ @GwtCompatible -public interface TestSetGenerator extends TestCollectionGenerator { +@ElementTypesAreNonnullByDefault +public interface TestSetGenerator extends TestCollectionGenerator { @Override Set create(Object... elements); } diff --git a/guava-testlib/src/com/google/common/collect/testing/TestSortedMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestSortedMapGenerator.java index 5d902189cd76..107a8e76cea7 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestSortedMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestSortedMapGenerator.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.Map.Entry; import java.util.SortedMap; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates sorted maps, containing sample elements, to be tested. @@ -26,7 +27,9 @@ * @author Louis Wasserman */ @GwtCompatible -public interface TestSortedMapGenerator extends TestMapGenerator { +@ElementTypesAreNonnullByDefault +public interface TestSortedMapGenerator + extends TestMapGenerator { @Override SortedMap create(Object... elements); diff --git a/guava-testlib/src/com/google/common/collect/testing/TestSortedSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestSortedSetGenerator.java index 8f7ee5c76f7a..10abd8b4d171 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestSortedSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestSortedSetGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import java.util.SortedSet; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates sorted sets, containing sample elements, to be tested. @@ -25,7 +26,8 @@ * @author Louis Wasserman */ @GwtCompatible -public interface TestSortedSetGenerator extends TestSetGenerator { +@ElementTypesAreNonnullByDefault +public interface TestSortedSetGenerator extends TestSetGenerator { @Override SortedSet create(Object... elements); diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java index f9c58cd7f333..081e9eaddd26 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringCollectionGenerator.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringCollectionGenerator implements TestCollectionGenerator { @Override public SampleElements samples() { diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java index 7e22ab143059..fe1de2eb2450 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringListGenerator.java @@ -26,6 +26,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringListGenerator implements TestListGenerator { @Override public SampleElements samples() { diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java index 3449d3a9c3f4..c7aa85cc82a2 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java @@ -29,6 +29,7 @@ * @author George van den Driessche */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringMapGenerator implements TestMapGenerator { @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java index 16cb2539d1f3..1102c3456bd0 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringQueueGenerator.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringQueueGenerator implements TestQueueGenerator { @Override public SampleElements samples() { diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java index 1724bb2c8dc6..2949e4aca819 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringSetGenerator.java @@ -27,6 +27,7 @@ * @author Kevin Bourrillion */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringSetGenerator implements TestSetGenerator { @Override public SampleElements samples() { diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringSortedMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringSortedMapGenerator.java index c1878bea2214..49ce6786db2d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringSortedMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringSortedMapGenerator.java @@ -29,6 +29,7 @@ * @author Chris Povirk */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringSortedMapGenerator extends TestStringMapGenerator implements TestSortedMapGenerator { @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java index 7f5453d63cd9..1c695f961faf 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringSortedSetGenerator.java @@ -27,6 +27,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringSortedSetGenerator extends TestStringSetGenerator implements TestSortedSetGenerator { diff --git a/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java index 4a8ae76a8f40..431e7e8103d7 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestSubjectGenerator.java @@ -17,6 +17,7 @@ package com.google.common.collect.testing; import com.google.common.annotations.GwtCompatible; +import org.checkerframework.checker.nullness.qual.Nullable; /** * To be implemented by test generators that can produce test subjects without requiring any @@ -26,6 +27,7 @@ * @author George van den Driessche */ @GwtCompatible -public interface TestSubjectGenerator { +@ElementTypesAreNonnullByDefault +public interface TestSubjectGenerator { T createTestSubject(); } diff --git a/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java index 9b4602d045d8..d4d772b81e1d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestUnhashableCollectionGenerator.java @@ -27,6 +27,7 @@ * @author Regina O'Dell */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestUnhashableCollectionGenerator> implements TestCollectionGenerator { @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/google/AbstractBiMapTester.java b/guava-testlib/src/com/google/common/collect/testing/google/AbstractBiMapTester.java index 85ddb447648b..8ca0bb42ce5d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/AbstractBiMapTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/AbstractBiMapTester.java @@ -24,19 +24,23 @@ import java.util.Collection; import java.util.List; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** Skeleton for a tester of a {@code BiMap}. */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public abstract class AbstractBiMapTester extends AbstractMapTester { +@ElementTypesAreNonnullByDefault +public abstract class AbstractBiMapTester + extends AbstractMapTester { @Override protected BiMap getMap() { return (BiMap) super.getMap(); } - static Entry reverseEntry(Entry entry) { + static Entry reverseEntry( + Entry entry) { return Helpers.mapEntry(entry.getValue(), entry.getKey()); } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/AbstractListMultimapTester.java b/guava-testlib/src/com/google/common/collect/testing/google/AbstractListMultimapTester.java index 7bce8b012072..306fec7f1b70 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/AbstractListMultimapTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/AbstractListMultimapTester.java @@ -20,6 +20,7 @@ import com.google.common.collect.ListMultimap; import java.util.Arrays; import java.util.Collection; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -29,7 +30,8 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class AbstractListMultimapTester +@ElementTypesAreNonnullByDefault +public class AbstractListMultimapTester extends AbstractMultimapTester> { @Override @@ -38,7 +40,7 @@ protected void assertGet(K key, V... values) { } @Override - protected void assertGet(K key, Collection values) { + protected void assertGet(K key, Collection values) { assertEqualInOrder(values, multimap().get(key)); if (!values.isEmpty()) { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultimapTester.java b/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultimapTester.java index 92d82c6af38e..46ead57e57e3 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultimapTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultimapTester.java @@ -28,6 +28,7 @@ import java.util.Collection; import java.util.Iterator; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -37,7 +38,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public abstract class AbstractMultimapTester> +@ElementTypesAreNonnullByDefault +public abstract class AbstractMultimapTester< + K extends @Nullable Object, V extends @Nullable Object, M extends Multimap> extends AbstractContainerTester> { private M multimap; @@ -46,7 +49,9 @@ protected M multimap() { return multimap; } - /** @return an array of the proper size with {@code null} as the key of the middle element. */ + /** + * @return an array of the proper size with {@code null} as the key of the middle element. + */ protected Entry[] createArrayWithNullKey() { Entry[] array = createSamplesArray(); int nullKeyLocation = getNullLocation(); @@ -55,7 +60,9 @@ protected Entry[] createArrayWithNullKey() { return array; } - /** @return an array of the proper size with {@code null} as the value of the middle element. */ + /** + * @return an array of the proper size with {@code null} as the value of the middle element. + */ protected Entry[] createArrayWithNullValue() { Entry[] array = createSamplesArray(); int nullValueLocation = getNullLocation(); @@ -134,7 +141,9 @@ protected Multimap resetContainer(Entry... newContents) { return multimap; } - /** @see AbstractContainerTester#resetContainer() */ + /** + * @see AbstractContainerTester#resetContainer() + */ protected void resetCollection() { resetContainer(); } @@ -143,7 +152,7 @@ protected void assertGet(K key, V... values) { assertGet(key, Arrays.asList(values)); } - protected void assertGet(K key, Collection values) { + protected void assertGet(K key, Collection values) { assertEqualIgnoringOrder(values, multimap().get(key)); if (!values.isEmpty()) { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java b/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java index cd28cdc2810b..b493378b5fb8 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/AbstractMultisetSetCountTester.java @@ -26,6 +26,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.Multiset; import com.google.common.collect.Multiset.Entry; import com.google.common.collect.testing.Helpers; @@ -384,6 +385,7 @@ public void testSetCount_negative_removeUnsupported() { * Returns {@link Method} instances for the {@code setCount()} tests that assume multisets support * duplicates so that the test of {@code Multisets.forSet()} can suppress them. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getSetCountDuplicateInitializingMethods() { return Arrays.asList( @@ -392,6 +394,7 @@ public static List getSetCountDuplicateInitializingMethods() { getMethod("testSetCount_threeToOne_supported")); } + @J2ktIncompatible @GwtIncompatible // reflection private static Method getMethod(String methodName) { return Helpers.getMethod(AbstractMultisetSetCountTester.class, methodName); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java index 13efdcd6d1be..260a160fbb94 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/BiMapGenerators.java @@ -31,6 +31,7 @@ * @author Hayward Chan */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class BiMapGenerators { public static class ImmutableBiMapGenerator extends TestStringBiMapGenerator { @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapInverseTester.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapInverseTester.java index 984558e2b72d..f151d8fbaf63 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/BiMapInverseTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/BiMapInverseTester.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.BiMap; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; @@ -72,11 +73,13 @@ private static class BiMapPair implements Serializable { * Returns {@link Method} instances for the tests that assume that the inverse will be the same * after serialization. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getInverseSameAfterSerializingMethods() { return Collections.singletonList(getMethod("testInverseSerialization")); } + @J2ktIncompatible @GwtIncompatible // reflection private static Method getMethod(String methodName) { return Helpers.getMethod(BiMapInverseTester.class, methodName); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java index 35579a01d758..dcd9e649fb67 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java @@ -31,6 +31,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Derived suite generators for Guava collection interfaces, split out of the suite builders so that @@ -39,8 +40,10 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public final class DerivedGoogleCollectionGenerators { - public static class MapGenerator implements TestMapGenerator, DerivedGenerator { + public static class MapGenerator + implements TestMapGenerator, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> generator; @@ -87,7 +90,7 @@ public TestSubjectGenerator getInnerGenerator() { } } - public static class InverseBiMapGenerator + public static class InverseBiMapGenerator implements TestBiMapGenerator, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> generator; @@ -151,7 +154,7 @@ public TestSubjectGenerator getInnerGenerator() { } } - public static class BiMapValueSetGenerator + public static class BiMapValueSetGenerator implements TestSetGenerator, DerivedGenerator { private final OneSizeTestContainerGenerator, Entry> mapGenerator; private final SampleElements samples; diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ElementTypesAreNonnullByDefault.java b/guava-testlib/src/com/google/common/collect/testing/google/ElementTypesAreNonnullByDefault.java new file mode 100644 index 000000000000..c666efdcbff8 --- /dev/null +++ b/guava-testlib/src/com/google/common/collect/testing/google/ElementTypesAreNonnullByDefault.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2021 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.common.collect.testing.google; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import com.google.common.annotations.GwtCompatible; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; + +/** + * Marks all "top-level" types as non-null in a way that is recognized by Kotlin. Note that this + * unfortunately includes type-variable usages, so we also provide {@link ParametricNullness} to + * "undo" it as best we can. + */ +@GwtCompatible +@Retention(RUNTIME) +@Target(TYPE) +@TypeQualifierDefault({FIELD, METHOD, PARAMETER}) +@Nonnull +@interface ElementTypesAreNonnullByDefault {} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java index 0839f09188ae..86e638b009cc 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/ListGenerators.java @@ -37,6 +37,7 @@ * @author Hayward Chan */ @GwtCompatible +@ElementTypesAreNonnullByDefault public final class ListGenerators { private ListGenerators() {} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapAsMapTester.java b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapAsMapTester.java index ca6f21af2c55..08f77c653d29 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapAsMapTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapAsMapTester.java @@ -32,6 +32,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -43,7 +44,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class ListMultimapAsMapTester extends AbstractListMultimapTester { +@ElementTypesAreNonnullByDefault +public class ListMultimapAsMapTester + extends AbstractListMultimapTester { public void testAsMapValuesImplementList() { for (Collection valueCollection : multimap().asMap().values()) { assertTrue(valueCollection instanceof List); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java index 35063e815d0b..f3e2c246555a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java @@ -46,6 +46,7 @@ * @author Hayward Chan */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class MapGenerators { public static class ImmutableMapGenerator extends TestStringMapGenerator { @Override @@ -232,7 +233,7 @@ public String[] createKeyArray(int length) { @Override @SuppressWarnings({"unchecked", "rawtypes"}) // needed for arrays - public ImmutableSet[] createValueArray(int length) { + public Collection[] createValueArray(int length) { return new ImmutableSet[length]; } } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapEqualsTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapEqualsTester.java index 21163602eecc..d4c01bc01313 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapEqualsTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultimapEqualsTester.java @@ -27,6 +27,7 @@ import java.util.ArrayList; import java.util.List; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -36,7 +37,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class MultimapEqualsTester extends AbstractMultimapTester> { +@ElementTypesAreNonnullByDefault +public class MultimapEqualsTester + extends AbstractMultimapTester> { public void testEqualsTrue() { new EqualsTester() .addEqualityGroup(multimap(), getSubjectGenerator().create(getSampleElements().toArray())) diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutTester.java index c108e8525ca4..5bf9df12a0ae 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultimapPutTester.java @@ -35,6 +35,7 @@ import java.util.Iterator; import java.util.List; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -44,7 +45,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class MultimapPutTester extends AbstractMultimapTester> { +@ElementTypesAreNonnullByDefault +public class MultimapPutTester + extends AbstractMultimapTester> { @MapFeature.Require(absent = SUPPORTS_PUT) public void testPutUnsupported() { try { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapSizeTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapSizeTester.java index 23d6bdf043e3..a783f44acf45 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapSizeTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultimapSizeTester.java @@ -28,6 +28,7 @@ import com.google.common.collect.testing.features.MapFeature; import java.util.Collection; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -37,7 +38,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class MultimapSizeTester extends AbstractMultimapTester> { +@ElementTypesAreNonnullByDefault +public class MultimapSizeTester + extends AbstractMultimapTester> { public void testSize() { int expectedSize = getNumElements(); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetCountTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetCountTester.java index 7c07cd33d06c..ab62c29cc0aa 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetCountTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetCountTester.java @@ -23,6 +23,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionFeature; @@ -86,6 +87,7 @@ public void testCount_wrongType() { * Returns {@link Method} instances for the read tests that assume multisets support duplicates so * that the test of {@code Multisets.forSet()} can suppress them. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getCountDuplicateInitializingMethods() { return Arrays.asList(Helpers.getMethod(MultisetCountTester.class, "testCount_3")); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetElementSetTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetElementSetTester.java index baa6071f84bf..193fc62098db 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetElementSetTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetElementSetTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -99,6 +100,7 @@ public void testElementSetClear() { * Returns {@link Method} instances for the read tests that assume multisets support duplicates so * that the test of {@code Multisets.forSet()} can suppress them. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getElementSetDuplicateInitializingMethods() { return Arrays.asList( diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetForEachEntryTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetForEachEntryTester.java index 50c2ad507a3c..14150f968eed 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetForEachEntryTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetForEachEntryTester.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.Multiset.Entry; import com.google.common.collect.Multisets; import com.google.common.collect.testing.Helpers; @@ -69,6 +70,7 @@ public void testForEachEntryDuplicates() { * Returns {@link Method} instances for the remove tests that assume multisets support duplicates * so that the test of {@code Multisets.forSet()} can suppress them. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getForEachEntryDuplicateInitializingMethods() { return Arrays.asList( diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java index 9e47f31c5651..090ff4d581e7 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetIteratorTester.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.features.CollectionFeature; @@ -28,6 +29,7 @@ import java.util.Arrays; import java.util.Iterator; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -38,7 +40,8 @@ */ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class MultisetIteratorTester extends AbstractMultisetTester { +@ElementTypesAreNonnullByDefault +public class MultisetIteratorTester extends AbstractMultisetTester { @CollectionFeature.Require({SUPPORTS_ITERATOR_REMOVE, KNOWN_ORDER}) public void testRemovingIteratorKnownOrder() { new IteratorTester( @@ -99,6 +102,7 @@ protected Iterator newTargetIterator() { * Returns {@link Method} instances for the tests that assume multisets support duplicates so that * the test of {@code Multisets.forSet()} can suppress them. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getIteratorDuplicateInitializingMethods() { return Arrays.asList( diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetRemoveTester.java index e6594c18a2d1..e31dee7726e1 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetRemoveTester.java @@ -25,6 +25,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.WrongType; import com.google.common.collect.testing.features.CollectionFeature; @@ -188,6 +189,7 @@ public void testRetainAllIgnoresCount() { * Returns {@link Method} instances for the remove tests that assume multisets support duplicates * so that the test of {@code Multisets.forSet()} can suppress them. */ + @J2ktIncompatible @GwtIncompatible // reflection public static List getRemoveDuplicateInitializingMethods() { return Arrays.asList( diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java index 0b55a2798ae1..f6b51743a54f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SetGenerators.java @@ -59,6 +59,7 @@ * @author Hayward Chan */ @GwtCompatible(emulated = true) +@ElementTypesAreNonnullByDefault public class SetGenerators { public static class ImmutableSetCopyOfGenerator extends TestStringSetGenerator { @@ -400,7 +401,7 @@ protected SortedSet create(Integer[] elements) { /** Sorts the elements in reverse natural order. */ @Override public List order(List insertionOrder) { - Collections.sort(insertionOrder, Ordering.natural().reverse()); + Collections.sort(insertionOrder, Ordering.natural().reverse()); return insertionOrder; } } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapAsMapTester.java b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapAsMapTester.java index 6e7995720846..0a42414172e6 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapAsMapTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapAsMapTester.java @@ -32,6 +32,7 @@ import java.util.Map; import java.util.Map.Entry; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -43,7 +44,9 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class SetMultimapAsMapTester extends AbstractMultimapTester> { +@ElementTypesAreNonnullByDefault +public class SetMultimapAsMapTester + extends AbstractMultimapTester> { public void testAsMapValuesImplementSet() { for (Collection valueCollection : multimap().asMap().values()) { assertTrue(valueCollection instanceof Set); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java index 424fbb17efe3..f98674a5068e 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java @@ -42,6 +42,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class SortedMapGenerators { public static class ImmutableSortedMapGenerator extends TestStringSortedMapGenerator { @Override @@ -116,7 +117,7 @@ protected List create(String[] elements) { @Override public List order(List insertionOrder) { - return Ordering.natural().sortedCopy(insertionOrder); + return Ordering.natural().sortedCopy(insertionOrder); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestBiMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestBiMapGenerator.java index 11c353b6bbce..5194e50c603a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestBiMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestBiMapGenerator.java @@ -20,6 +20,7 @@ import com.google.common.collect.BiMap; import com.google.common.collect.testing.TestContainerGenerator; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates bimaps, containing sample entries, to be tested. @@ -27,7 +28,9 @@ * @author Louis Wasserman */ @GwtCompatible -public interface TestBiMapGenerator extends TestContainerGenerator, Entry> { +@ElementTypesAreNonnullByDefault +public interface TestBiMapGenerator + extends TestContainerGenerator, Entry> { K[] createKeyArray(int length); V[] createValueArray(int length); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java index 851e221896c0..c9d4652fbd3d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestEnumMultisetGenerator.java @@ -30,6 +30,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestEnumMultisetGenerator implements TestMultisetGenerator { @Override public SampleElements samples() { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestListMultimapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestListMultimapGenerator.java index 1ab668fb92b0..6a71573f11b6 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestListMultimapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestListMultimapGenerator.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.ListMultimap; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A generator for {@code ListMultimap} implementations based on test data. @@ -25,5 +26,6 @@ * @author Louis Wasserman */ @GwtCompatible -public interface TestListMultimapGenerator +@ElementTypesAreNonnullByDefault +public interface TestListMultimapGenerator extends TestMultimapGenerator> {} diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestMultimapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestMultimapGenerator.java index 06ce43f306c9..79c6874bffbb 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestMultimapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestMultimapGenerator.java @@ -22,6 +22,7 @@ import com.google.common.collect.testing.TestContainerGenerator; import java.util.Collection; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates multimaps, containing sample elements, to be tested. @@ -29,7 +30,9 @@ * @author Louis Wasserman */ @GwtCompatible -public interface TestMultimapGenerator> +@ElementTypesAreNonnullByDefault +public interface TestMultimapGenerator< + K extends @Nullable Object, V extends @Nullable Object, M extends Multimap> extends TestContainerGenerator> { K[] createKeyArray(int length); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestMultisetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestMultisetGenerator.java index d3b5acd49d7e..272313253dea 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestMultisetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestMultisetGenerator.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.collect.Multiset; import com.google.common.collect.testing.TestCollectionGenerator; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Creates multisets, containing sample elements, to be tested. @@ -26,7 +27,9 @@ * @author Jared Levy */ @GwtCompatible -public interface TestMultisetGenerator extends TestCollectionGenerator { +@ElementTypesAreNonnullByDefault +public interface TestMultisetGenerator + extends TestCollectionGenerator { @Override Multiset create(Object... elements); } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java index d475397edd21..2232c494d075 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java @@ -32,6 +32,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringBiMapGenerator implements TestBiMapGenerator { @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java index 64b33af0a6e7..5ad6c53f755d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java @@ -30,6 +30,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringListMultimapGenerator implements TestListMultimapGenerator { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestStringMultisetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestStringMultisetGenerator.java index eeacf5d1932c..b7b2558d9919 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestStringMultisetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestStringMultisetGenerator.java @@ -28,6 +28,7 @@ * @author Jared Levy */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringMultisetGenerator implements TestMultisetGenerator { @Override public SampleElements samples() { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java index e49ccffed7a8..27e43a805d93 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java @@ -29,6 +29,7 @@ * @author Louis Wasserman */ @GwtCompatible +@ElementTypesAreNonnullByDefault public abstract class TestStringSetMultimapGenerator implements TestSetMultimapGenerator { diff --git a/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java b/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java index 8cbd7ea9a766..4d3857e1215d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java @@ -35,6 +35,7 @@ import java.util.List; import java.util.Map.Entry; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; /** * A series of tests that support asserting that collections cannot be modified, either through @@ -43,11 +44,13 @@ * @author Robert Konigsberg */ @GwtCompatible +@ElementTypesAreNonnullByDefault public class UnmodifiableCollectionTests { public static void assertMapEntryIsUnmodifiable(Entry entry) { try { - entry.setValue(null); + Entry nullableValueEntry = (Entry) entry; + nullableValueEntry.setValue(null); fail("setValue on unmodifiable Map.Entry succeeded"); } catch (UnsupportedOperationException expected) { } @@ -109,7 +112,8 @@ public static void assertIteratorsInOrder( * @param sampleElement an element of the same type as that contained by {@code collection}. * {@code collection} may or may not have {@code sampleElement} as a member. */ - public static void assertCollectionIsUnmodifiable(Collection collection, E sampleElement) { + public static void assertCollectionIsUnmodifiable( + Collection collection, E sampleElement) { Collection siblingCollection = new ArrayList<>(); siblingCollection.add(sampleElement); @@ -181,7 +185,8 @@ public static void assertCollectionIsUnmodifiable(Collection collection, * @param sampleElement an element of the same type as that contained by {@code set}. {@code set} * may or may not have {@code sampleElement} as a member. */ - public static void assertSetIsUnmodifiable(Set set, E sampleElement) { + public static void assertSetIsUnmodifiable( + Set set, E sampleElement) { assertCollectionIsUnmodifiable(set, sampleElement); } @@ -201,7 +206,8 @@ public static void assertSetIsUnmodifiable(Set set, E sampleElement) { * @param sampleElement an element of the same type as that contained by {@code multiset}. {@code * multiset} may or may not have {@code sampleElement} as a member. */ - public static void assertMultisetIsUnmodifiable(Multiset multiset, E sampleElement) { + public static void assertMultisetIsUnmodifiable( + Multiset multiset, E sampleElement) { Multiset copy = LinkedHashMultiset.create(multiset); assertCollectionsAreEquivalent(multiset, copy); @@ -268,8 +274,8 @@ public E getElement() { * @param sampleValue a key of the same type as that contained by {@code multimap}. {@code * multimap} may or may not have {@code sampleValue} as a key. */ - public static void assertMultimapIsUnmodifiable( - Multimap multimap, K sampleKey, V sampleValue) { + public static + void assertMultimapIsUnmodifiable(Multimap multimap, K sampleKey, V sampleValue) { List> originalEntries = Collections.unmodifiableList(Lists.newArrayList(multimap.entries())); @@ -408,13 +414,13 @@ public static void assertMultimapIsUnmodifiable( assertMultimapRemainsUnmodified(multimap, originalEntries); } - private static void assertCollectionsAreEquivalent( + private static void assertCollectionsAreEquivalent( Collection expected, Collection actual) { assertIteratorsInOrder(expected.iterator(), actual.iterator()); } - private static void assertMultimapRemainsUnmodified( - Multimap expected, List> actual) { + private static + void assertMultimapRemainsUnmodified(Multimap expected, List> actual) { assertIteratorsInOrder(expected.entries().iterator(), actual.iterator()); } } diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java index 5275acb250e0..d6ecb9a50c4a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/AbstractListTester.java @@ -21,6 +21,7 @@ import com.google.common.collect.testing.Helpers; import java.util.Collection; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -29,8 +30,9 @@ * @author George van den Driessche */ @GwtCompatible +@ElementTypesAreNonnullByDefault @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class AbstractListTester extends AbstractCollectionTester { +public class AbstractListTester extends AbstractCollectionTester { /* * Previously we had a field named list that was initialized to the value of * collection in setUp(), but that caused problems when a tester changed the diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java index b4193ae1d0a8..09094ac23b84 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddAllTester.java @@ -25,6 +25,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.MinimalCollection; @@ -34,6 +35,7 @@ import java.util.ConcurrentModificationException; import java.util.Iterator; import java.util.List; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -45,7 +47,8 @@ */ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class CollectionAddAllTester extends AbstractCollectionTester { +public class CollectionAddAllTester + extends AbstractCollectionTester { @CollectionFeature.Require(SUPPORTS_ADD) public void testAddAll_supportedNothing() { assertFalse("addAll(nothing) should return false", collection.addAll(emptyCollection())); @@ -166,6 +169,7 @@ public void testAddAll_nullCollectionReference() { * suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddAllNullUnsupportedMethod() { return Helpers.getMethod(CollectionAddAllTester.class, "testAddAll_nullUnsupported"); @@ -177,6 +181,7 @@ public static Method getAddAllNullUnsupportedMethod() { * figure out what to do with {@code ConcurrentHashMap} support for * {@code entrySet().add()}. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddAllUnsupportedNonePresentMethod() { return Helpers.getMethod(CollectionAddAllTester.class, "testAddAll_unsupportedNonePresent"); @@ -188,6 +193,7 @@ public static Method getAddAllUnsupportedNonePresentMethod() { * figure out what to do with {@code ConcurrentHashMap} support for * {@code entrySet().add()}. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddAllUnsupportedSomePresentMethod() { return Helpers.getMethod(CollectionAddAllTester.class, "testAddAll_unsupportedSomePresent"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java index 321bf9486e50..5b64d4790fe4 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionAddTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; @@ -111,6 +112,7 @@ public void testAddConcurrentWithIteration() { * will be to permit them, as it seems more likely that code would depend on that behavior than on * the other. Thus, we say the bug is in add(), which fails to support null. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddNullSupportedMethod() { return Helpers.getMethod(CollectionAddTester.class, "testAdd_nullSupported"); @@ -122,6 +124,7 @@ public static Method getAddNullSupportedMethod() { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddNullUnsupportedMethod() { return Helpers.getMethod(CollectionAddTester.class, "testAdd_nullUnsupported"); @@ -133,6 +136,7 @@ public static Method getAddNullUnsupportedMethod() { * what to do with {@code ConcurrentHashMap} support for {@code * entrySet().add()}. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddUnsupportedNotPresentMethod() { return Helpers.getMethod(CollectionAddTester.class, "testAdd_unsupportedNotPresent"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java index c2a0b68efaa0..61aa0f54d775 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionCreationTester.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; @@ -64,6 +65,7 @@ public void testCreateWithNull_unsupported() { * can suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getCreateWithNullUnsupportedMethod() { return Helpers.getMethod(CollectionCreationTester.class, "testCreateWithNull_unsupported"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java index 1699fe19dced..f4f05b4d5d4b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionIteratorTester.java @@ -39,6 +39,7 @@ import java.util.Map.Entry; import java.util.NoSuchElementException; import java.util.Set; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -49,7 +50,9 @@ */ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class CollectionIteratorTester extends AbstractCollectionTester { +@ElementTypesAreNonnullByDefault +public class CollectionIteratorTester + extends AbstractCollectionTester { public void testIterator() { List iteratorElements = new ArrayList<>(); for (E element : collection) { // uses iterator() diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSpliteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSpliteratorTester.java index fdc8bffdabc8..a4ee0b56a4fa 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSpliteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionSpliteratorTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.SpliteratorTester; @@ -82,12 +83,14 @@ public void testSpliteratorNotImmutable_CollectionAllowsRemove() { } } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSpliteratorNotImmutableCollectionAllowsAddMethod() { return Helpers.getMethod( CollectionSpliteratorTester.class, "testSpliteratorNotImmutable_CollectionAllowsAdd"); } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSpliteratorNotImmutableCollectionAllowsRemoveMethod() { return Helpers.getMethod( diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java index b40fc3636943..f6b8064b9a4d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/CollectionToArrayTester.java @@ -21,6 +21,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractCollectionTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.WrongType; @@ -194,6 +195,7 @@ private void expectArrayContentsInOrder(List expected, Object[] actual) { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 6260652 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getToArrayIsPlainObjectArrayMethod() { return Helpers.getMethod(CollectionToArrayTester.class, "testToArray_isPlainObjectArray"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapPutIfAbsentTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapPutIfAbsentTester.java index 955123658144..c0293f625152 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapPutIfAbsentTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapPutIfAbsentTester.java @@ -39,6 +39,7 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. +@ElementTypesAreNonnullByDefault public class ConcurrentMapPutIfAbsentTester extends AbstractMapTester { @Override protected ConcurrentMap getMap() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapRemoveTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapRemoveTester.java index 87cc319b3b18..b96dda1f5f4f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapRemoveTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapRemoveTester.java @@ -36,6 +36,7 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. +@ElementTypesAreNonnullByDefault public class ConcurrentMapRemoveTester extends AbstractMapTester { @Override protected ConcurrentMap getMap() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceEntryTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceEntryTester.java index 57f631cd8b24..544afc1c2e3a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceEntryTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceEntryTester.java @@ -37,6 +37,7 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. +@ElementTypesAreNonnullByDefault public class ConcurrentMapReplaceEntryTester extends AbstractMapTester { @Override protected ConcurrentMap getMap() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceTester.java index f0bc16447239..3e4255283e4d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ConcurrentMapReplaceTester.java @@ -38,6 +38,7 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. +@ElementTypesAreNonnullByDefault public class ConcurrentMapReplaceTester extends AbstractMapTester { @Override protected ConcurrentMap getMap() { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ElementTypesAreNonnullByDefault.java b/guava-testlib/src/com/google/common/collect/testing/testers/ElementTypesAreNonnullByDefault.java new file mode 100644 index 000000000000..6d5d26c79493 --- /dev/null +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ElementTypesAreNonnullByDefault.java @@ -0,0 +1,41 @@ +/* + * Copyright (C) 2021 The Guava Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.google.common.collect.testing.testers; + +import static java.lang.annotation.ElementType.FIELD; +import static java.lang.annotation.ElementType.METHOD; +import static java.lang.annotation.ElementType.PARAMETER; +import static java.lang.annotation.ElementType.TYPE; +import static java.lang.annotation.RetentionPolicy.RUNTIME; + +import com.google.common.annotations.GwtCompatible; +import java.lang.annotation.Retention; +import java.lang.annotation.Target; +import javax.annotation.Nonnull; +import javax.annotation.meta.TypeQualifierDefault; + +/** + * Marks all "top-level" types as non-null in a way that is recognized by Kotlin. Note that this + * unfortunately includes type-variable usages, so we also provide {@link ParametricNullness} to + * "undo" it as best we can. + */ +@GwtCompatible +@Retention(RUNTIME) +@Target(TYPE) +@TypeQualifierDefault({FIELD, METHOD, PARAMETER}) +@Nonnull +@interface ElementTypesAreNonnullByDefault {} diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java index d2902358d1ee..f48f0b309a84 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddAtIndexTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -153,6 +154,7 @@ public void testAddAtIndex_tooLarge() { * Returns the {@link Method} instance for {@link #testAddAtIndex_nullSupported()} so that tests * can suppress it. See {@link CollectionAddTester#getAddNullSupportedMethod()} for details. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddNullSupportedMethod() { return Helpers.getMethod(ListAddAtIndexTester.class, "testAddAtIndex_nullSupported"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java index 5c953ce4bf19..1f85c13f6b30 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListAddTester.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -75,6 +76,7 @@ public void testAdd_supportedNullPresent() { * Returns the {@link Method} instance for {@link #testAdd_supportedNullPresent()} so that tests * can suppress it. See {@link CollectionAddTester#getAddNullSupportedMethod()} for details. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddSupportedNullPresentMethod() { return Helpers.getMethod(ListAddTester.class, "testAdd_supportedNullPresent"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java index 93a8526791d8..b6c6ef520339 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListHashCodeTester.java @@ -18,6 +18,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import java.lang.reflect.Method; import org.junit.Ignore; @@ -45,6 +46,7 @@ public void testHashCode() { * Returns the {@link Method} instance for {@link #testHashCode()} so that list tests on * unhashable objects can suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()}. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getHashCodeMethod() { return Helpers.getMethod(ListHashCodeTester.class, "testHashCode"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java index 0d4b13e68413..8f8b3567faeb 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListListIteratorTester.java @@ -26,6 +26,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.IteratorFeature; import com.google.common.collect.testing.ListIteratorTester; @@ -36,6 +37,7 @@ import java.util.ListIterator; import java.util.Set; import java.util.concurrent.CopyOnWriteArraySet; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -47,7 +49,8 @@ */ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class ListListIteratorTester extends AbstractListTester { +@ElementTypesAreNonnullByDefault +public class ListListIteratorTester extends AbstractListTester { @CollectionFeature.Require(absent = SUPPORTS_REMOVE) @ListFeature.Require(absent = {SUPPORTS_SET, SUPPORTS_ADD_WITH_INDEX}) public void testListIterator_unmodifiable() { @@ -111,6 +114,7 @@ public void testListIterator_atSize() { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 6570575 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getListIteratorFullyModifiableMethod() { return Helpers.getMethod(ListListIteratorTester.class, "testListIterator_fullyModifiable"); @@ -120,6 +124,7 @@ public static Method getListIteratorFullyModifiableMethod() { * Returns the {@link Method} instance for {@link #testListIterator_unmodifiable()} so that it can * be suppressed in GWT tests. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getListIteratorUnmodifiableMethod() { return Helpers.getMethod(ListListIteratorTester.class, "testListIterator_unmodifiable"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java index 844f1b4d6052..49ee7892d45b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListSetTester.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -142,6 +143,7 @@ private int aValidIndex() { * will be to permit them, as it seems more likely that code would depend on that behavior than on * the other. Thus, we say the bug is in set(), which fails to support null. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSetNullSupportedMethod() { return Helpers.getMethod(ListSetTester.class, "testSet_null"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java index 47080164dd4d..5732b6f6464c 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/ListSubListTester.java @@ -27,6 +27,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -318,6 +319,7 @@ public void testReserializeSubList() { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 6570631 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSubListOriginalListSetAffectsSubListMethod() { return getMethod(ListSubListTester.class, "testSubList_originalListSetAffectsSubList"); @@ -330,6 +332,7 @@ public static Method getSubListOriginalListSetAffectsSubListMethod() { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 6570631 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSubListOriginalListSetAffectsSubListLargeListMethod() { return getMethod(ListSubListTester.class, "testSubList_originalListSetAffectsSubListLargeList"); @@ -342,6 +345,7 @@ public static Method getSubListOriginalListSetAffectsSubListLargeListMethod() { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 6570575 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSubListSubListRemoveAffectsOriginalLargeListMethod() { return getMethod(ListSubListTester.class, "testSubList_subListRemoveAffectsOriginalLargeList"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java index 0810dea28a54..f3ee117f63b5 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapCreationTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionSize; @@ -147,6 +148,7 @@ private void expectFirstRemoved(Entry[] entries) { * tests can suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getCreateWithNullKeyUnsupportedMethod() { return Helpers.getMethod(MapCreationTester.class, "testCreateWithNullKeyUnsupported"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapEntrySetTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapEntrySetTester.java index 537f091b4a06..28583b485994 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapEntrySetTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapEntrySetTester.java @@ -27,6 +27,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; @@ -141,26 +142,31 @@ public void testSetValueWithNullValuesAbsent() { expectUnchanged(); } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getContainsEntryWithIncomparableKeyMethod() { return Helpers.getMethod(MapEntrySetTester.class, "testContainsEntryWithIncomparableKey"); } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getContainsEntryWithIncomparableValueMethod() { return Helpers.getMethod(MapEntrySetTester.class, "testContainsEntryWithIncomparableValue"); } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSetValueMethod() { return Helpers.getMethod(MapEntrySetTester.class, "testSetValue"); } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSetValueWithNullValuesPresentMethod() { return Helpers.getMethod(MapEntrySetTester.class, "testSetValueWithNullValuesPresent"); } + @J2ktIncompatible @GwtIncompatible // reflection public static Method getSetValueWithNullValuesAbsentMethod() { return Helpers.getMethod(MapEntrySetTester.class, "testSetValueWithNullValuesAbsent"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapMergeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapMergeTester.java index 5fb9735ef8bb..f403b8d31534 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapMergeTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapMergeTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionSize; @@ -190,6 +191,7 @@ public void testMergeUnsupported() { * Returns the {@link Method} instance for {@link #testMergeNullValue()} so that tests of {@link * Hashtable} can suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()}. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getMergeNullValueMethod() { return Helpers.getMethod(MapMergeTester.class, "testMergeNullValue"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java index d693e6b5e10f..387b25462c64 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutAllTester.java @@ -25,6 +25,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.MinimalCollection; @@ -38,6 +39,7 @@ import java.util.List; import java.util.Map; import java.util.Map.Entry; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -49,7 +51,9 @@ */ @GwtCompatible(emulated = true) @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class MapPutAllTester extends AbstractMapTester { +@ElementTypesAreNonnullByDefault +public class MapPutAllTester + extends AbstractMapTester { private List> containsNullKey; private List> containsNullValue; @@ -195,6 +199,7 @@ private void putAll(Iterable> entries) { * can suppress it with {@code FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getPutAllNullKeyUnsupportedMethod() { return Helpers.getMethod(MapPutAllTester.class, "testPutAll_nullKeyUnsupported"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java index a81a5dd78a73..059b46c47bc7 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/MapPutTester.java @@ -24,6 +24,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.AbstractMapTester; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionSize; @@ -256,6 +257,7 @@ private V put(Entry entry) { * FeatureSpecificTestSuiteBuilder.suppressing()} until Sun bug 5045147 is fixed. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getPutNullKeyUnsupportedMethod() { return Helpers.getMethod(MapPutTester.class, "testPut_nullKeyUnsupported"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java index 197496827e01..30aab56e195b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetAddTester.java @@ -22,6 +22,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -57,6 +58,7 @@ public void testAdd_supportedNullPresent() { * Returns the {@link Method} instance for {@link #testAdd_supportedNullPresent()} so that tests * can suppress it. See {@link CollectionAddTester#getAddNullSupportedMethod()} for details. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method getAddSupportedNullPresentMethod() { return Helpers.getMethod(SetAddTester.class, "testAdd_supportedNullPresent"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java index 5f60327d47af..3b06c5bd21f1 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SetHashCodeTester.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.Helpers; import com.google.common.collect.testing.features.CollectionFeature; import com.google.common.collect.testing.features.CollectionSize; @@ -69,6 +70,7 @@ public void testHashCode_containingNull() { * hashCode()} on the set values so that set tests on unhashable objects can suppress it with * {@code FeatureSpecificTestSuiteBuilder.suppressing()}. */ + @J2ktIncompatible @GwtIncompatible // reflection public static Method[] getHashCodeMethods() { return new Method[] { diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/SortedSetNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/SortedSetNavigationTester.java index bf5ac223a9c5..82a9582d8173 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/SortedSetNavigationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/SortedSetNavigationTester.java @@ -27,6 +27,7 @@ import java.util.List; import java.util.NoSuchElementException; import java.util.SortedSet; +import org.checkerframework.checker.nullness.qual.Nullable; import org.junit.Ignore; /** @@ -38,13 +39,14 @@ */ @GwtCompatible @Ignore // Affects only Android test runner, which respects JUnit 4 annotations on JUnit 3 tests. -public class SortedSetNavigationTester extends AbstractSetTester { +@ElementTypesAreNonnullByDefault +public class SortedSetNavigationTester extends AbstractSetTester { private SortedSet sortedSet; private List values; - private E a; - private E b; - private E c; + private @Nullable E a; + private @Nullable E b; + private @Nullable E c; @Override public void setUp() throws Exception { From 603a844152a768a358d7ccd103d5dfcfba820d14 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Wed, 21 Feb 2024 09:54:03 -0800 Subject: [PATCH 162/216] Disable tests on J2KT that fail due to a bug with missing RandomAccess MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit J2KT has independently made the same mistake as J2CL/GWT: `Arrays.asList(…).subList()` returns a list that doesn’t advertise `RandomAccess`. (Kotlin’s `arrayListOf` doesn’t have this problem but returns a fully modifiable `ArrayList`, so implementing J2KT’s `Arrays.asList()` in terms of `arrayListOf` is not a good option. arrayListOf would also make it hard for J2KT's `Arrays.asList` to return a view of the original array) RELNOTES=n/a PiperOrigin-RevId: 609030855 --- .../test/com/google/common/collect/IterablesTest.java | 8 ++++---- .../test/com/google/common/collect/IteratorsTest.java | 4 ++-- .../test/com/google/common/collect/ListsTest.java | 1 + .../test/com/google/common/collect/IterablesTest.java | 8 ++++---- .../test/com/google/common/collect/IteratorsTest.java | 4 ++-- guava-tests/test/com/google/common/collect/ListsTest.java | 1 + 6 files changed, 14 insertions(+), 12 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/IterablesTest.java b/android/guava-tests/test/com/google/common/collect/IterablesTest.java index 7bf229a1dd6c..5a6ffcf05194 100644 --- a/android/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -453,8 +453,8 @@ public void testPartition_view() { assertEquals(ImmutableList.of(3, 4), first); } - @GwtIncompatible // ? - // TODO: Figure out why this is failing in GWT. + @J2ktIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in J2KT. + @GwtIncompatible // Arrays.asList(...).subList doesn't implement RandomAccess in GWT public void testPartitionRandomAccessInput() { Iterable source = asList(1, 2, 3); Iterable> partitions = Iterables.partition(source, 2); @@ -463,8 +463,8 @@ public void testPartitionRandomAccessInput() { assertTrue(iterator.next() instanceof RandomAccess); } - @GwtIncompatible // ? - // TODO: Figure out why this is failing in GWT. + @J2ktIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in J2KT. + @GwtIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in GWT public void testPartitionNonRandomAccessInput() { Iterable source = Lists.newLinkedList(asList(1, 2, 3)); Iterable> partitions = Iterables.partition(source, 2); diff --git a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java index 76ed1451d6cf..11f0828819f4 100644 --- a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -1034,8 +1034,8 @@ public void testPartition_view() { assertEquals(ImmutableList.of(3), first); } - @GwtIncompatible // ? - // TODO: Figure out why this is failing in GWT. + @J2ktIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in J2KT. + @GwtIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in GWT public void testPartitionRandomAccess() { Iterator source = asList(1, 2, 3).iterator(); Iterator> partitions = Iterators.partition(source, 2); diff --git a/android/guava-tests/test/com/google/common/collect/ListsTest.java b/android/guava-tests/test/com/google/common/collect/ListsTest.java index 5411cd529ce9..0007f41ceb76 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsTest.java @@ -934,6 +934,7 @@ public void testPartition_3_2() { assertEquals(asList(3), partitions.get(1)); } + @J2ktIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in J2KT. @GwtIncompatible // ArrayList.subList doesn't implement RandomAccess in GWT. public void testPartitionRandomAccessTrue() { List source = asList(1, 2, 3); diff --git a/guava-tests/test/com/google/common/collect/IterablesTest.java b/guava-tests/test/com/google/common/collect/IterablesTest.java index c930aa351062..fe58a0d8dfd9 100644 --- a/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -482,8 +482,8 @@ public void testPartition_view() { assertEquals(ImmutableList.of(3, 4), first); } - @GwtIncompatible // ? - // TODO: Figure out why this is failing in GWT. + @J2ktIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in J2KT. + @GwtIncompatible // Arrays.asList(...).subList doesn't implement RandomAccess in GWT public void testPartitionRandomAccessInput() { Iterable source = asList(1, 2, 3); Iterable> partitions = Iterables.partition(source, 2); @@ -492,8 +492,8 @@ public void testPartitionRandomAccessInput() { assertTrue(iterator.next() instanceof RandomAccess); } - @GwtIncompatible // ? - // TODO: Figure out why this is failing in GWT. + @J2ktIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in J2KT. + @GwtIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in GWT public void testPartitionNonRandomAccessInput() { Iterable source = Lists.newLinkedList(asList(1, 2, 3)); Iterable> partitions = Iterables.partition(source, 2); diff --git a/guava-tests/test/com/google/common/collect/IteratorsTest.java b/guava-tests/test/com/google/common/collect/IteratorsTest.java index 76ed1451d6cf..11f0828819f4 100644 --- a/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -1034,8 +1034,8 @@ public void testPartition_view() { assertEquals(ImmutableList.of(3), first); } - @GwtIncompatible // ? - // TODO: Figure out why this is failing in GWT. + @J2ktIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in J2KT. + @GwtIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in GWT public void testPartitionRandomAccess() { Iterator source = asList(1, 2, 3).iterator(); Iterator> partitions = Iterators.partition(source, 2); diff --git a/guava-tests/test/com/google/common/collect/ListsTest.java b/guava-tests/test/com/google/common/collect/ListsTest.java index 5411cd529ce9..0007f41ceb76 100644 --- a/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/guava-tests/test/com/google/common/collect/ListsTest.java @@ -934,6 +934,7 @@ public void testPartition_3_2() { assertEquals(asList(3), partitions.get(1)); } + @J2ktIncompatible // Arrays.asList(...).subList() doesn't implement RandomAccess in J2KT. @GwtIncompatible // ArrayList.subList doesn't implement RandomAccess in GWT. public void testPartitionRandomAccessTrue() { List source = asList(1, 2, 3); From 7ff64578013c46ed9d97068d5f0db0489848ada6 Mon Sep 17 00:00:00 2001 From: Kurt Alfred Kluever Date: Wed, 21 Feb 2024 10:29:17 -0800 Subject: [PATCH 163/216] Automated Code Change PiperOrigin-RevId: 609044129 --- .../google/common/base/CharMatcherTest.java | 2 +- .../google/common/base/MoreObjectsTest.java | 4 +-- .../com/google/common/base/ObjectsTest.java | 2 +- .../com/google/common/base/OptionalTest.java | 4 +-- .../common/base/ToStringHelperTest.java | 4 +-- .../google/common/eventbus/EventBusTest.java | 2 +- .../common/primitives/BooleansTest.java | 4 +-- .../reflect/MutableTypeToInstanceMapTest.java | 10 +++--- .../util/concurrent/JSR166TestCase.java | 34 +++++++++---------- .../google/common/base/CharMatcherTest.java | 2 +- .../google/common/base/MoreObjectsTest.java | 4 +-- .../com/google/common/base/ObjectsTest.java | 2 +- .../com/google/common/base/OptionalTest.java | 4 +-- .../common/base/ToStringHelperTest.java | 4 +-- .../google/common/eventbus/EventBusTest.java | 2 +- .../common/primitives/BooleansTest.java | 4 +-- .../reflect/MutableTypeToInstanceMapTest.java | 10 +++--- .../util/concurrent/JSR166TestCase.java | 34 +++++++++---------- 18 files changed, 66 insertions(+), 66 deletions(-) diff --git a/android/guava-tests/test/com/google/common/base/CharMatcherTest.java b/android/guava-tests/test/com/google/common/base/CharMatcherTest.java index b6131b52c263..67e83a7fb030 100644 --- a/android/guava-tests/test/com/google/common/base/CharMatcherTest.java +++ b/android/guava-tests/test/com/google/common/base/CharMatcherTest.java @@ -735,7 +735,7 @@ static void checkExactMatches(CharMatcher m, char[] chars) { positive.add(c); } for (int c = 0; c <= Character.MAX_VALUE; c++) { - assertFalse(positive.contains(new Character((char) c)) ^ m.matches((char) c)); + assertFalse(positive.contains(Character.valueOf((char) c)) ^ m.matches((char) c)); } } diff --git a/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java b/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java index eabfdb656cad..4f9fa0655e2e 100644 --- a/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java +++ b/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java @@ -194,7 +194,7 @@ public void testToString_oneField() { @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneIntegerField() { String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", new Integer(42)).toString(); + MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); assertEquals("TestClass{field1=42}", toTest); } @@ -212,7 +212,7 @@ public void testToStringLenient_oneField() { public void testToStringLenient_oneIntegerField() { String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", new Integer(42)).toString(); + MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); assertTrue(toTest, toTest.matches(".*\\{field1\\=42\\}")); } diff --git a/android/guava-tests/test/com/google/common/base/ObjectsTest.java b/android/guava-tests/test/com/google/common/base/ObjectsTest.java index 34428e223691..ff81db62d1d2 100644 --- a/android/guava-tests/test/com/google/common/base/ObjectsTest.java +++ b/android/guava-tests/test/com/google/common/base/ObjectsTest.java @@ -47,7 +47,7 @@ public void testEqual() throws Exception { public void testHashCode() throws Exception { int h1 = Objects.hashCode(1, "two", 3.0); - int h2 = Objects.hashCode(new Integer(1), new String("two"), new Double(3.0)); + int h2 = Objects.hashCode(Integer.valueOf(1), new String("two"), Double.valueOf(3.0)); // repeatable assertEquals(h1, h2); diff --git a/android/guava-tests/test/com/google/common/base/OptionalTest.java b/android/guava-tests/test/com/google/common/base/OptionalTest.java index 2694a1a0fb00..0541d4d6ce50 100644 --- a/android/guava-tests/test/com/google/common/base/OptionalTest.java +++ b/android/guava-tests/test/com/google/common/base/OptionalTest.java @@ -215,8 +215,8 @@ public void testTransform_absent_functionReturnsNull() { public void testEqualsAndHashCode() { new EqualsTester() .addEqualityGroup(Optional.absent(), reserialize(Optional.absent())) - .addEqualityGroup(Optional.of(new Long(5)), reserialize(Optional.of(new Long(5)))) - .addEqualityGroup(Optional.of(new Long(42)), reserialize(Optional.of(new Long(42)))) + .addEqualityGroup(Optional.of(Long.valueOf(5)), reserialize(Optional.of(Long.valueOf(5)))) + .addEqualityGroup(Optional.of(Long.valueOf(42)), reserialize(Optional.of(Long.valueOf(42)))) .testEquals(); } diff --git a/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java b/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java index db15f2ef811c..9e95eb7147cc 100644 --- a/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java +++ b/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java @@ -156,7 +156,7 @@ public void testToString_oneField() { @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneIntegerField() { String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", new Integer(42)).toString(); + MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); assertEquals("TestClass{field1=42}", toTest); } @@ -174,7 +174,7 @@ public void testToStringLenient_oneField() { public void testToStringLenient_oneIntegerField() { String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", new Integer(42)).toString(); + MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); assertTrue(toTest, toTest.matches(".*\\{field1\\=42\\}")); } diff --git a/android/guava-tests/test/com/google/common/eventbus/EventBusTest.java b/android/guava-tests/test/com/google/common/eventbus/EventBusTest.java index 8161c271b04b..319f7e60529a 100644 --- a/android/guava-tests/test/com/google/common/eventbus/EventBusTest.java +++ b/android/guava-tests/test/com/google/common/eventbus/EventBusTest.java @@ -92,7 +92,7 @@ public void eat(Comparable food) { // Two additional event types: Object and Comparable (played by Integer) Object objEvent = new Object(); - Object compEvent = new Integer(6); + Object compEvent = 6; bus.post(EVENT); bus.post(objEvent); diff --git a/android/guava-tests/test/com/google/common/primitives/BooleansTest.java b/android/guava-tests/test/com/google/common/primitives/BooleansTest.java index e6fbd1aed90d..a968353a9f57 100644 --- a/android/guava-tests/test/com/google/common/primitives/BooleansTest.java +++ b/android/guava-tests/test/com/google/common/primitives/BooleansTest.java @@ -579,9 +579,9 @@ public void testAsListCanonicalValues() { assertThat(list.get(0)).isSameInstanceAs(true); assertThat(list.get(1)).isSameInstanceAs(false); @SuppressWarnings("deprecation") - Boolean anotherTrue = new Boolean(true); + Boolean anotherTrue = true; @SuppressWarnings("deprecation") - Boolean anotherFalse = new Boolean(false); + Boolean anotherFalse = false; list.set(0, anotherTrue); assertThat(list.get(0)).isSameInstanceAs(true); list.set(1, anotherFalse); diff --git a/android/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java b/android/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java index 0ea574e466da..176ca1ef8e7c 100644 --- a/android/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java +++ b/android/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java @@ -84,13 +84,13 @@ protected void setUp() throws Exception { public void testPutThrows() { assertThrows( UnsupportedOperationException.class, - () -> map.put(TypeToken.of(Integer.class), new Integer(5))); + () -> map.put(TypeToken.of(Integer.class), Integer.valueOf(5))); } public void testPutAllThrows() { assertThrows( UnsupportedOperationException.class, - () -> map.putAll(ImmutableMap.of(TypeToken.of(Integer.class), new Integer(5)))); + () -> map.putAll(ImmutableMap.of(TypeToken.of(Integer.class), Integer.valueOf(5)))); } public void testEntrySetMutationThrows() { @@ -120,9 +120,9 @@ public void testEntrySetToTypedArrayMutationThrows() { } public void testPutAndGetInstance() { - assertNull(map.putInstance(Integer.class, new Integer(5))); + assertNull(map.putInstance(Integer.class, Integer.valueOf(5))); - Integer oldValue = map.putInstance(Integer.class, new Integer(7)); + Integer oldValue = map.putInstance(Integer.class, Integer.valueOf(7)); assertEquals(5, (int) oldValue); Integer newValue = map.getInstance(Integer.class); @@ -134,7 +134,7 @@ public void testPutAndGetInstance() { public void testNull() { assertThrows( - NullPointerException.class, () -> map.putInstance((TypeToken) null, new Integer(1))); + NullPointerException.class, () -> map.putInstance((TypeToken) null, Integer.valueOf(1))); map.putInstance(Integer.class, null); assertTrue(map.containsKey(TypeToken.of(Integer.class))); assertTrue(map.entrySet().contains(immutableEntry(TypeToken.of(Integer.class), null))); diff --git a/android/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java b/android/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java index 2f8e1b7355ac..8971e1ae4f8b 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java @@ -531,23 +531,23 @@ public void shouldThrow(String exceptionName) { // Some convenient Integer constants - public static final Integer zero = new Integer(0); - public static final Integer one = new Integer(1); - public static final Integer two = new Integer(2); - public static final Integer three = new Integer(3); - public static final Integer four = new Integer(4); - public static final Integer five = new Integer(5); - public static final Integer six = new Integer(6); - public static final Integer seven = new Integer(7); - public static final Integer eight = new Integer(8); - public static final Integer nine = new Integer(9); - public static final Integer m1 = new Integer(-1); - public static final Integer m2 = new Integer(-2); - public static final Integer m3 = new Integer(-3); - public static final Integer m4 = new Integer(-4); - public static final Integer m5 = new Integer(-5); - public static final Integer m6 = new Integer(-6); - public static final Integer m10 = new Integer(-10); + public static final Integer zero = 0; + public static final Integer one = 1; + public static final Integer two = 2; + public static final Integer three = 3; + public static final Integer four = 4; + public static final Integer five = 5; + public static final Integer six = 6; + public static final Integer seven = 7; + public static final Integer eight = 8; + public static final Integer nine = 9; + public static final Integer m1 = -1; + public static final Integer m2 = -2; + public static final Integer m3 = -3; + public static final Integer m4 = -4; + public static final Integer m5 = -5; + public static final Integer m6 = -6; + public static final Integer m10 = -10; /** * Runs Runnable r with a security policy that permits precisely the specified permissions. If diff --git a/guava-tests/test/com/google/common/base/CharMatcherTest.java b/guava-tests/test/com/google/common/base/CharMatcherTest.java index b6131b52c263..67e83a7fb030 100644 --- a/guava-tests/test/com/google/common/base/CharMatcherTest.java +++ b/guava-tests/test/com/google/common/base/CharMatcherTest.java @@ -735,7 +735,7 @@ static void checkExactMatches(CharMatcher m, char[] chars) { positive.add(c); } for (int c = 0; c <= Character.MAX_VALUE; c++) { - assertFalse(positive.contains(new Character((char) c)) ^ m.matches((char) c)); + assertFalse(positive.contains(Character.valueOf((char) c)) ^ m.matches((char) c)); } } diff --git a/guava-tests/test/com/google/common/base/MoreObjectsTest.java b/guava-tests/test/com/google/common/base/MoreObjectsTest.java index eabfdb656cad..4f9fa0655e2e 100644 --- a/guava-tests/test/com/google/common/base/MoreObjectsTest.java +++ b/guava-tests/test/com/google/common/base/MoreObjectsTest.java @@ -194,7 +194,7 @@ public void testToString_oneField() { @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneIntegerField() { String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", new Integer(42)).toString(); + MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); assertEquals("TestClass{field1=42}", toTest); } @@ -212,7 +212,7 @@ public void testToStringLenient_oneField() { public void testToStringLenient_oneIntegerField() { String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", new Integer(42)).toString(); + MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); assertTrue(toTest, toTest.matches(".*\\{field1\\=42\\}")); } diff --git a/guava-tests/test/com/google/common/base/ObjectsTest.java b/guava-tests/test/com/google/common/base/ObjectsTest.java index 34428e223691..ff81db62d1d2 100644 --- a/guava-tests/test/com/google/common/base/ObjectsTest.java +++ b/guava-tests/test/com/google/common/base/ObjectsTest.java @@ -47,7 +47,7 @@ public void testEqual() throws Exception { public void testHashCode() throws Exception { int h1 = Objects.hashCode(1, "two", 3.0); - int h2 = Objects.hashCode(new Integer(1), new String("two"), new Double(3.0)); + int h2 = Objects.hashCode(Integer.valueOf(1), new String("two"), Double.valueOf(3.0)); // repeatable assertEquals(h1, h2); diff --git a/guava-tests/test/com/google/common/base/OptionalTest.java b/guava-tests/test/com/google/common/base/OptionalTest.java index f3c4a861d68f..25c3166f30b2 100644 --- a/guava-tests/test/com/google/common/base/OptionalTest.java +++ b/guava-tests/test/com/google/common/base/OptionalTest.java @@ -232,8 +232,8 @@ public void testTransform_absent_functionReturnsNull() { public void testEqualsAndHashCode() { new EqualsTester() .addEqualityGroup(Optional.absent(), reserialize(Optional.absent())) - .addEqualityGroup(Optional.of(new Long(5)), reserialize(Optional.of(new Long(5)))) - .addEqualityGroup(Optional.of(new Long(42)), reserialize(Optional.of(new Long(42)))) + .addEqualityGroup(Optional.of(Long.valueOf(5)), reserialize(Optional.of(Long.valueOf(5)))) + .addEqualityGroup(Optional.of(Long.valueOf(42)), reserialize(Optional.of(Long.valueOf(42)))) .testEquals(); } diff --git a/guava-tests/test/com/google/common/base/ToStringHelperTest.java b/guava-tests/test/com/google/common/base/ToStringHelperTest.java index db15f2ef811c..9e95eb7147cc 100644 --- a/guava-tests/test/com/google/common/base/ToStringHelperTest.java +++ b/guava-tests/test/com/google/common/base/ToStringHelperTest.java @@ -156,7 +156,7 @@ public void testToString_oneField() { @GwtIncompatible // Class names are obfuscated in GWT public void testToString_oneIntegerField() { String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", new Integer(42)).toString(); + MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); assertEquals("TestClass{field1=42}", toTest); } @@ -174,7 +174,7 @@ public void testToStringLenient_oneField() { public void testToStringLenient_oneIntegerField() { String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", new Integer(42)).toString(); + MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); assertTrue(toTest, toTest.matches(".*\\{field1\\=42\\}")); } diff --git a/guava-tests/test/com/google/common/eventbus/EventBusTest.java b/guava-tests/test/com/google/common/eventbus/EventBusTest.java index 8161c271b04b..319f7e60529a 100644 --- a/guava-tests/test/com/google/common/eventbus/EventBusTest.java +++ b/guava-tests/test/com/google/common/eventbus/EventBusTest.java @@ -92,7 +92,7 @@ public void eat(Comparable food) { // Two additional event types: Object and Comparable (played by Integer) Object objEvent = new Object(); - Object compEvent = new Integer(6); + Object compEvent = 6; bus.post(EVENT); bus.post(objEvent); diff --git a/guava-tests/test/com/google/common/primitives/BooleansTest.java b/guava-tests/test/com/google/common/primitives/BooleansTest.java index e6fbd1aed90d..a968353a9f57 100644 --- a/guava-tests/test/com/google/common/primitives/BooleansTest.java +++ b/guava-tests/test/com/google/common/primitives/BooleansTest.java @@ -579,9 +579,9 @@ public void testAsListCanonicalValues() { assertThat(list.get(0)).isSameInstanceAs(true); assertThat(list.get(1)).isSameInstanceAs(false); @SuppressWarnings("deprecation") - Boolean anotherTrue = new Boolean(true); + Boolean anotherTrue = true; @SuppressWarnings("deprecation") - Boolean anotherFalse = new Boolean(false); + Boolean anotherFalse = false; list.set(0, anotherTrue); assertThat(list.get(0)).isSameInstanceAs(true); list.set(1, anotherFalse); diff --git a/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java b/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java index 0ea574e466da..176ca1ef8e7c 100644 --- a/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java +++ b/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java @@ -84,13 +84,13 @@ protected void setUp() throws Exception { public void testPutThrows() { assertThrows( UnsupportedOperationException.class, - () -> map.put(TypeToken.of(Integer.class), new Integer(5))); + () -> map.put(TypeToken.of(Integer.class), Integer.valueOf(5))); } public void testPutAllThrows() { assertThrows( UnsupportedOperationException.class, - () -> map.putAll(ImmutableMap.of(TypeToken.of(Integer.class), new Integer(5)))); + () -> map.putAll(ImmutableMap.of(TypeToken.of(Integer.class), Integer.valueOf(5)))); } public void testEntrySetMutationThrows() { @@ -120,9 +120,9 @@ public void testEntrySetToTypedArrayMutationThrows() { } public void testPutAndGetInstance() { - assertNull(map.putInstance(Integer.class, new Integer(5))); + assertNull(map.putInstance(Integer.class, Integer.valueOf(5))); - Integer oldValue = map.putInstance(Integer.class, new Integer(7)); + Integer oldValue = map.putInstance(Integer.class, Integer.valueOf(7)); assertEquals(5, (int) oldValue); Integer newValue = map.getInstance(Integer.class); @@ -134,7 +134,7 @@ public void testPutAndGetInstance() { public void testNull() { assertThrows( - NullPointerException.class, () -> map.putInstance((TypeToken) null, new Integer(1))); + NullPointerException.class, () -> map.putInstance((TypeToken) null, Integer.valueOf(1))); map.putInstance(Integer.class, null); assertTrue(map.containsKey(TypeToken.of(Integer.class))); assertTrue(map.entrySet().contains(immutableEntry(TypeToken.of(Integer.class), null))); diff --git a/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java b/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java index 1825c08ea649..dccdaa8f3e7c 100644 --- a/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java +++ b/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java @@ -534,23 +534,23 @@ public void shouldThrow(String exceptionName) { // Some convenient Integer constants - public static final Integer zero = new Integer(0); - public static final Integer one = new Integer(1); - public static final Integer two = new Integer(2); - public static final Integer three = new Integer(3); - public static final Integer four = new Integer(4); - public static final Integer five = new Integer(5); - public static final Integer six = new Integer(6); - public static final Integer seven = new Integer(7); - public static final Integer eight = new Integer(8); - public static final Integer nine = new Integer(9); - public static final Integer m1 = new Integer(-1); - public static final Integer m2 = new Integer(-2); - public static final Integer m3 = new Integer(-3); - public static final Integer m4 = new Integer(-4); - public static final Integer m5 = new Integer(-5); - public static final Integer m6 = new Integer(-6); - public static final Integer m10 = new Integer(-10); + public static final Integer zero = 0; + public static final Integer one = 1; + public static final Integer two = 2; + public static final Integer three = 3; + public static final Integer four = 4; + public static final Integer five = 5; + public static final Integer six = 6; + public static final Integer seven = 7; + public static final Integer eight = 8; + public static final Integer nine = 9; + public static final Integer m1 = -1; + public static final Integer m2 = -2; + public static final Integer m3 = -3; + public static final Integer m4 = -4; + public static final Integer m5 = -5; + public static final Integer m6 = -6; + public static final Integer m10 = -10; /** * Runs Runnable r with a security policy that permits precisely the specified permissions. If From d16216e9a5f25a9394aa464f2717186830e354b3 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 22 Feb 2024 08:50:42 -0800 Subject: [PATCH 164/216] Bump github/codeql-action from 3.24.3 to 3.24.4 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.3 to 3.24.4. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/379614612a29c9e28f31f39a59013eb8012a51f0...e2e140ad1441662206e8f97754b166877dfa1c73) Fixes #7028 RELNOTES=n/a PiperOrigin-RevId: 609387866 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index 07a564a9a764..fd5ac75d7b0a 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@379614612a29c9e28f31f39a59013eb8012a51f0 # v3.24.3 + uses: github/codeql-action/upload-sarif@e2e140ad1441662206e8f97754b166877dfa1c73 # v3.24.4 with: sarif_file: results.sarif From 7fa9f1e543a42f7a580a3aefadf011fd81cf169a Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 22 Feb 2024 09:12:45 -0800 Subject: [PATCH 165/216] Fix, suppress, and/or localize suppressions for `unchecked` and `rawtypes` warnings in tests (other than `collect`). RELNOTES=n/a PiperOrigin-RevId: 609394351 --- .../com/google/common/base/EnumsBenchmark.java | 11 ++++++++--- .../com/google/common/base/PredicatesTest.java | 8 ++++---- .../reflect/ImmutableTypeToInstanceMapTest.java | 16 +++++++++------- .../reflect/MutableTypeToInstanceMapTest.java | 12 +++++++----- .../com/google/common/reflect/TypeTokenTest.java | 2 ++ .../com/google/common/reflect/TypesTest.java | 1 + .../concurrent/AbstractClosingFutureTest.java | 12 ++++++++++++ .../common/util/concurrent/JSR166TestCase.java | 14 ++++++++------ .../com/google/common/base/EnumsBenchmark.java | 11 ++++++++--- .../com/google/common/base/PredicatesTest.java | 8 ++++---- .../reflect/ImmutableTypeToInstanceMapTest.java | 16 +++++++++------- .../reflect/MutableTypeToInstanceMapTest.java | 12 +++++++----- .../com/google/common/reflect/TypeTokenTest.java | 2 ++ .../com/google/common/reflect/TypesTest.java | 1 + .../concurrent/AbstractClosingFutureTest.java | 12 ++++++++++++ .../common/util/concurrent/JSR166TestCase.java | 12 ++++++------ 16 files changed, 100 insertions(+), 50 deletions(-) diff --git a/android/guava-tests/benchmark/com/google/common/base/EnumsBenchmark.java b/android/guava-tests/benchmark/com/google/common/base/EnumsBenchmark.java index 73cda9af8629..0acb562a0b53 100644 --- a/android/guava-tests/benchmark/com/google/common/base/EnumsBenchmark.java +++ b/android/guava-tests/benchmark/com/google/common/base/EnumsBenchmark.java @@ -32,17 +32,20 @@ public class EnumsBenchmark { @Param({"0.2", "0.8"}) float hitRate; + // We could avoid the raw type here by initializing this with a ternary (? SmallEnum.class : ...). + // However, we end up needing a raw type in getIfPresent, as discussed there. + @SuppressWarnings("rawtypes") private Class enumType; + private String[] sampleData; @BeforeExperiment - @SuppressWarnings("unchecked") void setUp() throws ClassNotFoundException { Preconditions.checkArgument(hitRate >= 0 && hitRate <= 1, "hitRate must be in the range [0,1]"); enumType = - (Class) - Class.forName(EnumsBenchmark.class.getCanonicalName() + "$" + enumSize + "Enum"); + Class.forName(EnumsBenchmark.class.getCanonicalName() + "$" + enumSize + "Enum") + .asSubclass(Enum.class); Enum[] allConstants = enumType.getEnumConstants(); List hits = new ArrayList<>(); @@ -64,6 +67,8 @@ void setUp() throws ClassNotFoundException { sampleData = sampleDataList.toArray(new String[sampleDataList.size()]); } + // Since we can't pass a concrete SomeEnum.class directly, we need to use a raw type. + @SuppressWarnings("unchecked") @Benchmark boolean getIfPresent(int repetitions) { boolean retVal = false; diff --git a/android/guava-tests/test/com/google/common/base/PredicatesTest.java b/android/guava-tests/test/com/google/common/base/PredicatesTest.java index afd9b45f3aaa..f1918c6d8c42 100644 --- a/android/guava-tests/test/com/google/common/base/PredicatesTest.java +++ b/android/guava-tests/test/com/google/common/base/PredicatesTest.java @@ -300,9 +300,9 @@ public void testAnd_serializationIterable() { checkSerialization(Predicates.and(Arrays.asList(TRUE, FALSE))); } - @SuppressWarnings("unchecked") // varargs public void testAnd_arrayDefensivelyCopied() { - Predicate[] array = {Predicates.alwaysFalse()}; + @SuppressWarnings("unchecked") // generic arrays + Predicate[] array = (Predicate[]) new Predicate[] {Predicates.alwaysFalse()}; Predicate predicate = Predicates.and(array); assertFalse(predicate.apply(1)); array[0] = Predicates.alwaysTrue(); @@ -457,9 +457,9 @@ public void testOr_serializationIterable() { assertEquals(pre.apply(0), post.apply(0)); } - @SuppressWarnings("unchecked") // varargs public void testOr_arrayDefensivelyCopied() { - Predicate[] array = {Predicates.alwaysFalse()}; + @SuppressWarnings("unchecked") // generic arrays + Predicate[] array = (Predicate[]) new Predicate[] {Predicates.alwaysFalse()}; Predicate predicate = Predicates.or(array); assertFalse(predicate.apply(1)); array[0] = Predicates.alwaysTrue(); diff --git a/android/guava-tests/test/com/google/common/reflect/ImmutableTypeToInstanceMapTest.java b/android/guava-tests/test/com/google/common/reflect/ImmutableTypeToInstanceMapTest.java index 83b56c445935..3c9304527abd 100644 --- a/android/guava-tests/test/com/google/common/reflect/ImmutableTypeToInstanceMapTest.java +++ b/android/guava-tests/test/com/google/common/reflect/ImmutableTypeToInstanceMapTest.java @@ -52,13 +52,13 @@ public static Test suite() { // Other tests will verify what real, warning-free usage looks like // but here we have to do some serious fudging @Override - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) public Map create(Object... elements) { ImmutableTypeToInstanceMap.Builder builder = ImmutableTypeToInstanceMap.builder(); for (Object object : elements) { - Entry entry = (Entry) object; - builder.put(entry.getKey(), entry.getValue()); + Entry entry = (Entry) object; + builder.put((TypeToken) entry.getKey(), entry.getValue()); } return (Map) builder.build(); } @@ -103,7 +103,8 @@ public void testParameterizedType() { public void testGenericArrayType() { @SuppressWarnings("unchecked") // Trying to test generic array - ImmutableList[] array = new ImmutableList[] {ImmutableList.of(1)}; + ImmutableList[] array = + (ImmutableList[]) new ImmutableList[] {ImmutableList.of(1)}; TypeToken[]> type = new TypeToken[]>() {}; ImmutableTypeToInstanceMap[]> map = ImmutableTypeToInstanceMap.[]>builder().put(type, array).build(); @@ -138,12 +139,13 @@ private TypeToken> anyIterableType() { return new TypeToken>() {}; } + @SuppressWarnings("rawtypes") // TODO(cpovirk): Can we at least use Class in some places? abstract static class TestTypeToInstanceMapGenerator implements TestMapGenerator { @Override - public TypeToken[] createKeyArray(int length) { - return new TypeToken[length]; + public TypeToken[] createKeyArray(int length) { + return new TypeToken[length]; } @Override @@ -168,7 +170,7 @@ private static Entry entry(TypeToken k, Object v) { @Override @SuppressWarnings("unchecked") public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java b/android/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java index 176ca1ef8e7c..10b4f2ecabf1 100644 --- a/android/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java +++ b/android/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java @@ -51,7 +51,7 @@ public static Test suite() { // Other tests will verify what real, warning-free usage looks like // but here we have to do some serious fudging @Override - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) public Map create(Object... elements) { MutableTypeToInstanceMap map = new MutableTypeToInstanceMap<>(); for (Object object : elements) { @@ -104,7 +104,7 @@ public void testEntrySetMutationThrows() { public void testEntrySetToArrayMutationThrows() { map.putInstance(String.class, "test"); @SuppressWarnings("unchecked") // Should get a CCE later if cast is wrong - Entry entry = (Entry) map.entrySet().toArray()[0]; + Entry entry = (Entry) map.entrySet().toArray()[0]; assertEquals(TypeToken.of(String.class), entry.getKey()); assertEquals("test", entry.getValue()); assertThrows(UnsupportedOperationException.class, () -> entry.setValue(1)); @@ -113,7 +113,7 @@ public void testEntrySetToArrayMutationThrows() { public void testEntrySetToTypedArrayMutationThrows() { map.putInstance(String.class, "test"); @SuppressWarnings("unchecked") // Should get a CCE later if cast is wrong - Entry entry = map.entrySet().toArray(new Entry[0])[0]; + Entry entry = (Entry) map.entrySet().toArray(new Entry[0])[0]; assertEquals(TypeToken.of(String.class), entry.getKey()); assertEquals("test", entry.getValue()); assertThrows(UnsupportedOperationException.class, () -> entry.setValue(1)); @@ -134,7 +134,8 @@ public void testPutAndGetInstance() { public void testNull() { assertThrows( - NullPointerException.class, () -> map.putInstance((TypeToken) null, Integer.valueOf(1))); + NullPointerException.class, + () -> map.putInstance((TypeToken) null, Integer.valueOf(1))); map.putInstance(Integer.class, null); assertTrue(map.containsKey(TypeToken.of(Integer.class))); assertTrue(map.entrySet().contains(immutableEntry(TypeToken.of(Integer.class), null))); @@ -176,7 +177,8 @@ public void testParameterizedType() { public void testGenericArrayType() { @SuppressWarnings("unchecked") // Trying to test generic array - ImmutableList[] array = new ImmutableList[] {ImmutableList.of(1)}; + ImmutableList[] array = + (ImmutableList[]) new ImmutableList[] {ImmutableList.of(1)}; TypeToken[]> type = new TypeToken[]>() {}; map.putInstance(type, array); assertEquals(1, map.size()); diff --git a/android/guava-tests/test/com/google/common/reflect/TypeTokenTest.java b/android/guava-tests/test/com/google/common/reflect/TypeTokenTest.java index 409d02b707e1..c3213540c9cf 100644 --- a/android/guava-tests/test/com/google/common/reflect/TypeTokenTest.java +++ b/android/guava-tests/test/com/google/common/reflect/TypeTokenTest.java @@ -1378,7 +1378,9 @@ public void testGetSubtype_genericSubtypeOfGenericTypeWithFewerParameters() { } public void testGetSubtype_genericSubtypeOfRawTypeWithFewerTypeParameters() { + @SuppressWarnings("rawtypes") // test of raw types TypeToken supertype = new TypeToken() {}; + @SuppressWarnings("rawtypes") // test of raw types TypeToken subtype = new TypeToken() {}; assertTrue(subtype.isSubtypeOf(supertype)); Class actualSubtype = (Class) supertype.getSubtype(subtype.getRawType()).getType(); diff --git a/android/guava-tests/test/com/google/common/reflect/TypesTest.java b/android/guava-tests/test/com/google/common/reflect/TypesTest.java index b33afce0b8c2..3270aeb928ae 100644 --- a/android/guava-tests/test/com/google/common/reflect/TypesTest.java +++ b/android/guava-tests/test/com/google/common/reflect/TypesTest.java @@ -145,6 +145,7 @@ public void testNewArrayType() { Type jvmType1 = new TypeCapture[]>() {}.capture(); GenericArrayType ourType1 = (GenericArrayType) Types.newArrayType(Types.newParameterizedType(List.class, String.class)); + @SuppressWarnings("rawtypes") // test of raw types Type jvmType2 = new TypeCapture() {}.capture(); Type ourType2 = Types.newArrayType(List.class); new EqualsTester() diff --git a/android/guava-tests/test/com/google/common/util/concurrent/AbstractClosingFutureTest.java b/android/guava-tests/test/com/google/common/util/concurrent/AbstractClosingFutureTest.java index 1afeff4038c3..5486c41fc97e 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/AbstractClosingFutureTest.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/AbstractClosingFutureTest.java @@ -1708,53 +1708,65 @@ static final class Waiter { private final CountDownLatch returned = new CountDownLatch(1); private Object proxy; + @SuppressWarnings("unchecked") // proxy for a generic class Callable waitFor(Callable callable) { return waitFor(callable, Callable.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingCallable waitFor(ClosingCallable closingCallable) { return waitFor(closingCallable, ClosingCallable.class); } + @SuppressWarnings("unchecked") // proxy for a generic class AsyncClosingCallable waitFor(AsyncClosingCallable asyncClosingCallable) { return waitFor(asyncClosingCallable, AsyncClosingCallable.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingFunction waitFor(ClosingFunction closingFunction) { return waitFor(closingFunction, ClosingFunction.class); } + @SuppressWarnings("unchecked") // proxy for a generic class AsyncClosingFunction waitFor(AsyncClosingFunction asyncClosingFunction) { return waitFor(asyncClosingFunction, AsyncClosingFunction.class); } + @SuppressWarnings("unchecked") // proxy for a generic class CombiningCallable waitFor(CombiningCallable combiningCallable) { return waitFor(combiningCallable, CombiningCallable.class); } + @SuppressWarnings("unchecked") // proxy for a generic class AsyncCombiningCallable waitFor(AsyncCombiningCallable asyncCombiningCallable) { return waitFor(asyncCombiningCallable, AsyncCombiningCallable.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingFunction2 waitFor(ClosingFunction2 closingFunction2) { return waitFor(closingFunction2, ClosingFunction2.class); } + @SuppressWarnings("unchecked") // proxy for a generic class AsyncClosingFunction2 waitFor( AsyncClosingFunction2 asyncClosingFunction2) { return waitFor(asyncClosingFunction2, AsyncClosingFunction2.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingFunction3 waitFor( ClosingFunction3 closingFunction3) { return waitFor(closingFunction3, ClosingFunction3.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingFunction4 waitFor( ClosingFunction4 closingFunction4) { return waitFor(closingFunction4, ClosingFunction4.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingFunction5 waitFor( ClosingFunction5 closingFunction5) { return waitFor(closingFunction5, ClosingFunction5.class); diff --git a/android/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java b/android/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java index 8971e1ae4f8b..44fa69474bda 100644 --- a/android/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java +++ b/android/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java @@ -497,12 +497,12 @@ void assertThreadsStayAlive(long millis, Thread... threads) { } /** Checks that future.get times out, with the default timeout of {@code timeoutMillis()}. */ - void assertFutureTimesOut(Future future) { + void assertFutureTimesOut(Future future) { assertFutureTimesOut(future, timeoutMillis()); } /** Checks that future.get times out, with the given millisecond timeout. */ - void assertFutureTimesOut(Future future, long timeoutMillis) { + void assertFutureTimesOut(Future future, long timeoutMillis) { long startTime = System.nanoTime(); try { future.get(timeoutMillis, MILLISECONDS); @@ -817,7 +817,8 @@ public static class NoOpRunnable implements Runnable { public void run() {} } - public static class NoOpCallable implements Callable { + public static class NoOpCallable implements Callable { + @Override public Object call() { return Boolean.TRUE; } @@ -925,7 +926,8 @@ protected void realRun() { } } - public class SmallCallable extends CheckedCallable { + public class SmallCallable extends CheckedCallable { + @Override protected Object realCall() throws InterruptedException { delay(SMALL_DELAY_MS); return Boolean.TRUE; @@ -1058,7 +1060,7 @@ public void run() { } } - public static class TrackedCallable implements Callable { + public static class TrackedCallable implements Callable { public volatile boolean done = false; public Object call() { @@ -1129,7 +1131,7 @@ public int await() { } } - void checkEmpty(BlockingQueue q) { + void checkEmpty(BlockingQueue q) { try { assertTrue(q.isEmpty()); assertEquals(0, q.size()); diff --git a/guava-tests/benchmark/com/google/common/base/EnumsBenchmark.java b/guava-tests/benchmark/com/google/common/base/EnumsBenchmark.java index 73cda9af8629..0acb562a0b53 100644 --- a/guava-tests/benchmark/com/google/common/base/EnumsBenchmark.java +++ b/guava-tests/benchmark/com/google/common/base/EnumsBenchmark.java @@ -32,17 +32,20 @@ public class EnumsBenchmark { @Param({"0.2", "0.8"}) float hitRate; + // We could avoid the raw type here by initializing this with a ternary (? SmallEnum.class : ...). + // However, we end up needing a raw type in getIfPresent, as discussed there. + @SuppressWarnings("rawtypes") private Class enumType; + private String[] sampleData; @BeforeExperiment - @SuppressWarnings("unchecked") void setUp() throws ClassNotFoundException { Preconditions.checkArgument(hitRate >= 0 && hitRate <= 1, "hitRate must be in the range [0,1]"); enumType = - (Class) - Class.forName(EnumsBenchmark.class.getCanonicalName() + "$" + enumSize + "Enum"); + Class.forName(EnumsBenchmark.class.getCanonicalName() + "$" + enumSize + "Enum") + .asSubclass(Enum.class); Enum[] allConstants = enumType.getEnumConstants(); List hits = new ArrayList<>(); @@ -64,6 +67,8 @@ void setUp() throws ClassNotFoundException { sampleData = sampleDataList.toArray(new String[sampleDataList.size()]); } + // Since we can't pass a concrete SomeEnum.class directly, we need to use a raw type. + @SuppressWarnings("unchecked") @Benchmark boolean getIfPresent(int repetitions) { boolean retVal = false; diff --git a/guava-tests/test/com/google/common/base/PredicatesTest.java b/guava-tests/test/com/google/common/base/PredicatesTest.java index afd9b45f3aaa..f1918c6d8c42 100644 --- a/guava-tests/test/com/google/common/base/PredicatesTest.java +++ b/guava-tests/test/com/google/common/base/PredicatesTest.java @@ -300,9 +300,9 @@ public void testAnd_serializationIterable() { checkSerialization(Predicates.and(Arrays.asList(TRUE, FALSE))); } - @SuppressWarnings("unchecked") // varargs public void testAnd_arrayDefensivelyCopied() { - Predicate[] array = {Predicates.alwaysFalse()}; + @SuppressWarnings("unchecked") // generic arrays + Predicate[] array = (Predicate[]) new Predicate[] {Predicates.alwaysFalse()}; Predicate predicate = Predicates.and(array); assertFalse(predicate.apply(1)); array[0] = Predicates.alwaysTrue(); @@ -457,9 +457,9 @@ public void testOr_serializationIterable() { assertEquals(pre.apply(0), post.apply(0)); } - @SuppressWarnings("unchecked") // varargs public void testOr_arrayDefensivelyCopied() { - Predicate[] array = {Predicates.alwaysFalse()}; + @SuppressWarnings("unchecked") // generic arrays + Predicate[] array = (Predicate[]) new Predicate[] {Predicates.alwaysFalse()}; Predicate predicate = Predicates.or(array); assertFalse(predicate.apply(1)); array[0] = Predicates.alwaysTrue(); diff --git a/guava-tests/test/com/google/common/reflect/ImmutableTypeToInstanceMapTest.java b/guava-tests/test/com/google/common/reflect/ImmutableTypeToInstanceMapTest.java index 83b56c445935..3c9304527abd 100644 --- a/guava-tests/test/com/google/common/reflect/ImmutableTypeToInstanceMapTest.java +++ b/guava-tests/test/com/google/common/reflect/ImmutableTypeToInstanceMapTest.java @@ -52,13 +52,13 @@ public static Test suite() { // Other tests will verify what real, warning-free usage looks like // but here we have to do some serious fudging @Override - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) public Map create(Object... elements) { ImmutableTypeToInstanceMap.Builder builder = ImmutableTypeToInstanceMap.builder(); for (Object object : elements) { - Entry entry = (Entry) object; - builder.put(entry.getKey(), entry.getValue()); + Entry entry = (Entry) object; + builder.put((TypeToken) entry.getKey(), entry.getValue()); } return (Map) builder.build(); } @@ -103,7 +103,8 @@ public void testParameterizedType() { public void testGenericArrayType() { @SuppressWarnings("unchecked") // Trying to test generic array - ImmutableList[] array = new ImmutableList[] {ImmutableList.of(1)}; + ImmutableList[] array = + (ImmutableList[]) new ImmutableList[] {ImmutableList.of(1)}; TypeToken[]> type = new TypeToken[]>() {}; ImmutableTypeToInstanceMap[]> map = ImmutableTypeToInstanceMap.[]>builder().put(type, array).build(); @@ -138,12 +139,13 @@ private TypeToken> anyIterableType() { return new TypeToken>() {}; } + @SuppressWarnings("rawtypes") // TODO(cpovirk): Can we at least use Class in some places? abstract static class TestTypeToInstanceMapGenerator implements TestMapGenerator { @Override - public TypeToken[] createKeyArray(int length) { - return new TypeToken[length]; + public TypeToken[] createKeyArray(int length) { + return new TypeToken[length]; } @Override @@ -168,7 +170,7 @@ private static Entry entry(TypeToken k, Object v) { @Override @SuppressWarnings("unchecked") public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java b/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java index 176ca1ef8e7c..10b4f2ecabf1 100644 --- a/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java +++ b/guava-tests/test/com/google/common/reflect/MutableTypeToInstanceMapTest.java @@ -51,7 +51,7 @@ public static Test suite() { // Other tests will verify what real, warning-free usage looks like // but here we have to do some serious fudging @Override - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) public Map create(Object... elements) { MutableTypeToInstanceMap map = new MutableTypeToInstanceMap<>(); for (Object object : elements) { @@ -104,7 +104,7 @@ public void testEntrySetMutationThrows() { public void testEntrySetToArrayMutationThrows() { map.putInstance(String.class, "test"); @SuppressWarnings("unchecked") // Should get a CCE later if cast is wrong - Entry entry = (Entry) map.entrySet().toArray()[0]; + Entry entry = (Entry) map.entrySet().toArray()[0]; assertEquals(TypeToken.of(String.class), entry.getKey()); assertEquals("test", entry.getValue()); assertThrows(UnsupportedOperationException.class, () -> entry.setValue(1)); @@ -113,7 +113,7 @@ public void testEntrySetToArrayMutationThrows() { public void testEntrySetToTypedArrayMutationThrows() { map.putInstance(String.class, "test"); @SuppressWarnings("unchecked") // Should get a CCE later if cast is wrong - Entry entry = map.entrySet().toArray(new Entry[0])[0]; + Entry entry = (Entry) map.entrySet().toArray(new Entry[0])[0]; assertEquals(TypeToken.of(String.class), entry.getKey()); assertEquals("test", entry.getValue()); assertThrows(UnsupportedOperationException.class, () -> entry.setValue(1)); @@ -134,7 +134,8 @@ public void testPutAndGetInstance() { public void testNull() { assertThrows( - NullPointerException.class, () -> map.putInstance((TypeToken) null, Integer.valueOf(1))); + NullPointerException.class, + () -> map.putInstance((TypeToken) null, Integer.valueOf(1))); map.putInstance(Integer.class, null); assertTrue(map.containsKey(TypeToken.of(Integer.class))); assertTrue(map.entrySet().contains(immutableEntry(TypeToken.of(Integer.class), null))); @@ -176,7 +177,8 @@ public void testParameterizedType() { public void testGenericArrayType() { @SuppressWarnings("unchecked") // Trying to test generic array - ImmutableList[] array = new ImmutableList[] {ImmutableList.of(1)}; + ImmutableList[] array = + (ImmutableList[]) new ImmutableList[] {ImmutableList.of(1)}; TypeToken[]> type = new TypeToken[]>() {}; map.putInstance(type, array); assertEquals(1, map.size()); diff --git a/guava-tests/test/com/google/common/reflect/TypeTokenTest.java b/guava-tests/test/com/google/common/reflect/TypeTokenTest.java index 409d02b707e1..c3213540c9cf 100644 --- a/guava-tests/test/com/google/common/reflect/TypeTokenTest.java +++ b/guava-tests/test/com/google/common/reflect/TypeTokenTest.java @@ -1378,7 +1378,9 @@ public void testGetSubtype_genericSubtypeOfGenericTypeWithFewerParameters() { } public void testGetSubtype_genericSubtypeOfRawTypeWithFewerTypeParameters() { + @SuppressWarnings("rawtypes") // test of raw types TypeToken supertype = new TypeToken() {}; + @SuppressWarnings("rawtypes") // test of raw types TypeToken subtype = new TypeToken() {}; assertTrue(subtype.isSubtypeOf(supertype)); Class actualSubtype = (Class) supertype.getSubtype(subtype.getRawType()).getType(); diff --git a/guava-tests/test/com/google/common/reflect/TypesTest.java b/guava-tests/test/com/google/common/reflect/TypesTest.java index b33afce0b8c2..3270aeb928ae 100644 --- a/guava-tests/test/com/google/common/reflect/TypesTest.java +++ b/guava-tests/test/com/google/common/reflect/TypesTest.java @@ -145,6 +145,7 @@ public void testNewArrayType() { Type jvmType1 = new TypeCapture[]>() {}.capture(); GenericArrayType ourType1 = (GenericArrayType) Types.newArrayType(Types.newParameterizedType(List.class, String.class)); + @SuppressWarnings("rawtypes") // test of raw types Type jvmType2 = new TypeCapture() {}.capture(); Type ourType2 = Types.newArrayType(List.class); new EqualsTester() diff --git a/guava-tests/test/com/google/common/util/concurrent/AbstractClosingFutureTest.java b/guava-tests/test/com/google/common/util/concurrent/AbstractClosingFutureTest.java index b6ca74e8e560..8ed0ca35ccd5 100644 --- a/guava-tests/test/com/google/common/util/concurrent/AbstractClosingFutureTest.java +++ b/guava-tests/test/com/google/common/util/concurrent/AbstractClosingFutureTest.java @@ -1725,53 +1725,65 @@ static final class Waiter { private final CountDownLatch returned = new CountDownLatch(1); private Object proxy; + @SuppressWarnings("unchecked") // proxy for a generic class Callable waitFor(Callable callable) { return waitFor(callable, Callable.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingCallable waitFor(ClosingCallable closingCallable) { return waitFor(closingCallable, ClosingCallable.class); } + @SuppressWarnings("unchecked") // proxy for a generic class AsyncClosingCallable waitFor(AsyncClosingCallable asyncClosingCallable) { return waitFor(asyncClosingCallable, AsyncClosingCallable.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingFunction waitFor(ClosingFunction closingFunction) { return waitFor(closingFunction, ClosingFunction.class); } + @SuppressWarnings("unchecked") // proxy for a generic class AsyncClosingFunction waitFor(AsyncClosingFunction asyncClosingFunction) { return waitFor(asyncClosingFunction, AsyncClosingFunction.class); } + @SuppressWarnings("unchecked") // proxy for a generic class CombiningCallable waitFor(CombiningCallable combiningCallable) { return waitFor(combiningCallable, CombiningCallable.class); } + @SuppressWarnings("unchecked") // proxy for a generic class AsyncCombiningCallable waitFor(AsyncCombiningCallable asyncCombiningCallable) { return waitFor(asyncCombiningCallable, AsyncCombiningCallable.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingFunction2 waitFor(ClosingFunction2 closingFunction2) { return waitFor(closingFunction2, ClosingFunction2.class); } + @SuppressWarnings("unchecked") // proxy for a generic class AsyncClosingFunction2 waitFor( AsyncClosingFunction2 asyncClosingFunction2) { return waitFor(asyncClosingFunction2, AsyncClosingFunction2.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingFunction3 waitFor( ClosingFunction3 closingFunction3) { return waitFor(closingFunction3, ClosingFunction3.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingFunction4 waitFor( ClosingFunction4 closingFunction4) { return waitFor(closingFunction4, ClosingFunction4.class); } + @SuppressWarnings("unchecked") // proxy for a generic class ClosingFunction5 waitFor( ClosingFunction5 closingFunction5) { return waitFor(closingFunction5, ClosingFunction5.class); diff --git a/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java b/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java index dccdaa8f3e7c..3d72790a7dc5 100644 --- a/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java +++ b/guava-tests/test/com/google/common/util/concurrent/JSR166TestCase.java @@ -500,12 +500,12 @@ void assertThreadsStayAlive(long millis, Thread... threads) { } /** Checks that future.get times out, with the default timeout of {@code timeoutMillis()}. */ - void assertFutureTimesOut(Future future) { + void assertFutureTimesOut(Future future) { assertFutureTimesOut(future, timeoutMillis()); } /** Checks that future.get times out, with the given millisecond timeout. */ - void assertFutureTimesOut(Future future, long timeoutMillis) { + void assertFutureTimesOut(Future future, long timeoutMillis) { long startTime = System.nanoTime(); try { future.get(timeoutMillis, MILLISECONDS); @@ -831,7 +831,7 @@ public static class NoOpRunnable implements Runnable { public void run() {} } - public static class NoOpCallable implements Callable { + public static class NoOpCallable implements Callable { @Override public Object call() { return Boolean.TRUE; @@ -949,7 +949,7 @@ protected void realRun() { } } - public class SmallCallable extends CheckedCallable { + public class SmallCallable extends CheckedCallable { @Override protected Object realCall() throws InterruptedException { delay(SMALL_DELAY_MS); @@ -1096,7 +1096,7 @@ public void run() { } } - public static class TrackedCallable implements Callable { + public static class TrackedCallable implements Callable { public volatile boolean done = false; @Override @@ -1170,7 +1170,7 @@ public int await() { } } - void checkEmpty(BlockingQueue q) { + void checkEmpty(BlockingQueue q) { try { assertTrue(q.isEmpty()); assertEquals(0, q.size()); From e5b68f120f455a3853ca6bad6ce9f4e3e0231897 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 22 Feb 2024 09:37:51 -0800 Subject: [PATCH 166/216] Fix, suppress, and/or localize suppressions for `unchecked` and `rawtypes` warnings in non-`collect`, non-`gwt`, non-test code. RELNOTES=n/a PiperOrigin-RevId: 609401671 --- .../com/google/common/testing/FreshValueGenerator.java | 8 ++++++++ .../src/com/google/common/testing/GcFinalization.java | 5 +++++ android/guava/src/com/google/common/base/Throwables.java | 2 ++ android/guava/src/com/google/common/cache/LocalCache.java | 2 +- android/guava/src/com/google/common/cache/Striped64.java | 1 + .../src/com/google/common/hash/LittleEndianByteArray.java | 1 + android/guava/src/com/google/common/hash/Striped64.java | 1 + .../src/com/google/common/io/FileBackedOutputStream.java | 1 + .../src/com/google/common/primitives/UnsignedBytes.java | 1 + android/guava/src/com/google/common/reflect/Types.java | 1 + .../com/google/common/util/concurrent/AbstractFuture.java | 2 +- .../com/google/common/util/concurrent/ClosingFuture.java | 1 + .../src/com/google/common/util/concurrent/Futures.java | 1 + .../src/com/google/common/testing/CollectorTester.java | 4 +++- .../com/google/common/testing/FreshValueGenerator.java | 8 ++++++++ .../src/com/google/common/testing/GcFinalization.java | 5 +++++ guava/src/com/google/common/base/Throwables.java | 2 ++ guava/src/com/google/common/cache/LocalCache.java | 2 +- guava/src/com/google/common/cache/Striped64.java | 1 + .../src/com/google/common/hash/LittleEndianByteArray.java | 1 + guava/src/com/google/common/hash/Striped64.java | 1 + .../src/com/google/common/io/FileBackedOutputStream.java | 1 + guava/src/com/google/common/primitives/UnsignedBytes.java | 1 + guava/src/com/google/common/reflect/Types.java | 1 + .../com/google/common/util/concurrent/AbstractFuture.java | 2 +- .../com/google/common/util/concurrent/ClosingFuture.java | 1 + guava/src/com/google/common/util/concurrent/Futures.java | 1 + .../google/common/util/concurrent/FuturesGetChecked.java | 1 + 28 files changed, 54 insertions(+), 5 deletions(-) diff --git a/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java b/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java index 24d6edd89b3b..4cc25e1289fb 100644 --- a/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java +++ b/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java @@ -379,6 +379,7 @@ int generateInt() { return freshness.get(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Integer generateInteger() { return new Integer(generateInt()); @@ -389,6 +390,7 @@ long generateLong() { return generateInt(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Long generateLongObject() { return new Long(generateLong()); @@ -399,6 +401,7 @@ float generateFloat() { return generateInt(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Float generateFloatObject() { return new Float(generateFloat()); @@ -409,6 +412,7 @@ Float generateFloatObject() { return generateInt(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Double generateDoubleObject() { return new Double(generateDouble()); @@ -419,6 +423,7 @@ short generateShort() { return (short) generateInt(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Short generateShortObject() { return new Short(generateShort()); @@ -429,6 +434,7 @@ byte generateByte() { return (byte) generateInt(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Byte generateByteObject() { return new Byte(generateByte()); @@ -439,6 +445,7 @@ char generateChar() { return generateString().charAt(0); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Character generateCharacter() { return new Character(generateChar()); @@ -449,6 +456,7 @@ boolean generateBoolean() { return generateInt() % 2 == 0; } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Boolean generateBooleanObject() { return new Boolean(generateBoolean()); diff --git a/android/guava-testlib/src/com/google/common/testing/GcFinalization.java b/android/guava-testlib/src/com/google/common/testing/GcFinalization.java index cf3409ac3578..d360298d6c12 100644 --- a/android/guava-testlib/src/com/google/common/testing/GcFinalization.java +++ b/android/guava-testlib/src/com/google/common/testing/GcFinalization.java @@ -135,6 +135,7 @@ private static long timeoutSeconds() { * * @throws RuntimeException if timed out or interrupted while waiting */ + @SuppressWarnings("removal") // b/260137033 public static void awaitDone(Future future) { if (future.isDone()) { return; @@ -167,6 +168,7 @@ public static void awaitDone(Future future) { * * @throws RuntimeException if timed out or interrupted while waiting */ + @SuppressWarnings("removal") // b/260137033 public static void awaitDone(FinalizationPredicate predicate) { if (predicate.isDone()) { return; @@ -195,6 +197,7 @@ public static void awaitDone(FinalizationPredicate predicate) { * * @throws RuntimeException if timed out or interrupted while waiting */ + @SuppressWarnings("removal") // b/260137033 public static void await(CountDownLatch latch) { if (latch.getCount() == 0) { return; @@ -226,6 +229,7 @@ public static void await(CountDownLatch latch) { private static void createUnreachableLatchFinalizer(CountDownLatch latch) { Object unused = new Object() { + @SuppressWarnings("removal") // b/260137033 @Override protected void finalize() { latch.countDown(); @@ -297,6 +301,7 @@ public boolean isDone() { * @throws RuntimeException if timed out or interrupted while waiting * @since 12.0 */ + @SuppressWarnings("removal") // b/260137033 public static void awaitFullGc() { CountDownLatch finalizerRan = new CountDownLatch(1); WeakReference ref = diff --git a/android/guava/src/com/google/common/base/Throwables.java b/android/guava/src/com/google/common/base/Throwables.java index a35b1344e950..1f1c346e0256 100644 --- a/android/guava/src/com/google/common/base/Throwables.java +++ b/android/guava/src/com/google/common/base/Throwables.java @@ -477,6 +477,7 @@ private static Object invokeAccessibleNonThrowingMethod( * Returns the JavaLangAccess class that is present in all Sun JDKs. It is not allowed in * AppEngine, and not present in non-Sun JDKs. */ + @SuppressWarnings("removal") // b/318391980 @J2ktIncompatible @GwtIncompatible // java.lang.reflect @CheckForNull @@ -536,6 +537,7 @@ private static Method getSizeMethod(Object jla) { } } + @SuppressWarnings("removal") // b/318391980 @J2ktIncompatible @GwtIncompatible // java.lang.reflect @CheckForNull diff --git a/android/guava/src/com/google/common/cache/LocalCache.java b/android/guava/src/com/google/common/cache/LocalCache.java index f0a7699e0700..49f7c44fa0bb 100644 --- a/android/guava/src/com/google/common/cache/LocalCache.java +++ b/android/guava/src/com/google/common/cache/LocalCache.java @@ -1853,7 +1853,7 @@ void processPendingNotifications() { @SuppressWarnings("unchecked") final Segment[] newSegmentArray(int ssize) { - return new Segment[ssize]; + return (Segment[]) new Segment[ssize]; } // Inner Classes diff --git a/android/guava/src/com/google/common/cache/Striped64.java b/android/guava/src/com/google/common/cache/Striped64.java index 0d2d75b9f384..aca34b8c8c2b 100644 --- a/android/guava/src/com/google/common/cache/Striped64.java +++ b/android/guava/src/com/google/common/cache/Striped64.java @@ -287,6 +287,7 @@ final void internalReset(long initialValue) { * * @return a sun.misc.Unsafe */ + @SuppressWarnings("removal") // b/318391980 private static sun.misc.Unsafe getUnsafe() { try { return sun.misc.Unsafe.getUnsafe(); diff --git a/android/guava/src/com/google/common/hash/LittleEndianByteArray.java b/android/guava/src/com/google/common/hash/LittleEndianByteArray.java index f8b9e7277df4..a6804986066a 100644 --- a/android/guava/src/com/google/common/hash/LittleEndianByteArray.java +++ b/android/guava/src/com/google/common/hash/LittleEndianByteArray.java @@ -169,6 +169,7 @@ public void putLongLittleEndian(byte[] array, int offset, long value) { * * @return an Unsafe instance if successful */ + @SuppressWarnings("removal") // b/318391980 private static Unsafe getUnsafe() { try { return Unsafe.getUnsafe(); diff --git a/android/guava/src/com/google/common/hash/Striped64.java b/android/guava/src/com/google/common/hash/Striped64.java index 1a0671c9d7c5..387b0e07ac1d 100644 --- a/android/guava/src/com/google/common/hash/Striped64.java +++ b/android/guava/src/com/google/common/hash/Striped64.java @@ -287,6 +287,7 @@ final void internalReset(long initialValue) { * * @return a sun.misc.Unsafe */ + @SuppressWarnings("removal") // b/318391980 private static sun.misc.Unsafe getUnsafe() { try { return sun.misc.Unsafe.getUnsafe(); diff --git a/android/guava/src/com/google/common/io/FileBackedOutputStream.java b/android/guava/src/com/google/common/io/FileBackedOutputStream.java index dd297e90a8b2..0e21d0803f14 100644 --- a/android/guava/src/com/google/common/io/FileBackedOutputStream.java +++ b/android/guava/src/com/google/common/io/FileBackedOutputStream.java @@ -136,6 +136,7 @@ public InputStream openStream() throws IOException { return openInputStream(); } + @SuppressWarnings("removal") // b/260137033 @Override protected void finalize() { try { diff --git a/android/guava/src/com/google/common/primitives/UnsignedBytes.java b/android/guava/src/com/google/common/primitives/UnsignedBytes.java index c8561256b8bf..2e69de3305e1 100644 --- a/android/guava/src/com/google/common/primitives/UnsignedBytes.java +++ b/android/guava/src/com/google/common/primitives/UnsignedBytes.java @@ -333,6 +333,7 @@ enum UnsafeComparator implements Comparator { * * @return a sun.misc.Unsafe */ + @SuppressWarnings("removal") // b/318391980 private static sun.misc.Unsafe getUnsafe() { try { return sun.misc.Unsafe.getUnsafe(); diff --git a/android/guava/src/com/google/common/reflect/Types.java b/android/guava/src/com/google/common/reflect/Types.java index 7a1357d66be9..001c37081bd9 100644 --- a/android/guava/src/com/google/common/reflect/Types.java +++ b/android/guava/src/com/google/common/reflect/Types.java @@ -356,6 +356,7 @@ private static TypeVariable newTypeVariableImp *

    This workaround should be removed at a distant future time when we no longer support Java * versions earlier than 8. */ + @SuppressWarnings("removal") // b/318391980 private static final class TypeVariableInvocationHandler implements InvocationHandler { private static final ImmutableMap typeVariableMethods; diff --git a/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java b/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java index a0ddc4d2e254..bbd8b7bfc13b 100644 --- a/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java +++ b/android/guava/src/com/google/common/util/concurrent/AbstractFuture.java @@ -1342,7 +1342,7 @@ abstract boolean casListeners( *

    Static initialization of this class will fail if the {@link sun.misc.Unsafe} object cannot * be accessed. */ - @SuppressWarnings("sunapi") + @SuppressWarnings({"sunapi", "removal"}) // b/318391980 private static final class UnsafeAtomicHelper extends AtomicHelper { static final sun.misc.Unsafe UNSAFE; static final long LISTENERS_OFFSET; diff --git a/android/guava/src/com/google/common/util/concurrent/ClosingFuture.java b/android/guava/src/com/google/common/util/concurrent/ClosingFuture.java index c43074b3c7db..2c4d982ef14f 100644 --- a/android/guava/src/com/google/common/util/concurrent/ClosingFuture.java +++ b/android/guava/src/com/google/common/util/concurrent/ClosingFuture.java @@ -2127,6 +2127,7 @@ public String toString() { return toStringHelper(this).add("state", state.get()).addValue(future).toString(); } + @SuppressWarnings("removal") // b/260137033 @Override protected void finalize() { if (state.get().equals(OPEN)) { diff --git a/android/guava/src/com/google/common/util/concurrent/Futures.java b/android/guava/src/com/google/common/util/concurrent/Futures.java index b65ee25a43e5..0e174bcae0c2 100644 --- a/android/guava/src/com/google/common/util/concurrent/Futures.java +++ b/android/guava/src/com/google/common/util/concurrent/Futures.java @@ -170,6 +170,7 @@ private Futures() {} * * @since 14.0 */ + @SuppressWarnings("unchecked") // ImmediateCancelledFuture can work with any type public static ListenableFuture immediateCancelledFuture() { ListenableFuture instance = ImmediateCancelledFuture.INSTANCE; if (instance != null) { diff --git a/guava-testlib/src/com/google/common/testing/CollectorTester.java b/guava-testlib/src/com/google/common/testing/CollectorTester.java index 2e154c1750e3..94f6a5a010fa 100644 --- a/guava-testlib/src/com/google/common/testing/CollectorTester.java +++ b/guava-testlib/src/com/google/common/testing/CollectorTester.java @@ -162,7 +162,9 @@ private void doExpectCollects(R expectedResult, List inputs) { for (CollectStrategy scheme : CollectStrategy.values()) { A finalAccum = scheme.result(collector, inputs); if (collector.characteristics().contains(Collector.Characteristics.IDENTITY_FINISH)) { - assertEquivalent(expectedResult, (R) finalAccum); + @SuppressWarnings("unchecked") // `R` and `A` match for an `IDENTITY_FINISH` + R result = (R) finalAccum; + assertEquivalent(expectedResult, result); } assertEquivalent(expectedResult, collector.finisher().apply(finalAccum)); } diff --git a/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java b/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java index b85fb2826e17..65e50df176e6 100644 --- a/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java +++ b/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java @@ -383,6 +383,7 @@ int generateInt() { return freshness.get(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Integer generateInteger() { return new Integer(generateInt()); @@ -393,6 +394,7 @@ long generateLong() { return generateInt(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Long generateLongObject() { return new Long(generateLong()); @@ -403,6 +405,7 @@ float generateFloat() { return generateInt(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Float generateFloatObject() { return new Float(generateFloat()); @@ -413,6 +416,7 @@ Float generateFloatObject() { return generateInt(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Double generateDoubleObject() { return new Double(generateDouble()); @@ -423,6 +427,7 @@ short generateShort() { return (short) generateInt(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Short generateShortObject() { return new Short(generateShort()); @@ -433,6 +438,7 @@ byte generateByte() { return (byte) generateInt(); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Byte generateByteObject() { return new Byte(generateByte()); @@ -443,6 +449,7 @@ char generateChar() { return generateString().charAt(0); } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Character generateCharacter() { return new Character(generateChar()); @@ -453,6 +460,7 @@ boolean generateBoolean() { return generateInt() % 2 == 0; } + @SuppressWarnings("removal") // b/321209431 -- maybe just use valueOf here? @Generates Boolean generateBooleanObject() { return new Boolean(generateBoolean()); diff --git a/guava-testlib/src/com/google/common/testing/GcFinalization.java b/guava-testlib/src/com/google/common/testing/GcFinalization.java index cf3409ac3578..d360298d6c12 100644 --- a/guava-testlib/src/com/google/common/testing/GcFinalization.java +++ b/guava-testlib/src/com/google/common/testing/GcFinalization.java @@ -135,6 +135,7 @@ private static long timeoutSeconds() { * * @throws RuntimeException if timed out or interrupted while waiting */ + @SuppressWarnings("removal") // b/260137033 public static void awaitDone(Future future) { if (future.isDone()) { return; @@ -167,6 +168,7 @@ public static void awaitDone(Future future) { * * @throws RuntimeException if timed out or interrupted while waiting */ + @SuppressWarnings("removal") // b/260137033 public static void awaitDone(FinalizationPredicate predicate) { if (predicate.isDone()) { return; @@ -195,6 +197,7 @@ public static void awaitDone(FinalizationPredicate predicate) { * * @throws RuntimeException if timed out or interrupted while waiting */ + @SuppressWarnings("removal") // b/260137033 public static void await(CountDownLatch latch) { if (latch.getCount() == 0) { return; @@ -226,6 +229,7 @@ public static void await(CountDownLatch latch) { private static void createUnreachableLatchFinalizer(CountDownLatch latch) { Object unused = new Object() { + @SuppressWarnings("removal") // b/260137033 @Override protected void finalize() { latch.countDown(); @@ -297,6 +301,7 @@ public boolean isDone() { * @throws RuntimeException if timed out or interrupted while waiting * @since 12.0 */ + @SuppressWarnings("removal") // b/260137033 public static void awaitFullGc() { CountDownLatch finalizerRan = new CountDownLatch(1); WeakReference ref = diff --git a/guava/src/com/google/common/base/Throwables.java b/guava/src/com/google/common/base/Throwables.java index a35b1344e950..1f1c346e0256 100644 --- a/guava/src/com/google/common/base/Throwables.java +++ b/guava/src/com/google/common/base/Throwables.java @@ -477,6 +477,7 @@ private static Object invokeAccessibleNonThrowingMethod( * Returns the JavaLangAccess class that is present in all Sun JDKs. It is not allowed in * AppEngine, and not present in non-Sun JDKs. */ + @SuppressWarnings("removal") // b/318391980 @J2ktIncompatible @GwtIncompatible // java.lang.reflect @CheckForNull @@ -536,6 +537,7 @@ private static Method getSizeMethod(Object jla) { } } + @SuppressWarnings("removal") // b/318391980 @J2ktIncompatible @GwtIncompatible // java.lang.reflect @CheckForNull diff --git a/guava/src/com/google/common/cache/LocalCache.java b/guava/src/com/google/common/cache/LocalCache.java index a38543dbb7b6..aa52a52af617 100644 --- a/guava/src/com/google/common/cache/LocalCache.java +++ b/guava/src/com/google/common/cache/LocalCache.java @@ -1857,7 +1857,7 @@ void processPendingNotifications() { @SuppressWarnings("unchecked") final Segment[] newSegmentArray(int ssize) { - return new Segment[ssize]; + return (Segment[]) new Segment[ssize]; } // Inner Classes diff --git a/guava/src/com/google/common/cache/Striped64.java b/guava/src/com/google/common/cache/Striped64.java index 0d2d75b9f384..aca34b8c8c2b 100644 --- a/guava/src/com/google/common/cache/Striped64.java +++ b/guava/src/com/google/common/cache/Striped64.java @@ -287,6 +287,7 @@ final void internalReset(long initialValue) { * * @return a sun.misc.Unsafe */ + @SuppressWarnings("removal") // b/318391980 private static sun.misc.Unsafe getUnsafe() { try { return sun.misc.Unsafe.getUnsafe(); diff --git a/guava/src/com/google/common/hash/LittleEndianByteArray.java b/guava/src/com/google/common/hash/LittleEndianByteArray.java index 4ff44796a4be..ca5f5eb0ee83 100644 --- a/guava/src/com/google/common/hash/LittleEndianByteArray.java +++ b/guava/src/com/google/common/hash/LittleEndianByteArray.java @@ -169,6 +169,7 @@ public void putLongLittleEndian(byte[] array, int offset, long value) { * * @return an Unsafe instance if successful */ + @SuppressWarnings("removal") // b/318391980 private static Unsafe getUnsafe() { try { return Unsafe.getUnsafe(); diff --git a/guava/src/com/google/common/hash/Striped64.java b/guava/src/com/google/common/hash/Striped64.java index 1a0671c9d7c5..387b0e07ac1d 100644 --- a/guava/src/com/google/common/hash/Striped64.java +++ b/guava/src/com/google/common/hash/Striped64.java @@ -287,6 +287,7 @@ final void internalReset(long initialValue) { * * @return a sun.misc.Unsafe */ + @SuppressWarnings("removal") // b/318391980 private static sun.misc.Unsafe getUnsafe() { try { return sun.misc.Unsafe.getUnsafe(); diff --git a/guava/src/com/google/common/io/FileBackedOutputStream.java b/guava/src/com/google/common/io/FileBackedOutputStream.java index dd297e90a8b2..0e21d0803f14 100644 --- a/guava/src/com/google/common/io/FileBackedOutputStream.java +++ b/guava/src/com/google/common/io/FileBackedOutputStream.java @@ -136,6 +136,7 @@ public InputStream openStream() throws IOException { return openInputStream(); } + @SuppressWarnings("removal") // b/260137033 @Override protected void finalize() { try { diff --git a/guava/src/com/google/common/primitives/UnsignedBytes.java b/guava/src/com/google/common/primitives/UnsignedBytes.java index c8561256b8bf..2e69de3305e1 100644 --- a/guava/src/com/google/common/primitives/UnsignedBytes.java +++ b/guava/src/com/google/common/primitives/UnsignedBytes.java @@ -333,6 +333,7 @@ enum UnsafeComparator implements Comparator { * * @return a sun.misc.Unsafe */ + @SuppressWarnings("removal") // b/318391980 private static sun.misc.Unsafe getUnsafe() { try { return sun.misc.Unsafe.getUnsafe(); diff --git a/guava/src/com/google/common/reflect/Types.java b/guava/src/com/google/common/reflect/Types.java index 7a1357d66be9..001c37081bd9 100644 --- a/guava/src/com/google/common/reflect/Types.java +++ b/guava/src/com/google/common/reflect/Types.java @@ -356,6 +356,7 @@ private static TypeVariable newTypeVariableImp *

    This workaround should be removed at a distant future time when we no longer support Java * versions earlier than 8. */ + @SuppressWarnings("removal") // b/318391980 private static final class TypeVariableInvocationHandler implements InvocationHandler { private static final ImmutableMap typeVariableMethods; diff --git a/guava/src/com/google/common/util/concurrent/AbstractFuture.java b/guava/src/com/google/common/util/concurrent/AbstractFuture.java index a886f10c2ccb..244c1c8f98ef 100644 --- a/guava/src/com/google/common/util/concurrent/AbstractFuture.java +++ b/guava/src/com/google/common/util/concurrent/AbstractFuture.java @@ -1342,7 +1342,7 @@ abstract boolean casListeners( *

    Static initialization of this class will fail if the {@link sun.misc.Unsafe} object cannot * be accessed. */ - @SuppressWarnings("sunapi") + @SuppressWarnings({"sunapi", "removal"}) // b/318391980 private static final class UnsafeAtomicHelper extends AtomicHelper { static final sun.misc.Unsafe UNSAFE; static final long LISTENERS_OFFSET; diff --git a/guava/src/com/google/common/util/concurrent/ClosingFuture.java b/guava/src/com/google/common/util/concurrent/ClosingFuture.java index efdf56d8aa52..9a32af4ab8c0 100644 --- a/guava/src/com/google/common/util/concurrent/ClosingFuture.java +++ b/guava/src/com/google/common/util/concurrent/ClosingFuture.java @@ -2140,6 +2140,7 @@ public String toString() { return toStringHelper(this).add("state", state.get()).addValue(future).toString(); } + @SuppressWarnings("removal") // b/260137033 @Override protected void finalize() { if (state.get().equals(OPEN)) { diff --git a/guava/src/com/google/common/util/concurrent/Futures.java b/guava/src/com/google/common/util/concurrent/Futures.java index a5809dd229d8..e4e8afc88a6b 100644 --- a/guava/src/com/google/common/util/concurrent/Futures.java +++ b/guava/src/com/google/common/util/concurrent/Futures.java @@ -172,6 +172,7 @@ private Futures() {} * * @since 14.0 */ + @SuppressWarnings("unchecked") // ImmediateCancelledFuture can work with any type public static ListenableFuture immediateCancelledFuture() { ListenableFuture instance = ImmediateCancelledFuture.INSTANCE; if (instance != null) { diff --git a/guava/src/com/google/common/util/concurrent/FuturesGetChecked.java b/guava/src/com/google/common/util/concurrent/FuturesGetChecked.java index 17e0675b6319..cd10f4827dfb 100644 --- a/guava/src/com/google/common/util/concurrent/FuturesGetChecked.java +++ b/guava/src/com/google/common/util/concurrent/FuturesGetChecked.java @@ -191,6 +191,7 @@ public void validateClass(Class exceptionClass) { */ static GetCheckedTypeValidator getBestValidator() { try { + @SuppressWarnings("rawtypes") // class literals Class theClass = Class.forName(CLASS_VALUE_VALIDATOR_NAME).asSubclass(Enum.class); return (GetCheckedTypeValidator) theClass.getEnumConstants()[0]; From 12020e2dc29ae84106e3b2ad8db270f0a1bf2e7a Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 22 Feb 2024 12:06:59 -0800 Subject: [PATCH 167/216] Fix, suppress, and/or localize suppressions for `unchecked` and `rawtypes` warnings in `collect` tests. RELNOTES=n/a PiperOrigin-RevId: 609453988 --- .../FeatureSpecificTestSuiteBuilderTest.java | 1 + .../collect/MultipleSetContainsBenchmark.java | 5 ++--- .../common/collect/AbstractRangeSetTest.java | 2 +- .../common/collect/CompactHashSetTest.java | 6 +++--- .../com/google/common/collect/EnumBiMapTest.java | 2 +- .../google/common/collect/EnumHashBiMapTest.java | 2 +- .../common/collect/ForwardingDequeTest.java | 6 +++--- .../collect/ForwardingListIteratorTest.java | 6 +++--- .../collect/ForwardingListMultimapTest.java | 6 +++--- .../common/collect/ForwardingMultimapTest.java | 6 +++--- .../collect/ForwardingSetMultimapTest.java | 6 +++--- .../collect/ForwardingSortedSetMultimapTest.java | 6 +++--- .../common/collect/ForwardingTableTest.java | 6 +++--- .../collect/ImmutableClassToInstanceMapTest.java | 13 +++++++------ ...eListCopyOfConcurrentlyModifiedInputTest.java | 8 ++------ .../collect/ImmutableSortedMultisetTest.java | 11 +---------- .../com/google/common/collect/IteratorsTest.java | 2 +- .../google/common/collect/LegacyComparable.java | 2 +- .../common/collect/MapsCollectionTest.java | 6 +++--- .../common/collect/MultimapsCollectionTest.java | 4 ++-- .../collect/MutableClassToInstanceMapTest.java | 2 +- .../com/google/common/collect/OrderingTest.java | 14 ++++++++------ .../common/collect/TreeMultimapNaturalTest.java | 4 ++-- .../google/common/collect/TreeRangeMapTest.java | 16 ++++++++-------- .../FeatureSpecificTestSuiteBuilderTest.java | 1 + .../collect/MultipleSetContainsBenchmark.java | 5 ++--- .../common/collect/AbstractRangeSetTest.java | 2 +- .../common/collect/CompactHashSetTest.java | 6 +++--- .../com/google/common/collect/EnumBiMapTest.java | 2 +- .../google/common/collect/EnumHashBiMapTest.java | 2 +- .../common/collect/ForwardingDequeTest.java | 6 +++--- .../collect/ForwardingListIteratorTest.java | 6 +++--- .../collect/ForwardingListMultimapTest.java | 6 +++--- .../common/collect/ForwardingMultimapTest.java | 6 +++--- .../collect/ForwardingSetMultimapTest.java | 6 +++--- .../collect/ForwardingSortedSetMultimapTest.java | 6 +++--- .../common/collect/ForwardingTableTest.java | 6 +++--- .../collect/ImmutableClassToInstanceMapTest.java | 13 +++++++------ ...eListCopyOfConcurrentlyModifiedInputTest.java | 8 ++------ .../collect/ImmutableSortedMultisetTest.java | 11 +---------- .../com/google/common/collect/IteratorsTest.java | 2 +- .../google/common/collect/LegacyComparable.java | 2 +- .../common/collect/MapsCollectionTest.java | 6 +++--- .../common/collect/MultimapsCollectionTest.java | 4 ++-- .../collect/MutableClassToInstanceMapTest.java | 2 +- .../com/google/common/collect/OrderingTest.java | 14 ++++++++------ .../common/collect/TreeMultimapNaturalTest.java | 4 ++-- .../google/common/collect/TreeRangeMapTest.java | 16 ++++++++-------- 48 files changed, 132 insertions(+), 152 deletions(-) diff --git a/android/guava-testlib/test/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilderTest.java b/android/guava-testlib/test/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilderTest.java index 92ee857d9018..72284f893bcd 100644 --- a/android/guava-testlib/test/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilderTest.java +++ b/android/guava-testlib/test/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilderTest.java @@ -29,6 +29,7 @@ public class FeatureSpecificTestSuiteBuilderTest extends TestCase { private static final class MyTestSuiteBuilder extends FeatureSpecificTestSuiteBuilder { + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { return Collections.>singletonList(MyTester.class); diff --git a/android/guava-tests/benchmark/com/google/common/collect/MultipleSetContainsBenchmark.java b/android/guava-tests/benchmark/com/google/common/collect/MultipleSetContainsBenchmark.java index b87d9641dcd7..ecefcb0e4dc0 100644 --- a/android/guava-tests/benchmark/com/google/common/collect/MultipleSetContainsBenchmark.java +++ b/android/guava-tests/benchmark/com/google/common/collect/MultipleSetContainsBenchmark.java @@ -37,8 +37,7 @@ public class MultipleSetContainsBenchmark { static final Object PRESENT = new Object(); static final Object ABSENT = new Object(); - @SuppressWarnings("unchecked") - private final ImmutableSet[] sets = new ImmutableSet[0x1000]; + private final ImmutableSet[] sets = new ImmutableSet[0x1000]; private final Object[] queries = new Object[0x1000]; @@ -69,7 +68,7 @@ void setUp() { @Benchmark public boolean contains(int reps) { - ImmutableSet[] sets = this.sets; + ImmutableSet[] sets = this.sets; Object[] queries = this.queries; boolean result = false; for (int i = 0; i < reps; i++) { diff --git a/android/guava-tests/test/com/google/common/collect/AbstractRangeSetTest.java b/android/guava-tests/test/com/google/common/collect/AbstractRangeSetTest.java index e53bea1bbcf9..9319bb5a8ae1 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractRangeSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractRangeSetTest.java @@ -32,7 +32,7 @@ public static void testInvariants(RangeSet rangeSet) { testInvariantsInternal(rangeSet.complement()); } - private static void testInvariantsInternal(RangeSet rangeSet) { + private static > void testInvariantsInternal(RangeSet rangeSet) { assertEquals(rangeSet.asRanges().isEmpty(), rangeSet.isEmpty()); assertEquals(rangeSet.asDescendingSetOfRanges().isEmpty(), rangeSet.isEmpty()); assertEquals(!rangeSet.asRanges().iterator().hasNext(), rangeSet.isEmpty()); diff --git a/android/guava-tests/test/com/google/common/collect/CompactHashSetTest.java b/android/guava-tests/test/com/google/common/collect/CompactHashSetTest.java index 0f0216f3b77d..b8d901f426ff 100644 --- a/android/guava-tests/test/com/google/common/collect/CompactHashSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/CompactHashSetTest.java @@ -69,12 +69,12 @@ protected Set create(String[] elements) { new TestStringSetGenerator() { @Override protected Set create(String[] elements) { - CompactHashSet set = CompactHashSet.create(Arrays.asList(elements)); + CompactHashSet set = CompactHashSet.create(Arrays.asList(elements)); for (int i = 0; i < 100; i++) { - set.add(i); + set.add("extra" + i); } for (int i = 0; i < 100; i++) { - set.remove(i); + set.remove("extra" + i); } set.trimToSize(); return set; diff --git a/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java b/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java index d702b0da2e9a..96a34763bcc3 100644 --- a/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java @@ -92,7 +92,7 @@ public SampleElements> samples() { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java b/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java index 2995628d1d27..b1f7d8627c12 100644 --- a/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java @@ -84,7 +84,7 @@ public SampleElements> samples() { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-tests/test/com/google/common/collect/ForwardingDequeTest.java b/android/guava-tests/test/com/google/common/collect/ForwardingDequeTest.java index 7541f91a2dd2..3e7343fc32b1 100644 --- a/android/guava-tests/test/com/google/common/collect/ForwardingDequeTest.java +++ b/android/guava-tests/test/com/google/common/collect/ForwardingDequeTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( Deque.class, - new Function() { + new Function>() { @Override - public Deque apply(Deque delegate) { - return wrap(delegate); + public Deque apply(Deque delegate) { + return wrap((Deque) delegate); } }); } diff --git a/android/guava-tests/test/com/google/common/collect/ForwardingListIteratorTest.java b/android/guava-tests/test/com/google/common/collect/ForwardingListIteratorTest.java index df6fe5003bd0..d71ed3b0be7e 100644 --- a/android/guava-tests/test/com/google/common/collect/ForwardingListIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/ForwardingListIteratorTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( ListIterator.class, - new Function() { + new Function>() { @Override - public ListIterator apply(ListIterator delegate) { - return wrap(delegate); + public ListIterator apply(ListIterator delegate) { + return wrap((ListIterator) delegate); } }); } diff --git a/android/guava-tests/test/com/google/common/collect/ForwardingListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ForwardingListMultimapTest.java index 3c5ebae76e46..9ad47bde144e 100644 --- a/android/guava-tests/test/com/google/common/collect/ForwardingListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ForwardingListMultimapTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( ListMultimap.class, - new Function() { + new Function>() { @Override - public ListMultimap apply(ListMultimap delegate) { - return wrap(delegate); + public ListMultimap apply(ListMultimap delegate) { + return wrap((ListMultimap) delegate); } }); } diff --git a/android/guava-tests/test/com/google/common/collect/ForwardingMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ForwardingMultimapTest.java index b842feae10b2..1203428f8095 100644 --- a/android/guava-tests/test/com/google/common/collect/ForwardingMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ForwardingMultimapTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( Multimap.class, - new Function() { + new Function>() { @Override - public Multimap apply(Multimap delegate) { - return wrap(delegate); + public Multimap apply(Multimap delegate) { + return wrap((Multimap) delegate); } }); } diff --git a/android/guava-tests/test/com/google/common/collect/ForwardingSetMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ForwardingSetMultimapTest.java index 03f0f3151efa..ff19b19c0b53 100644 --- a/android/guava-tests/test/com/google/common/collect/ForwardingSetMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ForwardingSetMultimapTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( SetMultimap.class, - new Function() { + new Function>() { @Override - public SetMultimap apply(SetMultimap delegate) { - return wrap(delegate); + public SetMultimap apply(SetMultimap delegate) { + return wrap((SetMultimap) delegate); } }); } diff --git a/android/guava-tests/test/com/google/common/collect/ForwardingSortedSetMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ForwardingSortedSetMultimapTest.java index 7f411c7da667..c5d91965eda8 100644 --- a/android/guava-tests/test/com/google/common/collect/ForwardingSortedSetMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ForwardingSortedSetMultimapTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( SortedSetMultimap.class, - new Function() { + new Function>() { @Override - public SortedSetMultimap apply(SortedSetMultimap delegate) { - return wrap(delegate); + public SortedSetMultimap apply(SortedSetMultimap delegate) { + return wrap((SortedSetMultimap) delegate); } }); } diff --git a/android/guava-tests/test/com/google/common/collect/ForwardingTableTest.java b/android/guava-tests/test/com/google/common/collect/ForwardingTableTest.java index 91374e6c9b0a..4d8e784354f4 100644 --- a/android/guava-tests/test/com/google/common/collect/ForwardingTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/ForwardingTableTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( Table.class, - new Function() { + new Function>() { @Override - public Table apply(Table delegate) { - return wrap(delegate); + public Table apply(Table delegate) { + return wrap((Table) delegate); } }); } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java index 3ea288d6e25f..4be72d63088a 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java @@ -52,13 +52,13 @@ public static Test suite() { // Other tests will verify what real, warning-free usage looks like // but here we have to do some serious fudging @Override - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) public Map create(Object... elements) { ImmutableClassToInstanceMap.Builder builder = ImmutableClassToInstanceMap.builder(); for (Object object : elements) { - Entry entry = (Entry) object; - builder.put(entry.getKey(), entry.getValue()); + Entry entry = (Entry) object; + builder.put((Class) entry.getKey(), (Impl) entry.getValue()); } return (Map) builder.build(); } @@ -155,11 +155,12 @@ public void testPrimitiveAndWrapper() { assertEquals(1, (int) ictim.getInstance(int.class)); } + @SuppressWarnings("rawtypes") // TODO(cpovirk): Can we at least use Class in some places? abstract static class TestClassToInstanceMapGenerator implements TestMapGenerator { @Override - public Class[] createKeyArray(int length) { - return new Class[length]; + public Class[] createKeyArray(int length) { + return new Class[length]; } @Override @@ -180,7 +181,7 @@ public SampleElements> samples() { @Override @SuppressWarnings("unchecked") public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableListCopyOfConcurrentlyModifiedInputTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableListCopyOfConcurrentlyModifiedInputTest.java index 113251981b9f..e236ae6a070b 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableListCopyOfConcurrentlyModifiedInputTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableListCopyOfConcurrentlyModifiedInputTest.java @@ -19,7 +19,7 @@ import static com.google.common.collect.Iterables.getOnlyElement; import static com.google.common.collect.Iterables.unmodifiableIterable; import static com.google.common.collect.Sets.newHashSet; -import static java.lang.reflect.Proxy.newProxyInstance; +import static com.google.common.reflect.Reflection.newProxy; import static java.util.Arrays.asList; import com.google.common.annotations.GwtIncompatible; @@ -191,11 +191,7 @@ private void mutateDelegate() { @SuppressWarnings("unchecked") ConcurrentlyMutatedList list = - (ConcurrentlyMutatedList) - newProxyInstance( - ImmutableListCopyOfConcurrentlyModifiedInputTest.class.getClassLoader(), - new Class[] {ConcurrentlyMutatedList.class}, - invocationHandler); + newProxy(ConcurrentlyMutatedList.class, invocationHandler); return list; } } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMultisetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMultisetTest.java index 9366f3c87d89..8ae36386c61f 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMultisetTest.java @@ -19,7 +19,6 @@ import static java.util.Arrays.asList; import static org.junit.Assert.assertThrows; -import com.google.common.base.Function; import com.google.common.collect.ImmutableSortedMultiset.Builder; import com.google.common.collect.testing.ListTestSuiteBuilder; import com.google.common.collect.testing.MinimalCollection; @@ -176,15 +175,7 @@ public void testCreation_arrayOfOneElement() { public void testCreation_arrayOfArray() { Comparator comparator = - Ordering.natural() - .lexicographical() - .onResultOf( - new Function>() { - @Override - public Iterable apply(String[] input) { - return Arrays.asList(input); - } - }); + Ordering.natural().lexicographical().onResultOf(Arrays::asList); String[] array = new String[] {"a"}; Multiset multiset = ImmutableSortedMultiset.orderedBy(comparator).add(array).build(); Multiset expected = HashMultiset.create(); diff --git a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java index 11f0828819f4..b2818316dd7f 100644 --- a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -679,7 +679,7 @@ void checkConcurrentModification() { } public void testCycleRemoveAfterHasNextExtraPicky() { - PickyIterable iterable = new PickyIterable("a"); + PickyIterable iterable = new PickyIterable<>("a"); Iterator cycle = Iterators.cycle(iterable); assertTrue(cycle.hasNext()); assertEquals("a", cycle.next()); diff --git a/android/guava-tests/test/com/google/common/collect/LegacyComparable.java b/android/guava-tests/test/com/google/common/collect/LegacyComparable.java index 90d0ad36e591..1cff84584bbb 100644 --- a/android/guava-tests/test/com/google/common/collect/LegacyComparable.java +++ b/android/guava-tests/test/com/google/common/collect/LegacyComparable.java @@ -28,7 +28,7 @@ * * @author Kevin Bourrillion */ -@SuppressWarnings("ComparableType") +@SuppressWarnings({"ComparableType", "rawtypes"}) // https://github.com/google/guava/issues/989 @GwtCompatible @ElementTypesAreNonnullByDefault class LegacyComparable implements Comparable, Serializable { diff --git a/android/guava-tests/test/com/google/common/collect/MapsCollectionTest.java b/android/guava-tests/test/com/google/common/collect/MapsCollectionTest.java index 1e600647b6fc..06dbe7c19b20 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsCollectionTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsCollectionTest.java @@ -133,7 +133,7 @@ public Integer apply(String input) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override @@ -202,7 +202,7 @@ public Integer apply(String input) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override @@ -269,7 +269,7 @@ public Integer apply(String input) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-tests/test/com/google/common/collect/MultimapsCollectionTest.java b/android/guava-tests/test/com/google/common/collect/MultimapsCollectionTest.java index e684c3b1f095..6e7b530e3aa0 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapsCollectionTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapsCollectionTest.java @@ -373,7 +373,7 @@ public M create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override @@ -492,7 +492,7 @@ public SampleElements> samples() { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-tests/test/com/google/common/collect/MutableClassToInstanceMapTest.java b/android/guava-tests/test/com/google/common/collect/MutableClassToInstanceMapTest.java index 8384f03f9903..765115d42b5e 100644 --- a/android/guava-tests/test/com/google/common/collect/MutableClassToInstanceMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/MutableClassToInstanceMapTest.java @@ -46,7 +46,7 @@ public static Test suite() { // Other tests will verify what real, warning-free usage looks like // but here we have to do some serious fudging @Override - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) public Map create(Object... elements) { MutableClassToInstanceMap map = MutableClassToInstanceMap.create(); for (Object object : elements) { diff --git a/android/guava-tests/test/com/google/common/collect/OrderingTest.java b/android/guava-tests/test/com/google/common/collect/OrderingTest.java index fabdc67a2150..33a4ea3b3be9 100644 --- a/android/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/android/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -1060,7 +1060,7 @@ public T apply(Integer from) { } }, COMPOUND_THIS_WITH_NATURAL { - @SuppressWarnings("unchecked") // raw array + @SuppressWarnings("unchecked") // generic arrays @Override Scenario mutate(Scenario scenario) { List> composites = Lists.newArrayList(); @@ -1073,11 +1073,12 @@ public T apply(Integer from) { .ordering .onResultOf(Composite.getValueFunction()) .compound(Ordering.natural()); - return new Scenario>(ordering, composites, new Composite[0]); + return new Scenario>( + ordering, composites, (Composite[]) new Composite[0]); } }, COMPOUND_NATURAL_WITH_THIS { - @SuppressWarnings("unchecked") // raw array + @SuppressWarnings("unchecked") // generic arrays @Override Scenario mutate(Scenario scenario) { List> composites = Lists.newArrayList(); @@ -1090,11 +1091,12 @@ public T apply(Integer from) { Ordering> ordering = Ordering.natural() .compound(scenario.ordering.onResultOf(Composite.getValueFunction())); - return new Scenario>(ordering, composites, new Composite[0]); + return new Scenario>( + ordering, composites, (Composite[]) new Composite[0]); } }, LEXICOGRAPHICAL { - @SuppressWarnings("unchecked") // dang varargs + @SuppressWarnings("unchecked") // generic arrays @Override Scenario mutate(Scenario scenario) { List> words = Lists.newArrayList(); @@ -1106,7 +1108,7 @@ public T apply(Integer from) { } } return new Scenario>( - scenario.ordering.lexicographical(), words, new Iterable[0]); + scenario.ordering.lexicographical(), words, (Iterable[]) new Iterable[0]); } }, ; diff --git a/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java b/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java index 69be036cd2b5..012a14c5aab6 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java @@ -144,7 +144,7 @@ public String[] createKeyArray(int length) { @SuppressWarnings("unchecked") @Override public Collection[] createValueArray(int length) { - return new Collection[length]; + return (Collection[]) new Collection[length]; } @Override @@ -164,7 +164,7 @@ public SampleElements>> samples() { @SuppressWarnings("unchecked") @Override public Entry>[] createArray(int length) { - return new Entry[length]; + return (Entry>[]) new Entry[length]; } @Override diff --git a/android/guava-tests/test/com/google/common/collect/TreeRangeMapTest.java b/android/guava-tests/test/com/google/common/collect/TreeRangeMapTest.java index 0c452b13ad2c..75ed02b9cec3 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeRangeMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeRangeMapTest.java @@ -70,7 +70,7 @@ public Map, String> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry, String>[] createArray(int length) { - return new Entry[length]; + return (Entry, String>[]) new Entry[length]; } @Override @@ -82,7 +82,7 @@ public Iterable, String>> order( @SuppressWarnings("unchecked") @Override public Range[] createKeyArray(int length) { - return new Range[length]; + return (Range[]) new Range[length]; } @Override @@ -126,7 +126,7 @@ public Map, String> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry, String>[] createArray(int length) { - return new Entry[length]; + return (Entry, String>[]) new Entry[length]; } @Override @@ -138,7 +138,7 @@ public Iterable, String>> order( @SuppressWarnings("unchecked") @Override public Range[] createKeyArray(int length) { - return new Range[length]; + return (Range[]) new Range[length]; } @Override @@ -181,7 +181,7 @@ public Map, String> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry, String>[] createArray(int length) { - return new Entry[length]; + return (Entry, String>[]) new Entry[length]; } @Override @@ -196,7 +196,7 @@ public Iterable, String>> order( @SuppressWarnings("unchecked") @Override public Range[] createKeyArray(int length) { - return new Range[length]; + return (Range[]) new Range[length]; } @Override @@ -240,7 +240,7 @@ public Map, String> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry, String>[] createArray(int length) { - return new Entry[length]; + return (Entry, String>[]) new Entry[length]; } @Override @@ -255,7 +255,7 @@ public Iterable, String>> order( @SuppressWarnings("unchecked") @Override public Range[] createKeyArray(int length) { - return new Range[length]; + return (Range[]) new Range[length]; } @Override diff --git a/guava-testlib/test/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilderTest.java b/guava-testlib/test/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilderTest.java index 92ee857d9018..72284f893bcd 100644 --- a/guava-testlib/test/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilderTest.java +++ b/guava-testlib/test/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilderTest.java @@ -29,6 +29,7 @@ public class FeatureSpecificTestSuiteBuilderTest extends TestCase { private static final class MyTestSuiteBuilder extends FeatureSpecificTestSuiteBuilder { + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { return Collections.>singletonList(MyTester.class); diff --git a/guava-tests/benchmark/com/google/common/collect/MultipleSetContainsBenchmark.java b/guava-tests/benchmark/com/google/common/collect/MultipleSetContainsBenchmark.java index b87d9641dcd7..ecefcb0e4dc0 100644 --- a/guava-tests/benchmark/com/google/common/collect/MultipleSetContainsBenchmark.java +++ b/guava-tests/benchmark/com/google/common/collect/MultipleSetContainsBenchmark.java @@ -37,8 +37,7 @@ public class MultipleSetContainsBenchmark { static final Object PRESENT = new Object(); static final Object ABSENT = new Object(); - @SuppressWarnings("unchecked") - private final ImmutableSet[] sets = new ImmutableSet[0x1000]; + private final ImmutableSet[] sets = new ImmutableSet[0x1000]; private final Object[] queries = new Object[0x1000]; @@ -69,7 +68,7 @@ void setUp() { @Benchmark public boolean contains(int reps) { - ImmutableSet[] sets = this.sets; + ImmutableSet[] sets = this.sets; Object[] queries = this.queries; boolean result = false; for (int i = 0; i < reps; i++) { diff --git a/guava-tests/test/com/google/common/collect/AbstractRangeSetTest.java b/guava-tests/test/com/google/common/collect/AbstractRangeSetTest.java index e53bea1bbcf9..9319bb5a8ae1 100644 --- a/guava-tests/test/com/google/common/collect/AbstractRangeSetTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractRangeSetTest.java @@ -32,7 +32,7 @@ public static void testInvariants(RangeSet rangeSet) { testInvariantsInternal(rangeSet.complement()); } - private static void testInvariantsInternal(RangeSet rangeSet) { + private static > void testInvariantsInternal(RangeSet rangeSet) { assertEquals(rangeSet.asRanges().isEmpty(), rangeSet.isEmpty()); assertEquals(rangeSet.asDescendingSetOfRanges().isEmpty(), rangeSet.isEmpty()); assertEquals(!rangeSet.asRanges().iterator().hasNext(), rangeSet.isEmpty()); diff --git a/guava-tests/test/com/google/common/collect/CompactHashSetTest.java b/guava-tests/test/com/google/common/collect/CompactHashSetTest.java index f55f8d68a420..ed62c3832d3b 100644 --- a/guava-tests/test/com/google/common/collect/CompactHashSetTest.java +++ b/guava-tests/test/com/google/common/collect/CompactHashSetTest.java @@ -83,12 +83,12 @@ protected Set create(String[] elements) { new TestStringSetGenerator() { @Override protected Set create(String[] elements) { - CompactHashSet set = CompactHashSet.create(Arrays.asList(elements)); + CompactHashSet set = CompactHashSet.create(Arrays.asList(elements)); for (int i = 0; i < 100; i++) { - set.add(i); + set.add("extra" + i); } for (int i = 0; i < 100; i++) { - set.remove(i); + set.remove("extra" + i); } set.trimToSize(); return set; diff --git a/guava-tests/test/com/google/common/collect/EnumBiMapTest.java b/guava-tests/test/com/google/common/collect/EnumBiMapTest.java index d702b0da2e9a..96a34763bcc3 100644 --- a/guava-tests/test/com/google/common/collect/EnumBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/EnumBiMapTest.java @@ -92,7 +92,7 @@ public SampleElements> samples() { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java b/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java index 2995628d1d27..b1f7d8627c12 100644 --- a/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java @@ -84,7 +84,7 @@ public SampleElements> samples() { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-tests/test/com/google/common/collect/ForwardingDequeTest.java b/guava-tests/test/com/google/common/collect/ForwardingDequeTest.java index 7541f91a2dd2..3e7343fc32b1 100644 --- a/guava-tests/test/com/google/common/collect/ForwardingDequeTest.java +++ b/guava-tests/test/com/google/common/collect/ForwardingDequeTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( Deque.class, - new Function() { + new Function>() { @Override - public Deque apply(Deque delegate) { - return wrap(delegate); + public Deque apply(Deque delegate) { + return wrap((Deque) delegate); } }); } diff --git a/guava-tests/test/com/google/common/collect/ForwardingListIteratorTest.java b/guava-tests/test/com/google/common/collect/ForwardingListIteratorTest.java index df6fe5003bd0..d71ed3b0be7e 100644 --- a/guava-tests/test/com/google/common/collect/ForwardingListIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/ForwardingListIteratorTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( ListIterator.class, - new Function() { + new Function>() { @Override - public ListIterator apply(ListIterator delegate) { - return wrap(delegate); + public ListIterator apply(ListIterator delegate) { + return wrap((ListIterator) delegate); } }); } diff --git a/guava-tests/test/com/google/common/collect/ForwardingListMultimapTest.java b/guava-tests/test/com/google/common/collect/ForwardingListMultimapTest.java index 3c5ebae76e46..9ad47bde144e 100644 --- a/guava-tests/test/com/google/common/collect/ForwardingListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ForwardingListMultimapTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( ListMultimap.class, - new Function() { + new Function>() { @Override - public ListMultimap apply(ListMultimap delegate) { - return wrap(delegate); + public ListMultimap apply(ListMultimap delegate) { + return wrap((ListMultimap) delegate); } }); } diff --git a/guava-tests/test/com/google/common/collect/ForwardingMultimapTest.java b/guava-tests/test/com/google/common/collect/ForwardingMultimapTest.java index b842feae10b2..1203428f8095 100644 --- a/guava-tests/test/com/google/common/collect/ForwardingMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ForwardingMultimapTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( Multimap.class, - new Function() { + new Function>() { @Override - public Multimap apply(Multimap delegate) { - return wrap(delegate); + public Multimap apply(Multimap delegate) { + return wrap((Multimap) delegate); } }); } diff --git a/guava-tests/test/com/google/common/collect/ForwardingSetMultimapTest.java b/guava-tests/test/com/google/common/collect/ForwardingSetMultimapTest.java index 03f0f3151efa..ff19b19c0b53 100644 --- a/guava-tests/test/com/google/common/collect/ForwardingSetMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ForwardingSetMultimapTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( SetMultimap.class, - new Function() { + new Function>() { @Override - public SetMultimap apply(SetMultimap delegate) { - return wrap(delegate); + public SetMultimap apply(SetMultimap delegate) { + return wrap((SetMultimap) delegate); } }); } diff --git a/guava-tests/test/com/google/common/collect/ForwardingSortedSetMultimapTest.java b/guava-tests/test/com/google/common/collect/ForwardingSortedSetMultimapTest.java index 7f411c7da667..c5d91965eda8 100644 --- a/guava-tests/test/com/google/common/collect/ForwardingSortedSetMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ForwardingSortedSetMultimapTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( SortedSetMultimap.class, - new Function() { + new Function>() { @Override - public SortedSetMultimap apply(SortedSetMultimap delegate) { - return wrap(delegate); + public SortedSetMultimap apply(SortedSetMultimap delegate) { + return wrap((SortedSetMultimap) delegate); } }); } diff --git a/guava-tests/test/com/google/common/collect/ForwardingTableTest.java b/guava-tests/test/com/google/common/collect/ForwardingTableTest.java index 91374e6c9b0a..4d8e784354f4 100644 --- a/guava-tests/test/com/google/common/collect/ForwardingTableTest.java +++ b/guava-tests/test/com/google/common/collect/ForwardingTableTest.java @@ -33,10 +33,10 @@ public void testForwarding() { new ForwardingWrapperTester() .testForwarding( Table.class, - new Function() { + new Function>() { @Override - public Table apply(Table delegate) { - return wrap(delegate); + public Table apply(Table delegate) { + return wrap((Table) delegate); } }); } diff --git a/guava-tests/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java index 3ea288d6e25f..4be72d63088a 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableClassToInstanceMapTest.java @@ -52,13 +52,13 @@ public static Test suite() { // Other tests will verify what real, warning-free usage looks like // but here we have to do some serious fudging @Override - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) public Map create(Object... elements) { ImmutableClassToInstanceMap.Builder builder = ImmutableClassToInstanceMap.builder(); for (Object object : elements) { - Entry entry = (Entry) object; - builder.put(entry.getKey(), entry.getValue()); + Entry entry = (Entry) object; + builder.put((Class) entry.getKey(), (Impl) entry.getValue()); } return (Map) builder.build(); } @@ -155,11 +155,12 @@ public void testPrimitiveAndWrapper() { assertEquals(1, (int) ictim.getInstance(int.class)); } + @SuppressWarnings("rawtypes") // TODO(cpovirk): Can we at least use Class in some places? abstract static class TestClassToInstanceMapGenerator implements TestMapGenerator { @Override - public Class[] createKeyArray(int length) { - return new Class[length]; + public Class[] createKeyArray(int length) { + return new Class[length]; } @Override @@ -180,7 +181,7 @@ public SampleElements> samples() { @Override @SuppressWarnings("unchecked") public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-tests/test/com/google/common/collect/ImmutableListCopyOfConcurrentlyModifiedInputTest.java b/guava-tests/test/com/google/common/collect/ImmutableListCopyOfConcurrentlyModifiedInputTest.java index 113251981b9f..e236ae6a070b 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableListCopyOfConcurrentlyModifiedInputTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableListCopyOfConcurrentlyModifiedInputTest.java @@ -19,7 +19,7 @@ import static com.google.common.collect.Iterables.getOnlyElement; import static com.google.common.collect.Iterables.unmodifiableIterable; import static com.google.common.collect.Sets.newHashSet; -import static java.lang.reflect.Proxy.newProxyInstance; +import static com.google.common.reflect.Reflection.newProxy; import static java.util.Arrays.asList; import com.google.common.annotations.GwtIncompatible; @@ -191,11 +191,7 @@ private void mutateDelegate() { @SuppressWarnings("unchecked") ConcurrentlyMutatedList list = - (ConcurrentlyMutatedList) - newProxyInstance( - ImmutableListCopyOfConcurrentlyModifiedInputTest.class.getClassLoader(), - new Class[] {ConcurrentlyMutatedList.class}, - invocationHandler); + newProxy(ConcurrentlyMutatedList.class, invocationHandler); return list; } } diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedMultisetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedMultisetTest.java index 95bfc5ce83e0..bd5543b6e8a7 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSortedMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSortedMultisetTest.java @@ -21,7 +21,6 @@ import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; -import com.google.common.base.Function; import com.google.common.collect.Multiset.Entry; import com.google.common.collect.testing.ListTestSuiteBuilder; import com.google.common.collect.testing.MinimalCollection; @@ -182,15 +181,7 @@ public void testCreation_arrayOfOneElement() { public void testCreation_arrayOfArray() { Comparator comparator = - Ordering.natural() - .lexicographical() - .onResultOf( - new Function>() { - @Override - public Iterable apply(String[] input) { - return Arrays.asList(input); - } - }); + Ordering.natural().lexicographical().onResultOf(Arrays::asList); String[] array = new String[] {"a"}; Multiset multiset = ImmutableSortedMultiset.orderedBy(comparator).add(array).build(); Multiset expected = HashMultiset.create(); diff --git a/guava-tests/test/com/google/common/collect/IteratorsTest.java b/guava-tests/test/com/google/common/collect/IteratorsTest.java index 11f0828819f4..b2818316dd7f 100644 --- a/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -679,7 +679,7 @@ void checkConcurrentModification() { } public void testCycleRemoveAfterHasNextExtraPicky() { - PickyIterable iterable = new PickyIterable("a"); + PickyIterable iterable = new PickyIterable<>("a"); Iterator cycle = Iterators.cycle(iterable); assertTrue(cycle.hasNext()); assertEquals("a", cycle.next()); diff --git a/guava-tests/test/com/google/common/collect/LegacyComparable.java b/guava-tests/test/com/google/common/collect/LegacyComparable.java index 90d0ad36e591..1cff84584bbb 100644 --- a/guava-tests/test/com/google/common/collect/LegacyComparable.java +++ b/guava-tests/test/com/google/common/collect/LegacyComparable.java @@ -28,7 +28,7 @@ * * @author Kevin Bourrillion */ -@SuppressWarnings("ComparableType") +@SuppressWarnings({"ComparableType", "rawtypes"}) // https://github.com/google/guava/issues/989 @GwtCompatible @ElementTypesAreNonnullByDefault class LegacyComparable implements Comparable, Serializable { diff --git a/guava-tests/test/com/google/common/collect/MapsCollectionTest.java b/guava-tests/test/com/google/common/collect/MapsCollectionTest.java index 1e600647b6fc..06dbe7c19b20 100644 --- a/guava-tests/test/com/google/common/collect/MapsCollectionTest.java +++ b/guava-tests/test/com/google/common/collect/MapsCollectionTest.java @@ -133,7 +133,7 @@ public Integer apply(String input) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override @@ -202,7 +202,7 @@ public Integer apply(String input) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override @@ -269,7 +269,7 @@ public Integer apply(String input) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-tests/test/com/google/common/collect/MultimapsCollectionTest.java b/guava-tests/test/com/google/common/collect/MultimapsCollectionTest.java index 34b1ee090de3..6b72be802ca8 100644 --- a/guava-tests/test/com/google/common/collect/MultimapsCollectionTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapsCollectionTest.java @@ -375,7 +375,7 @@ public M create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override @@ -494,7 +494,7 @@ public SampleElements> samples() { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-tests/test/com/google/common/collect/MutableClassToInstanceMapTest.java b/guava-tests/test/com/google/common/collect/MutableClassToInstanceMapTest.java index 8384f03f9903..765115d42b5e 100644 --- a/guava-tests/test/com/google/common/collect/MutableClassToInstanceMapTest.java +++ b/guava-tests/test/com/google/common/collect/MutableClassToInstanceMapTest.java @@ -46,7 +46,7 @@ public static Test suite() { // Other tests will verify what real, warning-free usage looks like // but here we have to do some serious fudging @Override - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) public Map create(Object... elements) { MutableClassToInstanceMap map = MutableClassToInstanceMap.create(); for (Object object : elements) { diff --git a/guava-tests/test/com/google/common/collect/OrderingTest.java b/guava-tests/test/com/google/common/collect/OrderingTest.java index fabdc67a2150..33a4ea3b3be9 100644 --- a/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -1060,7 +1060,7 @@ public T apply(Integer from) { } }, COMPOUND_THIS_WITH_NATURAL { - @SuppressWarnings("unchecked") // raw array + @SuppressWarnings("unchecked") // generic arrays @Override Scenario mutate(Scenario scenario) { List> composites = Lists.newArrayList(); @@ -1073,11 +1073,12 @@ public T apply(Integer from) { .ordering .onResultOf(Composite.getValueFunction()) .compound(Ordering.natural()); - return new Scenario>(ordering, composites, new Composite[0]); + return new Scenario>( + ordering, composites, (Composite[]) new Composite[0]); } }, COMPOUND_NATURAL_WITH_THIS { - @SuppressWarnings("unchecked") // raw array + @SuppressWarnings("unchecked") // generic arrays @Override Scenario mutate(Scenario scenario) { List> composites = Lists.newArrayList(); @@ -1090,11 +1091,12 @@ public T apply(Integer from) { Ordering> ordering = Ordering.natural() .compound(scenario.ordering.onResultOf(Composite.getValueFunction())); - return new Scenario>(ordering, composites, new Composite[0]); + return new Scenario>( + ordering, composites, (Composite[]) new Composite[0]); } }, LEXICOGRAPHICAL { - @SuppressWarnings("unchecked") // dang varargs + @SuppressWarnings("unchecked") // generic arrays @Override Scenario mutate(Scenario scenario) { List> words = Lists.newArrayList(); @@ -1106,7 +1108,7 @@ public T apply(Integer from) { } } return new Scenario>( - scenario.ordering.lexicographical(), words, new Iterable[0]); + scenario.ordering.lexicographical(), words, (Iterable[]) new Iterable[0]); } }, ; diff --git a/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java b/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java index 69be036cd2b5..012a14c5aab6 100644 --- a/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java +++ b/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java @@ -144,7 +144,7 @@ public String[] createKeyArray(int length) { @SuppressWarnings("unchecked") @Override public Collection[] createValueArray(int length) { - return new Collection[length]; + return (Collection[]) new Collection[length]; } @Override @@ -164,7 +164,7 @@ public SampleElements>> samples() { @SuppressWarnings("unchecked") @Override public Entry>[] createArray(int length) { - return new Entry[length]; + return (Entry>[]) new Entry[length]; } @Override diff --git a/guava-tests/test/com/google/common/collect/TreeRangeMapTest.java b/guava-tests/test/com/google/common/collect/TreeRangeMapTest.java index 816a08cba267..382afc042fbb 100644 --- a/guava-tests/test/com/google/common/collect/TreeRangeMapTest.java +++ b/guava-tests/test/com/google/common/collect/TreeRangeMapTest.java @@ -71,7 +71,7 @@ public Map, String> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry, String>[] createArray(int length) { - return new Entry[length]; + return (Entry, String>[]) new Entry[length]; } @Override @@ -83,7 +83,7 @@ public Iterable, String>> order( @SuppressWarnings("unchecked") @Override public Range[] createKeyArray(int length) { - return new Range[length]; + return (Range[]) new Range[length]; } @Override @@ -127,7 +127,7 @@ public Map, String> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry, String>[] createArray(int length) { - return new Entry[length]; + return (Entry, String>[]) new Entry[length]; } @Override @@ -139,7 +139,7 @@ public Iterable, String>> order( @SuppressWarnings("unchecked") @Override public Range[] createKeyArray(int length) { - return new Range[length]; + return (Range[]) new Range[length]; } @Override @@ -182,7 +182,7 @@ public Map, String> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry, String>[] createArray(int length) { - return new Entry[length]; + return (Entry, String>[]) new Entry[length]; } @Override @@ -197,7 +197,7 @@ public Iterable, String>> order( @SuppressWarnings("unchecked") @Override public Range[] createKeyArray(int length) { - return new Range[length]; + return (Range[]) new Range[length]; } @Override @@ -241,7 +241,7 @@ public Map, String> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry, String>[] createArray(int length) { - return new Entry[length]; + return (Entry, String>[]) new Entry[length]; } @Override @@ -256,7 +256,7 @@ public Iterable, String>> order( @SuppressWarnings("unchecked") @Override public Range[] createKeyArray(int length) { - return new Range[length]; + return (Range[]) new Range[length]; } @Override From 7e06618325825f14f8383c6a4dd938105eb6b99c Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 22 Feb 2024 13:17:14 -0800 Subject: [PATCH 168/216] Fix, suppress, and/or localize suppressions for `unchecked` and `rawtypes` warnings in `collect`. RELNOTES=n/a PiperOrigin-RevId: 609475939 --- .../common/collect/AbstractRangeSet.java | 1 + .../com/google/common/collect/ArrayTable.java | 1 + .../common/collect/CompoundOrdering.java | 5 ++- .../collect/ConcurrentHashMultiset.java | 2 +- .../src/com/google/common/collect/Cut.java | 1 + .../google/common/collect/DiscreteDomain.java | 1 + .../google/common/collect/GeneralRange.java | 1 + .../common/collect/ImmutableMultimap.java | 4 +- .../common/collect/ImmutableRangeMap.java | 8 ++-- .../common/collect/ImmutableRangeSet.java | 11 ++--- .../google/common/collect/ImmutableSet.java | 5 +++ .../common/collect/ImmutableSetMultimap.java | 5 ++- .../common/collect/ImmutableSortedMap.java | 18 +++++--- .../collect/ImmutableSortedMultiset.java | 5 +-- .../common/collect/ImmutableSortedSet.java | 24 +++++++--- .../common/collect/LinkedHashMultimap.java | 3 +- .../common/collect/MapMakerInternalMap.java | 2 +- .../src/com/google/common/collect/Maps.java | 1 + .../common/collect/MinMaxPriorityQueue.java | 2 + .../common/collect/MultimapBuilder.java | 6 +-- .../com/google/common/collect/Multisets.java | 4 +- .../collect/MutableClassToInstanceMap.java | 2 +- .../com/google/common/collect/Ordering.java | 4 +- .../com/google/common/collect/Platform.java | 6 ++- .../src/com/google/common/collect/Queues.java | 4 ++ .../src/com/google/common/collect/Range.java | 45 ++++++------------- .../RangeGwtSerializationDependencies.java | 1 + .../com/google/common/collect/RangeMap.java | 1 + .../com/google/common/collect/RangeSet.java | 1 + .../common/collect/RegularContiguousSet.java | 16 +++++-- .../common/collect/RegularImmutableSet.java | 3 ++ .../RegularImmutableSortedMultiset.java | 2 +- .../src/com/google/common/collect/Sets.java | 2 + .../google/common/collect/SortedLists.java | 2 + .../src/com/google/common/collect/Tables.java | 19 +++----- .../google/common/collect/TopKSelector.java | 1 + .../google/common/collect/TreeBasedTable.java | 1 + .../google/common/collect/TreeMultimap.java | 2 + .../google/common/collect/TreeMultiset.java | 2 + .../google/common/collect/TreeRangeMap.java | 1 + .../common/collect/AbstractRangeSet.java | 1 + .../com/google/common/collect/ArrayTable.java | 1 + .../common/collect/CompoundOrdering.java | 5 ++- .../collect/ConcurrentHashMultiset.java | 2 +- guava/src/com/google/common/collect/Cut.java | 1 + .../google/common/collect/DiscreteDomain.java | 1 + .../google/common/collect/GeneralRange.java | 1 + .../google/common/collect/ImmutableMap.java | 1 + .../common/collect/ImmutableMapEntry.java | 2 +- .../common/collect/ImmutableMultimap.java | 4 +- .../common/collect/ImmutableRangeMap.java | 8 ++-- .../common/collect/ImmutableRangeSet.java | 11 ++--- .../google/common/collect/ImmutableSet.java | 14 ++++-- .../common/collect/ImmutableSetMultimap.java | 5 ++- .../common/collect/ImmutableSortedMap.java | 6 +-- .../collect/ImmutableSortedMultiset.java | 4 +- .../common/collect/ImmutableSortedSet.java | 24 +++++++--- .../collect/JdkBackedImmutableMultiset.java | 2 +- .../common/collect/LinkedHashMultimap.java | 3 +- .../common/collect/MapMakerInternalMap.java | 2 +- guava/src/com/google/common/collect/Maps.java | 1 + .../common/collect/MinMaxPriorityQueue.java | 2 + .../common/collect/MultimapBuilder.java | 6 +-- .../com/google/common/collect/Multisets.java | 4 +- .../collect/MutableClassToInstanceMap.java | 2 +- .../com/google/common/collect/Ordering.java | 4 +- .../com/google/common/collect/Platform.java | 6 ++- .../src/com/google/common/collect/Queues.java | 4 ++ .../src/com/google/common/collect/Range.java | 45 ++++++------------- .../RangeGwtSerializationDependencies.java | 1 + .../com/google/common/collect/RangeMap.java | 1 + .../com/google/common/collect/RangeSet.java | 1 + .../common/collect/RegularContiguousSet.java | 16 +++++-- .../common/collect/RegularImmutableBiMap.java | 1 + .../common/collect/RegularImmutableSet.java | 3 ++ .../RegularImmutableSortedMultiset.java | 2 +- guava/src/com/google/common/collect/Sets.java | 2 + .../google/common/collect/SortedLists.java | 2 + .../com/google/common/collect/Streams.java | 1 + .../src/com/google/common/collect/Tables.java | 24 ++++------ .../google/common/collect/TopKSelector.java | 1 + .../google/common/collect/TreeBasedTable.java | 1 + .../google/common/collect/TreeMultimap.java | 2 + .../google/common/collect/TreeMultiset.java | 2 + .../google/common/collect/TreeRangeMap.java | 1 + 85 files changed, 273 insertions(+), 185 deletions(-) diff --git a/android/guava/src/com/google/common/collect/AbstractRangeSet.java b/android/guava/src/com/google/common/collect/AbstractRangeSet.java index 032be3d5b03e..df08b3f64e6a 100644 --- a/android/guava/src/com/google/common/collect/AbstractRangeSet.java +++ b/android/guava/src/com/google/common/collect/AbstractRangeSet.java @@ -22,6 +22,7 @@ * * @author Louis Wasserman */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtIncompatible @ElementTypesAreNonnullByDefault abstract class AbstractRangeSet implements RangeSet { diff --git a/android/guava/src/com/google/common/collect/ArrayTable.java b/android/guava/src/com/google/common/collect/ArrayTable.java index 97a784bac083..3b04a55ea989 100644 --- a/android/guava/src/com/google/common/collect/ArrayTable.java +++ b/android/guava/src/com/google/common/collect/ArrayTable.java @@ -131,6 +131,7 @@ public static ArrayTable create( * * @throws NullPointerException if {@code table} has a null key */ + @SuppressWarnings("unchecked") // TODO(cpovirk): Make constructor accept wildcard types? public static ArrayTable create(Table table) { return (table instanceof ArrayTable) ? new ArrayTable((ArrayTable) table) diff --git a/android/guava/src/com/google/common/collect/CompoundOrdering.java b/android/guava/src/com/google/common/collect/CompoundOrdering.java index 95ebb82bba9f..78d0064286da 100644 --- a/android/guava/src/com/google/common/collect/CompoundOrdering.java +++ b/android/guava/src/com/google/common/collect/CompoundOrdering.java @@ -32,12 +32,13 @@ final class CompoundOrdering extends Ordering @SuppressWarnings("unchecked") // Generic array creation CompoundOrdering(Comparator primary, Comparator secondary) { - this.comparators = (Comparator[]) new Comparator[] {primary, secondary}; + this.comparators = (Comparator[]) new Comparator[] {primary, secondary}; } @SuppressWarnings("unchecked") // Generic array creation CompoundOrdering(Iterable> comparators) { - this.comparators = Iterables.toArray(comparators, (Comparator[]) new Comparator[0]); + this.comparators = + Iterables.toArray(comparators, (Comparator[]) new Comparator[0]); } @Override diff --git a/android/guava/src/com/google/common/collect/ConcurrentHashMultiset.java b/android/guava/src/com/google/common/collect/ConcurrentHashMultiset.java index a84e3cee78d4..8848fb43e18d 100644 --- a/android/guava/src/com/google/common/collect/ConcurrentHashMultiset.java +++ b/android/guava/src/com/google/common/collect/ConcurrentHashMultiset.java @@ -77,7 +77,7 @@ public final class ConcurrentHashMultiset extends AbstractMultiset impleme // This constant allows the deserialization code to set a final field. This holder class // makes sure it is not initialized unless an instance is deserialized. private static class FieldSettersHolder { - static final FieldSetter COUNT_MAP_FIELD_SETTER = + static final FieldSetter> COUNT_MAP_FIELD_SETTER = Serialization.getFieldSetter(ConcurrentHashMultiset.class, "countMap"); } diff --git a/android/guava/src/com/google/common/collect/Cut.java b/android/guava/src/com/google/common/collect/Cut.java index 21fe5ff2dd9f..3231d29dafc8 100644 --- a/android/guava/src/com/google/common/collect/Cut.java +++ b/android/guava/src/com/google/common/collect/Cut.java @@ -31,6 +31,7 @@ * * @author Kevin Bourrillion */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtCompatible @ElementTypesAreNonnullByDefault abstract class Cut implements Comparable>, Serializable { diff --git a/android/guava/src/com/google/common/collect/DiscreteDomain.java b/android/guava/src/com/google/common/collect/DiscreteDomain.java index c32ea8408979..96160a99ffad 100644 --- a/android/guava/src/com/google/common/collect/DiscreteDomain.java +++ b/android/guava/src/com/google/common/collect/DiscreteDomain.java @@ -43,6 +43,7 @@ * @author Kevin Bourrillion * @since 10.0 */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtCompatible @ElementTypesAreNonnullByDefault public abstract class DiscreteDomain { diff --git a/android/guava/src/com/google/common/collect/GeneralRange.java b/android/guava/src/com/google/common/collect/GeneralRange.java index e462b7a01f2f..aff4b1bca7e1 100644 --- a/android/guava/src/com/google/common/collect/GeneralRange.java +++ b/android/guava/src/com/google/common/collect/GeneralRange.java @@ -41,6 +41,7 @@ @ElementTypesAreNonnullByDefault final class GeneralRange implements Serializable { /** Converts a Range to a GeneralRange. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 static GeneralRange from(Range range) { T lowerEndpoint = range.hasLowerBound() ? range.lowerEndpoint() : null; BoundType lowerBoundType = range.hasLowerBound() ? range.lowerBoundType() : OPEN; diff --git a/android/guava/src/com/google/common/collect/ImmutableMultimap.java b/android/guava/src/com/google/common/collect/ImmutableMultimap.java index 597d0be27d57..85a85e91c852 100644 --- a/android/guava/src/com/google/common/collect/ImmutableMultimap.java +++ b/android/guava/src/com/google/common/collect/ImmutableMultimap.java @@ -344,9 +344,9 @@ public static ImmutableMultimap copyOf( @GwtIncompatible // java serialization is not supported @J2ktIncompatible static class FieldSettersHolder { - static final Serialization.FieldSetter MAP_FIELD_SETTER = + static final Serialization.FieldSetter> MAP_FIELD_SETTER = Serialization.getFieldSetter(ImmutableMultimap.class, "map"); - static final Serialization.FieldSetter SIZE_FIELD_SETTER = + static final Serialization.FieldSetter> SIZE_FIELD_SETTER = Serialization.getFieldSetter(ImmutableMultimap.class, "size"); } diff --git a/android/guava/src/com/google/common/collect/ImmutableRangeMap.java b/android/guava/src/com/google/common/collect/ImmutableRangeMap.java index 72c70b1ae9b5..a4d7948f848e 100644 --- a/android/guava/src/com/google/common/collect/ImmutableRangeMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableRangeMap.java @@ -183,7 +183,7 @@ public V get(K key) { int index = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, Cut.belowValue(key), KeyPresentBehavior.ANY_PRESENT, KeyAbsentBehavior.NEXT_LOWER); @@ -201,7 +201,7 @@ public Entry, V> getEntry(K key) { int index = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, Cut.belowValue(key), KeyPresentBehavior.ANY_PRESENT, KeyAbsentBehavior.NEXT_LOWER); @@ -318,14 +318,14 @@ public ImmutableRangeMap subRangeMap(final Range range) { int lowerIndex = SortedLists.binarySearch( ranges, - Range.upperBoundFn(), + Range::upperBound, range.lowerBound, KeyPresentBehavior.FIRST_AFTER, KeyAbsentBehavior.NEXT_HIGHER); int upperIndex = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, range.upperBound, KeyPresentBehavior.ANY_PRESENT, KeyAbsentBehavior.NEXT_HIGHER); diff --git a/android/guava/src/com/google/common/collect/ImmutableRangeSet.java b/android/guava/src/com/google/common/collect/ImmutableRangeSet.java index 7d08c89e3d39..f88bde291236 100644 --- a/android/guava/src/com/google/common/collect/ImmutableRangeSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableRangeSet.java @@ -48,6 +48,7 @@ * @author Louis Wasserman * @since 14.0 */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtIncompatible @ElementTypesAreNonnullByDefault public final class ImmutableRangeSet extends AbstractRangeSet @@ -160,7 +161,7 @@ public boolean intersects(Range otherRange) { int ceilingIndex = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, otherRange.lowerBound, Ordering.natural(), ANY_PRESENT, @@ -180,7 +181,7 @@ public boolean encloses(Range otherRange) { int index = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, otherRange.lowerBound, Ordering.natural(), ANY_PRESENT, @@ -194,7 +195,7 @@ public Range rangeContaining(C value) { int index = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, Cut.belowValue(value), Ordering.natural(), ANY_PRESENT, @@ -451,7 +452,7 @@ private ImmutableList> intersectRanges(final Range range) { fromIndex = SortedLists.binarySearch( ranges, - Range.upperBoundFn(), + Range::upperBound, range.lowerBound, KeyPresentBehavior.FIRST_AFTER, KeyAbsentBehavior.NEXT_HIGHER); @@ -464,7 +465,7 @@ private ImmutableList> intersectRanges(final Range range) { toIndex = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, range.upperBound, KeyPresentBehavior.FIRST_PRESENT, KeyAbsentBehavior.NEXT_HIGHER); diff --git a/android/guava/src/com/google/common/collect/ImmutableSet.java b/android/guava/src/com/google/common/collect/ImmutableSet.java index c4631804d6cc..018eaad122b1 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableSet.java @@ -259,6 +259,11 @@ static int chooseTableSize(int setSize) { * @throws NullPointerException if any of {@code elements} is null * @since 7.0 (source-compatible since 2.0) */ + // This the best we could do to get copyOfEnumSet to compile in the mainline. + // The suppression also covers the cast to E[], discussed below. + // In the backport, we don't have those cases and thus don't need this suppression. + // We keep it to minimize diffs. + @SuppressWarnings("unchecked") public static ImmutableSet copyOf(Collection elements) { /* * TODO(lowasser): consider checking for ImmutableAsList here diff --git a/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java b/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java index 022a3d40910e..0c2ad522b240 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java +++ b/android/guava/src/com/google/common/collect/ImmutableSetMultimap.java @@ -606,8 +606,9 @@ Comparator valueComparator() { @GwtIncompatible // java serialization @J2ktIncompatible private static final class SetFieldSettersHolder { - static final Serialization.FieldSetter EMPTY_SET_FIELD_SETTER = - Serialization.getFieldSetter(ImmutableSetMultimap.class, "emptySet"); + static final Serialization.FieldSetter> + EMPTY_SET_FIELD_SETTER = + Serialization.getFieldSetter(ImmutableSetMultimap.class, "emptySet"); } @GwtIncompatible // java.io.ObjectInputStream diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java index f65a35fa2ace..e9384791c6db 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -109,9 +109,9 @@ public final class ImmutableSortedMap extends ImmutableMap * TODO(kevinb): Confirm that ImmutableSortedMap is faster to construct and * uses less memory than TreeMap; then say so in the class Javadoc. */ - private static final Comparator NATURAL_ORDER = Ordering.natural(); + private static final Comparator NATURAL_ORDER = Ordering.natural(); - private static final ImmutableSortedMap NATURAL_EMPTY_MAP = + private static final ImmutableSortedMap, Object> NATURAL_EMPTY_MAP = new ImmutableSortedMap<>( ImmutableSortedSet.emptySet(Ordering.natural()), ImmutableList.of()); @@ -154,7 +154,6 @@ private static ImmutableSortedMap of(Comparator comparat * * @throws IllegalArgumentException if the two keys are equal according to their natural ordering */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2) { return fromEntries(entryOf(k1, v1), entryOf(k2, v2)); @@ -238,7 +237,6 @@ public static , V> ImmutableSortedMap of( * @throws IllegalArgumentException if any two keys are equal according to their natural ordering * @since 31.0 */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, @@ -740,16 +738,22 @@ public ImmutableSortedMap build() { * @since 31.0 */ @Override + @SuppressWarnings("unchecked") // see inline comments public ImmutableSortedMap buildOrThrow() { switch (size) { case 0: return emptyMap(comparator); case 1: + // We're careful to put only K and V instances in. // requireNonNull is safe because the first `size` elements have been filled in. - return of(comparator, (K) requireNonNull(keys[0]), (V) requireNonNull(values[0])); + ImmutableSortedMap result = + of(comparator, (K) requireNonNull(keys[0]), (V) requireNonNull(values[0])); + return result; default: Object[] sortedKeys = Arrays.copyOf(keys, size); - Arrays.sort((K[]) sortedKeys, comparator); + // We're careful to put only K instances in. + K[] sortedKs = (K[]) sortedKeys; + Arrays.sort(sortedKs, comparator); Object[] sortedValues = new Object[size]; // We might, somehow, be able to reorder values in-place. But it doesn't seem like @@ -757,6 +761,7 @@ public ImmutableSortedMap buildOrThrow() { // one array of size n, we might as well allocate two -- to say nothing of the allocation // done in Arrays.sort. for (int i = 0; i < size; i++) { + // We're careful to put only K instances in. if (i > 0 && comparator.compare((K) sortedKeys[i - 1], (K) sortedKeys[i]) == 0) { throw new IllegalArgumentException( "keys required to be distinct but compared as equal: " @@ -765,6 +770,7 @@ public ImmutableSortedMap buildOrThrow() { + sortedKeys[i]); } // requireNonNull is safe because the first `size` elements have been filled in. + // We're careful to put only K instances in. int index = Arrays.binarySearch((K[]) sortedKeys, (K) requireNonNull(keys[i]), comparator); sortedValues[index] = requireNonNull(values[i]); diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java b/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java index 3660ca596111..c31a8c21c353 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedMultiset.java @@ -232,7 +232,7 @@ public static ImmutableSortedMultiset copyOf(Iterable elemen // Hack around E not being a subtype of Comparable. // Unsafe, see ImmutableSortedMultisetFauxverideShim. @SuppressWarnings("unchecked") - Ordering naturalOrder = (Ordering) Ordering.natural(); + Ordering naturalOrder = (Ordering) Ordering.>natural(); return copyOf(naturalOrder, elements); } @@ -250,7 +250,7 @@ public static ImmutableSortedMultiset copyOf(Iterator elemen // Hack around E not being a subtype of Comparable. // Unsafe, see ImmutableSortedMultisetFauxverideShim. @SuppressWarnings("unchecked") - Ordering naturalOrder = (Ordering) Ordering.natural(); + Ordering naturalOrder = (Ordering) Ordering.>natural(); return copyOf(naturalOrder, elements); } @@ -276,7 +276,6 @@ public static ImmutableSortedMultiset copyOf( * * @throws NullPointerException if {@code comparator} or any of {@code elements} is null */ - @SuppressWarnings("unchecked") public static ImmutableSortedMultiset copyOf( Comparator comparator, Iterable elements) { if (elements instanceof ImmutableSortedMultiset) { diff --git a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java index 088e5b4c128e..c6acfa70bef1 100644 --- a/android/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/android/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -79,7 +79,10 @@ public abstract class ImmutableSortedSet extends ImmutableSet static RegularImmutableSortedSet emptySet(Comparator comparator) { if (Ordering.natural().equals(comparator)) { - return (RegularImmutableSortedSet) RegularImmutableSortedSet.NATURAL_EMPTY_SET; + @SuppressWarnings("unchecked") // The natural-ordered empty set supports all types. + RegularImmutableSortedSet result = + (RegularImmutableSortedSet) RegularImmutableSortedSet.NATURAL_EMPTY_SET; + return result; } else { return new RegularImmutableSortedSet(ImmutableList.of(), comparator); } @@ -90,6 +93,7 @@ static RegularImmutableSortedSet emptySet(Comparator comparato * *

    Performance note: the instance returned is a singleton. */ + @SuppressWarnings("unchecked") // The natural-ordered empty set supports all types. public static ImmutableSortedSet of() { return (ImmutableSortedSet) RegularImmutableSortedSet.NATURAL_EMPTY_SET; } @@ -117,7 +121,6 @@ public static > ImmutableSortedSet of(E e1, E * * @throws NullPointerException if any element is null */ - @SuppressWarnings("unchecked") public static > ImmutableSortedSet of(E e1, E e2, E e3) { return construct(Ordering.natural(), 3, e1, e2, e3); } @@ -140,7 +143,6 @@ public static > ImmutableSortedSet of(E e1, E * * @throws NullPointerException if any element is null */ - @SuppressWarnings("unchecked") public static > ImmutableSortedSet of( E e1, E e2, E e3, E e4, E e5) { return construct(Ordering.natural(), 5, e1, e2, e3, e4, e5); @@ -157,7 +159,7 @@ public static > ImmutableSortedSet of( @SuppressWarnings("unchecked") public static > ImmutableSortedSet of( E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) { - Comparable[] contents = new Comparable[6 + remaining.length]; + Comparable[] contents = new Comparable[6 + remaining.length]; contents[0] = e1; contents[1] = e2; contents[2] = e3; @@ -207,7 +209,7 @@ public static ImmutableSortedSet copyOf(Iterable elements) { // Hack around E not being a subtype of Comparable. // Unsafe, see ImmutableSortedSetFauxverideShim. @SuppressWarnings("unchecked") - Ordering naturalOrder = (Ordering) Ordering.natural(); + Ordering naturalOrder = (Ordering) Ordering.>natural(); return copyOf(naturalOrder, elements); } @@ -239,7 +241,7 @@ public static ImmutableSortedSet copyOf(Collection elements) // Hack around E not being a subtype of Comparable. // Unsafe, see ImmutableSortedSetFauxverideShim. @SuppressWarnings("unchecked") - Ordering naturalOrder = (Ordering) Ordering.natural(); + Ordering naturalOrder = (Ordering) Ordering.>natural(); return copyOf(naturalOrder, elements); } @@ -258,7 +260,7 @@ public static ImmutableSortedSet copyOf(Iterator elements) { // Hack around E not being a subtype of Comparable. // Unsafe, see ImmutableSortedSetFauxverideShim. @SuppressWarnings("unchecked") - Ordering naturalOrder = (Ordering) Ordering.natural(); + Ordering naturalOrder = (Ordering) Ordering.>natural(); return copyOf(naturalOrder, elements); } @@ -436,6 +438,14 @@ public static final class Builder extends ImmutableSet.Builder { * Creates a new builder. The returned builder is equivalent to the builder generated by {@link * ImmutableSortedSet#orderedBy}. */ + /* + * TODO(cpovirk): use Object[] instead of E[] in the mainline? (The backport is different and + * doesn't need this suppression, but we keep it to minimize diffs.) Generally be more clear + * about when we have an Object[] vs. a Comparable[] or other array type in internalArray? If we + * used Object[], we might be able to optimize toArray() to use clone() sometimes. (See + * cl/592273615 and cl/592273683.) + */ + @SuppressWarnings("unchecked") public Builder(Comparator comparator) { this.comparator = checkNotNull(comparator); } diff --git a/android/guava/src/com/google/common/collect/LinkedHashMultimap.java b/android/guava/src/com/google/common/collect/LinkedHashMultimap.java index 7247fc55fb2e..d01096f33bef 100644 --- a/android/guava/src/com/google/common/collect/LinkedHashMultimap.java +++ b/android/guava/src/com/google/common/collect/LinkedHashMultimap.java @@ -491,7 +491,8 @@ public boolean add(@ParametricNullness V value) { private void rehashIfNecessary() { if (Hashing.needsResizing(size, hashTable.length, VALUE_SET_LOAD_FACTOR)) { @SuppressWarnings("unchecked") - ValueEntry[] hashTable = new ValueEntry[this.hashTable.length * 2]; + ValueEntry[] hashTable = + (ValueEntry[]) new ValueEntry[this.hashTable.length * 2]; this.hashTable = hashTable; int mask = hashTable.length - 1; for (ValueSetLink entry = firstEntry; diff --git a/android/guava/src/com/google/common/collect/MapMakerInternalMap.java b/android/guava/src/com/google/common/collect/MapMakerInternalMap.java index c64d81eb3b4e..159b88a55a30 100644 --- a/android/guava/src/com/google/common/collect/MapMakerInternalMap.java +++ b/android/guava/src/com/google/common/collect/MapMakerInternalMap.java @@ -1169,7 +1169,7 @@ V getLiveValue(E entry) { @SuppressWarnings("unchecked") final Segment[] newSegmentArray(int ssize) { - return new Segment[ssize]; + return (Segment[]) new Segment[ssize]; } // Inner Classes diff --git a/android/guava/src/com/google/common/collect/Maps.java b/android/guava/src/com/google/common/collect/Maps.java index 7dcba2044557..7bd560092ee7 100644 --- a/android/guava/src/com/google/common/collect/Maps.java +++ b/android/guava/src/com/google/common/collect/Maps.java @@ -370,6 +370,7 @@ public static ConcurrentMap newConcurrentMap() { * * @return a new, empty {@code TreeMap} */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeMap newTreeMap() { return new TreeMap<>(); } diff --git a/android/guava/src/com/google/common/collect/MinMaxPriorityQueue.java b/android/guava/src/com/google/common/collect/MinMaxPriorityQueue.java index 0dfa2b2fc0e8..ee26c2d37cc0 100644 --- a/android/guava/src/com/google/common/collect/MinMaxPriorityQueue.java +++ b/android/guava/src/com/google/common/collect/MinMaxPriorityQueue.java @@ -137,6 +137,7 @@ public static Builder orderedBy(Comparator comparator) { * Creates and returns a new builder, configured to build {@code MinMaxPriorityQueue} instances * sized appropriately to hold {@code expectedSize} elements. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static Builder expectedSize(int expectedSize) { return new Builder(Ordering.natural()).expectedSize(expectedSize); } @@ -147,6 +148,7 @@ public static Builder expectedSize(int expectedSize) { * immediately removes its greatest element (according to its comparator), which might be the * element that was just added. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static Builder maximumSize(int maximumSize) { return new Builder(Ordering.natural()).maximumSize(maximumSize); } diff --git a/android/guava/src/com/google/common/collect/MultimapBuilder.java b/android/guava/src/com/google/common/collect/MultimapBuilder.java index 8218da6b4d54..96aacfb3205e 100644 --- a/android/guava/src/com/google/common/collect/MultimapBuilder.java +++ b/android/guava/src/com/google/common/collect/MultimapBuilder.java @@ -430,7 +430,7 @@ public abstract static class ListMultimapBuilder< @Override public ListMultimap build( Multimap multimap) { - return (ListMultimap) super.build(multimap); + return (ListMultimap) super.build(multimap); } } @@ -450,7 +450,7 @@ public abstract static class SetMultimapBuilder< @Override public SetMultimap build( Multimap multimap) { - return (SetMultimap) super.build(multimap); + return (SetMultimap) super.build(multimap); } } @@ -470,7 +470,7 @@ public abstract static class SortedSetMultimapBuilder< @Override public SortedSetMultimap build( Multimap multimap) { - return (SortedSetMultimap) super.build(multimap); + return (SortedSetMultimap) super.build(multimap); } } } diff --git a/android/guava/src/com/google/common/collect/Multisets.java b/android/guava/src/com/google/common/collect/Multisets.java index 83777c9353dc..45d45acb7a27 100644 --- a/android/guava/src/com/google/common/collect/Multisets.java +++ b/android/guava/src/com/google/common/collect/Multisets.java @@ -1162,7 +1162,9 @@ static int linearTimeSizeImpl(Multiset multiset) { * @since 11.0 */ public static ImmutableMultiset copyHighestCountFirst(Multiset multiset) { - Entry[] entries = (Entry[]) multiset.entrySet().toArray(new Entry[0]); + @SuppressWarnings("unchecked") // generics+arrays + // TODO(cpovirk): Consider storing an Entry instead of Entry. + Entry[] entries = (Entry[]) multiset.entrySet().toArray((Entry[]) new Entry[0]); Arrays.sort(entries, DecreasingCount.INSTANCE); return ImmutableMultiset.copyFromEntries(Arrays.asList(entries)); } diff --git a/android/guava/src/com/google/common/collect/MutableClassToInstanceMap.java b/android/guava/src/com/google/common/collect/MutableClassToInstanceMap.java index ea5199561e6e..a5b792d0002a 100644 --- a/android/guava/src/com/google/common/collect/MutableClassToInstanceMap.java +++ b/android/guava/src/com/google/common/collect/MutableClassToInstanceMap.java @@ -182,7 +182,7 @@ private static T cast(Class type, @CheckForNull Object value) { } private Object writeReplace() { - return new SerializedForm(delegate()); + return new SerializedForm<>(delegate()); } private void readObject(ObjectInputStream stream) throws InvalidObjectException { diff --git a/android/guava/src/com/google/common/collect/Ordering.java b/android/guava/src/com/google/common/collect/Ordering.java index 7d2b05b50c39..f3c0744d5506 100644 --- a/android/guava/src/com/google/common/collect/Ordering.java +++ b/android/guava/src/com/google/common/collect/Ordering.java @@ -160,7 +160,9 @@ public abstract class Ordering implements Comparator *

    Java 8+ users: use {@link Comparator#naturalOrder} instead. */ @GwtCompatible(serializable = true) - @SuppressWarnings("unchecked") // TODO(kevinb): right way to explain this?? + @SuppressWarnings({"unchecked", "rawtypes"}) + // TODO(kevinb): right way to explain this?? + // plus https://github.com/google/guava/issues/989 public static Ordering natural() { return (Ordering) NaturalOrdering.INSTANCE; } diff --git a/android/guava/src/com/google/common/collect/Platform.java b/android/guava/src/com/google/common/collect/Platform.java index f09f6d446cec..7ee9b10860e9 100644 --- a/android/guava/src/com/google/common/collect/Platform.java +++ b/android/guava/src/com/google/common/collect/Platform.java @@ -102,7 +102,11 @@ Map preservesInsertionOrderOnPutsMap() { * * - https://github.com/jspecify/jdk/commit/71d826792b8c7ef95d492c50a274deab938f2552 */ - @SuppressWarnings("nullness") + /* + * TODO(cpovirk): Is the unchecked cast avoidable? Would System.arraycopy be similarly fast (if + * likewise not type-checked)? Could our single caller do something different? + */ + @SuppressWarnings({"nullness", "unchecked"}) static T[] copy(Object[] source, int from, int to, T[] arrayOfType) { return Arrays.copyOfRange(source, from, to, (Class) arrayOfType.getClass()); } diff --git a/android/guava/src/com/google/common/collect/Queues.java b/android/guava/src/com/google/common/collect/Queues.java index 859120693934..b3121bb64cdf 100644 --- a/android/guava/src/com/google/common/collect/Queues.java +++ b/android/guava/src/com/google/common/collect/Queues.java @@ -202,6 +202,7 @@ public static LinkedBlockingQueue newLinkedBlockingQueue(Iterable PriorityBlockingQueue newPriorityBlockingQueue() { @@ -217,6 +218,7 @@ public static PriorityBlockingQueue newPriorityBlockin * @since 11.0 (but the bound of {@code E} was changed from {@code Object} to {@code Comparable} * in 15.0) */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @J2ktIncompatible @GwtIncompatible // PriorityBlockingQueue public static PriorityBlockingQueue newPriorityBlockingQueue( @@ -238,6 +240,7 @@ public static PriorityBlockingQueue newPriorityBlockin * @since 11.0 (but the bound of {@code E} was changed from {@code Object} to {@code Comparable} * in 15.0) */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static PriorityQueue newPriorityQueue() { return new PriorityQueue(); } @@ -251,6 +254,7 @@ public static PriorityQueue newPriorityQueue() { * @since 11.0 (but the bound of {@code E} was changed from {@code Object} to {@code Comparable} * in 15.0) */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static PriorityQueue newPriorityQueue( Iterable elements) { if (elements instanceof Collection) { diff --git a/android/guava/src/com/google/common/collect/Range.java b/android/guava/src/com/google/common/collect/Range.java index fa6607dd840b..ccec2bc02f5b 100644 --- a/android/guava/src/com/google/common/collect/Range.java +++ b/android/guava/src/com/google/common/collect/Range.java @@ -21,7 +21,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.base.Equivalence; -import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.errorprone.annotations.Immutable; import java.io.Serializable; @@ -119,42 +118,14 @@ * @since 10.0 */ @GwtCompatible -@SuppressWarnings("rawtypes") +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @Immutable(containerOf = "C") @ElementTypesAreNonnullByDefault public final class Range extends RangeGwtSerializationDependencies implements Predicate, Serializable { - - static class LowerBoundFn implements Function { - static final LowerBoundFn INSTANCE = new LowerBoundFn(); - - @Override - public Cut apply(Range range) { - return range.lowerBound; - } - } - - static class UpperBoundFn implements Function { - static final UpperBoundFn INSTANCE = new UpperBoundFn(); - - @Override - public Cut apply(Range range) { - return range.upperBound; - } - } - @SuppressWarnings("unchecked") - static > Function, Cut> lowerBoundFn() { - return (Function) LowerBoundFn.INSTANCE; - } - - @SuppressWarnings("unchecked") - static > Function, Cut> upperBoundFn() { - return (Function) UpperBoundFn.INSTANCE; - } - static > Ordering> rangeLexOrdering() { - return (Ordering>) (Ordering) RangeLexOrdering.INSTANCE; + return (Ordering>) RangeLexOrdering.INSTANCE; } static > Range create(Cut lowerBound, Cut upperBound) { @@ -700,6 +671,16 @@ public String toString() { return toString(lowerBound, upperBound); } + // We declare accessors so that we can use method references like `Range::lowerBound`. + + Cut lowerBound() { + return lowerBound; + } + + Cut upperBound() { + return upperBound; + } + private static String toString(Cut lowerBound, Cut upperBound) { StringBuilder sb = new StringBuilder(16); lowerBound.describeAsLowerBound(sb); @@ -723,7 +704,7 @@ static int compareOrThrow(Comparable left, Comparable right) { /** Needed to serialize sorted collections of Ranges. */ private static class RangeLexOrdering extends Ordering> implements Serializable { - static final Ordering> INSTANCE = new RangeLexOrdering(); + static final Ordering INSTANCE = new RangeLexOrdering(); @Override public int compare(Range left, Range right) { diff --git a/android/guava/src/com/google/common/collect/RangeGwtSerializationDependencies.java b/android/guava/src/com/google/common/collect/RangeGwtSerializationDependencies.java index 222c1285fb4b..b0b67d4071f7 100644 --- a/android/guava/src/com/google/common/collect/RangeGwtSerializationDependencies.java +++ b/android/guava/src/com/google/common/collect/RangeGwtSerializationDependencies.java @@ -28,5 +28,6 @@ * *

    TODO(cpovirk): Consider applying this subclass approach to our other types. */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtCompatible(emulated = true) abstract class RangeGwtSerializationDependencies implements Serializable {} diff --git a/android/guava/src/com/google/common/collect/RangeMap.java b/android/guava/src/com/google/common/collect/RangeMap.java index 4eab7e49e324..6533a952e82d 100644 --- a/android/guava/src/com/google/common/collect/RangeMap.java +++ b/android/guava/src/com/google/common/collect/RangeMap.java @@ -34,6 +34,7 @@ * @author Louis Wasserman * @since 14.0 */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @DoNotMock("Use ImmutableRangeMap or TreeRangeMap") @GwtIncompatible @ElementTypesAreNonnullByDefault diff --git a/android/guava/src/com/google/common/collect/RangeSet.java b/android/guava/src/com/google/common/collect/RangeSet.java index 7c74366dff3f..e1d252d613c7 100644 --- a/android/guava/src/com/google/common/collect/RangeSet.java +++ b/android/guava/src/com/google/common/collect/RangeSet.java @@ -48,6 +48,7 @@ * @author Louis Wasserman * @since 14.0 */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @DoNotMock("Use ImmutableRangeSet or TreeRangeSet") @GwtIncompatible @ElementTypesAreNonnullByDefault diff --git a/android/guava/src/com/google/common/collect/RegularContiguousSet.java b/android/guava/src/com/google/common/collect/RegularContiguousSet.java index 8159d107ba49..f4804620fd92 100644 --- a/android/guava/src/com/google/common/collect/RegularContiguousSet.java +++ b/android/guava/src/com/google/common/collect/RegularContiguousSet.java @@ -35,7 +35,7 @@ * @author Gregory Kick */ @GwtCompatible(emulated = true) -@SuppressWarnings("unchecked") // allow ungenerified Comparable types +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @ElementTypesAreNonnullByDefault final class RegularContiguousSet extends ContiguousSet { private final Range range; @@ -57,6 +57,7 @@ ContiguousSet headSetImpl(C toElement, boolean inclusive) { } @Override + @SuppressWarnings("unchecked") // TODO(cpovirk): Use a shared unsafeCompare method. ContiguousSet subSetImpl( C fromElement, boolean fromInclusive, C toElement, boolean toInclusive) { if (fromElement.compareTo(toElement) == 0 && !fromInclusive && !toInclusive) { @@ -77,8 +78,14 @@ ContiguousSet tailSetImpl(C fromElement, boolean inclusive) { @GwtIncompatible // not used by GWT emulation @Override int indexOf(@CheckForNull Object target) { + if (!contains(target)) { + return -1; + } + // The cast is safe because of the contains check—at least for any reasonable Comparable class. + @SuppressWarnings("unchecked") // requireNonNull is safe because of the contains check. - return contains(target) ? (int) domain.distance(first(), (C) requireNonNull(target)) : -1; + C c = (C) requireNonNull(target); + return (int) domain.distance(first(), c); } @Override @@ -170,7 +177,9 @@ public boolean contains(@CheckForNull Object object) { return false; } try { - return range.contains((C) object); + @SuppressWarnings("unchecked") // The worst case is usually CCE, which we catch. + C c = (C) object; + return range.contains(c); } catch (ClassCastException e) { return false; } @@ -187,6 +196,7 @@ public boolean isEmpty() { } @Override + @SuppressWarnings("unchecked") // TODO(cpovirk): Use a shared unsafeCompare method. public ContiguousSet intersection(ContiguousSet other) { checkNotNull(other); checkArgument(this.domain.equals(other.domain)); diff --git a/android/guava/src/com/google/common/collect/RegularImmutableSet.java b/android/guava/src/com/google/common/collect/RegularImmutableSet.java index 790aa64533c3..6eaeb760f2a8 100644 --- a/android/guava/src/com/google/common/collect/RegularImmutableSet.java +++ b/android/guava/src/com/google/common/collect/RegularImmutableSet.java @@ -76,6 +76,9 @@ public int size() { return size; } + // We're careful to put only E instances into the array in the mainline. + // (In the backport, we don't need this suppression, but we keep it to minimize diffs.) + @SuppressWarnings("unchecked") @Override public UnmodifiableIterator iterator() { return asList().iterator(); diff --git a/android/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java b/android/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java index 1ece0a0a9657..d2f99e03b8f8 100644 --- a/android/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java +++ b/android/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java @@ -36,7 +36,7 @@ final class RegularImmutableSortedMultiset extends ImmutableSortedMultiset { private static final long[] ZERO_CUMULATIVE_COUNTS = {0}; - static final ImmutableSortedMultiset NATURAL_EMPTY_MULTISET = + static final ImmutableSortedMultiset NATURAL_EMPTY_MULTISET = new RegularImmutableSortedMultiset<>(Ordering.natural()); @VisibleForTesting final transient RegularImmutableSortedSet elementSet; diff --git a/android/guava/src/com/google/common/collect/Sets.java b/android/guava/src/com/google/common/collect/Sets.java index 737a00d555c1..34a71a7cd6af 100644 --- a/android/guava/src/com/google/common/collect/Sets.java +++ b/android/guava/src/com/google/common/collect/Sets.java @@ -366,6 +366,7 @@ public static Set newConcurrentHashSet(Iterable elements) { * * @return a new, empty {@code TreeSet} */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeSet newTreeSet() { return new TreeSet(); } @@ -391,6 +392,7 @@ public static TreeSet newTreeSet() { * @param elements the elements that the set should contain * @return a new {@code TreeSet} containing those elements (minus duplicates) */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeSet newTreeSet(Iterable elements) { TreeSet set = newTreeSet(); Iterables.addAll(set, elements); diff --git a/android/guava/src/com/google/common/collect/SortedLists.java b/android/guava/src/com/google/common/collect/SortedLists.java index 245d01821545..7f536201ebb1 100644 --- a/android/guava/src/com/google/common/collect/SortedLists.java +++ b/android/guava/src/com/google/common/collect/SortedLists.java @@ -198,6 +198,7 @@ public int resultIndex(int higherIndex) { *

    Equivalent to {@link #binarySearch(List, Function, Object, Comparator, KeyPresentBehavior, * KeyAbsentBehavior)} using {@link Ordering#natural}. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static int binarySearch( List list, E e, @@ -213,6 +214,7 @@ public static int binarySearch( *

    Equivalent to {@link #binarySearch(List, Function, Object, Comparator, KeyPresentBehavior, * KeyAbsentBehavior)} using {@link Ordering#natural}. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static int binarySearch( List list, Function keyFunction, diff --git a/android/guava/src/com/google/common/collect/Tables.java b/android/guava/src/com/google/common/collect/Tables.java index cca3d0c3a051..46c26311f9f2 100644 --- a/android/guava/src/com/google/common/collect/Tables.java +++ b/android/guava/src/com/google/common/collect/Tables.java @@ -314,23 +314,18 @@ public Collection values() { return original.values(); } - // Will cast TRANSPOSE_CELL to a type that always succeeds - private static final Function TRANSPOSE_CELL = - new Function, Cell>() { - @Override - public Cell apply(Cell cell) { - return immutableCell(cell.getColumnKey(), cell.getRowKey(), cell.getValue()); - } - }; - - @SuppressWarnings("unchecked") @Override Iterator> cellIterator() { - return Iterators.transform( - original.cellSet().iterator(), (Function, Cell>) TRANSPOSE_CELL); + return Iterators.transform(original.cellSet().iterator(), Tables::transposeCell); } } + private static < + R extends @Nullable Object, C extends @Nullable Object, V extends @Nullable Object> + Cell transposeCell(Cell cell) { + return immutableCell(cell.getColumnKey(), cell.getRowKey(), cell.getValue()); + } + /** * Creates a table that uses the specified backing map and factory. It can generate a table based * on arbitrary {@link Map} classes. diff --git a/android/guava/src/com/google/common/collect/TopKSelector.java b/android/guava/src/com/google/common/collect/TopKSelector.java index be0a97b5f411..ad1d8d5b4b38 100644 --- a/android/guava/src/com/google/common/collect/TopKSelector.java +++ b/android/guava/src/com/google/common/collect/TopKSelector.java @@ -118,6 +118,7 @@ public static > TopKSelector greatest(int k) */ @CheckForNull private T threshold; + @SuppressWarnings("unchecked") // TODO(cpovirk): Consider storing Object[] instead of T[]. private TopKSelector(Comparator comparator, int k) { this.comparator = checkNotNull(comparator, "comparator"); this.k = k; diff --git a/android/guava/src/com/google/common/collect/TreeBasedTable.java b/android/guava/src/com/google/common/collect/TreeBasedTable.java index 9ef210a54a62..751153b8a5eb 100644 --- a/android/guava/src/com/google/common/collect/TreeBasedTable.java +++ b/android/guava/src/com/google/common/collect/TreeBasedTable.java @@ -93,6 +93,7 @@ public TreeMap get() { * instead of {@code R extends Comparable}, and the same for {@code C}. That's * necessary to support classes defined without generics. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeBasedTable create() { return new TreeBasedTable<>(Ordering.natural(), Ordering.natural()); } diff --git a/android/guava/src/com/google/common/collect/TreeMultimap.java b/android/guava/src/com/google/common/collect/TreeMultimap.java index e449caa30014..8e2afe3594eb 100644 --- a/android/guava/src/com/google/common/collect/TreeMultimap.java +++ b/android/guava/src/com/google/common/collect/TreeMultimap.java @@ -81,6 +81,7 @@ public class TreeMultimap TreeMultimap create() { return new TreeMultimap<>(Ordering.natural(), Ordering.natural()); } @@ -103,6 +104,7 @@ public static TreeMultimap cr * * @param multimap the multimap whose contents are copied to this multimap */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeMultimap create( Multimap multimap) { return new TreeMultimap<>(Ordering.natural(), Ordering.natural(), multimap); diff --git a/android/guava/src/com/google/common/collect/TreeMultiset.java b/android/guava/src/com/google/common/collect/TreeMultiset.java index c25385f1df5a..c5e32ca4c134 100644 --- a/android/guava/src/com/google/common/collect/TreeMultiset.java +++ b/android/guava/src/com/google/common/collect/TreeMultiset.java @@ -73,6 +73,7 @@ public final class TreeMultiset extends AbstractSort *

    The type specification is {@code }, instead of the more specific * {@code >}, to support classes defined without generics. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeMultiset create() { return new TreeMultiset(Ordering.natural()); } @@ -105,6 +106,7 @@ public static TreeMultiset create() { *

    The type specification is {@code }, instead of the more specific * {@code >}, to support classes defined without generics. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeMultiset create(Iterable elements) { TreeMultiset multiset = create(); Iterables.addAll(multiset, elements); diff --git a/android/guava/src/com/google/common/collect/TreeRangeMap.java b/android/guava/src/com/google/common/collect/TreeRangeMap.java index 0797f8964ae8..f831f752f618 100644 --- a/android/guava/src/com/google/common/collect/TreeRangeMap.java +++ b/android/guava/src/com/google/common/collect/TreeRangeMap.java @@ -48,6 +48,7 @@ * @author Louis Wasserman * @since 14.0 */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtIncompatible // NavigableMap @ElementTypesAreNonnullByDefault public final class TreeRangeMap implements RangeMap { diff --git a/guava/src/com/google/common/collect/AbstractRangeSet.java b/guava/src/com/google/common/collect/AbstractRangeSet.java index d112a11f1814..5ed42846e318 100644 --- a/guava/src/com/google/common/collect/AbstractRangeSet.java +++ b/guava/src/com/google/common/collect/AbstractRangeSet.java @@ -22,6 +22,7 @@ * * @author Louis Wasserman */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtIncompatible @ElementTypesAreNonnullByDefault abstract class AbstractRangeSet implements RangeSet { diff --git a/guava/src/com/google/common/collect/ArrayTable.java b/guava/src/com/google/common/collect/ArrayTable.java index 411ee6335392..aca92aa83668 100644 --- a/guava/src/com/google/common/collect/ArrayTable.java +++ b/guava/src/com/google/common/collect/ArrayTable.java @@ -132,6 +132,7 @@ public static ArrayTable create( * * @throws NullPointerException if {@code table} has a null key */ + @SuppressWarnings("unchecked") // TODO(cpovirk): Make constructor accept wildcard types? public static ArrayTable create(Table table) { return (table instanceof ArrayTable) ? new ArrayTable((ArrayTable) table) diff --git a/guava/src/com/google/common/collect/CompoundOrdering.java b/guava/src/com/google/common/collect/CompoundOrdering.java index 95ebb82bba9f..78d0064286da 100644 --- a/guava/src/com/google/common/collect/CompoundOrdering.java +++ b/guava/src/com/google/common/collect/CompoundOrdering.java @@ -32,12 +32,13 @@ final class CompoundOrdering extends Ordering @SuppressWarnings("unchecked") // Generic array creation CompoundOrdering(Comparator primary, Comparator secondary) { - this.comparators = (Comparator[]) new Comparator[] {primary, secondary}; + this.comparators = (Comparator[]) new Comparator[] {primary, secondary}; } @SuppressWarnings("unchecked") // Generic array creation CompoundOrdering(Iterable> comparators) { - this.comparators = Iterables.toArray(comparators, (Comparator[]) new Comparator[0]); + this.comparators = + Iterables.toArray(comparators, (Comparator[]) new Comparator[0]); } @Override diff --git a/guava/src/com/google/common/collect/ConcurrentHashMultiset.java b/guava/src/com/google/common/collect/ConcurrentHashMultiset.java index a84e3cee78d4..8848fb43e18d 100644 --- a/guava/src/com/google/common/collect/ConcurrentHashMultiset.java +++ b/guava/src/com/google/common/collect/ConcurrentHashMultiset.java @@ -77,7 +77,7 @@ public final class ConcurrentHashMultiset extends AbstractMultiset impleme // This constant allows the deserialization code to set a final field. This holder class // makes sure it is not initialized unless an instance is deserialized. private static class FieldSettersHolder { - static final FieldSetter COUNT_MAP_FIELD_SETTER = + static final FieldSetter> COUNT_MAP_FIELD_SETTER = Serialization.getFieldSetter(ConcurrentHashMultiset.class, "countMap"); } diff --git a/guava/src/com/google/common/collect/Cut.java b/guava/src/com/google/common/collect/Cut.java index 21fe5ff2dd9f..3231d29dafc8 100644 --- a/guava/src/com/google/common/collect/Cut.java +++ b/guava/src/com/google/common/collect/Cut.java @@ -31,6 +31,7 @@ * * @author Kevin Bourrillion */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtCompatible @ElementTypesAreNonnullByDefault abstract class Cut implements Comparable>, Serializable { diff --git a/guava/src/com/google/common/collect/DiscreteDomain.java b/guava/src/com/google/common/collect/DiscreteDomain.java index c32ea8408979..96160a99ffad 100644 --- a/guava/src/com/google/common/collect/DiscreteDomain.java +++ b/guava/src/com/google/common/collect/DiscreteDomain.java @@ -43,6 +43,7 @@ * @author Kevin Bourrillion * @since 10.0 */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtCompatible @ElementTypesAreNonnullByDefault public abstract class DiscreteDomain { diff --git a/guava/src/com/google/common/collect/GeneralRange.java b/guava/src/com/google/common/collect/GeneralRange.java index e462b7a01f2f..aff4b1bca7e1 100644 --- a/guava/src/com/google/common/collect/GeneralRange.java +++ b/guava/src/com/google/common/collect/GeneralRange.java @@ -41,6 +41,7 @@ @ElementTypesAreNonnullByDefault final class GeneralRange implements Serializable { /** Converts a Range to a GeneralRange. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 static GeneralRange from(Range range) { T lowerEndpoint = range.hasLowerBound() ? range.lowerEndpoint() : null; BoundType lowerBoundType = range.hasLowerBound() ? range.lowerBoundType() : OPEN; diff --git a/guava/src/com/google/common/collect/ImmutableMap.java b/guava/src/com/google/common/collect/ImmutableMap.java index 205a47716151..91585fec5535 100644 --- a/guava/src/com/google/common/collect/ImmutableMap.java +++ b/guava/src/com/google/common/collect/ImmutableMap.java @@ -722,6 +722,7 @@ public static ImmutableMap copyOf( private static , V> ImmutableMap copyOfEnumMap( EnumMap original) { + @SuppressWarnings("unchecked") // the best we could do to make copyOf(Map) compile EnumMap copy = new EnumMap<>((EnumMap) original); for (Entry entry : copy.entrySet()) { checkEntryNotNull(entry.getKey(), entry.getValue()); diff --git a/guava/src/com/google/common/collect/ImmutableMapEntry.java b/guava/src/com/google/common/collect/ImmutableMapEntry.java index 7c90b3f2aca1..e44ffaa5d50e 100644 --- a/guava/src/com/google/common/collect/ImmutableMapEntry.java +++ b/guava/src/com/google/common/collect/ImmutableMapEntry.java @@ -46,7 +46,7 @@ class ImmutableMapEntry extends ImmutableEntry { */ @SuppressWarnings("unchecked") // Safe as long as the javadocs are followed static ImmutableMapEntry[] createEntryArray(int size) { - return new ImmutableMapEntry[size]; + return (ImmutableMapEntry[]) new ImmutableMapEntry[size]; } ImmutableMapEntry(K key, V value) { diff --git a/guava/src/com/google/common/collect/ImmutableMultimap.java b/guava/src/com/google/common/collect/ImmutableMultimap.java index 02dbd5e67341..b4a79dd83b1f 100644 --- a/guava/src/com/google/common/collect/ImmutableMultimap.java +++ b/guava/src/com/google/common/collect/ImmutableMultimap.java @@ -346,9 +346,9 @@ public static ImmutableMultimap copyOf( @GwtIncompatible // java serialization is not supported @J2ktIncompatible static class FieldSettersHolder { - static final Serialization.FieldSetter MAP_FIELD_SETTER = + static final Serialization.FieldSetter> MAP_FIELD_SETTER = Serialization.getFieldSetter(ImmutableMultimap.class, "map"); - static final Serialization.FieldSetter SIZE_FIELD_SETTER = + static final Serialization.FieldSetter> SIZE_FIELD_SETTER = Serialization.getFieldSetter(ImmutableMultimap.class, "size"); } diff --git a/guava/src/com/google/common/collect/ImmutableRangeMap.java b/guava/src/com/google/common/collect/ImmutableRangeMap.java index 88ad7d889b71..7ceda58d8b14 100644 --- a/guava/src/com/google/common/collect/ImmutableRangeMap.java +++ b/guava/src/com/google/common/collect/ImmutableRangeMap.java @@ -184,7 +184,7 @@ public V get(K key) { int index = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, Cut.belowValue(key), KeyPresentBehavior.ANY_PRESENT, KeyAbsentBehavior.NEXT_LOWER); @@ -202,7 +202,7 @@ public Entry, V> getEntry(K key) { int index = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, Cut.belowValue(key), KeyPresentBehavior.ANY_PRESENT, KeyAbsentBehavior.NEXT_LOWER); @@ -335,14 +335,14 @@ public ImmutableRangeMap subRangeMap(final Range range) { int lowerIndex = SortedLists.binarySearch( ranges, - Range.upperBoundFn(), + Range::upperBound, range.lowerBound, KeyPresentBehavior.FIRST_AFTER, KeyAbsentBehavior.NEXT_HIGHER); int upperIndex = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, range.upperBound, KeyPresentBehavior.ANY_PRESENT, KeyAbsentBehavior.NEXT_HIGHER); diff --git a/guava/src/com/google/common/collect/ImmutableRangeSet.java b/guava/src/com/google/common/collect/ImmutableRangeSet.java index 165b6e6520fb..0362f36a6bd9 100644 --- a/guava/src/com/google/common/collect/ImmutableRangeSet.java +++ b/guava/src/com/google/common/collect/ImmutableRangeSet.java @@ -48,6 +48,7 @@ * @author Louis Wasserman * @since 14.0 */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtIncompatible @ElementTypesAreNonnullByDefault public final class ImmutableRangeSet extends AbstractRangeSet @@ -160,7 +161,7 @@ public boolean intersects(Range otherRange) { int ceilingIndex = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, otherRange.lowerBound, Ordering.natural(), ANY_PRESENT, @@ -180,7 +181,7 @@ public boolean encloses(Range otherRange) { int index = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, otherRange.lowerBound, Ordering.natural(), ANY_PRESENT, @@ -194,7 +195,7 @@ public Range rangeContaining(C value) { int index = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, Cut.belowValue(value), Ordering.natural(), ANY_PRESENT, @@ -451,7 +452,7 @@ private ImmutableList> intersectRanges(final Range range) { fromIndex = SortedLists.binarySearch( ranges, - Range.upperBoundFn(), + Range::upperBound, range.lowerBound, KeyPresentBehavior.FIRST_AFTER, KeyAbsentBehavior.NEXT_HIGHER); @@ -464,7 +465,7 @@ private ImmutableList> intersectRanges(final Range range) { toIndex = SortedLists.binarySearch( ranges, - Range.lowerBoundFn(), + Range::lowerBound, range.upperBound, KeyPresentBehavior.FIRST_PRESENT, KeyAbsentBehavior.NEXT_HIGHER); diff --git a/guava/src/com/google/common/collect/ImmutableSet.java b/guava/src/com/google/common/collect/ImmutableSet.java index 31147bb0a657..412f34001d41 100644 --- a/guava/src/com/google/common/collect/ImmutableSet.java +++ b/guava/src/com/google/common/collect/ImmutableSet.java @@ -168,6 +168,11 @@ public static ImmutableSet of(E e1, E e2, E e3, E e4, E e5, E e6, E... ot * @throws NullPointerException if any of {@code elements} is null * @since 7.0 (source-compatible since 2.0) */ + // This the best we could do to get copyOfEnumSet to compile in the mainline. + // The suppression also covers the cast to E[], discussed below. + // In the backport, we don't have those cases and thus don't need this suppression. + // We keep it to minimize diffs. + @SuppressWarnings("unchecked") public static ImmutableSet copyOf(Collection elements) { /* * TODO(lowasser): consider checking for ImmutableAsList here @@ -181,7 +186,7 @@ public static ImmutableSet copyOf(Collection elements) { return set; } } else if (elements instanceof EnumSet) { - return copyOfEnumSet((EnumSet) elements); + return copyOfEnumSet((EnumSet) elements); } int size = elements.size(); @@ -190,6 +195,7 @@ public static ImmutableSet copyOf(Collection elements) { return of(); } // Collection.toArray() is required to contain only E instances, and all we do is read them. + // TODO(cpovirk): Consider using Object[] anyway. E[] array = (E[]) elements.toArray(); /* * For a Set, we guess that it contains no duplicates. That's just a guess for purpose of @@ -264,9 +270,9 @@ private static ImmutableSet fromArrayWithExpectedSize(E[] elements, int e } } - @SuppressWarnings("rawtypes") // necessary to compile against Java 8 - private static ImmutableSet copyOfEnumSet(EnumSet enumSet) { - return ImmutableEnumSet.asImmutable(EnumSet.copyOf(enumSet)); + @SuppressWarnings({"rawtypes", "unchecked"}) // necessary to compile against Java 8 + private static ImmutableSet copyOfEnumSet(EnumSet enumSet) { + return ImmutableEnumSet.asImmutable(EnumSet.copyOf((EnumSet) enumSet)); } ImmutableSet() {} diff --git a/guava/src/com/google/common/collect/ImmutableSetMultimap.java b/guava/src/com/google/common/collect/ImmutableSetMultimap.java index b1f8438cd0c4..205b14de998f 100644 --- a/guava/src/com/google/common/collect/ImmutableSetMultimap.java +++ b/guava/src/com/google/common/collect/ImmutableSetMultimap.java @@ -606,8 +606,9 @@ Comparator valueComparator() { @GwtIncompatible // java serialization @J2ktIncompatible private static final class SetFieldSettersHolder { - static final Serialization.FieldSetter EMPTY_SET_FIELD_SETTER = - Serialization.getFieldSetter(ImmutableSetMultimap.class, "emptySet"); + static final Serialization.FieldSetter> + EMPTY_SET_FIELD_SETTER = + Serialization.getFieldSetter(ImmutableSetMultimap.class, "emptySet"); } @GwtIncompatible // java.io.ObjectInputStream diff --git a/guava/src/com/google/common/collect/ImmutableSortedMap.java b/guava/src/com/google/common/collect/ImmutableSortedMap.java index ff404a6d66f3..bf9f70f8cd2e 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedMap.java +++ b/guava/src/com/google/common/collect/ImmutableSortedMap.java @@ -112,9 +112,9 @@ public final class ImmutableSortedMap extends ImmutableMap * TODO(kevinb): Confirm that ImmutableSortedMap is faster to construct and * uses less memory than TreeMap; then say so in the class Javadoc. */ - private static final Comparator NATURAL_ORDER = Ordering.natural(); + private static final Comparator NATURAL_ORDER = Ordering.natural(); - private static final ImmutableSortedMap NATURAL_EMPTY_MAP = + private static final ImmutableSortedMap, Object> NATURAL_EMPTY_MAP = new ImmutableSortedMap<>( ImmutableSortedSet.emptySet(Ordering.natural()), ImmutableList.of()); @@ -157,7 +157,6 @@ private static ImmutableSortedMap of(Comparator comparat * * @throws IllegalArgumentException if the two keys are equal according to their natural ordering */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, K k2, V v2) { return fromEntries(entryOf(k1, v1), entryOf(k2, v2)); @@ -241,7 +240,6 @@ public static , V> ImmutableSortedMap of( * @throws IllegalArgumentException if any two keys are equal according to their natural ordering * @since 31.0 */ - @SuppressWarnings("unchecked") public static , V> ImmutableSortedMap of( K k1, V v1, diff --git a/guava/src/com/google/common/collect/ImmutableSortedMultiset.java b/guava/src/com/google/common/collect/ImmutableSortedMultiset.java index 454a7756924d..2f4e7a87ba1c 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedMultiset.java +++ b/guava/src/com/google/common/collect/ImmutableSortedMultiset.java @@ -213,7 +213,7 @@ public static ImmutableSortedMultiset copyOf(Iterable elemen // Hack around E not being a subtype of Comparable. // Unsafe, see ImmutableSortedMultisetFauxverideShim. @SuppressWarnings("unchecked") - Ordering naturalOrder = (Ordering) Ordering.natural(); + Ordering naturalOrder = (Ordering) Ordering.>natural(); return copyOf(naturalOrder, elements); } @@ -231,7 +231,7 @@ public static ImmutableSortedMultiset copyOf(Iterator elemen // Hack around E not being a subtype of Comparable. // Unsafe, see ImmutableSortedMultisetFauxverideShim. @SuppressWarnings("unchecked") - Ordering naturalOrder = (Ordering) Ordering.natural(); + Ordering naturalOrder = (Ordering) Ordering.>natural(); return copyOf(naturalOrder, elements); } diff --git a/guava/src/com/google/common/collect/ImmutableSortedSet.java b/guava/src/com/google/common/collect/ImmutableSortedSet.java index ecac832e3bdc..1ec68e352902 100644 --- a/guava/src/com/google/common/collect/ImmutableSortedSet.java +++ b/guava/src/com/google/common/collect/ImmutableSortedSet.java @@ -85,7 +85,10 @@ public abstract class ImmutableSortedSet extends ImmutableSet.CachingAsList RegularImmutableSortedSet emptySet(Comparator comparator) { if (Ordering.natural().equals(comparator)) { - return (RegularImmutableSortedSet) RegularImmutableSortedSet.NATURAL_EMPTY_SET; + @SuppressWarnings("unchecked") // The natural-ordered empty set supports all types. + RegularImmutableSortedSet result = + (RegularImmutableSortedSet) RegularImmutableSortedSet.NATURAL_EMPTY_SET; + return result; } else { return new RegularImmutableSortedSet(ImmutableList.of(), comparator); } @@ -96,6 +99,7 @@ static RegularImmutableSortedSet emptySet(Comparator comparato * *

    Performance note: the instance returned is a singleton. */ + @SuppressWarnings("unchecked") // The natural-ordered empty set supports all types. public static ImmutableSortedSet of() { return (ImmutableSortedSet) RegularImmutableSortedSet.NATURAL_EMPTY_SET; } @@ -123,7 +127,6 @@ public static > ImmutableSortedSet of(E e1, E * * @throws NullPointerException if any element is null */ - @SuppressWarnings("unchecked") public static > ImmutableSortedSet of(E e1, E e2, E e3) { return construct(Ordering.natural(), 3, e1, e2, e3); } @@ -146,7 +149,6 @@ public static > ImmutableSortedSet of(E e1, E * * @throws NullPointerException if any element is null */ - @SuppressWarnings("unchecked") public static > ImmutableSortedSet of( E e1, E e2, E e3, E e4, E e5) { return construct(Ordering.natural(), 5, e1, e2, e3, e4, e5); @@ -163,7 +165,7 @@ public static > ImmutableSortedSet of( @SuppressWarnings("unchecked") public static > ImmutableSortedSet of( E e1, E e2, E e3, E e4, E e5, E e6, E... remaining) { - Comparable[] contents = new Comparable[6 + remaining.length]; + Comparable[] contents = new Comparable[6 + remaining.length]; contents[0] = e1; contents[1] = e2; contents[2] = e3; @@ -213,7 +215,7 @@ public static ImmutableSortedSet copyOf(Iterable elements) { // Hack around E not being a subtype of Comparable. // Unsafe, see ImmutableSortedSetFauxverideShim. @SuppressWarnings("unchecked") - Ordering naturalOrder = (Ordering) Ordering.natural(); + Ordering naturalOrder = (Ordering) Ordering.>natural(); return copyOf(naturalOrder, elements); } @@ -245,7 +247,7 @@ public static ImmutableSortedSet copyOf(Collection elements) // Hack around E not being a subtype of Comparable. // Unsafe, see ImmutableSortedSetFauxverideShim. @SuppressWarnings("unchecked") - Ordering naturalOrder = (Ordering) Ordering.natural(); + Ordering naturalOrder = (Ordering) Ordering.>natural(); return copyOf(naturalOrder, elements); } @@ -264,7 +266,7 @@ public static ImmutableSortedSet copyOf(Iterator elements) { // Hack around E not being a subtype of Comparable. // Unsafe, see ImmutableSortedSetFauxverideShim. @SuppressWarnings("unchecked") - Ordering naturalOrder = (Ordering) Ordering.natural(); + Ordering naturalOrder = (Ordering) Ordering.>natural(); return copyOf(naturalOrder, elements); } @@ -439,6 +441,14 @@ public static final class Builder extends ImmutableSet.Builder { * Creates a new builder. The returned builder is equivalent to the builder generated by {@link * ImmutableSortedSet#orderedBy}. */ + /* + * TODO(cpovirk): use Object[] instead of E[] in the mainline? (The backport is different and + * doesn't need this suppression, but we keep it to minimize diffs.) Generally be more clear + * about when we have an Object[] vs. a Comparable[] or other array type in internalArray? If we + * used Object[], we might be able to optimize toArray() to use clone() sometimes. (See + * cl/592273615 and cl/592273683.) + */ + @SuppressWarnings("unchecked") public Builder(Comparator comparator) { super(true); // don't construct guts of hash-based set builder this.comparator = checkNotNull(comparator); diff --git a/guava/src/com/google/common/collect/JdkBackedImmutableMultiset.java b/guava/src/com/google/common/collect/JdkBackedImmutableMultiset.java index 8c116b35129c..e18bb5774593 100644 --- a/guava/src/com/google/common/collect/JdkBackedImmutableMultiset.java +++ b/guava/src/com/google/common/collect/JdkBackedImmutableMultiset.java @@ -40,7 +40,7 @@ final class JdkBackedImmutableMultiset extends ImmutableMultiset { static ImmutableMultiset create(Collection> entries) { @SuppressWarnings("unchecked") - Entry[] entriesArray = entries.toArray(new Entry[0]); + Entry[] entriesArray = entries.toArray((Entry[]) new Entry[0]); Map delegateMap = Maps.newHashMapWithExpectedSize(entriesArray.length); long size = 0; for (int i = 0; i < entriesArray.length; i++) { diff --git a/guava/src/com/google/common/collect/LinkedHashMultimap.java b/guava/src/com/google/common/collect/LinkedHashMultimap.java index 61f2a0202e4f..93f02eadad6b 100644 --- a/guava/src/com/google/common/collect/LinkedHashMultimap.java +++ b/guava/src/com/google/common/collect/LinkedHashMultimap.java @@ -505,7 +505,8 @@ public boolean add(@ParametricNullness V value) { private void rehashIfNecessary() { if (Hashing.needsResizing(size, hashTable.length, VALUE_SET_LOAD_FACTOR)) { @SuppressWarnings("unchecked") - ValueEntry[] hashTable = new ValueEntry[this.hashTable.length * 2]; + ValueEntry[] hashTable = + (ValueEntry[]) new ValueEntry[this.hashTable.length * 2]; this.hashTable = hashTable; int mask = hashTable.length - 1; for (ValueSetLink entry = firstEntry; diff --git a/guava/src/com/google/common/collect/MapMakerInternalMap.java b/guava/src/com/google/common/collect/MapMakerInternalMap.java index c64d81eb3b4e..159b88a55a30 100644 --- a/guava/src/com/google/common/collect/MapMakerInternalMap.java +++ b/guava/src/com/google/common/collect/MapMakerInternalMap.java @@ -1169,7 +1169,7 @@ V getLiveValue(E entry) { @SuppressWarnings("unchecked") final Segment[] newSegmentArray(int ssize) { - return new Segment[ssize]; + return (Segment[]) new Segment[ssize]; } // Inner Classes diff --git a/guava/src/com/google/common/collect/Maps.java b/guava/src/com/google/common/collect/Maps.java index 1ae8664a77cc..34f09318a05c 100644 --- a/guava/src/com/google/common/collect/Maps.java +++ b/guava/src/com/google/common/collect/Maps.java @@ -375,6 +375,7 @@ public static ConcurrentMap newConcurrentMap() { * * @return a new, empty {@code TreeMap} */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeMap newTreeMap() { return new TreeMap<>(); } diff --git a/guava/src/com/google/common/collect/MinMaxPriorityQueue.java b/guava/src/com/google/common/collect/MinMaxPriorityQueue.java index 0dfa2b2fc0e8..ee26c2d37cc0 100644 --- a/guava/src/com/google/common/collect/MinMaxPriorityQueue.java +++ b/guava/src/com/google/common/collect/MinMaxPriorityQueue.java @@ -137,6 +137,7 @@ public static Builder orderedBy(Comparator comparator) { * Creates and returns a new builder, configured to build {@code MinMaxPriorityQueue} instances * sized appropriately to hold {@code expectedSize} elements. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static Builder expectedSize(int expectedSize) { return new Builder(Ordering.natural()).expectedSize(expectedSize); } @@ -147,6 +148,7 @@ public static Builder expectedSize(int expectedSize) { * immediately removes its greatest element (according to its comparator), which might be the * element that was just added. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static Builder maximumSize(int maximumSize) { return new Builder(Ordering.natural()).maximumSize(maximumSize); } diff --git a/guava/src/com/google/common/collect/MultimapBuilder.java b/guava/src/com/google/common/collect/MultimapBuilder.java index 8218da6b4d54..96aacfb3205e 100644 --- a/guava/src/com/google/common/collect/MultimapBuilder.java +++ b/guava/src/com/google/common/collect/MultimapBuilder.java @@ -430,7 +430,7 @@ public abstract static class ListMultimapBuilder< @Override public ListMultimap build( Multimap multimap) { - return (ListMultimap) super.build(multimap); + return (ListMultimap) super.build(multimap); } } @@ -450,7 +450,7 @@ public abstract static class SetMultimapBuilder< @Override public SetMultimap build( Multimap multimap) { - return (SetMultimap) super.build(multimap); + return (SetMultimap) super.build(multimap); } } @@ -470,7 +470,7 @@ public abstract static class SortedSetMultimapBuilder< @Override public SortedSetMultimap build( Multimap multimap) { - return (SortedSetMultimap) super.build(multimap); + return (SortedSetMultimap) super.build(multimap); } } } diff --git a/guava/src/com/google/common/collect/Multisets.java b/guava/src/com/google/common/collect/Multisets.java index 7268248ef1a3..303f5512f567 100644 --- a/guava/src/com/google/common/collect/Multisets.java +++ b/guava/src/com/google/common/collect/Multisets.java @@ -1159,7 +1159,9 @@ static int linearTimeSizeImpl(Multiset multiset) { * @since 11.0 */ public static ImmutableMultiset copyHighestCountFirst(Multiset multiset) { - Entry[] entries = (Entry[]) multiset.entrySet().toArray(new Entry[0]); + @SuppressWarnings("unchecked") // generics+arrays + // TODO(cpovirk): Consider storing an Entry instead of Entry. + Entry[] entries = (Entry[]) multiset.entrySet().toArray((Entry[]) new Entry[0]); Arrays.sort(entries, DecreasingCount.INSTANCE); return ImmutableMultiset.copyFromEntries(Arrays.asList(entries)); } diff --git a/guava/src/com/google/common/collect/MutableClassToInstanceMap.java b/guava/src/com/google/common/collect/MutableClassToInstanceMap.java index 98b4026142e3..63774917933a 100644 --- a/guava/src/com/google/common/collect/MutableClassToInstanceMap.java +++ b/guava/src/com/google/common/collect/MutableClassToInstanceMap.java @@ -189,7 +189,7 @@ private static T cast(Class type, @CheckForNull Object value) { } private Object writeReplace() { - return new SerializedForm(delegate()); + return new SerializedForm<>(delegate()); } private void readObject(ObjectInputStream stream) throws InvalidObjectException { diff --git a/guava/src/com/google/common/collect/Ordering.java b/guava/src/com/google/common/collect/Ordering.java index 7d2b05b50c39..f3c0744d5506 100644 --- a/guava/src/com/google/common/collect/Ordering.java +++ b/guava/src/com/google/common/collect/Ordering.java @@ -160,7 +160,9 @@ public abstract class Ordering implements Comparator *

    Java 8+ users: use {@link Comparator#naturalOrder} instead. */ @GwtCompatible(serializable = true) - @SuppressWarnings("unchecked") // TODO(kevinb): right way to explain this?? + @SuppressWarnings({"unchecked", "rawtypes"}) + // TODO(kevinb): right way to explain this?? + // plus https://github.com/google/guava/issues/989 public static Ordering natural() { return (Ordering) NaturalOrdering.INSTANCE; } diff --git a/guava/src/com/google/common/collect/Platform.java b/guava/src/com/google/common/collect/Platform.java index 7ae061c83e8c..a2de7a326500 100644 --- a/guava/src/com/google/common/collect/Platform.java +++ b/guava/src/com/google/common/collect/Platform.java @@ -109,7 +109,11 @@ Map preservesInsertionOrderOnPutsMap() { * * - https://github.com/jspecify/jdk/commit/71d826792b8c7ef95d492c50a274deab938f2552 */ - @SuppressWarnings("nullness") + /* + * TODO(cpovirk): Is the unchecked cast avoidable? Would System.arraycopy be similarly fast (if + * likewise not type-checked)? Could our single caller do something different? + */ + @SuppressWarnings({"nullness", "unchecked"}) static T[] copy(Object[] source, int from, int to, T[] arrayOfType) { return Arrays.copyOfRange(source, from, to, (Class) arrayOfType.getClass()); } diff --git a/guava/src/com/google/common/collect/Queues.java b/guava/src/com/google/common/collect/Queues.java index 58dc85e8fd56..b5dbff9b2936 100644 --- a/guava/src/com/google/common/collect/Queues.java +++ b/guava/src/com/google/common/collect/Queues.java @@ -202,6 +202,7 @@ public static LinkedBlockingQueue newLinkedBlockingQueue(Iterable PriorityBlockingQueue newPriorityBlockingQueue() { @@ -217,6 +218,7 @@ public static PriorityBlockingQueue newPriorityBlockin * @since 11.0 (but the bound of {@code E} was changed from {@code Object} to {@code Comparable} * in 15.0) */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @J2ktIncompatible @GwtIncompatible // PriorityBlockingQueue public static PriorityBlockingQueue newPriorityBlockingQueue( @@ -238,6 +240,7 @@ public static PriorityBlockingQueue newPriorityBlockin * @since 11.0 (but the bound of {@code E} was changed from {@code Object} to {@code Comparable} * in 15.0) */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static PriorityQueue newPriorityQueue() { return new PriorityQueue(); } @@ -251,6 +254,7 @@ public static PriorityQueue newPriorityQueue() { * @since 11.0 (but the bound of {@code E} was changed from {@code Object} to {@code Comparable} * in 15.0) */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static PriorityQueue newPriorityQueue( Iterable elements) { if (elements instanceof Collection) { diff --git a/guava/src/com/google/common/collect/Range.java b/guava/src/com/google/common/collect/Range.java index fa6607dd840b..ccec2bc02f5b 100644 --- a/guava/src/com/google/common/collect/Range.java +++ b/guava/src/com/google/common/collect/Range.java @@ -21,7 +21,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.base.Equivalence; -import com.google.common.base.Function; import com.google.common.base.Predicate; import com.google.errorprone.annotations.Immutable; import java.io.Serializable; @@ -119,42 +118,14 @@ * @since 10.0 */ @GwtCompatible -@SuppressWarnings("rawtypes") +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @Immutable(containerOf = "C") @ElementTypesAreNonnullByDefault public final class Range extends RangeGwtSerializationDependencies implements Predicate, Serializable { - - static class LowerBoundFn implements Function { - static final LowerBoundFn INSTANCE = new LowerBoundFn(); - - @Override - public Cut apply(Range range) { - return range.lowerBound; - } - } - - static class UpperBoundFn implements Function { - static final UpperBoundFn INSTANCE = new UpperBoundFn(); - - @Override - public Cut apply(Range range) { - return range.upperBound; - } - } - @SuppressWarnings("unchecked") - static > Function, Cut> lowerBoundFn() { - return (Function) LowerBoundFn.INSTANCE; - } - - @SuppressWarnings("unchecked") - static > Function, Cut> upperBoundFn() { - return (Function) UpperBoundFn.INSTANCE; - } - static > Ordering> rangeLexOrdering() { - return (Ordering>) (Ordering) RangeLexOrdering.INSTANCE; + return (Ordering>) RangeLexOrdering.INSTANCE; } static > Range create(Cut lowerBound, Cut upperBound) { @@ -700,6 +671,16 @@ public String toString() { return toString(lowerBound, upperBound); } + // We declare accessors so that we can use method references like `Range::lowerBound`. + + Cut lowerBound() { + return lowerBound; + } + + Cut upperBound() { + return upperBound; + } + private static String toString(Cut lowerBound, Cut upperBound) { StringBuilder sb = new StringBuilder(16); lowerBound.describeAsLowerBound(sb); @@ -723,7 +704,7 @@ static int compareOrThrow(Comparable left, Comparable right) { /** Needed to serialize sorted collections of Ranges. */ private static class RangeLexOrdering extends Ordering> implements Serializable { - static final Ordering> INSTANCE = new RangeLexOrdering(); + static final Ordering INSTANCE = new RangeLexOrdering(); @Override public int compare(Range left, Range right) { diff --git a/guava/src/com/google/common/collect/RangeGwtSerializationDependencies.java b/guava/src/com/google/common/collect/RangeGwtSerializationDependencies.java index 222c1285fb4b..b0b67d4071f7 100644 --- a/guava/src/com/google/common/collect/RangeGwtSerializationDependencies.java +++ b/guava/src/com/google/common/collect/RangeGwtSerializationDependencies.java @@ -28,5 +28,6 @@ * *

    TODO(cpovirk): Consider applying this subclass approach to our other types. */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtCompatible(emulated = true) abstract class RangeGwtSerializationDependencies implements Serializable {} diff --git a/guava/src/com/google/common/collect/RangeMap.java b/guava/src/com/google/common/collect/RangeMap.java index 7185ee6d1ba1..039c8bd62661 100644 --- a/guava/src/com/google/common/collect/RangeMap.java +++ b/guava/src/com/google/common/collect/RangeMap.java @@ -36,6 +36,7 @@ * @author Louis Wasserman * @since 14.0 */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @DoNotMock("Use ImmutableRangeMap or TreeRangeMap") @GwtIncompatible @ElementTypesAreNonnullByDefault diff --git a/guava/src/com/google/common/collect/RangeSet.java b/guava/src/com/google/common/collect/RangeSet.java index 9138c5d98ba9..293c343d7559 100644 --- a/guava/src/com/google/common/collect/RangeSet.java +++ b/guava/src/com/google/common/collect/RangeSet.java @@ -48,6 +48,7 @@ * @author Louis Wasserman * @since 14.0 */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @DoNotMock("Use ImmutableRangeSet or TreeRangeSet") @GwtIncompatible @ElementTypesAreNonnullByDefault diff --git a/guava/src/com/google/common/collect/RegularContiguousSet.java b/guava/src/com/google/common/collect/RegularContiguousSet.java index 8159d107ba49..f4804620fd92 100644 --- a/guava/src/com/google/common/collect/RegularContiguousSet.java +++ b/guava/src/com/google/common/collect/RegularContiguousSet.java @@ -35,7 +35,7 @@ * @author Gregory Kick */ @GwtCompatible(emulated = true) -@SuppressWarnings("unchecked") // allow ungenerified Comparable types +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @ElementTypesAreNonnullByDefault final class RegularContiguousSet extends ContiguousSet { private final Range range; @@ -57,6 +57,7 @@ ContiguousSet headSetImpl(C toElement, boolean inclusive) { } @Override + @SuppressWarnings("unchecked") // TODO(cpovirk): Use a shared unsafeCompare method. ContiguousSet subSetImpl( C fromElement, boolean fromInclusive, C toElement, boolean toInclusive) { if (fromElement.compareTo(toElement) == 0 && !fromInclusive && !toInclusive) { @@ -77,8 +78,14 @@ ContiguousSet tailSetImpl(C fromElement, boolean inclusive) { @GwtIncompatible // not used by GWT emulation @Override int indexOf(@CheckForNull Object target) { + if (!contains(target)) { + return -1; + } + // The cast is safe because of the contains check—at least for any reasonable Comparable class. + @SuppressWarnings("unchecked") // requireNonNull is safe because of the contains check. - return contains(target) ? (int) domain.distance(first(), (C) requireNonNull(target)) : -1; + C c = (C) requireNonNull(target); + return (int) domain.distance(first(), c); } @Override @@ -170,7 +177,9 @@ public boolean contains(@CheckForNull Object object) { return false; } try { - return range.contains((C) object); + @SuppressWarnings("unchecked") // The worst case is usually CCE, which we catch. + C c = (C) object; + return range.contains(c); } catch (ClassCastException e) { return false; } @@ -187,6 +196,7 @@ public boolean isEmpty() { } @Override + @SuppressWarnings("unchecked") // TODO(cpovirk): Use a shared unsafeCompare method. public ContiguousSet intersection(ContiguousSet other) { checkNotNull(other); checkArgument(this.domain.equals(other.domain)); diff --git a/guava/src/com/google/common/collect/RegularImmutableBiMap.java b/guava/src/com/google/common/collect/RegularImmutableBiMap.java index e97a8693437c..c685e1988eda 100644 --- a/guava/src/com/google/common/collect/RegularImmutableBiMap.java +++ b/guava/src/com/google/common/collect/RegularImmutableBiMap.java @@ -49,6 +49,7 @@ @SuppressWarnings("serial") // uses writeReplace(), not default serialization @ElementTypesAreNonnullByDefault class RegularImmutableBiMap extends ImmutableBiMap { + @SuppressWarnings("unchecked") // TODO(cpovirk): Consider storing Entry[] instead. static final RegularImmutableBiMap EMPTY = new RegularImmutableBiMap<>( null, null, (Entry[]) ImmutableMap.EMPTY_ENTRY_ARRAY, 0, 0); diff --git a/guava/src/com/google/common/collect/RegularImmutableSet.java b/guava/src/com/google/common/collect/RegularImmutableSet.java index 0db235d69580..12227e0006b6 100644 --- a/guava/src/com/google/common/collect/RegularImmutableSet.java +++ b/guava/src/com/google/common/collect/RegularImmutableSet.java @@ -74,6 +74,9 @@ public int size() { return elements.length; } + // We're careful to put only E instances into the array in the mainline. + // (In the backport, we don't need this suppression, but we keep it to minimize diffs.) + @SuppressWarnings("unchecked") @Override public UnmodifiableIterator iterator() { return (UnmodifiableIterator) Iterators.forArray(elements); diff --git a/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java b/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java index 258f7aa09055..ea146b1bef0d 100644 --- a/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java +++ b/guava/src/com/google/common/collect/RegularImmutableSortedMultiset.java @@ -37,7 +37,7 @@ final class RegularImmutableSortedMultiset extends ImmutableSortedMultiset { private static final long[] ZERO_CUMULATIVE_COUNTS = {0}; - static final ImmutableSortedMultiset NATURAL_EMPTY_MULTISET = + static final ImmutableSortedMultiset NATURAL_EMPTY_MULTISET = new RegularImmutableSortedMultiset<>(Ordering.natural()); @VisibleForTesting final transient RegularImmutableSortedSet elementSet; diff --git a/guava/src/com/google/common/collect/Sets.java b/guava/src/com/google/common/collect/Sets.java index f89c4768f52b..3f0aa8d31033 100644 --- a/guava/src/com/google/common/collect/Sets.java +++ b/guava/src/com/google/common/collect/Sets.java @@ -368,6 +368,7 @@ public static Set newConcurrentHashSet(Iterable elements) { * * @return a new, empty {@code TreeSet} */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeSet newTreeSet() { return new TreeSet(); } @@ -393,6 +394,7 @@ public static TreeSet newTreeSet() { * @param elements the elements that the set should contain * @return a new {@code TreeSet} containing those elements (minus duplicates) */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeSet newTreeSet(Iterable elements) { TreeSet set = newTreeSet(); Iterables.addAll(set, elements); diff --git a/guava/src/com/google/common/collect/SortedLists.java b/guava/src/com/google/common/collect/SortedLists.java index 245d01821545..7f536201ebb1 100644 --- a/guava/src/com/google/common/collect/SortedLists.java +++ b/guava/src/com/google/common/collect/SortedLists.java @@ -198,6 +198,7 @@ public int resultIndex(int higherIndex) { *

    Equivalent to {@link #binarySearch(List, Function, Object, Comparator, KeyPresentBehavior, * KeyAbsentBehavior)} using {@link Ordering#natural}. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static int binarySearch( List list, E e, @@ -213,6 +214,7 @@ public static int binarySearch( *

    Equivalent to {@link #binarySearch(List, Function, Object, Comparator, KeyPresentBehavior, * KeyAbsentBehavior)} using {@link Ordering#natural}. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static int binarySearch( List list, Function keyFunction, diff --git a/guava/src/com/google/common/collect/Streams.java b/guava/src/com/google/common/collect/Streams.java index 01548e86c80b..5161f0a588d6 100644 --- a/guava/src/com/google/common/collect/Streams.java +++ b/guava/src/com/google/common/collect/Streams.java @@ -194,6 +194,7 @@ void throwIt(Throwable t) throws T { * * @see Stream#concat(Stream, Stream) */ + @SuppressWarnings("unchecked") // could probably be avoided with a forwarding Spliterator @SafeVarargs public static Stream concat(Stream... streams) { // TODO(lowasser): consider an implementation that can support SUBSIZED diff --git a/guava/src/com/google/common/collect/Tables.java b/guava/src/com/google/common/collect/Tables.java index a9d0bb6548d0..326ae35153d6 100644 --- a/guava/src/com/google/common/collect/Tables.java +++ b/guava/src/com/google/common/collect/Tables.java @@ -315,31 +315,23 @@ public Collection values() { return original.values(); } - // Will cast TRANSPOSE_CELL to a type that always succeeds - private static final Function TRANSPOSE_CELL = - new Function, Cell>() { - @Override - public Cell apply(Cell cell) { - return immutableCell(cell.getColumnKey(), cell.getRowKey(), cell.getValue()); - } - }; - - @SuppressWarnings("unchecked") @Override Iterator> cellIterator() { - return Iterators.transform( - original.cellSet().iterator(), (Function, Cell>) TRANSPOSE_CELL); + return Iterators.transform(original.cellSet().iterator(), Tables::transposeCell); } - @SuppressWarnings("unchecked") @Override Spliterator> cellSpliterator() { - return CollectSpliterators.map( - original.cellSet().spliterator(), - (Function, Cell>) TRANSPOSE_CELL); + return CollectSpliterators.map(original.cellSet().spliterator(), Tables::transposeCell); } } + private static < + R extends @Nullable Object, C extends @Nullable Object, V extends @Nullable Object> + Cell transposeCell(Cell cell) { + return immutableCell(cell.getColumnKey(), cell.getRowKey(), cell.getValue()); + } + /** * Creates a table that uses the specified backing map and factory. It can generate a table based * on arbitrary {@link Map} classes. diff --git a/guava/src/com/google/common/collect/TopKSelector.java b/guava/src/com/google/common/collect/TopKSelector.java index 7fa214f3b578..89c5fc51f89d 100644 --- a/guava/src/com/google/common/collect/TopKSelector.java +++ b/guava/src/com/google/common/collect/TopKSelector.java @@ -119,6 +119,7 @@ public static > TopKSelector greatest(int k) */ @CheckForNull private T threshold; + @SuppressWarnings("unchecked") // TODO(cpovirk): Consider storing Object[] instead of T[]. private TopKSelector(Comparator comparator, int k) { this.comparator = checkNotNull(comparator, "comparator"); this.k = k; diff --git a/guava/src/com/google/common/collect/TreeBasedTable.java b/guava/src/com/google/common/collect/TreeBasedTable.java index 9ef210a54a62..751153b8a5eb 100644 --- a/guava/src/com/google/common/collect/TreeBasedTable.java +++ b/guava/src/com/google/common/collect/TreeBasedTable.java @@ -93,6 +93,7 @@ public TreeMap get() { * instead of {@code R extends Comparable}, and the same for {@code C}. That's * necessary to support classes defined without generics. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeBasedTable create() { return new TreeBasedTable<>(Ordering.natural(), Ordering.natural()); } diff --git a/guava/src/com/google/common/collect/TreeMultimap.java b/guava/src/com/google/common/collect/TreeMultimap.java index e449caa30014..8e2afe3594eb 100644 --- a/guava/src/com/google/common/collect/TreeMultimap.java +++ b/guava/src/com/google/common/collect/TreeMultimap.java @@ -81,6 +81,7 @@ public class TreeMultimap TreeMultimap create() { return new TreeMultimap<>(Ordering.natural(), Ordering.natural()); } @@ -103,6 +104,7 @@ public static TreeMultimap cr * * @param multimap the multimap whose contents are copied to this multimap */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeMultimap create( Multimap multimap) { return new TreeMultimap<>(Ordering.natural(), Ordering.natural(), multimap); diff --git a/guava/src/com/google/common/collect/TreeMultiset.java b/guava/src/com/google/common/collect/TreeMultiset.java index 8024f5ebbb64..acd7f8fb1baf 100644 --- a/guava/src/com/google/common/collect/TreeMultiset.java +++ b/guava/src/com/google/common/collect/TreeMultiset.java @@ -75,6 +75,7 @@ public final class TreeMultiset extends AbstractSort *

    The type specification is {@code }, instead of the more specific * {@code >}, to support classes defined without generics. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeMultiset create() { return new TreeMultiset(Ordering.natural()); } @@ -107,6 +108,7 @@ public static TreeMultiset create() { *

    The type specification is {@code }, instead of the more specific * {@code >}, to support classes defined without generics. */ + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static TreeMultiset create(Iterable elements) { TreeMultiset multiset = create(); Iterables.addAll(multiset, elements); diff --git a/guava/src/com/google/common/collect/TreeRangeMap.java b/guava/src/com/google/common/collect/TreeRangeMap.java index 747afb1842a1..6bdc8bb899d7 100644 --- a/guava/src/com/google/common/collect/TreeRangeMap.java +++ b/guava/src/com/google/common/collect/TreeRangeMap.java @@ -50,6 +50,7 @@ * @author Louis Wasserman * @since 14.0 */ +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 @GwtIncompatible // NavigableMap @ElementTypesAreNonnullByDefault public final class TreeRangeMap implements RangeMap { From 186f982cb2104de37ead32971ba717f9730157f5 Mon Sep 17 00:00:00 2001 From: Colin Decker Date: Thu, 22 Feb 2024 13:19:37 -0800 Subject: [PATCH 169/216] Remove the copy of `ToStringHelper`'s tests from `MoreObjectsTest`. RELNOTES=n/a PiperOrigin-RevId: 609476667 --- .../google/common/base/MoreObjectsTest.java | 412 +----------------- .../common/base/ToStringHelperTest.java | 21 +- .../google/common/base/MoreObjectsTest.java | 412 +----------------- .../common/base/ToStringHelperTest.java | 21 +- 4 files changed, 40 insertions(+), 826 deletions(-) diff --git a/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java b/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java index 4f9fa0655e2e..8c6d809d114d 100644 --- a/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java +++ b/android/guava-tests/test/com/google/common/base/MoreObjectsTest.java @@ -19,10 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; -import com.google.common.collect.ImmutableMap; import com.google.common.testing.NullPointerTester; -import java.util.Arrays; -import java.util.Map; import junit.framework.TestCase; /** Tests for {@link MoreObjects}. */ @@ -50,414 +47,7 @@ public void testFirstNonNull_throwsNullPointerException() { } } - public void testToStringHelperWithArrays() { - String[] strings = {"hello", "world"}; - int[] ints = {2, 42}; - Object[] objects = {"obj"}; - String[] arrayWithNull = {null}; - Object[] empty = {}; - String toTest = - MoreObjects.toStringHelper("TSH") - .add("strings", strings) - .add("ints", ints) - .add("objects", objects) - .add("arrayWithNull", arrayWithNull) - .add("empty", empty) - .toString(); - assertEquals( - "TSH{strings=[hello, world], ints=[2, 42], objects=[obj], arrayWithNull=[null], empty=[]}", - toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testConstructor_instance() { - String toTest = MoreObjects.toStringHelper(this).toString(); - assertEquals("MoreObjectsTest{}", toTest); - } - - public void testConstructorLenient_instance() { - String toTest = MoreObjects.toStringHelper(this).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testConstructor_innerClass() { - String toTest = MoreObjects.toStringHelper(new TestClass()).toString(); - assertEquals("TestClass{}", toTest); - } - - public void testConstructorLenient_innerClass() { - String toTest = MoreObjects.toStringHelper(new TestClass()).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testConstructor_anonymousClass() { - String toTest = MoreObjects.toStringHelper(new Object() {}).toString(); - assertEquals("{}", toTest); - } - - public void testConstructorLenient_anonymousClass() { - String toTest = MoreObjects.toStringHelper(new Object() {}).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testConstructor_classObject() { - String toTest = MoreObjects.toStringHelper(TestClass.class).toString(); - assertEquals("TestClass{}", toTest); - } - - public void testConstructorLenient_classObject() { - String toTest = MoreObjects.toStringHelper(TestClass.class).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - public void testConstructor_stringObject() { - String toTest = MoreObjects.toStringHelper("FooBar").toString(); - assertEquals("FooBar{}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringHelper_localInnerClass() { - // Local inner classes have names ending like "Outer.$1Inner" - class LocalInnerClass {} - String toTest = MoreObjects.toStringHelper(new LocalInnerClass()).toString(); - assertEquals("LocalInnerClass{}", toTest); - } - - public void testToStringHelperLenient_localInnerClass() { - class LocalInnerClass {} - String toTest = MoreObjects.toStringHelper(new LocalInnerClass()).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringHelper_localInnerNestedClass() { - class LocalInnerClass { - class LocalInnerNestedClass {} - } - String toTest = - MoreObjects.toStringHelper(new LocalInnerClass().new LocalInnerNestedClass()).toString(); - assertEquals("LocalInnerNestedClass{}", toTest); - } - - public void testToStringHelperLenient_localInnerNestedClass() { - class LocalInnerClass { - class LocalInnerNestedClass {} - } - String toTest = - MoreObjects.toStringHelper(new LocalInnerClass().new LocalInnerNestedClass()).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringHelper_moreThanNineAnonymousClasses() { - // The nth anonymous class has a name ending like "Outer.$n" - Object o1 = new Object() {}; - Object o2 = new Object() {}; - Object o3 = new Object() {}; - Object o4 = new Object() {}; - Object o5 = new Object() {}; - Object o6 = new Object() {}; - Object o7 = new Object() {}; - Object o8 = new Object() {}; - Object o9 = new Object() {}; - Object o10 = new Object() {}; - String toTest = MoreObjects.toStringHelper(o10).toString(); - assertEquals("{}", toTest); - } - - public void testToStringHelperLenient_moreThanNineAnonymousClasses() { - // The nth anonymous class has a name ending like "Outer.$n" - Object o1 = new Object() {}; - Object o2 = new Object() {}; - Object o3 = new Object() {}; - Object o4 = new Object() {}; - Object o5 = new Object() {}; - Object o6 = new Object() {}; - Object o7 = new Object() {}; - Object o8 = new Object() {}; - Object o9 = new Object() {}; - Object o10 = new Object() {}; - String toTest = MoreObjects.toStringHelper(o10).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - // all remaining test are on an inner class with various fields - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_oneField() { - String toTest = MoreObjects.toStringHelper(new TestClass()).add("field1", "Hello").toString(); - assertEquals("TestClass{field1=Hello}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_oneIntegerField() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); - assertEquals("TestClass{field1=42}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_nullInteger() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", (Integer) null).toString(); - assertEquals("TestClass{field1=null}", toTest); - } - - public void testToStringLenient_oneField() { - String toTest = MoreObjects.toStringHelper(new TestClass()).add("field1", "Hello").toString(); - assertTrue(toTest, toTest.matches(".*\\{field1\\=Hello\\}")); - } - - public void testToStringLenient_oneIntegerField() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); - assertTrue(toTest, toTest.matches(".*\\{field1\\=42\\}")); - } - - public void testToStringLenient_nullInteger() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", (Integer) null).toString(); - assertTrue(toTest, toTest.matches(".*\\{field1\\=null\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_complexFields() { - Map map = - ImmutableMap.builder().put("abc", 1).put("def", 2).put("ghi", 3).build(); - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", "This is string.") - .add("field2", Arrays.asList("abc", "def", "ghi")) - .add("field3", map) - .toString(); - final String expected = - "TestClass{" - + "field1=This is string., field2=[abc, def, ghi], field3={abc=1, def=2, ghi=3}}"; - - assertEquals(expected, toTest); - } - - public void testToStringLenient_complexFields() { - Map map = - ImmutableMap.builder().put("abc", 1).put("def", 2).put("ghi", 3).build(); - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", "This is string.") - .add("field2", Arrays.asList("abc", "def", "ghi")) - .add("field3", map) - .toString(); - final String expectedRegex = - ".*\\{" - + "field1\\=This is string\\., " - + "field2\\=\\[abc, def, ghi\\], " - + "field3=\\{abc\\=1, def\\=2, ghi\\=3\\}\\}"; - - assertTrue(toTest, toTest.matches(expectedRegex)); - } - - public void testToString_addWithNullName() { - MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(new TestClass()); - try { - helper.add(null, "Hello"); - fail("No exception was thrown."); - } catch (NullPointerException expected) { - } - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_addWithNullValue() { - final String result = MoreObjects.toStringHelper(new TestClass()).add("Hello", null).toString(); - - assertEquals("TestClass{Hello=null}", result); - } - - public void testToStringLenient_addWithNullValue() { - final String result = MoreObjects.toStringHelper(new TestClass()).add("Hello", null).toString(); - assertTrue(result, result.matches(".*\\{Hello\\=null\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_ToStringTwice() { - MoreObjects.ToStringHelper helper = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", 1) - .addValue("value1") - .add("field2", "value2"); - final String expected = "TestClass{field1=1, value1, field2=value2}"; - - assertEquals(expected, helper.toString()); - // Call toString again - assertEquals(expected, helper.toString()); - - // Make sure the cached value is reset when we modify the helper at all - final String expected2 = "TestClass{field1=1, value1, field2=value2, 2}"; - helper.addValue(2); - assertEquals(expected2, helper.toString()); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_addValue() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", 1) - .addValue("value1") - .add("field2", "value2") - .addValue(2) - .toString(); - final String expected = "TestClass{field1=1, value1, field2=value2, 2}"; - - assertEquals(expected, toTest); - } - - public void testToStringLenient_addValue() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", 1) - .addValue("value1") - .add("field2", "value2") - .addValue(2) - .toString(); - final String expected = ".*\\{field1\\=1, value1, field2\\=value2, 2\\}"; - - assertTrue(toTest, toTest.matches(expected)); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_addValueWithNullValue() { - final String result = - MoreObjects.toStringHelper(new TestClass()) - .addValue(null) - .addValue("Hello") - .addValue(null) - .toString(); - final String expected = "TestClass{null, Hello, null}"; - - assertEquals(expected, result); - } - - public void testToStringLenient_addValueWithNullValue() { - final String result = - MoreObjects.toStringHelper(new TestClass()) - .addValue(null) - .addValue("Hello") - .addValue(null) - .toString(); - final String expected = ".*\\{null, Hello, null\\}"; - - assertTrue(result, result.matches(expected)); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_oneField() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).omitNullValues().add("field1", null).toString(); - assertEquals("TestClass{}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_manyFieldsFirstNull() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .add("field1", null) - .add("field2", "Googley") - .add("field3", "World") - .toString(); - assertEquals("TestClass{field2=Googley, field3=World}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_manyFieldsOmitAfterNull() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", null) - .add("field2", "Googley") - .add("field3", "World") - .omitNullValues() - .toString(); - assertEquals("TestClass{field2=Googley, field3=World}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_manyFieldsLastNull() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .add("field1", "Hello") - .add("field2", "Googley") - .add("field3", null) - .toString(); - assertEquals("TestClass{field1=Hello, field2=Googley}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_oneValue() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).omitNullValues().addValue(null).toString(); - assertEquals("TestClass{}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_manyValuesFirstNull() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .addValue(null) - .addValue("Googley") - .addValue("World") - .toString(); - assertEquals("TestClass{Googley, World}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_manyValuesLastNull() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .addValue("Hello") - .addValue("Googley") - .addValue(null) - .toString(); - assertEquals("TestClass{Hello, Googley}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_differentOrder() { - String expected = "TestClass{field1=Hello, field2=Googley, field3=World}"; - String toTest1 = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .add("field1", "Hello") - .add("field2", "Googley") - .add("field3", "World") - .toString(); - String toTest2 = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", "Hello") - .add("field2", "Googley") - .omitNullValues() - .add("field3", "World") - .toString(); - assertEquals(expected, toTest1); - assertEquals(expected, toTest2); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_canBeCalledManyTimes() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .omitNullValues() - .add("field1", "Hello") - .omitNullValues() - .add("field2", "Googley") - .omitNullValues() - .add("field3", "World") - .toString(); - assertEquals("TestClass{field1=Hello, field2=Googley, field3=World}", toTest); - } + // ToStringHelper's tests are in ToStringHelperTest @J2ktIncompatible @GwtIncompatible("NullPointerTester") diff --git a/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java b/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java index 9e95eb7147cc..46b751a453b9 100644 --- a/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java +++ b/android/guava-tests/test/com/google/common/base/ToStringHelperTest.java @@ -186,7 +186,6 @@ public void testToStringLenient_nullInteger() { @GwtIncompatible // Class names are obfuscated in GWT public void testToString_complexFields() { - Map map = ImmutableMap.builder().put("abc", 1).put("def", 2).put("ghi", 3).build(); String toTest = @@ -203,7 +202,6 @@ public void testToString_complexFields() { } public void testToStringLenient_complexFields() { - Map map = ImmutableMap.builder().put("abc", 1).put("def", 2).put("ghi", 3).build(); String toTest = @@ -423,6 +421,25 @@ public void testToStringOmitNullValues_canBeCalledManyTimes() { assertEquals("TestClass{field1=Hello, field2=Googley, field3=World}", toTest); } + public void testToStringHelperWithArrays() { + String[] strings = {"hello", "world"}; + int[] ints = {2, 42}; + Object[] objects = {"obj"}; + String[] arrayWithNull = {null}; + Object[] empty = {}; + String toTest = + MoreObjects.toStringHelper("TSH") + .add("strings", strings) + .add("ints", ints) + .add("objects", objects) + .add("arrayWithNull", arrayWithNull) + .add("empty", empty) + .toString(); + assertEquals( + "TSH{strings=[hello, world], ints=[2, 42], objects=[obj], arrayWithNull=[null], empty=[]}", + toTest); + } + /** Test class for testing formatting of inner classes. */ private static class TestClass {} } diff --git a/guava-tests/test/com/google/common/base/MoreObjectsTest.java b/guava-tests/test/com/google/common/base/MoreObjectsTest.java index 4f9fa0655e2e..8c6d809d114d 100644 --- a/guava-tests/test/com/google/common/base/MoreObjectsTest.java +++ b/guava-tests/test/com/google/common/base/MoreObjectsTest.java @@ -19,10 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; -import com.google.common.collect.ImmutableMap; import com.google.common.testing.NullPointerTester; -import java.util.Arrays; -import java.util.Map; import junit.framework.TestCase; /** Tests for {@link MoreObjects}. */ @@ -50,414 +47,7 @@ public void testFirstNonNull_throwsNullPointerException() { } } - public void testToStringHelperWithArrays() { - String[] strings = {"hello", "world"}; - int[] ints = {2, 42}; - Object[] objects = {"obj"}; - String[] arrayWithNull = {null}; - Object[] empty = {}; - String toTest = - MoreObjects.toStringHelper("TSH") - .add("strings", strings) - .add("ints", ints) - .add("objects", objects) - .add("arrayWithNull", arrayWithNull) - .add("empty", empty) - .toString(); - assertEquals( - "TSH{strings=[hello, world], ints=[2, 42], objects=[obj], arrayWithNull=[null], empty=[]}", - toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testConstructor_instance() { - String toTest = MoreObjects.toStringHelper(this).toString(); - assertEquals("MoreObjectsTest{}", toTest); - } - - public void testConstructorLenient_instance() { - String toTest = MoreObjects.toStringHelper(this).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testConstructor_innerClass() { - String toTest = MoreObjects.toStringHelper(new TestClass()).toString(); - assertEquals("TestClass{}", toTest); - } - - public void testConstructorLenient_innerClass() { - String toTest = MoreObjects.toStringHelper(new TestClass()).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testConstructor_anonymousClass() { - String toTest = MoreObjects.toStringHelper(new Object() {}).toString(); - assertEquals("{}", toTest); - } - - public void testConstructorLenient_anonymousClass() { - String toTest = MoreObjects.toStringHelper(new Object() {}).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testConstructor_classObject() { - String toTest = MoreObjects.toStringHelper(TestClass.class).toString(); - assertEquals("TestClass{}", toTest); - } - - public void testConstructorLenient_classObject() { - String toTest = MoreObjects.toStringHelper(TestClass.class).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - public void testConstructor_stringObject() { - String toTest = MoreObjects.toStringHelper("FooBar").toString(); - assertEquals("FooBar{}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringHelper_localInnerClass() { - // Local inner classes have names ending like "Outer.$1Inner" - class LocalInnerClass {} - String toTest = MoreObjects.toStringHelper(new LocalInnerClass()).toString(); - assertEquals("LocalInnerClass{}", toTest); - } - - public void testToStringHelperLenient_localInnerClass() { - class LocalInnerClass {} - String toTest = MoreObjects.toStringHelper(new LocalInnerClass()).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringHelper_localInnerNestedClass() { - class LocalInnerClass { - class LocalInnerNestedClass {} - } - String toTest = - MoreObjects.toStringHelper(new LocalInnerClass().new LocalInnerNestedClass()).toString(); - assertEquals("LocalInnerNestedClass{}", toTest); - } - - public void testToStringHelperLenient_localInnerNestedClass() { - class LocalInnerClass { - class LocalInnerNestedClass {} - } - String toTest = - MoreObjects.toStringHelper(new LocalInnerClass().new LocalInnerNestedClass()).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringHelper_moreThanNineAnonymousClasses() { - // The nth anonymous class has a name ending like "Outer.$n" - Object o1 = new Object() {}; - Object o2 = new Object() {}; - Object o3 = new Object() {}; - Object o4 = new Object() {}; - Object o5 = new Object() {}; - Object o6 = new Object() {}; - Object o7 = new Object() {}; - Object o8 = new Object() {}; - Object o9 = new Object() {}; - Object o10 = new Object() {}; - String toTest = MoreObjects.toStringHelper(o10).toString(); - assertEquals("{}", toTest); - } - - public void testToStringHelperLenient_moreThanNineAnonymousClasses() { - // The nth anonymous class has a name ending like "Outer.$n" - Object o1 = new Object() {}; - Object o2 = new Object() {}; - Object o3 = new Object() {}; - Object o4 = new Object() {}; - Object o5 = new Object() {}; - Object o6 = new Object() {}; - Object o7 = new Object() {}; - Object o8 = new Object() {}; - Object o9 = new Object() {}; - Object o10 = new Object() {}; - String toTest = MoreObjects.toStringHelper(o10).toString(); - assertTrue(toTest, toTest.matches(".*\\{\\}")); - } - - // all remaining test are on an inner class with various fields - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_oneField() { - String toTest = MoreObjects.toStringHelper(new TestClass()).add("field1", "Hello").toString(); - assertEquals("TestClass{field1=Hello}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_oneIntegerField() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); - assertEquals("TestClass{field1=42}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_nullInteger() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", (Integer) null).toString(); - assertEquals("TestClass{field1=null}", toTest); - } - - public void testToStringLenient_oneField() { - String toTest = MoreObjects.toStringHelper(new TestClass()).add("field1", "Hello").toString(); - assertTrue(toTest, toTest.matches(".*\\{field1\\=Hello\\}")); - } - - public void testToStringLenient_oneIntegerField() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", Integer.valueOf(42)).toString(); - assertTrue(toTest, toTest.matches(".*\\{field1\\=42\\}")); - } - - public void testToStringLenient_nullInteger() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).add("field1", (Integer) null).toString(); - assertTrue(toTest, toTest.matches(".*\\{field1\\=null\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_complexFields() { - Map map = - ImmutableMap.builder().put("abc", 1).put("def", 2).put("ghi", 3).build(); - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", "This is string.") - .add("field2", Arrays.asList("abc", "def", "ghi")) - .add("field3", map) - .toString(); - final String expected = - "TestClass{" - + "field1=This is string., field2=[abc, def, ghi], field3={abc=1, def=2, ghi=3}}"; - - assertEquals(expected, toTest); - } - - public void testToStringLenient_complexFields() { - Map map = - ImmutableMap.builder().put("abc", 1).put("def", 2).put("ghi", 3).build(); - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", "This is string.") - .add("field2", Arrays.asList("abc", "def", "ghi")) - .add("field3", map) - .toString(); - final String expectedRegex = - ".*\\{" - + "field1\\=This is string\\., " - + "field2\\=\\[abc, def, ghi\\], " - + "field3=\\{abc\\=1, def\\=2, ghi\\=3\\}\\}"; - - assertTrue(toTest, toTest.matches(expectedRegex)); - } - - public void testToString_addWithNullName() { - MoreObjects.ToStringHelper helper = MoreObjects.toStringHelper(new TestClass()); - try { - helper.add(null, "Hello"); - fail("No exception was thrown."); - } catch (NullPointerException expected) { - } - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_addWithNullValue() { - final String result = MoreObjects.toStringHelper(new TestClass()).add("Hello", null).toString(); - - assertEquals("TestClass{Hello=null}", result); - } - - public void testToStringLenient_addWithNullValue() { - final String result = MoreObjects.toStringHelper(new TestClass()).add("Hello", null).toString(); - assertTrue(result, result.matches(".*\\{Hello\\=null\\}")); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_ToStringTwice() { - MoreObjects.ToStringHelper helper = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", 1) - .addValue("value1") - .add("field2", "value2"); - final String expected = "TestClass{field1=1, value1, field2=value2}"; - - assertEquals(expected, helper.toString()); - // Call toString again - assertEquals(expected, helper.toString()); - - // Make sure the cached value is reset when we modify the helper at all - final String expected2 = "TestClass{field1=1, value1, field2=value2, 2}"; - helper.addValue(2); - assertEquals(expected2, helper.toString()); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_addValue() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", 1) - .addValue("value1") - .add("field2", "value2") - .addValue(2) - .toString(); - final String expected = "TestClass{field1=1, value1, field2=value2, 2}"; - - assertEquals(expected, toTest); - } - - public void testToStringLenient_addValue() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", 1) - .addValue("value1") - .add("field2", "value2") - .addValue(2) - .toString(); - final String expected = ".*\\{field1\\=1, value1, field2\\=value2, 2\\}"; - - assertTrue(toTest, toTest.matches(expected)); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToString_addValueWithNullValue() { - final String result = - MoreObjects.toStringHelper(new TestClass()) - .addValue(null) - .addValue("Hello") - .addValue(null) - .toString(); - final String expected = "TestClass{null, Hello, null}"; - - assertEquals(expected, result); - } - - public void testToStringLenient_addValueWithNullValue() { - final String result = - MoreObjects.toStringHelper(new TestClass()) - .addValue(null) - .addValue("Hello") - .addValue(null) - .toString(); - final String expected = ".*\\{null, Hello, null\\}"; - - assertTrue(result, result.matches(expected)); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_oneField() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).omitNullValues().add("field1", null).toString(); - assertEquals("TestClass{}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_manyFieldsFirstNull() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .add("field1", null) - .add("field2", "Googley") - .add("field3", "World") - .toString(); - assertEquals("TestClass{field2=Googley, field3=World}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_manyFieldsOmitAfterNull() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", null) - .add("field2", "Googley") - .add("field3", "World") - .omitNullValues() - .toString(); - assertEquals("TestClass{field2=Googley, field3=World}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_manyFieldsLastNull() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .add("field1", "Hello") - .add("field2", "Googley") - .add("field3", null) - .toString(); - assertEquals("TestClass{field1=Hello, field2=Googley}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_oneValue() { - String toTest = - MoreObjects.toStringHelper(new TestClass()).omitNullValues().addValue(null).toString(); - assertEquals("TestClass{}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_manyValuesFirstNull() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .addValue(null) - .addValue("Googley") - .addValue("World") - .toString(); - assertEquals("TestClass{Googley, World}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_manyValuesLastNull() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .addValue("Hello") - .addValue("Googley") - .addValue(null) - .toString(); - assertEquals("TestClass{Hello, Googley}", toTest); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_differentOrder() { - String expected = "TestClass{field1=Hello, field2=Googley, field3=World}"; - String toTest1 = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .add("field1", "Hello") - .add("field2", "Googley") - .add("field3", "World") - .toString(); - String toTest2 = - MoreObjects.toStringHelper(new TestClass()) - .add("field1", "Hello") - .add("field2", "Googley") - .omitNullValues() - .add("field3", "World") - .toString(); - assertEquals(expected, toTest1); - assertEquals(expected, toTest2); - } - - @GwtIncompatible // Class names are obfuscated in GWT - public void testToStringOmitNullValues_canBeCalledManyTimes() { - String toTest = - MoreObjects.toStringHelper(new TestClass()) - .omitNullValues() - .omitNullValues() - .add("field1", "Hello") - .omitNullValues() - .add("field2", "Googley") - .omitNullValues() - .add("field3", "World") - .toString(); - assertEquals("TestClass{field1=Hello, field2=Googley, field3=World}", toTest); - } + // ToStringHelper's tests are in ToStringHelperTest @J2ktIncompatible @GwtIncompatible("NullPointerTester") diff --git a/guava-tests/test/com/google/common/base/ToStringHelperTest.java b/guava-tests/test/com/google/common/base/ToStringHelperTest.java index 9e95eb7147cc..46b751a453b9 100644 --- a/guava-tests/test/com/google/common/base/ToStringHelperTest.java +++ b/guava-tests/test/com/google/common/base/ToStringHelperTest.java @@ -186,7 +186,6 @@ public void testToStringLenient_nullInteger() { @GwtIncompatible // Class names are obfuscated in GWT public void testToString_complexFields() { - Map map = ImmutableMap.builder().put("abc", 1).put("def", 2).put("ghi", 3).build(); String toTest = @@ -203,7 +202,6 @@ public void testToString_complexFields() { } public void testToStringLenient_complexFields() { - Map map = ImmutableMap.builder().put("abc", 1).put("def", 2).put("ghi", 3).build(); String toTest = @@ -423,6 +421,25 @@ public void testToStringOmitNullValues_canBeCalledManyTimes() { assertEquals("TestClass{field1=Hello, field2=Googley, field3=World}", toTest); } + public void testToStringHelperWithArrays() { + String[] strings = {"hello", "world"}; + int[] ints = {2, 42}; + Object[] objects = {"obj"}; + String[] arrayWithNull = {null}; + Object[] empty = {}; + String toTest = + MoreObjects.toStringHelper("TSH") + .add("strings", strings) + .add("ints", ints) + .add("objects", objects) + .add("arrayWithNull", arrayWithNull) + .add("empty", empty) + .toString(); + assertEquals( + "TSH{strings=[hello, world], ints=[2, 42], objects=[obj], arrayWithNull=[null], empty=[]}", + toTest); + } + /** Test class for testing formatting of inner classes. */ private static class TestClass {} } From 37ce42927192b4fbd7b1d0cf946485f88fa25130 Mon Sep 17 00:00:00 2001 From: lowasser Date: Thu, 22 Feb 2024 13:59:16 -0800 Subject: [PATCH 170/216] Roll forward ChecksumHashFunction optimization. PiperOrigin-RevId: 609489612 --- .../common/hash/ChecksumHashFunction.java | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/guava/src/com/google/common/hash/ChecksumHashFunction.java b/guava/src/com/google/common/hash/ChecksumHashFunction.java index 159adbb8194b..454f3098e3ee 100644 --- a/guava/src/com/google/common/hash/ChecksumHashFunction.java +++ b/guava/src/com/google/common/hash/ChecksumHashFunction.java @@ -18,8 +18,14 @@ import static com.google.common.base.Preconditions.checkNotNull; import com.google.errorprone.annotations.Immutable; +import com.google.j2objc.annotations.J2ObjCIncompatible; import java.io.Serializable; +import java.lang.invoke.MethodHandle; +import java.lang.invoke.MethodHandles; +import java.lang.invoke.MethodType; +import java.nio.ByteBuffer; import java.util.zip.Checksum; +import org.checkerframework.checker.nullness.qual.Nullable; /** * {@link HashFunction} adapter for {@link Checksum} instances. @@ -74,6 +80,14 @@ protected void update(byte[] bytes, int off, int len) { checksum.update(bytes, off, len); } + @Override + @J2ObjCIncompatible + protected void update(ByteBuffer b) { + if (!ChecksumMethodHandles.updateByteBuffer(checksum, b)) { + super.update(b); + } + } + @Override public HashCode hash() { long value = checksum.getValue(); @@ -90,5 +104,47 @@ public HashCode hash() { } } + @J2ObjCIncompatible + @SuppressWarnings("unused") + private static final class ChecksumMethodHandles { + private static final @Nullable MethodHandle UPDATE_BB = updateByteBuffer(); + + @IgnoreJRERequirement // https://github.com/mojohaus/animal-sniffer/issues/67 + static boolean updateByteBuffer(Checksum cs, ByteBuffer bb) { + if (UPDATE_BB != null) { + try { + UPDATE_BB.invokeExact(cs, bb); + } catch (Error t) { + throw t; + } catch (Throwable t) { + throw new AssertionError(t); + } + return true; + } else { + return false; + } + } + + private static @Nullable MethodHandle updateByteBuffer() { + try { + Class clazz = Class.forName("java.util.zip.Checksum"); + return MethodHandles.lookup() + .findVirtual(clazz, "update", MethodType.methodType(void.class, ByteBuffer.class)); + } catch (ClassNotFoundException e) { + throw new AssertionError(e); + } catch (IllegalAccessException e) { + // That API is public. + throw newLinkageError(e); + } catch (NoSuchMethodException e) { + // Only introduced in Java 9. + return null; + } + } + + private static LinkageError newLinkageError(Throwable cause) { + return new LinkageError(cause.toString(), cause); + } + } + private static final long serialVersionUID = 0L; } From b4cc971bc8832382ba8accb911c7e57abb021fc7 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 26 Feb 2024 08:25:58 -0800 Subject: [PATCH 171/216] Add `@J2ktIncompatible` to collection tests of `@J2ktIncompatible` features RELNOTES=n/a PiperOrigin-RevId: 610415558 --- .../test/com/google/common/collect/EnumBiMapTest.java | 2 ++ .../com/google/common/collect/EnumHashBiMapTest.java | 1 + .../com/google/common/collect/EnumMultisetTest.java | 1 + .../test/com/google/common/collect/ListsImplTest.java | 3 +++ .../test/com/google/common/collect/ListsTest.java | 2 ++ .../test/com/google/common/collect/MapMakerTest.java | 6 +++++- .../test/com/google/common/collect/MapsTest.java | 3 +++ .../test/com/google/common/collect/OrderingTest.java | 3 +++ .../test/com/google/common/collect/SetsTest.java | 10 ++++++++++ .../test/com/google/common/collect/EnumBiMapTest.java | 2 ++ .../com/google/common/collect/EnumHashBiMapTest.java | 1 + .../com/google/common/collect/EnumMultisetTest.java | 1 + .../test/com/google/common/collect/ListsImplTest.java | 3 +++ .../test/com/google/common/collect/ListsTest.java | 2 ++ .../test/com/google/common/collect/MapMakerTest.java | 6 +++++- .../test/com/google/common/collect/MapsTest.java | 3 +++ .../test/com/google/common/collect/OrderingTest.java | 3 +++ .../test/com/google/common/collect/SetsTest.java | 10 ++++++++++ 18 files changed, 60 insertions(+), 2 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java b/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java index 96a34763bcc3..93c45a340b73 100644 --- a/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/EnumBiMapTest.java @@ -48,6 +48,7 @@ * @author Mike Bostock * @author Jared Levy */ +@J2ktIncompatible // EnumBimap @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public class EnumBiMapTest extends TestCase { @@ -290,6 +291,7 @@ public void testEntrySet() { assertEquals(3, uniqueEntries.size()); } + @J2ktIncompatible @GwtIncompatible // serialization public void testSerializable() { SerializableTester.reserializeAndAssert( diff --git a/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java b/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java index b1f7d8627c12..02ae0b616284 100644 --- a/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java @@ -41,6 +41,7 @@ * * @author Mike Bostock */ +@J2ktIncompatible // EnumHashBiMap @GwtCompatible(emulated = true) public class EnumHashBiMapTest extends TestCase { private enum Currency { diff --git a/android/guava-tests/test/com/google/common/collect/EnumMultisetTest.java b/android/guava-tests/test/com/google/common/collect/EnumMultisetTest.java index d446a9849a95..f40547793be8 100644 --- a/android/guava-tests/test/com/google/common/collect/EnumMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/EnumMultisetTest.java @@ -43,6 +43,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@J2ktIncompatible // EnumMultiset public class EnumMultisetTest extends TestCase { @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/ListsImplTest.java b/android/guava-tests/test/com/google/common/collect/ListsImplTest.java index 4e2788b3f4cc..012aa6ab7c94 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsImplTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsImplTest.java @@ -104,12 +104,14 @@ private ListExample getExample() { return example == null ? new ImmutableListExample("test") : example; } + @J2ktIncompatible @GwtIncompatible // not used under GWT, and super.getName() is not available under J2CL @Override public String getName() { return example == null ? super.getName() : buildTestName(); } + @J2ktIncompatible @GwtIncompatible // not used under GWT, and super.getName() is not available under J2CL private String buildTestName() { return super.getName() + ":" + example.getName(); @@ -294,6 +296,7 @@ public List createList(Class listType, Collection content } } + @J2ktIncompatible @GwtIncompatible // CopyOnWriteArrayList private static final class CopyOnWriteListExample extends ListExample { diff --git a/android/guava-tests/test/com/google/common/collect/ListsTest.java b/android/guava-tests/test/com/google/common/collect/ListsTest.java index 0007f41ceb76..23a4be37581d 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsTest.java @@ -396,12 +396,14 @@ public void testNewLinkedListFromIterable() { assertEquals(SOME_COLLECTION, list); } + @J2ktIncompatible @GwtIncompatible // CopyOnWriteArrayList public void testNewCOWALEmpty() { CopyOnWriteArrayList list = Lists.newCopyOnWriteArrayList(); assertEquals(Collections.emptyList(), list); } + @J2ktIncompatible @GwtIncompatible // CopyOnWriteArrayList public void testNewCOWALFromIterable() { CopyOnWriteArrayList list = Lists.newCopyOnWriteArrayList(SOME_ITERABLE); diff --git a/android/guava-tests/test/com/google/common/collect/MapMakerTest.java b/android/guava-tests/test/com/google/common/collect/MapMakerTest.java index 5e93001c7dae..563c9802f8aa 100644 --- a/android/guava-tests/test/com/google/common/collect/MapMakerTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapMakerTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.testing.NullPointerTester; import java.util.Map; @@ -27,8 +28,11 @@ import java.util.concurrent.CountDownLatch; import junit.framework.TestCase; -/** @author Charles Fry */ +/** + * @author Charles Fry + */ @GwtCompatible(emulated = true) +@J2ktIncompatible // MapMaker public class MapMakerTest extends TestCase { @GwtIncompatible // NullPointerTester public void testNullParameters() throws Exception { diff --git a/android/guava-tests/test/com/google/common/collect/MapsTest.java b/android/guava-tests/test/com/google/common/collect/MapsTest.java index 506939340670..e910f1d3500d 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsTest.java @@ -1038,6 +1038,7 @@ public void testUniqueIndexNullKey() { } } + @J2ktIncompatible @GwtIncompatible // Maps.fromProperties @SuppressWarnings("deprecation") // StringBufferInputStream public void testFromProperties() throws IOException { @@ -1087,6 +1088,7 @@ public void testFromProperties() throws IOException { assertNotSame(System.getProperty("java.version"), result.get("java.version")); } + @J2ktIncompatible @GwtIncompatible // Maps.fromProperties @SuppressWarnings("serial") // never serialized public void testFromPropertiesNullKey() { @@ -1107,6 +1109,7 @@ public Enumeration propertyNames() { } } + @J2ktIncompatible @GwtIncompatible // Maps.fromProperties @SuppressWarnings("serial") // never serialized public void testFromPropertiesNonStringKeys() { diff --git a/android/guava-tests/test/com/google/common/collect/OrderingTest.java b/android/guava-tests/test/com/google/common/collect/OrderingTest.java index 33a4ea3b3be9..97e9cf7dea83 100644 --- a/android/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/android/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -218,6 +218,7 @@ public void testExplicit_withDuplicates() { // A more limited test than the one that follows, but this one uses the // actual public API. + @J2ktIncompatible // Ordering.arbitrary public void testArbitrary_withoutCollisions() { List list = Lists.newArrayList(); for (int i = 0; i < 50; i++) { @@ -234,6 +235,7 @@ public void testArbitrary_withoutCollisions() { assertEquals("Ordering.arbitrary()", arbitrary.toString()); } + @J2ktIncompatible // ArbitraryOrdering public void testArbitrary_withCollisions() { List list = Lists.newArrayList(); for (int i = 0; i < 50; i++) { @@ -887,6 +889,7 @@ public void testCombinationsExhaustively_startingFromFromComparator() { testExhaustively(Ordering.from(String.CASE_INSENSITIVE_ORDER), "A", "b", "C", "d"); } + @J2ktIncompatible // Ordering.arbitrary @GwtIncompatible // too slow public void testCombinationsExhaustively_startingFromArbitrary() { Ordering arbitrary = Ordering.arbitrary(); diff --git a/android/guava-tests/test/com/google/common/collect/SetsTest.java b/android/guava-tests/test/com/google/common/collect/SetsTest.java index 61f7ec62da62..f6af682cdfda 100644 --- a/android/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/android/guava-tests/test/com/google/common/collect/SetsTest.java @@ -574,18 +574,21 @@ public void testNewIdentityHashSet() { assertEquals(2, set.size()); } + @J2ktIncompatible @GwtIncompatible // CopyOnWriteArraySet public void testNewCOWASEmpty() { CopyOnWriteArraySet set = Sets.newCopyOnWriteArraySet(); verifySetContents(set, EMPTY_COLLECTION); } + @J2ktIncompatible @GwtIncompatible // CopyOnWriteArraySet public void testNewCOWASFromIterable() { CopyOnWriteArraySet set = Sets.newCopyOnWriteArraySet(SOME_ITERABLE); verifySetContents(set, SOME_COLLECTION); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfEnumSet() { Set units = EnumSet.of(SomeEnum.B, SomeEnum.D); @@ -593,6 +596,7 @@ public void testComplementOfEnumSet() { verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfEnumSetWithType() { Set units = EnumSet.of(SomeEnum.B, SomeEnum.D); @@ -600,6 +604,7 @@ public void testComplementOfEnumSetWithType() { verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfRegularSet() { Set units = Sets.newHashSet(SomeEnum.B, SomeEnum.D); @@ -607,6 +612,7 @@ public void testComplementOfRegularSet() { verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfRegularSetWithType() { Set units = Sets.newHashSet(SomeEnum.B, SomeEnum.D); @@ -614,6 +620,7 @@ public void testComplementOfRegularSetWithType() { verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfEmptySet() { Set noUnits = Collections.emptySet(); @@ -621,6 +628,7 @@ public void testComplementOfEmptySet() { verifySetContents(EnumSet.allOf(SomeEnum.class), allUnits); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfFullSet() { Set allUnits = Sets.newHashSet(SomeEnum.values()); @@ -628,6 +636,7 @@ public void testComplementOfFullSet() { verifySetContents(noUnits, EnumSet.noneOf(SomeEnum.class)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfEmptyEnumSetWithoutType() { Set noUnits = EnumSet.noneOf(SomeEnum.class); @@ -635,6 +644,7 @@ public void testComplementOfEmptyEnumSetWithoutType() { verifySetContents(allUnits, EnumSet.allOf(SomeEnum.class)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfEmptySetWithoutTypeDoesntWork() { Set set = Collections.emptySet(); diff --git a/guava-tests/test/com/google/common/collect/EnumBiMapTest.java b/guava-tests/test/com/google/common/collect/EnumBiMapTest.java index 96a34763bcc3..93c45a340b73 100644 --- a/guava-tests/test/com/google/common/collect/EnumBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/EnumBiMapTest.java @@ -48,6 +48,7 @@ * @author Mike Bostock * @author Jared Levy */ +@J2ktIncompatible // EnumBimap @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public class EnumBiMapTest extends TestCase { @@ -290,6 +291,7 @@ public void testEntrySet() { assertEquals(3, uniqueEntries.size()); } + @J2ktIncompatible @GwtIncompatible // serialization public void testSerializable() { SerializableTester.reserializeAndAssert( diff --git a/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java b/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java index b1f7d8627c12..02ae0b616284 100644 --- a/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java +++ b/guava-tests/test/com/google/common/collect/EnumHashBiMapTest.java @@ -41,6 +41,7 @@ * * @author Mike Bostock */ +@J2ktIncompatible // EnumHashBiMap @GwtCompatible(emulated = true) public class EnumHashBiMapTest extends TestCase { private enum Currency { diff --git a/guava-tests/test/com/google/common/collect/EnumMultisetTest.java b/guava-tests/test/com/google/common/collect/EnumMultisetTest.java index d446a9849a95..f40547793be8 100644 --- a/guava-tests/test/com/google/common/collect/EnumMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/EnumMultisetTest.java @@ -43,6 +43,7 @@ * @author Jared Levy */ @GwtCompatible(emulated = true) +@J2ktIncompatible // EnumMultiset public class EnumMultisetTest extends TestCase { @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/ListsImplTest.java b/guava-tests/test/com/google/common/collect/ListsImplTest.java index 5780fe1f2218..644798ca8944 100644 --- a/guava-tests/test/com/google/common/collect/ListsImplTest.java +++ b/guava-tests/test/com/google/common/collect/ListsImplTest.java @@ -104,12 +104,14 @@ private ListExample getExample() { return example == null ? new ImmutableListExample("test") : example; } + @J2ktIncompatible @GwtIncompatible // not used under GWT, and super.getName() is not available under J2CL @Override public String getName() { return example == null ? super.getName() : buildTestName(); } + @J2ktIncompatible @GwtIncompatible // not used under GWT, and super.getName() is not available under J2CL private String buildTestName() { return super.getName() + ":" + example.getName(); @@ -294,6 +296,7 @@ public List createList(Class listType, Collection content } } + @J2ktIncompatible @GwtIncompatible // CopyOnWriteArrayList private static final class CopyOnWriteListExample extends ListExample { diff --git a/guava-tests/test/com/google/common/collect/ListsTest.java b/guava-tests/test/com/google/common/collect/ListsTest.java index 0007f41ceb76..23a4be37581d 100644 --- a/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/guava-tests/test/com/google/common/collect/ListsTest.java @@ -396,12 +396,14 @@ public void testNewLinkedListFromIterable() { assertEquals(SOME_COLLECTION, list); } + @J2ktIncompatible @GwtIncompatible // CopyOnWriteArrayList public void testNewCOWALEmpty() { CopyOnWriteArrayList list = Lists.newCopyOnWriteArrayList(); assertEquals(Collections.emptyList(), list); } + @J2ktIncompatible @GwtIncompatible // CopyOnWriteArrayList public void testNewCOWALFromIterable() { CopyOnWriteArrayList list = Lists.newCopyOnWriteArrayList(SOME_ITERABLE); diff --git a/guava-tests/test/com/google/common/collect/MapMakerTest.java b/guava-tests/test/com/google/common/collect/MapMakerTest.java index 5e93001c7dae..563c9802f8aa 100644 --- a/guava-tests/test/com/google/common/collect/MapMakerTest.java +++ b/guava-tests/test/com/google/common/collect/MapMakerTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.testing.NullPointerTester; import java.util.Map; @@ -27,8 +28,11 @@ import java.util.concurrent.CountDownLatch; import junit.framework.TestCase; -/** @author Charles Fry */ +/** + * @author Charles Fry + */ @GwtCompatible(emulated = true) +@J2ktIncompatible // MapMaker public class MapMakerTest extends TestCase { @GwtIncompatible // NullPointerTester public void testNullParameters() throws Exception { diff --git a/guava-tests/test/com/google/common/collect/MapsTest.java b/guava-tests/test/com/google/common/collect/MapsTest.java index 54d8d2cc3585..18a0e7d40f23 100644 --- a/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/guava-tests/test/com/google/common/collect/MapsTest.java @@ -1038,6 +1038,7 @@ public void testUniqueIndexNullKey() { } } + @J2ktIncompatible @GwtIncompatible // Maps.fromProperties @SuppressWarnings("deprecation") // StringBufferInputStream public void testFromProperties() throws IOException { @@ -1087,6 +1088,7 @@ public void testFromProperties() throws IOException { assertNotSame(System.getProperty("java.version"), result.get("java.version")); } + @J2ktIncompatible @GwtIncompatible // Maps.fromProperties @SuppressWarnings("serial") // never serialized public void testFromPropertiesNullKey() { @@ -1107,6 +1109,7 @@ public Enumeration propertyNames() { } } + @J2ktIncompatible @GwtIncompatible // Maps.fromProperties @SuppressWarnings("serial") // never serialized public void testFromPropertiesNonStringKeys() { diff --git a/guava-tests/test/com/google/common/collect/OrderingTest.java b/guava-tests/test/com/google/common/collect/OrderingTest.java index 33a4ea3b3be9..97e9cf7dea83 100644 --- a/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -218,6 +218,7 @@ public void testExplicit_withDuplicates() { // A more limited test than the one that follows, but this one uses the // actual public API. + @J2ktIncompatible // Ordering.arbitrary public void testArbitrary_withoutCollisions() { List list = Lists.newArrayList(); for (int i = 0; i < 50; i++) { @@ -234,6 +235,7 @@ public void testArbitrary_withoutCollisions() { assertEquals("Ordering.arbitrary()", arbitrary.toString()); } + @J2ktIncompatible // ArbitraryOrdering public void testArbitrary_withCollisions() { List list = Lists.newArrayList(); for (int i = 0; i < 50; i++) { @@ -887,6 +889,7 @@ public void testCombinationsExhaustively_startingFromFromComparator() { testExhaustively(Ordering.from(String.CASE_INSENSITIVE_ORDER), "A", "b", "C", "d"); } + @J2ktIncompatible // Ordering.arbitrary @GwtIncompatible // too slow public void testCombinationsExhaustively_startingFromArbitrary() { Ordering arbitrary = Ordering.arbitrary(); diff --git a/guava-tests/test/com/google/common/collect/SetsTest.java b/guava-tests/test/com/google/common/collect/SetsTest.java index c23d6dbe1563..103d5cfad4c0 100644 --- a/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/guava-tests/test/com/google/common/collect/SetsTest.java @@ -605,18 +605,21 @@ public void testNewIdentityHashSet() { assertEquals(2, set.size()); } + @J2ktIncompatible @GwtIncompatible // CopyOnWriteArraySet public void testNewCOWASEmpty() { CopyOnWriteArraySet set = Sets.newCopyOnWriteArraySet(); verifySetContents(set, EMPTY_COLLECTION); } + @J2ktIncompatible @GwtIncompatible // CopyOnWriteArraySet public void testNewCOWASFromIterable() { CopyOnWriteArraySet set = Sets.newCopyOnWriteArraySet(SOME_ITERABLE); verifySetContents(set, SOME_COLLECTION); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfEnumSet() { Set units = EnumSet.of(SomeEnum.B, SomeEnum.D); @@ -624,6 +627,7 @@ public void testComplementOfEnumSet() { verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfEnumSetWithType() { Set units = EnumSet.of(SomeEnum.B, SomeEnum.D); @@ -631,6 +635,7 @@ public void testComplementOfEnumSetWithType() { verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfRegularSet() { Set units = Sets.newHashSet(SomeEnum.B, SomeEnum.D); @@ -638,6 +643,7 @@ public void testComplementOfRegularSet() { verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfRegularSetWithType() { Set units = Sets.newHashSet(SomeEnum.B, SomeEnum.D); @@ -645,6 +651,7 @@ public void testComplementOfRegularSetWithType() { verifySetContents(otherUnits, EnumSet.of(SomeEnum.A, SomeEnum.C)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfEmptySet() { Set noUnits = Collections.emptySet(); @@ -652,6 +659,7 @@ public void testComplementOfEmptySet() { verifySetContents(EnumSet.allOf(SomeEnum.class), allUnits); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfFullSet() { Set allUnits = Sets.newHashSet(SomeEnum.values()); @@ -659,6 +667,7 @@ public void testComplementOfFullSet() { verifySetContents(noUnits, EnumSet.noneOf(SomeEnum.class)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfEmptyEnumSetWithoutType() { Set noUnits = EnumSet.noneOf(SomeEnum.class); @@ -666,6 +675,7 @@ public void testComplementOfEmptyEnumSetWithoutType() { verifySetContents(allUnits, EnumSet.allOf(SomeEnum.class)); } + @J2ktIncompatible @GwtIncompatible // complementOf public void testComplementOfEmptySetWithoutTypeDoesntWork() { Set set = Collections.emptySet(); From d5cef8fdcd7574557321ad5c77c4c9fc7ac0bf78 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 26 Feb 2024 08:52:15 -0800 Subject: [PATCH 172/216] `testPoorlyBehavedTransform`: tweak it for Java/Kotlin exception difference MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit In J2KT’s emulation of `Integer.valueOf`, the parameter is not nullable, so J2KT’s translation will result in NPE which violates the Java API contract. But as this test is not about J2KT’s emulation fidelity, using another input that causes the expected `NumberFormatException` lets us run the test with J2KT. RELNOTES=n/a PiperOrigin-RevId: 610422035 --- .../test/com/google/common/collect/IterablesTest.java | 6 +++--- .../test/com/google/common/collect/IteratorsTest.java | 2 +- .../test/com/google/common/collect/IterablesTest.java | 6 +++--- .../test/com/google/common/collect/IteratorsTest.java | 2 +- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/IterablesTest.java b/android/guava-tests/test/com/google/common/collect/IterablesTest.java index 5a6ffcf05194..464def64bb7f 100644 --- a/android/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -301,13 +301,13 @@ public Integer apply(String from) { } public void testPoorlyBehavedTransform() { - List<@Nullable String> input = asList("1", null, "3"); + List input = asList("1", "not a number", "3"); Iterable result = Iterables.transform( input, - new Function<@Nullable String, Integer>() { + new Function() { @Override - public Integer apply(@Nullable String from) { + public Integer apply(String from) { return Integer.valueOf(from); } }); diff --git a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java index b2818316dd7f..6d4b4307f237 100644 --- a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -493,7 +493,7 @@ public Integer apply(String from) { } public void testPoorlyBehavedTransform() { - Iterator input = asList("1", null, "3").iterator(); + Iterator input = asList("1", "not a number", "3").iterator(); Iterator result = Iterators.transform( input, diff --git a/guava-tests/test/com/google/common/collect/IterablesTest.java b/guava-tests/test/com/google/common/collect/IterablesTest.java index fe58a0d8dfd9..c155c2110211 100644 --- a/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -330,13 +330,13 @@ public String apply(Integer from) { } public void testPoorlyBehavedTransform() { - List<@Nullable String> input = asList("1", null, "3"); + List input = asList("1", "not a number", "3"); Iterable result = Iterables.transform( input, - new Function<@Nullable String, Integer>() { + new Function() { @Override - public Integer apply(@Nullable String from) { + public Integer apply(String from) { return Integer.valueOf(from); } }); diff --git a/guava-tests/test/com/google/common/collect/IteratorsTest.java b/guava-tests/test/com/google/common/collect/IteratorsTest.java index b2818316dd7f..6d4b4307f237 100644 --- a/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -493,7 +493,7 @@ public Integer apply(String from) { } public void testPoorlyBehavedTransform() { - Iterator input = asList("1", null, "3").iterator(); + Iterator input = asList("1", "not a number", "3").iterator(); Iterator result = Iterators.transform( input, From fc21ea79c24ae37b977671c425972bf090d7738c Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 26 Feb 2024 09:16:53 -0800 Subject: [PATCH 173/216] `AbstractSequentialIteratorTest`: work around a J2KT generics issue J2KT inserts an incorrect null check for an argument `@Nullable T` where `T` is non-null bounded. Switching from anonymous class to a nested class as a workaround. RELNOTES=n/a PiperOrigin-RevId: 610428897 --- .../AbstractSequentialIteratorTest.java | 39 +++++++++++-------- .../AbstractSequentialIteratorTest.java | 39 +++++++++++-------- 2 files changed, 46 insertions(+), 32 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java b/android/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java index f027ff20d470..9b813c4bafa6 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java @@ -105,8 +105,9 @@ public Iterator iterator() { .inOrder(); } + @SuppressWarnings("DoNotCall") public void testEmpty() { - Iterator empty = newEmpty(); + Iterator empty = new EmptyAbstractSequentialIterator<>(); assertFalse(empty.hasNext()); try { empty.next(); @@ -121,7 +122,7 @@ public void testEmpty() { } public void testBroken() { - Iterator broken = newBroken(); + Iterator broken = new BrokenAbstractSequentialIterator(); assertTrue(broken.hasNext()); // We can't retrieve even the known first element: try { @@ -145,22 +146,28 @@ private static Iterator newDoubler(int first, final int last) { }; } - private static Iterator newEmpty() { - return new AbstractSequentialIterator(null) { - @Override - protected T computeNext(T previous) { - throw new AssertionFailedError(); - } - }; + private static class EmptyAbstractSequentialIterator extends AbstractSequentialIterator { + + public EmptyAbstractSequentialIterator() { + super(null); + } + + @Override + protected T computeNext(T previous) { + throw new AssertionFailedError(); + } } - private static Iterator newBroken() { - return new AbstractSequentialIterator("UNUSED") { - @Override - protected Object computeNext(Object previous) { - throw new MyException(); - } - }; + private static class BrokenAbstractSequentialIterator extends AbstractSequentialIterator { + + public BrokenAbstractSequentialIterator() { + super("UNUSED"); + } + + @Override + protected Object computeNext(Object previous) { + throw new MyException(); + } } private static class MyException extends RuntimeException {} diff --git a/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java b/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java index f027ff20d470..9b813c4bafa6 100644 --- a/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractSequentialIteratorTest.java @@ -105,8 +105,9 @@ public Iterator iterator() { .inOrder(); } + @SuppressWarnings("DoNotCall") public void testEmpty() { - Iterator empty = newEmpty(); + Iterator empty = new EmptyAbstractSequentialIterator<>(); assertFalse(empty.hasNext()); try { empty.next(); @@ -121,7 +122,7 @@ public void testEmpty() { } public void testBroken() { - Iterator broken = newBroken(); + Iterator broken = new BrokenAbstractSequentialIterator(); assertTrue(broken.hasNext()); // We can't retrieve even the known first element: try { @@ -145,22 +146,28 @@ private static Iterator newDoubler(int first, final int last) { }; } - private static Iterator newEmpty() { - return new AbstractSequentialIterator(null) { - @Override - protected T computeNext(T previous) { - throw new AssertionFailedError(); - } - }; + private static class EmptyAbstractSequentialIterator extends AbstractSequentialIterator { + + public EmptyAbstractSequentialIterator() { + super(null); + } + + @Override + protected T computeNext(T previous) { + throw new AssertionFailedError(); + } } - private static Iterator newBroken() { - return new AbstractSequentialIterator("UNUSED") { - @Override - protected Object computeNext(Object previous) { - throw new MyException(); - } - }; + private static class BrokenAbstractSequentialIterator extends AbstractSequentialIterator { + + public BrokenAbstractSequentialIterator() { + super("UNUSED"); + } + + @Override + protected Object computeNext(Object previous) { + throw new MyException(); + } } private static class MyException extends RuntimeException {} From 418402455d91b68e51381475aaf8f3022cbdd322 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 26 Feb 2024 11:44:01 -0800 Subject: [PATCH 174/216] Fix, suppress, and/or localize suppressions for `unchecked` and `rawtypes` warnings in `collect.testing`. RELNOTES=n/a PiperOrigin-RevId: 610477014 --- .../AbstractCollectionTestSuiteBuilder.java | 1 + .../testing/AbstractIteratorTester.java | 5 ++- .../ConcurrentMapTestSuiteBuilder.java | 2 + ...oncurrentNavigableMapTestSuiteBuilder.java | 1 + .../FeatureSpecificTestSuiteBuilder.java | 14 +++--- .../common/collect/testing/Helpers.java | 12 +----- .../collect/testing/ListTestSuiteBuilder.java | 1 + .../collect/testing/MapTestSuiteBuilder.java | 1 + .../testing/NavigableMapTestSuiteBuilder.java | 1 + .../testing/NavigableSetTestSuiteBuilder.java | 1 + .../PerCollectionSizeTestSuiteBuilder.java | 4 ++ .../testing/QueueTestSuiteBuilder.java | 1 + .../collect/testing/SetTestSuiteBuilder.java | 1 + .../testing/SortedMapTestSuiteBuilder.java | 1 + .../testing/SortedSetTestSuiteBuilder.java | 1 + .../collect/testing/TestEnumMapGenerator.java | 4 +- .../testing/TestMapEntrySetGenerator.java | 2 +- .../testing/TestStringMapGenerator.java | 4 +- .../testing/features/CollectionFeature.java | 1 + .../testing/features/CollectionSize.java | 1 + .../collect/testing/features/ListFeature.java | 1 + .../collect/testing/features/MapFeature.java | 1 + .../collect/testing/features/SetFeature.java | 1 + .../testing/google/BiMapTestSuiteBuilder.java | 1 + .../DerivedGoogleCollectionGenerators.java | 2 +- .../google/ListMultimapTestSuiteBuilder.java | 1 + .../collect/testing/google/MapGenerators.java | 2 +- .../testing/google/MultimapFeature.java | 1 + .../google/MultimapTestSuiteBuilder.java | 43 ++++++++++++------- .../testing/google/MultisetFeature.java | 1 + .../google/MultisetTestSuiteBuilder.java | 3 +- .../google/SetMultimapTestSuiteBuilder.java | 1 + .../testing/google/SortedMapGenerators.java | 2 +- .../SortedMultisetTestSuiteBuilder.java | 1 + .../SortedSetMultimapTestSuiteBuilder.java | 1 + .../google/TestStringBiMapGenerator.java | 4 +- .../TestStringListMultimapGenerator.java | 4 +- .../TestStringSetMultimapGenerator.java | 4 +- .../google/UnmodifiableCollectionTests.java | 2 + .../testers/NavigableMapNavigationTester.java | 2 +- .../AbstractCollectionTestSuiteBuilder.java | 1 + .../testing/AbstractIteratorTester.java | 5 ++- .../ConcurrentMapTestSuiteBuilder.java | 2 + ...oncurrentNavigableMapTestSuiteBuilder.java | 1 + .../FeatureSpecificTestSuiteBuilder.java | 14 +++--- .../common/collect/testing/Helpers.java | 12 +----- .../collect/testing/ListTestSuiteBuilder.java | 1 + .../collect/testing/MapTestSuiteBuilder.java | 1 + .../testing/NavigableMapTestSuiteBuilder.java | 1 + .../testing/NavigableSetTestSuiteBuilder.java | 1 + .../PerCollectionSizeTestSuiteBuilder.java | 4 ++ .../testing/QueueTestSuiteBuilder.java | 1 + .../collect/testing/SetTestSuiteBuilder.java | 1 + .../testing/SortedMapTestSuiteBuilder.java | 1 + .../testing/SortedSetTestSuiteBuilder.java | 1 + .../collect/testing/SpliteratorTester.java | 7 ++- .../collect/testing/TestEnumMapGenerator.java | 4 +- .../testing/TestMapEntrySetGenerator.java | 2 +- .../testing/TestStringMapGenerator.java | 4 +- .../testing/features/CollectionFeature.java | 1 + .../testing/features/CollectionSize.java | 1 + .../collect/testing/features/ListFeature.java | 1 + .../collect/testing/features/MapFeature.java | 1 + .../collect/testing/features/SetFeature.java | 1 + .../testing/google/BiMapTestSuiteBuilder.java | 1 + .../DerivedGoogleCollectionGenerators.java | 2 +- .../google/ListMultimapTestSuiteBuilder.java | 1 + .../collect/testing/google/MapGenerators.java | 2 +- .../testing/google/MultimapFeature.java | 1 + .../google/MultimapTestSuiteBuilder.java | 43 ++++++++++++------- .../testing/google/MultisetFeature.java | 1 + .../google/MultisetTestSuiteBuilder.java | 3 +- .../google/SetMultimapTestSuiteBuilder.java | 1 + .../testing/google/SortedMapGenerators.java | 2 +- .../SortedMultisetTestSuiteBuilder.java | 1 + .../SortedSetMultimapTestSuiteBuilder.java | 1 + .../google/TestStringBiMapGenerator.java | 4 +- .../TestStringListMultimapGenerator.java | 4 +- .../TestStringSetMultimapGenerator.java | 4 +- .../google/UnmodifiableCollectionTests.java | 2 + .../testers/NavigableMapNavigationTester.java | 2 +- 81 files changed, 176 insertions(+), 105 deletions(-) diff --git a/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java index 1c71009eace3..453ef743d267 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java @@ -46,6 +46,7 @@ public abstract class AbstractCollectionTestSuiteBuilder< B extends AbstractCollectionTestSuiteBuilder, E> extends PerCollectionSizeTestSuiteBuilder, Collection, E> { + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { return Arrays.>asList( diff --git a/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java b/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java index 0b34c6ce5fdb..bbb29fd58dec 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java @@ -268,7 +268,7 @@ public enum KnownOrder { UNKNOWN_ORDER } - @SuppressWarnings("unchecked") // creating array of generic class Stimulus + @SuppressWarnings("unchecked") // TODO(cpovirk): Stop using arrays. AbstractIteratorTester( int steps, Iterable elementsToInsertIterable, @@ -278,7 +278,7 @@ public enum KnownOrder { int startIndex) { // periodically we should manually try (steps * 3 / 2) here; all tests but // one should still pass (testVerifyGetsCalled()). - stimuli = new Stimulus[steps]; + stimuli = (Stimulus[]) new Stimulus[steps]; if (!elementsToInsertIterable.iterator().hasNext()) { throw new IllegalArgumentException(); } @@ -413,6 +413,7 @@ private > void internalExecuteAndCompare( * doesn't recognize this kind of cast as unchecked cast. Neither does * Eclipse 3.4. Right now, this suppression is mostly unnecessary. */ + @SuppressWarnings("unchecked") MultiExceptionListIterator multiExceptionListIterator = (MultiExceptionListIterator) reference; multiExceptionListIterator.promoteToNext(targetReturnValueFromNext); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapTestSuiteBuilder.java index 47220b0f1f8d..d17dae395f0c 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapTestSuiteBuilder.java @@ -36,6 +36,7 @@ public static ConcurrentMapTestSuiteBuilder using(TestMapGenerator< return result; } + @SuppressWarnings("rawtypes") // class literals static final List> TESTERS = Arrays.asList( ConcurrentMapPutIfAbsentTester.class, @@ -43,6 +44,7 @@ public static ConcurrentMapTestSuiteBuilder using(TestMapGenerator< ConcurrentMapReplaceTester.class, ConcurrentMapReplaceEntryTester.class); + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/ConcurrentNavigableMapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/ConcurrentNavigableMapTestSuiteBuilder.java index cccd06ef6bf2..da1e3617722d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/ConcurrentNavigableMapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/ConcurrentNavigableMapTestSuiteBuilder.java @@ -37,6 +37,7 @@ public static ConcurrentNavigableMapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java index bf15135dc4f2..86701159f61b 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java @@ -174,12 +174,6 @@ public Set getSuppressedTests() { Logger.getLogger(FeatureSpecificTestSuiteBuilder.class.getName()); /** Creates a runnable JUnit test suite based on the criteria already given. */ - /* - * Class parameters must be raw. This annotation should go on testerClass in - * the for loop, but the 1.5 javac crashes on annotations in for loops: - * - */ - @SuppressWarnings("unchecked") public TestSuite createTestSuite() { checkCanCreate(); @@ -190,11 +184,13 @@ public TestSuite createTestSuite() { logger.fine("Expanded: " + formatFeatureSet(features)); - // Class parameters must be raw. + @SuppressWarnings("rawtypes") // class literals List> testers = getTesters(); TestSuite suite = new TestSuite(name); - for (Class testerClass : testers) { + for (@SuppressWarnings("rawtypes") // class literals + Class testerClass : testers) { + @SuppressWarnings("unchecked") // getting rid of the raw type, for better or for worse TestSuite testerSuite = makeSuiteForTesterClass((Class>) testerClass); if (testerSuite.countTestCases() > 0) { @@ -217,7 +213,7 @@ protected void checkCanCreate() { } } - // Class parameters must be raw. + @SuppressWarnings("rawtypes") // class literals protected abstract List> getTesters(); private boolean matches(Test test) { diff --git a/android/guava-testlib/src/com/google/common/collect/testing/Helpers.java b/android/guava-testlib/src/com/google/common/collect/testing/Helpers.java index 49182b105485..9d577ecb0fe5 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/Helpers.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/Helpers.java @@ -468,19 +468,11 @@ public String toString() { return list; } - private static final Comparator NATURAL_ORDER = - new Comparator() { - @SuppressWarnings("unchecked") // assume any Comparable is Comparable - @Override - public int compare(Comparable left, Comparable right) { - return left.compareTo(right); - } - }; - + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static Iterable> orderEntriesByKey(List> insertionOrder) { @SuppressWarnings("unchecked") // assume any Comparable is Comparable - Comparator keyComparator = (Comparator) NATURAL_ORDER; + Comparator keyComparator = (Comparator) Comparable::compareTo; sort(insertionOrder, Helpers.entryComparator(keyComparator)); return insertionOrder; } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java index 061e31038bda..1ca6da879fcb 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java @@ -63,6 +63,7 @@ public static ListTestSuiteBuilder using(TestListGenerator generator) return new ListTestSuiteBuilder().usingGenerator(generator); } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java index 88c9459e8753..b150cc5dc74a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java @@ -62,6 +62,7 @@ public static MapTestSuiteBuilder using(TestMapGenerator gene return new MapTestSuiteBuilder().usingGenerator(generator); } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { return Arrays.>asList( diff --git a/android/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java index 0e1a229208e8..b9b4dce13b7b 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java @@ -46,6 +46,7 @@ public static NavigableMapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java index 4c86ab46206c..8209571cab87 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java @@ -143,6 +143,7 @@ public Set create(Object... elements) { .createTestSuite(); } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java index c0068b4f9274..0ffb95d3147f 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java @@ -59,6 +59,7 @@ public TestSuite createTestSuite() { String name = getName(); // Copy this set, so we can modify it. Set> features = Helpers.copyToSet(getFeatures()); + @SuppressWarnings("rawtypes") // class literals List> testers = getTesters(); logger.fine(" Testing: " + name); @@ -120,12 +121,15 @@ protected List createDerivedSuites( private static final class OneSizeTestSuiteBuilder extends FeatureSpecificTestSuiteBuilder< OneSizeTestSuiteBuilder, OneSizeGenerator> { + @SuppressWarnings("rawtypes") // class literals private final List> testers; + @SuppressWarnings("rawtypes") // class literals public OneSizeTestSuiteBuilder(List> testers) { this.testers = testers; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { return testers; diff --git a/android/guava-testlib/src/com/google/common/collect/testing/QueueTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/QueueTestSuiteBuilder.java index c94b819988d6..304cc2caf41a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/QueueTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/QueueTestSuiteBuilder.java @@ -52,6 +52,7 @@ public QueueTestSuiteBuilder skipCollectionTests() { return this; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = new ArrayList<>(); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java index 4ac51a4612f1..bcc699d63f97 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java @@ -48,6 +48,7 @@ public static SetTestSuiteBuilder using(TestSetGenerator generator) { return new SetTestSuiteBuilder().usingGenerator(generator); } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/SortedMapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/SortedMapTestSuiteBuilder.java index 4a290860e55c..eb997bb1941f 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/SortedMapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/SortedMapTestSuiteBuilder.java @@ -45,6 +45,7 @@ public static SortedMapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/SortedSetTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/SortedSetTestSuiteBuilder.java index 2835769e33f7..93aa389f835d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/SortedSetTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/SortedSetTestSuiteBuilder.java @@ -39,6 +39,7 @@ public static SortedSetTestSuiteBuilder using(TestSortedSetGenerator g return builder; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java index 56bd92d84bb5..7814d306e7b4 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java @@ -45,7 +45,7 @@ public SampleElements> samples() { @Override public final Map create(Object... entries) { @SuppressWarnings("unchecked") - Entry[] array = new Entry[entries.length]; + Entry[] array = (Entry[]) new Entry[entries.length]; int i = 0; for (Object o : entries) { @SuppressWarnings("unchecked") @@ -60,7 +60,7 @@ public final Map create(Object... entries) { @Override @SuppressWarnings("unchecked") public final Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java index 2d51c2ab3cfd..0581072933bb 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java @@ -58,7 +58,7 @@ public Set> create(Object... elements) { @Override @SuppressWarnings("unchecked") // generic arrays make typesafety sad public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } /** Returns the original element list, unchanged. */ diff --git a/android/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java index c7aa85cc82a2..0228af4e91fd 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java @@ -45,7 +45,7 @@ public SampleElements> samples() { @Override public Map create(Object... entries) { @SuppressWarnings("unchecked") - Entry[] array = new Entry[entries.length]; + Entry[] array = (Entry[]) new Entry[entries.length]; int i = 0; for (Object o : entries) { @SuppressWarnings("unchecked") @@ -60,7 +60,7 @@ public Map create(Object... entries) { @Override @SuppressWarnings("unchecked") public final Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java b/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java index b9ae729f38dd..1379dd34eebd 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java @@ -31,6 +31,7 @@ * * @author George van den Driessche */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum CollectionFeature implements Feature { /** diff --git a/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java b/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java index 0b4722860751..1d5a6267199c 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java @@ -42,6 +42,7 @@ * * @author George van den Driessche */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum CollectionSize implements Feature, Comparable { /** Test an empty collection. */ diff --git a/android/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java b/android/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java index d80fc31893f8..8879ddb95bc0 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java @@ -29,6 +29,7 @@ * * @author George van den Driessche */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum ListFeature implements Feature { SUPPORTS_SET, diff --git a/android/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java b/android/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java index 45040c0249f3..2eac3ff53b11 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java @@ -29,6 +29,7 @@ * * @author George van den Driessche */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum MapFeature implements Feature { /** diff --git a/android/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java b/android/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java index 2317e11bc807..04a4bfdf44ea 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java @@ -28,6 +28,7 @@ * * @author George van den Driessche */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum SetFeature implements Feature { GENERAL_PURPOSE(CollectionFeature.GENERAL_PURPOSE); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapTestSuiteBuilder.java index 0821fb0b554e..a37cce7e2a5a 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/BiMapTestSuiteBuilder.java @@ -53,6 +53,7 @@ public static BiMapTestSuiteBuilder using(TestBiMapGenerator return new BiMapTestSuiteBuilder().usingGenerator(generator); } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = new ArrayList<>(); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java b/android/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java index dcd9e649fb67..cede1bd5f7a2 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java @@ -128,7 +128,7 @@ public BiMap create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapTestSuiteBuilder.java index b55c7d648f10..981c29afe4d2 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapTestSuiteBuilder.java @@ -52,6 +52,7 @@ public static ListMultimapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java index f3e2c246555a..169785dff0ac 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java @@ -129,7 +129,7 @@ public SampleElements> samples() { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java index 8daff279465a..290cb02b134f 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java @@ -31,6 +31,7 @@ * * @author Louis Wasserman */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum MultimapFeature implements Feature { VALUE_COLLECTIONS_SUPPORT_ITERATOR_REMOVE; diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java index 74e8b55f4f18..a342df9c008e 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java @@ -73,6 +73,7 @@ public static > MultimapTestSuiteBuilder } // Class parameters must be raw. + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { return ImmutableList.>of( @@ -346,10 +347,16 @@ public Map> create(Object... elements) { Set keySet = new HashSet<>(); List> builder = new ArrayList<>(); for (Object o : elements) { - Entry> entry = (Entry>) o; - keySet.add(entry.getKey()); - for (V v : entry.getValue()) { - builder.add(mapEntry(entry.getKey(), v)); + Entry entry = (Entry) o; + // These come from Entry>> objects somewhere. + @SuppressWarnings("unchecked") + K key = (K) entry.getKey(); + keySet.add(key); + for (Object v : (Collection) entry.getValue()) { + // These come from Entry>> objects somewhere. + @SuppressWarnings("unchecked") + V value = (V) v; + builder.add(mapEntry(key, value)); } } checkArgument(keySet.size() == elements.length, "Duplicate keys"); @@ -359,7 +366,7 @@ public Map> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry>[] createArray(int length) { - return new Entry[length]; + return (Entry>[]) new Entry[length]; } @Override @@ -389,7 +396,7 @@ public K[] createKeyArray(int length) { @SuppressWarnings("unchecked") @Override public Collection[] createValueArray(int length) { - return new Collection[length]; + return (Collection[]) new Collection[length]; } } @@ -419,7 +426,7 @@ public Collection> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override @@ -448,11 +455,13 @@ public Collection create(Object... elements) { ((TestMultimapGenerator) multimapGenerator.getInnerGenerator()) .sampleKeys() .e0(); - Entry[] entries = new Entry[elements.length]; + Object[] entries = new Object[elements.length]; for (int i = 0; i < elements.length; i++) { - entries[i] = mapEntry(k, (V) elements[i]); + @SuppressWarnings("unchecked") // These come from Entry objects somewhere. + V value = (V) elements[i]; + entries[i] = mapEntry(k, value); } - return multimapGenerator.create((Object[]) entries).values(); + return multimapGenerator.create(entries).values(); } @Override @@ -504,17 +513,17 @@ public Multiset create(Object... elements) { * This is nasty and complicated, but it's the only way to make sure keys get mapped to enough * distinct values. */ - Entry[] entries = new Entry[elements.length]; + Entry[] entries = new Entry[elements.length]; Map> valueIterators = new HashMap<>(); for (int i = 0; i < elements.length; i++) { - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") // These come from Entry objects somewhere. K key = (K) elements[i]; Iterator valueItr = valueIterators.get(key); if (valueItr == null) { valueIterators.put(key, valueItr = sampleValuesIterator()); } - entries[i] = mapEntry((K) elements[i], valueItr.next()); + entries[i] = mapEntry(key, valueItr.next()); } return multimapGenerator.create((Object[]) entries).keys(); } @@ -593,7 +602,9 @@ public Collection create(Object... elements) { .sampleKeys() .e0(); for (int i = 0; i < elements.length; i++) { - array[i] = mapEntry(k, (V) elements[i]); + @SuppressWarnings("unchecked") // These come from Entry objects somewhere. + V value = (V) elements[i]; + array[i] = mapEntry(k, value); } return multimapGenerator.create((Object[]) array).get(k); } @@ -615,7 +626,9 @@ public Collection create(Object... elements) { .sampleKeys() .e0(); for (int i = 0; i < elements.length; i++) { - array[i] = mapEntry(k, (V) elements[i]); + @SuppressWarnings("unchecked") // These come from Entry objects somewhere. + V value = (V) elements[i]; + array[i] = mapEntry(k, value); } return multimapGenerator.create((Object[]) array).asMap().get(k); } diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetFeature.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetFeature.java index d05c560021a8..41881c36638d 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetFeature.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetFeature.java @@ -31,6 +31,7 @@ * * @author Louis Wasserman */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum MultisetFeature implements Feature { /** diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java index d6a665c14bd4..3f545815a865 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java @@ -68,6 +68,7 @@ public Set> getImpliedFeatures() { } } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); @@ -232,7 +233,7 @@ public Set> create(Object... entries) { @SuppressWarnings("unchecked") @Override public Multiset.Entry[] createArray(int length) { - return new Multiset.Entry[length]; + return (Multiset.Entry[]) new Multiset.Entry[length]; } @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapTestSuiteBuilder.java index 4368cee9bf83..e99a38c8f7c4 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapTestSuiteBuilder.java @@ -50,6 +50,7 @@ public static SetMultimapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java b/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java index f98674a5068e..21165583776f 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java @@ -80,7 +80,7 @@ public SampleElements> samples() { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java index c699d22fdff3..ce68770b2dcd 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java @@ -71,6 +71,7 @@ public TestSuite createTestSuite() { return suite; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapTestSuiteBuilder.java b/android/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapTestSuiteBuilder.java index 66c5a8ed09a6..8f220ba360c5 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapTestSuiteBuilder.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapTestSuiteBuilder.java @@ -49,6 +49,7 @@ public static SortedSetMultimapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java index 2232c494d075..4044e3a0ae81 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java @@ -48,7 +48,7 @@ public SampleElements> samples() { @Override public final BiMap create(Object... entries) { @SuppressWarnings("unchecked") - Entry[] array = new Entry[entries.length]; + Entry[] array = (Entry[]) new Entry[entries.length]; int i = 0; for (Object o : entries) { @SuppressWarnings("unchecked") @@ -63,7 +63,7 @@ public final BiMap create(Object... entries) { @Override @SuppressWarnings("unchecked") public final Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java index 5ad6c53f755d..5bd56629e1af 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java @@ -62,7 +62,7 @@ public Collection createCollection(Iterable values) { @Override public final ListMultimap create(Object... entries) { @SuppressWarnings("unchecked") - Entry[] array = new Entry[entries.length]; + Entry[] array = (Entry[]) new Entry[entries.length]; int i = 0; for (Object o : entries) { @SuppressWarnings("unchecked") @@ -77,7 +77,7 @@ public final ListMultimap create(Object... entries) { @Override @SuppressWarnings("unchecked") public final Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java index 27e43a805d93..371abd4779b0 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java @@ -61,7 +61,7 @@ public Collection createCollection(Iterable values) { @Override public final SetMultimap create(Object... entries) { @SuppressWarnings("unchecked") - Entry[] array = new Entry[entries.length]; + Entry[] array = (Entry[]) new Entry[entries.length]; int i = 0; for (Object o : entries) { @SuppressWarnings("unchecked") @@ -76,7 +76,7 @@ public final SetMultimap create(Object... entries) { @Override @SuppressWarnings("unchecked") public final Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/android/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java b/android/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java index 4fb1bc76cf74..a4d552429376 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java @@ -49,6 +49,8 @@ public class UnmodifiableCollectionTests { public static void assertMapEntryIsUnmodifiable(Entry entry) { try { + // fine because the call is going to fail without modifying the entry + @SuppressWarnings("unchecked") Entry nullableValueEntry = (Entry) entry; nullableValueEntry.setValue(null); fail("setValue on unmodifiable Map.Entry succeeded"); diff --git a/android/guava-testlib/src/com/google/common/collect/testing/testers/NavigableMapNavigationTester.java b/android/guava-testlib/src/com/google/common/collect/testing/testers/NavigableMapNavigationTester.java index 936783e77e64..af2ff69c80ca 100644 --- a/android/guava-testlib/src/com/google/common/collect/testing/testers/NavigableMapNavigationTester.java +++ b/android/guava-testlib/src/com/google/common/collect/testing/testers/NavigableMapNavigationTester.java @@ -74,7 +74,7 @@ public void setUp() throws Exception { /** Resets the contents of navigableMap to have entries a, c, for the navigation tests. */ @SuppressWarnings("unchecked") // Needed to stop Eclipse whining private void resetWithHole() { - Entry[] entries = new Entry[] {a, c}; + Entry[] entries = (Entry[]) new Entry[] {a, c}; super.resetMap(entries); navigableMap = (NavigableMap) getMap(); } diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java index 0c752581318d..37d7b59d0226 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractCollectionTestSuiteBuilder.java @@ -50,6 +50,7 @@ public abstract class AbstractCollectionTestSuiteBuilder< B extends AbstractCollectionTestSuiteBuilder, E> extends PerCollectionSizeTestSuiteBuilder, Collection, E> { + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { return Arrays.>asList( diff --git a/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java index 21a4ee331737..f1cc97372763 100644 --- a/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/AbstractIteratorTester.java @@ -268,7 +268,7 @@ public enum KnownOrder { UNKNOWN_ORDER } - @SuppressWarnings("unchecked") // creating array of generic class Stimulus + @SuppressWarnings("unchecked") // TODO(cpovirk): Stop using arrays. AbstractIteratorTester( int steps, Iterable elementsToInsertIterable, @@ -278,7 +278,7 @@ public enum KnownOrder { int startIndex) { // periodically we should manually try (steps * 3 / 2) here; all tests but // one should still pass (testVerifyGetsCalled()). - stimuli = new Stimulus[steps]; + stimuli = (Stimulus[]) new Stimulus[steps]; if (!elementsToInsertIterable.iterator().hasNext()) { throw new IllegalArgumentException(); } @@ -429,6 +429,7 @@ private > void internalExecuteAndCompare( * doesn't recognize this kind of cast as unchecked cast. Neither does * Eclipse 3.4. Right now, this suppression is mostly unnecessary. */ + @SuppressWarnings("unchecked") MultiExceptionListIterator multiExceptionListIterator = (MultiExceptionListIterator) reference; multiExceptionListIterator.promoteToNext(targetReturnValueFromNext); diff --git a/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapTestSuiteBuilder.java index 47220b0f1f8d..d17dae395f0c 100644 --- a/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/ConcurrentMapTestSuiteBuilder.java @@ -36,6 +36,7 @@ public static ConcurrentMapTestSuiteBuilder using(TestMapGenerator< return result; } + @SuppressWarnings("rawtypes") // class literals static final List> TESTERS = Arrays.asList( ConcurrentMapPutIfAbsentTester.class, @@ -43,6 +44,7 @@ public static ConcurrentMapTestSuiteBuilder using(TestMapGenerator< ConcurrentMapReplaceTester.class, ConcurrentMapReplaceEntryTester.class); + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/ConcurrentNavigableMapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/ConcurrentNavigableMapTestSuiteBuilder.java index cccd06ef6bf2..da1e3617722d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/ConcurrentNavigableMapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/ConcurrentNavigableMapTestSuiteBuilder.java @@ -37,6 +37,7 @@ public static ConcurrentNavigableMapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java index bf15135dc4f2..86701159f61b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/FeatureSpecificTestSuiteBuilder.java @@ -174,12 +174,6 @@ public Set getSuppressedTests() { Logger.getLogger(FeatureSpecificTestSuiteBuilder.class.getName()); /** Creates a runnable JUnit test suite based on the criteria already given. */ - /* - * Class parameters must be raw. This annotation should go on testerClass in - * the for loop, but the 1.5 javac crashes on annotations in for loops: - * - */ - @SuppressWarnings("unchecked") public TestSuite createTestSuite() { checkCanCreate(); @@ -190,11 +184,13 @@ public TestSuite createTestSuite() { logger.fine("Expanded: " + formatFeatureSet(features)); - // Class parameters must be raw. + @SuppressWarnings("rawtypes") // class literals List> testers = getTesters(); TestSuite suite = new TestSuite(name); - for (Class testerClass : testers) { + for (@SuppressWarnings("rawtypes") // class literals + Class testerClass : testers) { + @SuppressWarnings("unchecked") // getting rid of the raw type, for better or for worse TestSuite testerSuite = makeSuiteForTesterClass((Class>) testerClass); if (testerSuite.countTestCases() > 0) { @@ -217,7 +213,7 @@ protected void checkCanCreate() { } } - // Class parameters must be raw. + @SuppressWarnings("rawtypes") // class literals protected abstract List> getTesters(); private boolean matches(Test test) { diff --git a/guava-testlib/src/com/google/common/collect/testing/Helpers.java b/guava-testlib/src/com/google/common/collect/testing/Helpers.java index 49182b105485..9d577ecb0fe5 100644 --- a/guava-testlib/src/com/google/common/collect/testing/Helpers.java +++ b/guava-testlib/src/com/google/common/collect/testing/Helpers.java @@ -468,19 +468,11 @@ public String toString() { return list; } - private static final Comparator NATURAL_ORDER = - new Comparator() { - @SuppressWarnings("unchecked") // assume any Comparable is Comparable - @Override - public int compare(Comparable left, Comparable right) { - return left.compareTo(right); - } - }; - + @SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 public static Iterable> orderEntriesByKey(List> insertionOrder) { @SuppressWarnings("unchecked") // assume any Comparable is Comparable - Comparator keyComparator = (Comparator) NATURAL_ORDER; + Comparator keyComparator = (Comparator) Comparable::compareTo; sort(insertionOrder, Helpers.entryComparator(keyComparator)); return insertionOrder; } diff --git a/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java index 492a50c491ec..5de716d23649 100644 --- a/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/ListTestSuiteBuilder.java @@ -64,6 +64,7 @@ public static ListTestSuiteBuilder using(TestListGenerator generator) return new ListTestSuiteBuilder().usingGenerator(generator); } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java index f47067967fce..b08640171fff 100644 --- a/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/MapTestSuiteBuilder.java @@ -73,6 +73,7 @@ public static MapTestSuiteBuilder using(TestMapGenerator gene return new MapTestSuiteBuilder().usingGenerator(generator); } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { return Arrays.>asList( diff --git a/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java index 0e1a229208e8..b9b4dce13b7b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/NavigableMapTestSuiteBuilder.java @@ -46,6 +46,7 @@ public static NavigableMapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java index 4c86ab46206c..8209571cab87 100644 --- a/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/NavigableSetTestSuiteBuilder.java @@ -143,6 +143,7 @@ public Set create(Object... elements) { .createTestSuite(); } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java index c0068b4f9274..0ffb95d3147f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/PerCollectionSizeTestSuiteBuilder.java @@ -59,6 +59,7 @@ public TestSuite createTestSuite() { String name = getName(); // Copy this set, so we can modify it. Set> features = Helpers.copyToSet(getFeatures()); + @SuppressWarnings("rawtypes") // class literals List> testers = getTesters(); logger.fine(" Testing: " + name); @@ -120,12 +121,15 @@ protected List createDerivedSuites( private static final class OneSizeTestSuiteBuilder extends FeatureSpecificTestSuiteBuilder< OneSizeTestSuiteBuilder, OneSizeGenerator> { + @SuppressWarnings("rawtypes") // class literals private final List> testers; + @SuppressWarnings("rawtypes") // class literals public OneSizeTestSuiteBuilder(List> testers) { this.testers = testers; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { return testers; diff --git a/guava-testlib/src/com/google/common/collect/testing/QueueTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/QueueTestSuiteBuilder.java index c94b819988d6..304cc2caf41a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/QueueTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/QueueTestSuiteBuilder.java @@ -52,6 +52,7 @@ public QueueTestSuiteBuilder skipCollectionTests() { return this; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = new ArrayList<>(); diff --git a/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java index 4ac51a4612f1..bcc699d63f97 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/SetTestSuiteBuilder.java @@ -48,6 +48,7 @@ public static SetTestSuiteBuilder using(TestSetGenerator generator) { return new SetTestSuiteBuilder().usingGenerator(generator); } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/SortedMapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/SortedMapTestSuiteBuilder.java index 4a290860e55c..eb997bb1941f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SortedMapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/SortedMapTestSuiteBuilder.java @@ -45,6 +45,7 @@ public static SortedMapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/SortedSetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/SortedSetTestSuiteBuilder.java index 2835769e33f7..93aa389f835d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SortedSetTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/SortedSetTestSuiteBuilder.java @@ -39,6 +39,7 @@ public static SortedSetTestSuiteBuilder using(TestSortedSetGenerator g return builder; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java b/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java index e6c637f9f6d9..d6a866ce194b 100644 --- a/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/SpliteratorTester.java @@ -311,7 +311,12 @@ public final Ordered expect(Iterable elements) { if ((characteristics & Spliterator.SORTED) != 0) { Comparator comparator = spliterator.getComparator(); if (comparator == null) { - comparator = (Comparator) Comparator.naturalOrder(); + // A sorted spliterator with no comparator is already using natural order. + // (We could probably find a way to avoid rawtypes here if we wanted.) + @SuppressWarnings({"unchecked", "rawtypes"}) + Comparator naturalOrder = + (Comparator) Comparator.naturalOrder(); + comparator = naturalOrder; } assertTrue(Ordering.from(comparator).isOrdered(resultsForStrategy)); } diff --git a/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java index 56bd92d84bb5..7814d306e7b4 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestEnumMapGenerator.java @@ -45,7 +45,7 @@ public SampleElements> samples() { @Override public final Map create(Object... entries) { @SuppressWarnings("unchecked") - Entry[] array = new Entry[entries.length]; + Entry[] array = (Entry[]) new Entry[entries.length]; int i = 0; for (Object o : entries) { @SuppressWarnings("unchecked") @@ -60,7 +60,7 @@ public final Map create(Object... entries) { @Override @SuppressWarnings("unchecked") public final Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java index 2d51c2ab3cfd..0581072933bb 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestMapEntrySetGenerator.java @@ -58,7 +58,7 @@ public Set> create(Object... elements) { @Override @SuppressWarnings("unchecked") // generic arrays make typesafety sad public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } /** Returns the original element list, unchanged. */ diff --git a/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java index c7aa85cc82a2..0228af4e91fd 100644 --- a/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/TestStringMapGenerator.java @@ -45,7 +45,7 @@ public SampleElements> samples() { @Override public Map create(Object... entries) { @SuppressWarnings("unchecked") - Entry[] array = new Entry[entries.length]; + Entry[] array = (Entry[]) new Entry[entries.length]; int i = 0; for (Object o : entries) { @SuppressWarnings("unchecked") @@ -60,7 +60,7 @@ public Map create(Object... entries) { @Override @SuppressWarnings("unchecked") public final Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java index b9ae729f38dd..1379dd34eebd 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/CollectionFeature.java @@ -31,6 +31,7 @@ * * @author George van den Driessche */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum CollectionFeature implements Feature { /** diff --git a/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java b/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java index 0b4722860751..1d5a6267199c 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/CollectionSize.java @@ -42,6 +42,7 @@ * * @author George van den Driessche */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum CollectionSize implements Feature, Comparable { /** Test an empty collection. */ diff --git a/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java index d80fc31893f8..8879ddb95bc0 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/ListFeature.java @@ -29,6 +29,7 @@ * * @author George van den Driessche */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum ListFeature implements Feature { SUPPORTS_SET, diff --git a/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java index 45040c0249f3..2eac3ff53b11 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/MapFeature.java @@ -29,6 +29,7 @@ * * @author George van den Driessche */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum MapFeature implements Feature { /** diff --git a/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java b/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java index 2317e11bc807..04a4bfdf44ea 100644 --- a/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/features/SetFeature.java @@ -28,6 +28,7 @@ * * @author George van den Driessche */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum SetFeature implements Feature { GENERAL_PURPOSE(CollectionFeature.GENERAL_PURPOSE); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/BiMapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/BiMapTestSuiteBuilder.java index 0821fb0b554e..a37cce7e2a5a 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/BiMapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/BiMapTestSuiteBuilder.java @@ -53,6 +53,7 @@ public static BiMapTestSuiteBuilder using(TestBiMapGenerator return new BiMapTestSuiteBuilder().usingGenerator(generator); } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = new ArrayList<>(); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java index dcd9e649fb67..cede1bd5f7a2 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/DerivedGoogleCollectionGenerators.java @@ -128,7 +128,7 @@ public BiMap create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapTestSuiteBuilder.java index b55c7d648f10..981c29afe4d2 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/ListMultimapTestSuiteBuilder.java @@ -52,6 +52,7 @@ public static ListMultimapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java index f3e2c246555a..169785dff0ac 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MapGenerators.java @@ -129,7 +129,7 @@ public SampleElements> samples() { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java index 8daff279465a..290cb02b134f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultimapFeature.java @@ -31,6 +31,7 @@ * * @author Louis Wasserman */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum MultimapFeature implements Feature { VALUE_COLLECTIONS_SUPPORT_ITERATOR_REMOVE; diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java index e2dbefe6115b..2863c9f30f46 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultimapTestSuiteBuilder.java @@ -73,6 +73,7 @@ public static > MultimapTestSuiteBuilder } // Class parameters must be raw. + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { return ImmutableList.>of( @@ -347,10 +348,16 @@ public Map> create(Object... elements) { Set keySet = new HashSet<>(); List> builder = new ArrayList<>(); for (Object o : elements) { - Entry> entry = (Entry>) o; - keySet.add(entry.getKey()); - for (V v : entry.getValue()) { - builder.add(mapEntry(entry.getKey(), v)); + Entry entry = (Entry) o; + // These come from Entry>> objects somewhere. + @SuppressWarnings("unchecked") + K key = (K) entry.getKey(); + keySet.add(key); + for (Object v : (Collection) entry.getValue()) { + // These come from Entry>> objects somewhere. + @SuppressWarnings("unchecked") + V value = (V) v; + builder.add(mapEntry(key, value)); } } checkArgument(keySet.size() == elements.length, "Duplicate keys"); @@ -360,7 +367,7 @@ public Map> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry>[] createArray(int length) { - return new Entry[length]; + return (Entry>[]) new Entry[length]; } @Override @@ -390,7 +397,7 @@ public K[] createKeyArray(int length) { @SuppressWarnings("unchecked") @Override public Collection[] createValueArray(int length) { - return new Collection[length]; + return (Collection[]) new Collection[length]; } } @@ -420,7 +427,7 @@ public Collection> create(Object... elements) { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override @@ -449,11 +456,13 @@ public Collection create(Object... elements) { ((TestMultimapGenerator) multimapGenerator.getInnerGenerator()) .sampleKeys() .e0(); - Entry[] entries = new Entry[elements.length]; + Object[] entries = new Object[elements.length]; for (int i = 0; i < elements.length; i++) { - entries[i] = mapEntry(k, (V) elements[i]); + @SuppressWarnings("unchecked") // These come from Entry objects somewhere. + V value = (V) elements[i]; + entries[i] = mapEntry(k, value); } - return multimapGenerator.create((Object[]) entries).values(); + return multimapGenerator.create(entries).values(); } @Override @@ -505,17 +514,17 @@ public Multiset create(Object... elements) { * This is nasty and complicated, but it's the only way to make sure keys get mapped to enough * distinct values. */ - Entry[] entries = new Entry[elements.length]; + Entry[] entries = new Entry[elements.length]; Map> valueIterators = new HashMap<>(); for (int i = 0; i < elements.length; i++) { - @SuppressWarnings("unchecked") + @SuppressWarnings("unchecked") // These come from Entry objects somewhere. K key = (K) elements[i]; Iterator valueItr = valueIterators.get(key); if (valueItr == null) { valueIterators.put(key, valueItr = sampleValuesIterator()); } - entries[i] = mapEntry((K) elements[i], valueItr.next()); + entries[i] = mapEntry(key, valueItr.next()); } return multimapGenerator.create((Object[]) entries).keys(); } @@ -594,7 +603,9 @@ public Collection create(Object... elements) { .sampleKeys() .e0(); for (int i = 0; i < elements.length; i++) { - array[i] = mapEntry(k, (V) elements[i]); + @SuppressWarnings("unchecked") // These come from Entry objects somewhere. + V value = (V) elements[i]; + array[i] = mapEntry(k, value); } return multimapGenerator.create((Object[]) array).get(k); } @@ -616,7 +627,9 @@ public Collection create(Object... elements) { .sampleKeys() .e0(); for (int i = 0; i < elements.length; i++) { - array[i] = mapEntry(k, (V) elements[i]); + @SuppressWarnings("unchecked") // These come from Entry objects somewhere. + V value = (V) elements[i]; + array[i] = mapEntry(k, value); } return multimapGenerator.create((Object[]) array).asMap().get(k); } diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetFeature.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetFeature.java index d05c560021a8..41881c36638d 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetFeature.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetFeature.java @@ -31,6 +31,7 @@ * * @author Louis Wasserman */ +@SuppressWarnings("rawtypes") // maybe avoidable if we rework the whole package? @GwtCompatible public enum MultisetFeature implements Feature { /** diff --git a/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java index 91d7a60e70f0..db026173ee65 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/MultisetTestSuiteBuilder.java @@ -68,6 +68,7 @@ public Set> getImpliedFeatures() { } } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); @@ -233,7 +234,7 @@ public Set> create(Object... entries) { @SuppressWarnings("unchecked") @Override public Multiset.Entry[] createArray(int length) { - return new Multiset.Entry[length]; + return (Multiset.Entry[]) new Multiset.Entry[length]; } @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapTestSuiteBuilder.java index 4368cee9bf83..e99a38c8f7c4 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SetMultimapTestSuiteBuilder.java @@ -50,6 +50,7 @@ public static SetMultimapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java b/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java index f98674a5068e..21165583776f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SortedMapGenerators.java @@ -80,7 +80,7 @@ public SampleElements> samples() { @SuppressWarnings("unchecked") @Override public Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java index c699d22fdff3..ce68770b2dcd 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SortedMultisetTestSuiteBuilder.java @@ -71,6 +71,7 @@ public TestSuite createTestSuite() { return suite; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapTestSuiteBuilder.java b/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapTestSuiteBuilder.java index 66c5a8ed09a6..8f220ba360c5 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapTestSuiteBuilder.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/SortedSetMultimapTestSuiteBuilder.java @@ -49,6 +49,7 @@ public static SortedSetMultimapTestSuiteBuilder using( return result; } + @SuppressWarnings("rawtypes") // class literals @Override protected List> getTesters() { List> testers = Helpers.copyToList(super.getTesters()); diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java index 2232c494d075..4044e3a0ae81 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestStringBiMapGenerator.java @@ -48,7 +48,7 @@ public SampleElements> samples() { @Override public final BiMap create(Object... entries) { @SuppressWarnings("unchecked") - Entry[] array = new Entry[entries.length]; + Entry[] array = (Entry[]) new Entry[entries.length]; int i = 0; for (Object o : entries) { @SuppressWarnings("unchecked") @@ -63,7 +63,7 @@ public final BiMap create(Object... entries) { @Override @SuppressWarnings("unchecked") public final Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java index 5ad6c53f755d..5bd56629e1af 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestStringListMultimapGenerator.java @@ -62,7 +62,7 @@ public Collection createCollection(Iterable values) { @Override public final ListMultimap create(Object... entries) { @SuppressWarnings("unchecked") - Entry[] array = new Entry[entries.length]; + Entry[] array = (Entry[]) new Entry[entries.length]; int i = 0; for (Object o : entries) { @SuppressWarnings("unchecked") @@ -77,7 +77,7 @@ public final ListMultimap create(Object... entries) { @Override @SuppressWarnings("unchecked") public final Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java b/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java index 27e43a805d93..371abd4779b0 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/TestStringSetMultimapGenerator.java @@ -61,7 +61,7 @@ public Collection createCollection(Iterable values) { @Override public final SetMultimap create(Object... entries) { @SuppressWarnings("unchecked") - Entry[] array = new Entry[entries.length]; + Entry[] array = (Entry[]) new Entry[entries.length]; int i = 0; for (Object o : entries) { @SuppressWarnings("unchecked") @@ -76,7 +76,7 @@ public final SetMultimap create(Object... entries) { @Override @SuppressWarnings("unchecked") public final Entry[] createArray(int length) { - return new Entry[length]; + return (Entry[]) new Entry[length]; } @Override diff --git a/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java b/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java index 4d3857e1215d..f7402038008f 100644 --- a/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java +++ b/guava-testlib/src/com/google/common/collect/testing/google/UnmodifiableCollectionTests.java @@ -49,6 +49,8 @@ public class UnmodifiableCollectionTests { public static void assertMapEntryIsUnmodifiable(Entry entry) { try { + // fine because the call is going to fail without modifying the entry + @SuppressWarnings("unchecked") Entry nullableValueEntry = (Entry) entry; nullableValueEntry.setValue(null); fail("setValue on unmodifiable Map.Entry succeeded"); diff --git a/guava-testlib/src/com/google/common/collect/testing/testers/NavigableMapNavigationTester.java b/guava-testlib/src/com/google/common/collect/testing/testers/NavigableMapNavigationTester.java index 936783e77e64..af2ff69c80ca 100644 --- a/guava-testlib/src/com/google/common/collect/testing/testers/NavigableMapNavigationTester.java +++ b/guava-testlib/src/com/google/common/collect/testing/testers/NavigableMapNavigationTester.java @@ -74,7 +74,7 @@ public void setUp() throws Exception { /** Resets the contents of navigableMap to have entries a, c, for the navigation tests. */ @SuppressWarnings("unchecked") // Needed to stop Eclipse whining private void resetWithHole() { - Entry[] entries = new Entry[] {a, c}; + Entry[] entries = (Entry[]) new Entry[] {a, c}; super.resetMap(entries); navigableMap = (NavigableMap) getMap(); } From be01f1ab0c1bbcc96df5e1a16265c3ea2a761fff Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Tue, 27 Feb 2024 01:23:28 -0800 Subject: [PATCH 175/216] Collection tests: workaround rawtypes when translating to Kotlin J2KT translates the `Comparable` rawtype to `Comparable`. That works for variables/method parameters but not in type arguments: In Java, `String` implements `Comparable` but in Kotlin `String` does not implement `Comparable`. Cast rawtypes to wildcards to test collection builder APIs that rely on rawtypes. Motivation: test coverage. In production code, it would be easier to explicitly pass in a (natural order) comparator which can have full type parameters. (relevant to our discussion of raw-types support: https://github.com/google/guava/issues/989) RELNOTES=n/a PiperOrigin-RevId: 610670138 --- .../collect/MinMaxPriorityQueueTest.java | 37 ++++++++++++++----- .../common/collect/MultimapBuilderTest.java | 24 +++++++++++- .../collect/MinMaxPriorityQueueTest.java | 37 ++++++++++++++----- .../common/collect/MultimapBuilderTest.java | 24 +++++++++++- .../google/common/collect/MultimapsTest.java | 13 ++++++- 5 files changed, 112 insertions(+), 23 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java b/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java index 71e4ac4cd75e..83a835609a3a 100644 --- a/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java +++ b/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java @@ -96,6 +96,9 @@ public void testCreation_comparator() { assertSame(SOME_COMPARATOR, queue.comparator()); } + // We use the rawtypeToWildcard "cast" to make the test work with J2KT in other tests. Leaving one + // test without that cast to verify that using the raw Comparable works outside J2KT. + @J2ktIncompatible // J2KT's translation of raw Comparable is not a supertype of Int translation public void testCreation_expectedSize() { MinMaxPriorityQueue queue = MinMaxPriorityQueue.expectedSize(8).create(); assertEquals(8, queue.capacity()); @@ -112,7 +115,8 @@ public void testCreation_expectedSize_comparator() { } public void testCreation_maximumSize() { - MinMaxPriorityQueue queue = MinMaxPriorityQueue.maximumSize(42).create(); + MinMaxPriorityQueue queue = + rawtypeToWildcard(MinMaxPriorityQueue.maximumSize(42)).create(); assertEquals(11, queue.capacity()); assertEquals(42, queue.maximumSize); checkNatural(queue); @@ -128,7 +132,7 @@ public void testCreation_comparator_maximumSize() { public void testCreation_expectedSize_maximumSize() { MinMaxPriorityQueue queue = - MinMaxPriorityQueue.expectedSize(8).maximumSize(42).create(); + rawtypeToWildcard(MinMaxPriorityQueue.expectedSize(8)).maximumSize(42).create(); assertEquals(8, queue.capacity()); assertEquals(42, queue.maximumSize); checkNatural(queue); @@ -154,7 +158,8 @@ public void testCreation_comparator_withContents() { } public void testCreation_expectedSize_withContents() { - MinMaxPriorityQueue queue = MinMaxPriorityQueue.expectedSize(8).create(NUMBERS); + MinMaxPriorityQueue queue = + rawtypeToWildcard(MinMaxPriorityQueue.expectedSize(8)).create(NUMBERS); assertEquals(6, queue.size()); assertEquals(8, queue.capacity()); checkUnbounded(queue); @@ -162,7 +167,8 @@ public void testCreation_expectedSize_withContents() { } public void testCreation_maximumSize_withContents() { - MinMaxPriorityQueue queue = MinMaxPriorityQueue.maximumSize(42).create(NUMBERS); + MinMaxPriorityQueue queue = + rawtypeToWildcard(MinMaxPriorityQueue.maximumSize(42)).create(NUMBERS); assertEquals(6, queue.size()); assertEquals(11, queue.capacity()); assertEquals(42, queue.maximumSize); @@ -198,7 +204,8 @@ public void testHeapIntact() { Random random = new Random(0); int heapSize = 99; int numberOfModifications = 100; - MinMaxPriorityQueue mmHeap = MinMaxPriorityQueue.expectedSize(heapSize).create(); + MinMaxPriorityQueue mmHeap = + rawtypeToWildcard(MinMaxPriorityQueue.expectedSize(heapSize)).create(); /* * this map would contain the same exact elements as the MinMaxHeap; the * value in the map is the number of occurrences of the key. @@ -470,7 +477,8 @@ public void testIteratorInvalidatingIteratorRemove2() { } public void testRemoveFromStringHeap() { - MinMaxPriorityQueue mmHeap = MinMaxPriorityQueue.expectedSize(5).create(); + MinMaxPriorityQueue mmHeap = + rawtypeToWildcard(MinMaxPriorityQueue.expectedSize(5)).create(); Collections.addAll(mmHeap, "foo", "bar", "foobar", "barfoo", "larry", "sergey", "eric"); assertTrue("Heap is not intact initially", mmHeap.isIntact()); assertEquals("bar", mmHeap.peek()); @@ -487,7 +495,7 @@ public void testRemoveFromStringHeap() { public void testCreateWithOrdering() { MinMaxPriorityQueue mmHeap = - MinMaxPriorityQueue.orderedBy(Ordering.natural().reverse()).create(); + MinMaxPriorityQueue.orderedBy(Ordering.natural().reverse()).create(); Collections.addAll(mmHeap, "foo", "bar", "foobar", "barfoo", "larry", "sergey", "eric"); assertTrue("Heap is not intact initially", mmHeap.isIntact()); assertEquals("sergey", mmHeap.peek()); @@ -496,7 +504,9 @@ public void testCreateWithOrdering() { public void testCreateWithCapacityAndOrdering() { MinMaxPriorityQueue mmHeap = - MinMaxPriorityQueue.orderedBy(Ordering.natural().reverse()).expectedSize(5).create(); + MinMaxPriorityQueue.orderedBy(Ordering.natural().reverse()) + .expectedSize(5) + .create(); Collections.addAll(mmHeap, 1, 7, 2, 56, 2, 5, 23, 68, 0, 3); assertTrue("Heap is not intact initially", mmHeap.isIntact()); assertEquals(68, (int) mmHeap.peek()); @@ -546,7 +556,8 @@ public void testRemoveAt() { Random random = new Random(seed); int heapSize = 999; int numberOfModifications = reduceIterationsIfGwt(500); - MinMaxPriorityQueue mmHeap = MinMaxPriorityQueue.expectedSize(heapSize).create(); + MinMaxPriorityQueue mmHeap = + rawtypeToWildcard(MinMaxPriorityQueue.expectedSize(heapSize)).create(); for (int i = 0; i < heapSize; i++) { mmHeap.add(random.nextInt()); } @@ -962,4 +973,12 @@ private static void assertEqualsUsingStartedWith( assertEquals("Started with " + startedWith, expected, actual); } } + + // J2kt cannot translate the Comparable rawtype in a usable way (it becomes Comparable + // but types are typically only Comparable to themselves). + @SuppressWarnings({"rawtypes", "unchecked"}) + private static MinMaxPriorityQueue.Builder> rawtypeToWildcard( + MinMaxPriorityQueue.Builder builder) { + return (MinMaxPriorityQueue.Builder) builder; + } } diff --git a/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java b/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java index 0166c7e6c233..9248b4c22ae5 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.MultimapBuilder.MultimapBuilderWithKeys; +import com.google.common.collect.MultimapBuilder.SortedSetMultimapBuilder; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; @@ -28,6 +29,7 @@ import java.util.SortedMap; import java.util.SortedSet; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link MultimapBuilder}. @@ -38,6 +40,7 @@ @ElementTypesAreNonnullByDefault public class MultimapBuilderTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // doesn't build without explicit type parameters on build() methods public void testGenerics() { ListMultimap a = MultimapBuilder.hashKeys().arrayListValues().build(); @@ -50,13 +53,15 @@ public void testGenerics_gwtCompatible() { ListMultimap a = MultimapBuilder.hashKeys().arrayListValues().build(); SortedSetMultimap b = - MultimapBuilder.linkedHashKeys().treeSetValues().build(); + rawtypeToWildcard(MultimapBuilder.linkedHashKeys().treeSetValues()) + .build(); SetMultimap c = MultimapBuilder.treeKeys(String.CASE_INSENSITIVE_ORDER) .hashSetValues() .build(); } + @J2ktIncompatible @GwtIncompatible // doesn't build without explicit type parameters on build() methods public void testTreeKeys() { ListMultimap multimap = MultimapBuilder.treeKeys().arrayListValues().build(); @@ -66,11 +71,26 @@ public void testTreeKeys() { public void testTreeKeys_gwtCompatible() { ListMultimap multimap = - MultimapBuilder.treeKeys().arrayListValues().build(); + rawtypeToWildcard(MultimapBuilder.treeKeys()).arrayListValues().build(); assertTrue(multimap.keySet() instanceof SortedSet); assertTrue(multimap.asMap() instanceof SortedMap); } + // J2kt cannot translate the Comparable rawtype in a usable way (it becomes Comparable + // but types are typically only Comparable to themselves). + @SuppressWarnings({"rawtypes", "unchecked"}) + private static MultimapBuilderWithKeys> rawtypeToWildcard( + MultimapBuilderWithKeys treeKeys) { + return (MultimapBuilderWithKeys) treeKeys; + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + private static + SortedSetMultimapBuilder> rawtypeToWildcard( + SortedSetMultimapBuilder setMultimapBuilder) { + return (SortedSetMultimapBuilder) setMultimapBuilder; + } + @J2ktIncompatible @GwtIncompatible // serialization public void testSerialization() throws Exception { diff --git a/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java index 71e4ac4cd75e..83a835609a3a 100644 --- a/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java +++ b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java @@ -96,6 +96,9 @@ public void testCreation_comparator() { assertSame(SOME_COMPARATOR, queue.comparator()); } + // We use the rawtypeToWildcard "cast" to make the test work with J2KT in other tests. Leaving one + // test without that cast to verify that using the raw Comparable works outside J2KT. + @J2ktIncompatible // J2KT's translation of raw Comparable is not a supertype of Int translation public void testCreation_expectedSize() { MinMaxPriorityQueue queue = MinMaxPriorityQueue.expectedSize(8).create(); assertEquals(8, queue.capacity()); @@ -112,7 +115,8 @@ public void testCreation_expectedSize_comparator() { } public void testCreation_maximumSize() { - MinMaxPriorityQueue queue = MinMaxPriorityQueue.maximumSize(42).create(); + MinMaxPriorityQueue queue = + rawtypeToWildcard(MinMaxPriorityQueue.maximumSize(42)).create(); assertEquals(11, queue.capacity()); assertEquals(42, queue.maximumSize); checkNatural(queue); @@ -128,7 +132,7 @@ public void testCreation_comparator_maximumSize() { public void testCreation_expectedSize_maximumSize() { MinMaxPriorityQueue queue = - MinMaxPriorityQueue.expectedSize(8).maximumSize(42).create(); + rawtypeToWildcard(MinMaxPriorityQueue.expectedSize(8)).maximumSize(42).create(); assertEquals(8, queue.capacity()); assertEquals(42, queue.maximumSize); checkNatural(queue); @@ -154,7 +158,8 @@ public void testCreation_comparator_withContents() { } public void testCreation_expectedSize_withContents() { - MinMaxPriorityQueue queue = MinMaxPriorityQueue.expectedSize(8).create(NUMBERS); + MinMaxPriorityQueue queue = + rawtypeToWildcard(MinMaxPriorityQueue.expectedSize(8)).create(NUMBERS); assertEquals(6, queue.size()); assertEquals(8, queue.capacity()); checkUnbounded(queue); @@ -162,7 +167,8 @@ public void testCreation_expectedSize_withContents() { } public void testCreation_maximumSize_withContents() { - MinMaxPriorityQueue queue = MinMaxPriorityQueue.maximumSize(42).create(NUMBERS); + MinMaxPriorityQueue queue = + rawtypeToWildcard(MinMaxPriorityQueue.maximumSize(42)).create(NUMBERS); assertEquals(6, queue.size()); assertEquals(11, queue.capacity()); assertEquals(42, queue.maximumSize); @@ -198,7 +204,8 @@ public void testHeapIntact() { Random random = new Random(0); int heapSize = 99; int numberOfModifications = 100; - MinMaxPriorityQueue mmHeap = MinMaxPriorityQueue.expectedSize(heapSize).create(); + MinMaxPriorityQueue mmHeap = + rawtypeToWildcard(MinMaxPriorityQueue.expectedSize(heapSize)).create(); /* * this map would contain the same exact elements as the MinMaxHeap; the * value in the map is the number of occurrences of the key. @@ -470,7 +477,8 @@ public void testIteratorInvalidatingIteratorRemove2() { } public void testRemoveFromStringHeap() { - MinMaxPriorityQueue mmHeap = MinMaxPriorityQueue.expectedSize(5).create(); + MinMaxPriorityQueue mmHeap = + rawtypeToWildcard(MinMaxPriorityQueue.expectedSize(5)).create(); Collections.addAll(mmHeap, "foo", "bar", "foobar", "barfoo", "larry", "sergey", "eric"); assertTrue("Heap is not intact initially", mmHeap.isIntact()); assertEquals("bar", mmHeap.peek()); @@ -487,7 +495,7 @@ public void testRemoveFromStringHeap() { public void testCreateWithOrdering() { MinMaxPriorityQueue mmHeap = - MinMaxPriorityQueue.orderedBy(Ordering.natural().reverse()).create(); + MinMaxPriorityQueue.orderedBy(Ordering.natural().reverse()).create(); Collections.addAll(mmHeap, "foo", "bar", "foobar", "barfoo", "larry", "sergey", "eric"); assertTrue("Heap is not intact initially", mmHeap.isIntact()); assertEquals("sergey", mmHeap.peek()); @@ -496,7 +504,9 @@ public void testCreateWithOrdering() { public void testCreateWithCapacityAndOrdering() { MinMaxPriorityQueue mmHeap = - MinMaxPriorityQueue.orderedBy(Ordering.natural().reverse()).expectedSize(5).create(); + MinMaxPriorityQueue.orderedBy(Ordering.natural().reverse()) + .expectedSize(5) + .create(); Collections.addAll(mmHeap, 1, 7, 2, 56, 2, 5, 23, 68, 0, 3); assertTrue("Heap is not intact initially", mmHeap.isIntact()); assertEquals(68, (int) mmHeap.peek()); @@ -546,7 +556,8 @@ public void testRemoveAt() { Random random = new Random(seed); int heapSize = 999; int numberOfModifications = reduceIterationsIfGwt(500); - MinMaxPriorityQueue mmHeap = MinMaxPriorityQueue.expectedSize(heapSize).create(); + MinMaxPriorityQueue mmHeap = + rawtypeToWildcard(MinMaxPriorityQueue.expectedSize(heapSize)).create(); for (int i = 0; i < heapSize; i++) { mmHeap.add(random.nextInt()); } @@ -962,4 +973,12 @@ private static void assertEqualsUsingStartedWith( assertEquals("Started with " + startedWith, expected, actual); } } + + // J2kt cannot translate the Comparable rawtype in a usable way (it becomes Comparable + // but types are typically only Comparable to themselves). + @SuppressWarnings({"rawtypes", "unchecked"}) + private static MinMaxPriorityQueue.Builder> rawtypeToWildcard( + MinMaxPriorityQueue.Builder builder) { + return (MinMaxPriorityQueue.Builder) builder; + } } diff --git a/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java b/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java index 0166c7e6c233..9248b4c22ae5 100644 --- a/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapBuilderTest.java @@ -20,6 +20,7 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.MultimapBuilder.MultimapBuilderWithKeys; +import com.google.common.collect.MultimapBuilder.SortedSetMultimapBuilder; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.ObjectInputStream; @@ -28,6 +29,7 @@ import java.util.SortedMap; import java.util.SortedSet; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link MultimapBuilder}. @@ -38,6 +40,7 @@ @ElementTypesAreNonnullByDefault public class MultimapBuilderTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // doesn't build without explicit type parameters on build() methods public void testGenerics() { ListMultimap a = MultimapBuilder.hashKeys().arrayListValues().build(); @@ -50,13 +53,15 @@ public void testGenerics_gwtCompatible() { ListMultimap a = MultimapBuilder.hashKeys().arrayListValues().build(); SortedSetMultimap b = - MultimapBuilder.linkedHashKeys().treeSetValues().build(); + rawtypeToWildcard(MultimapBuilder.linkedHashKeys().treeSetValues()) + .build(); SetMultimap c = MultimapBuilder.treeKeys(String.CASE_INSENSITIVE_ORDER) .hashSetValues() .build(); } + @J2ktIncompatible @GwtIncompatible // doesn't build without explicit type parameters on build() methods public void testTreeKeys() { ListMultimap multimap = MultimapBuilder.treeKeys().arrayListValues().build(); @@ -66,11 +71,26 @@ public void testTreeKeys() { public void testTreeKeys_gwtCompatible() { ListMultimap multimap = - MultimapBuilder.treeKeys().arrayListValues().build(); + rawtypeToWildcard(MultimapBuilder.treeKeys()).arrayListValues().build(); assertTrue(multimap.keySet() instanceof SortedSet); assertTrue(multimap.asMap() instanceof SortedMap); } + // J2kt cannot translate the Comparable rawtype in a usable way (it becomes Comparable + // but types are typically only Comparable to themselves). + @SuppressWarnings({"rawtypes", "unchecked"}) + private static MultimapBuilderWithKeys> rawtypeToWildcard( + MultimapBuilderWithKeys treeKeys) { + return (MultimapBuilderWithKeys) treeKeys; + } + + @SuppressWarnings({"rawtypes", "unchecked"}) + private static + SortedSetMultimapBuilder> rawtypeToWildcard( + SortedSetMultimapBuilder setMultimapBuilder) { + return (SortedSetMultimapBuilder) setMultimapBuilder; + } + @J2ktIncompatible @GwtIncompatible // serialization public void testSerialization() throws Exception { diff --git a/guava-tests/test/com/google/common/collect/MultimapsTest.java b/guava-tests/test/com/google/common/collect/MultimapsTest.java index adee63bc8b99..f6e9e4b6ffd2 100644 --- a/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -34,6 +34,7 @@ import com.google.common.base.Predicates; import com.google.common.base.Supplier; import com.google.common.collect.Maps.EntryTransformer; +import com.google.common.collect.MultimapBuilder.MultimapBuilderWithKeys; import com.google.common.collect.testing.IteratorTester; import com.google.common.collect.testing.google.UnmodifiableCollectionTests; import com.google.common.primitives.Chars; @@ -83,7 +84,17 @@ public void testMultimapCollectorGenerics() { Stream.of("foo", "bar", "quux") .collect( Multimaps.toMultimap( - String::length, s -> s, MultimapBuilder.treeKeys().arrayListValues()::build)); + String::length, + s -> s, + rawtypeToWildcard(MultimapBuilder.treeKeys()).arrayListValues()::build)); + } + + // J2kt maps rawtype Comparable to Comparable<*>, but types generally implement only + // Comparable + @SuppressWarnings({"rawtypes", "unchecked"}) + private static MultimapBuilderWithKeys> rawtypeToWildcard( + MultimapBuilderWithKeys builder) { + return (MultimapBuilderWithKeys) builder; } public void testToMultimap() { From 58e30d60ac49d5726031da338bf2e13afd553798 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Tue, 27 Feb 2024 05:24:38 -0800 Subject: [PATCH 176/216] Disable collection tests for J2KT broken due to Java emulation issues MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - issues inherited from GWT/J2CLs’s Java emulation - APIs that J2KT is not able to emulate - Kotlin Native crashes after incorrect unchecked casts RELNOTES=n/a PiperOrigin-RevId: 610720383 --- .../common/collect/ForwardingSortedMapImplementsMapTest.java | 3 +++ .../test/com/google/common/collect/ImmutableTableTest.java | 1 + .../guava-tests/test/com/google/common/collect/ListsTest.java | 1 + .../test/com/google/common/collect/ComparisonChainTest.java | 2 ++ .../common/collect/ForwardingSortedMapImplementsMapTest.java | 3 +++ .../test/com/google/common/collect/ImmutableMapTest.java | 1 + .../test/com/google/common/collect/ImmutableTableTest.java | 1 + guava-tests/test/com/google/common/collect/ListsTest.java | 1 + 8 files changed, 13 insertions(+) diff --git a/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java b/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java index 9dc386ea490d..daa929df6c2c 100644 --- a/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java @@ -17,6 +17,7 @@ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.MapInterfaceTest; import com.google.common.collect.testing.SortedMapInterfaceTest; import java.util.SortedMap; @@ -73,6 +74,7 @@ protected Integer getValueNotInPopulatedMap() throws UnsupportedOperationExcepti return -1; } + @J2ktIncompatible // https://youtrack.jetbrains.com/issue/KT-58242/ undefined behavior (crash) @Override public void testContainsKey() { try { @@ -81,6 +83,7 @@ public void testContainsKey() { } } + @J2ktIncompatible // https://youtrack.jetbrains.com/issue/KT-58242/ undefined behavior (crash) @Override public void testEntrySetContainsEntryIncompatibleKey() { try { diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java index f3f4267e590d..a3cf4e6b1685 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java @@ -471,6 +471,7 @@ private static void validateReserialization(Table original) { assertThat(copy.columnKeySet()).containsExactlyElementsIn(original.columnKeySet()).inOrder(); } + @J2ktIncompatible @GwtIncompatible // Mind-bogglingly slow in GWT @AndroidIncompatible // slow public void testOverflowCondition() { diff --git a/android/guava-tests/test/com/google/common/collect/ListsTest.java b/android/guava-tests/test/com/google/common/collect/ListsTest.java index 23a4be37581d..1b09d1f3b907 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsTest.java @@ -996,6 +996,7 @@ public void testPartitionSize_1() { } @GwtIncompatible // cannot do such a big explicit copy + @J2ktIncompatible // too slow public void testPartitionSize_2() { assertEquals(2, Lists.partition(Collections.nCopies(0x40000001, 1), 0x40000000).size()); } diff --git a/guava-tests/test/com/google/common/collect/ComparisonChainTest.java b/guava-tests/test/com/google/common/collect/ComparisonChainTest.java index d756a8c2c512..689d7711c446 100644 --- a/guava-tests/test/com/google/common/collect/ComparisonChainTest.java +++ b/guava-tests/test/com/google/common/collect/ComparisonChainTest.java @@ -25,6 +25,7 @@ import static java.util.Comparator.nullsLast; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.primitives.Booleans; import java.util.Comparator; import junit.framework.AssertionFailedError; @@ -157,6 +158,7 @@ public String toString() { } /** Validates that the Comparator equivalent we document is correct. */ + @J2ktIncompatible // TODO b/315311435 - J2kt cannot emulate Comparator.thenComparing() public void testComparatorEquivalent() { Comparator comparatorUsingComparisonChain = (a, b) -> diff --git a/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java index 9dc386ea490d..daa929df6c2c 100644 --- a/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java +++ b/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java @@ -17,6 +17,7 @@ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.collect.testing.MapInterfaceTest; import com.google.common.collect.testing.SortedMapInterfaceTest; import java.util.SortedMap; @@ -73,6 +74,7 @@ protected Integer getValueNotInPopulatedMap() throws UnsupportedOperationExcepti return -1; } + @J2ktIncompatible // https://youtrack.jetbrains.com/issue/KT-58242/ undefined behavior (crash) @Override public void testContainsKey() { try { @@ -81,6 +83,7 @@ public void testContainsKey() { } } + @J2ktIncompatible // https://youtrack.jetbrains.com/issue/KT-58242/ undefined behavior (crash) @Override public void testEntrySetContainsEntryIncompatibleKey() { try { diff --git a/guava-tests/test/com/google/common/collect/ImmutableMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableMapTest.java index 2718e98db9c7..2e6ef0270942 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMapTest.java @@ -1098,6 +1098,7 @@ private static T[] arrayOf(T... objs) { return objs; } + @J2ktIncompatible @GwtIncompatible("assumptions about splitting") public void testKeySetSplittable() { ImmutableMap map = diff --git a/guava-tests/test/com/google/common/collect/ImmutableTableTest.java b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java index 3b0548ba4992..22d151fb088c 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableTableTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java @@ -477,6 +477,7 @@ private static void validateReserialization(Table original) { assertThat(copy.columnKeySet()).containsExactlyElementsIn(original.columnKeySet()).inOrder(); } + @J2ktIncompatible @GwtIncompatible // Mind-bogglingly slow in GWT @AndroidIncompatible // slow public void testOverflowCondition() { diff --git a/guava-tests/test/com/google/common/collect/ListsTest.java b/guava-tests/test/com/google/common/collect/ListsTest.java index 23a4be37581d..1b09d1f3b907 100644 --- a/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/guava-tests/test/com/google/common/collect/ListsTest.java @@ -996,6 +996,7 @@ public void testPartitionSize_1() { } @GwtIncompatible // cannot do such a big explicit copy + @J2ktIncompatible // too slow public void testPartitionSize_2() { assertEquals(2, Lists.partition(Collections.nCopies(0x40000001, 1), 0x40000000).size()); } From 25fef6f2ec43b2ff34b1cc1ac499b8d040557cc1 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 27 Feb 2024 11:16:08 -0800 Subject: [PATCH 177/216] Fix, suppress, and/or localize suppressions for `unchecked` and `rawtypes` warnings under `gwt`. RELNOTES=n/a PiperOrigin-RevId: 610814707 --- .../com/google/common/cache/LocalCache.java | 54 +++++++++++-------- .../google/common/collect/ImmutableList.java | 8 +-- .../google/common/collect/ImmutableMap.java | 10 ++-- .../common/collect/ImmutableSortedMap.java | 16 +++--- .../common/collect/ImmutableSortedSet.java | 24 +++++---- .../RangeGwtSerializationDependencies.java | 1 + .../common/collect/RegularImmutableBiMap.java | 1 + 7 files changed, 70 insertions(+), 44 deletions(-) diff --git a/guava-gwt/src-super/com/google/common/cache/super/com/google/common/cache/LocalCache.java b/guava-gwt/src-super/com/google/common/cache/super/com/google/common/cache/LocalCache.java index fb3a03e418b7..9bdbe5d4f9cd 100644 --- a/guava-gwt/src-super/com/google/common/cache/super/com/google/common/cache/LocalCache.java +++ b/guava-gwt/src-super/com/google/common/cache/super/com/google/common/cache/LocalCache.java @@ -55,7 +55,7 @@ public class LocalCache implements ConcurrentMap { private final LinkedHashMap> cachingHashMap; private final CacheLoader loader; - private final RemovalListener removalListener; + private final RemovalListener removalListener; private final StatsCounter statsCounter; private final Ticker ticker; private final long expireAfterWrite; @@ -107,7 +107,11 @@ public V get(Object key) { } else { statsCounter.recordEviction(); statsCounter.recordMisses(1); - alertListenerIfPresent(key, value.getValue(), RemovalCause.EXPIRED); + // `key` was in the cache, so it's a K. + // (Or it's a weird case like a LinkedList in a Cache, but *shrug*.) + @SuppressWarnings("unchecked") + K castKey = (K) key; + alertListenerIfPresent(castKey, value.getValue(), RemovalCause.EXPIRED); cachingHashMap.remove(key); return null; } @@ -132,13 +136,17 @@ public V remove(Object key) { Timestamped stamped = cachingHashMap.remove(key); if (stamped != null) { V value = stamped.getValue(); + // `key` was in the cache, so it's a K. + // (Or it's a weird case like a LinkedList in a Cache, but *shrug*.) + @SuppressWarnings("unchecked") + K castKey = (K) key; if (!isExpired(stamped)) { - alertListenerIfPresent(key, value, RemovalCause.EXPLICIT); + alertListenerIfPresent(castKey, value, RemovalCause.EXPLICIT); return value; } - alertListenerIfPresent(key, value, RemovalCause.EXPIRED); + alertListenerIfPresent(castKey, value, RemovalCause.EXPIRED); } return null; } @@ -173,7 +181,14 @@ public V putIfAbsent(K key, V value) { @Override public boolean remove(Object key, Object value) { if (value.equals(get(key))) { - alertListenerIfPresent(key, value, RemovalCause.EXPLICIT); + // `key` was in the cache, so it's a K. + // (Or it's a weird case like a LinkedList in a Cache, but *shrug*.) + @SuppressWarnings("unchecked") + K castKey = (K) key; + @SuppressWarnings("unchecked") // similar to the above + V castValue = (V) value; + + alertListenerIfPresent(castKey, castValue, RemovalCause.EXPLICIT); remove(key); return true; } @@ -240,29 +255,19 @@ private long currentTimeNanos() { return ticker.read(); } - private void alertListenerIfPresent(Object key, Object value, RemovalCause cause) { + private void alertListenerIfPresent(K key, V value, RemovalCause cause) { if (removalListener != null) { removalListener.onRemoval(RemovalNotification.create(key, value, cause)); } } @SuppressWarnings("GoodTime") // timestamps as numeric primitives - private V load(Object key) throws ExecutionException { + private V load(K key) throws ExecutionException { long startTime = ticker.read(); V calculatedValue; try { - /* - * This cast isn't safe, but we can rely on the fact that K is almost always passed to - * Map.get(), and tools like IDEs and Findbugs can catch situations where this isn't the - * case. - * - * The alternative is to add an overloaded method, but the chances of a user calling get() - * instead of the new API and the risks inherent in adding a new API outweigh this little - * hole. - */ - K castKey = (K) key; - calculatedValue = loader.load(castKey); - put(castKey, calculatedValue); + calculatedValue = loader.load(key); + put(key, calculatedValue); } catch (RuntimeException e) { statsCounter.recordLoadException(ticker.read() - startTime); throw new UncheckedExecutionException(e); @@ -292,7 +297,12 @@ private V getIfPresent(Object key) { value.updateTimestamp(); return value.getValue(); } else { - alertListenerIfPresent(key, value.getValue(), RemovalCause.EXPIRED); + // `key` was in the cache, so it's a K. + // (Or it's a weird case like a LinkedList in a Cache, but *shrug*.) + @SuppressWarnings("unchecked") + K castKey = (K) key; + + alertListenerIfPresent(castKey, value.getValue(), RemovalCause.EXPIRED); cachingHashMap.remove(key); return null; } @@ -473,7 +483,7 @@ public void refresh(K key) { private class CapacityEnforcingLinkedHashMap extends LinkedHashMap> { private final StatsCounter statsCounter; - private final RemovalListener removalListener; + private final @Nullable RemovalListener removalListener; private final long maximumSize; public CapacityEnforcingLinkedHashMap( @@ -482,7 +492,7 @@ public CapacityEnforcingLinkedHashMap( boolean accessOrder, long maximumSize, StatsCounter statsCounter, - @Nullable RemovalListener removalListener) { + @Nullable RemovalListener removalListener) { super(initialCapacity, loadFactor, accessOrder); this.maximumSize = maximumSize; this.statsCounter = statsCounter; diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableList.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableList.java index 1d6d6fb61806..12e6041b0fbd 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableList.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableList.java @@ -160,7 +160,9 @@ private static ImmutableList copyFromCollection(Collection c case 0: return of(); case 1: - return of((E) elements[0]); + @SuppressWarnings("unchecked") // safe because it came from `collection` + E element = (E) elements[0]; + return of(element); default: return new RegularImmutableList(ImmutableList.nullCheckedList(elements)); } @@ -193,8 +195,8 @@ static ImmutableList asImmutableList(Object[] elements) { public static > ImmutableList sortedCopyOf( Iterable elements) { - Comparable[] array = Iterables.toArray(elements, new Comparable[0]); - checkElementsNotNull(array); + Comparable[] array = Iterables.toArray(elements, new Comparable[0]); + checkElementsNotNull((Object[]) array); Arrays.sort(array); return asImmutableList(array); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMap.java index a5d890ef7ff4..8312220f9a0b 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableMap.java @@ -93,6 +93,7 @@ public UnmodifiableIterator> iterator() { ImmutableMap::copyOf); } + @SuppressWarnings("unchecked") // An empty map works for all types. public static ImmutableMap of() { return (ImmutableMap) RegularImmutableMap.EMPTY; } @@ -240,7 +241,7 @@ public static ImmutableMap of( @SafeVarargs public static ImmutableMap ofEntries(Entry... entries) { - return new RegularImmutableMap(entries); + return new RegularImmutableMap<>(entries); } public static Builder builder() { @@ -360,8 +361,8 @@ private static ImmutableMap fromEntryList( Entry entry = getOnlyElement(entries); return of((K) entry.getKey(), (V) entry.getValue()); default: - @SuppressWarnings("unchecked") - Entry[] entryArray = entries.toArray(new Entry[entries.size()]); + @SuppressWarnings("unchecked") // TODO(cpovirk): Consider storing an Entry[]. + Entry[] entryArray = entries.toArray((Entry[]) new Entry[entries.size()]); return new RegularImmutableMap(throwIfDuplicateKeys, entryArray); } } @@ -377,8 +378,9 @@ public static ImmutableMap copyOf(Map map checkNotNull(entry.getKey()); checkNotNull(entry.getValue()); } - @SuppressWarnings("unchecked") + @SuppressWarnings({"unchecked", "rawtypes"}) // immutable collections are safe for covariant casts + // and getting the generics right for EnumMap is difficult to impossible ImmutableMap result = ImmutableEnumMap.asImmutable(new EnumMap(enumMap)); return result; } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java index cc43b88a4668..a08906a86473 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedMap.java @@ -46,7 +46,7 @@ public final class ImmutableSortedMap extends ForwardingImmutableMap implements SortedMap { @SuppressWarnings("unchecked") - static final Comparator NATURAL_ORDER = Ordering.natural(); + static final Comparator NATURAL_ORDER = Ordering.natural(); // This reference is only used by GWT compiler to infer the keys and values // of the map that needs to be serialized. @@ -94,10 +94,10 @@ public final class ImmutableSortedMap extends ForwardingImmutableMap ImmutableSortedMap::copyOfSorted); } - // Casting to any type is safe because the set will never hold any elements. + // unsafe, comparator() returns a comparator on the specified type @SuppressWarnings("unchecked") public static ImmutableSortedMap of() { - return new Builder(NATURAL_ORDER).build(); + return new Builder((Comparator) NATURAL_ORDER).build(); } public static , V> ImmutableSortedMap of(K k1, V v1) { @@ -256,8 +256,10 @@ public static , V> ImmutableSortedMap of( .build(); } + // Unsafe, see ImmutableSortedMapFauxverideShim. + @SuppressWarnings("unchecked") public static ImmutableSortedMap copyOf(Map map) { - return copyOfInternal((Map) map, (Ordering) Ordering.natural()); + return copyOfInternal((Map) map, (Ordering) Ordering.natural()); } public static ImmutableSortedMap copyOf( @@ -265,9 +267,11 @@ public static ImmutableSortedMap copyOf( return copyOfInternal(map, checkNotNull(comparator)); } + // Unsafe, see ImmutableSortedMapFauxverideShim. + @SuppressWarnings("unchecked") public static ImmutableSortedMap copyOf( Iterable> entries) { - return new Builder(NATURAL_ORDER).putAll(entries).build(); + return new Builder((Comparator) NATURAL_ORDER).putAll(entries).build(); } public static ImmutableSortedMap copyOf( @@ -281,7 +285,7 @@ public static ImmutableSortedMap copyOfSorted(SortedMap comparator = - (map.comparator() == null) ? NATURAL_ORDER : map.comparator(); + (map.comparator() == null) ? (Comparator) NATURAL_ORDER : map.comparator(); return copyOfInternal(map, comparator); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java index 1f6e879b43ab..2a486736380b 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/ImmutableSortedSet.java @@ -53,13 +53,12 @@ public static ImmutableSortedSet.Builder builder() { throw new UnsupportedOperationException(); } - // TODO: Can we find a way to remove this @SuppressWarnings even for eclipse? - @SuppressWarnings("unchecked") - private static final Comparator NATURAL_ORDER = Ordering.natural(); + private static final Comparator NATURAL_ORDER = Ordering.natural(); @SuppressWarnings("unchecked") private static final ImmutableSortedSet NATURAL_EMPTY_SET = - new RegularImmutableSortedSet(new TreeSet(NATURAL_ORDER), false); + new RegularImmutableSortedSet( + new TreeSet((Comparator) NATURAL_ORDER), false); static ImmutableSortedSet emptySet(Comparator comparator) { checkNotNull(comparator); @@ -113,7 +112,7 @@ public static > ImmutableSortedSet of( Collections.addAll(all, e1, e2, e3, e4, e5, e6); Collections.addAll(all, remaining); // This is messed up. See TODO at top of file. - return ofInternal(Ordering.natural(), (E[]) all.toArray(new Comparable[0])); + return ofInternal(Ordering.natural(), (E[]) all.toArray(new Comparable[0])); } private static ImmutableSortedSet ofInternal( @@ -132,16 +131,22 @@ private static ImmutableSortedSet ofInternal( } } + // Unsafe, see ImmutableSortedSetFauxverideShim. + @SuppressWarnings("unchecked") public static ImmutableSortedSet copyOf(Collection elements) { - return copyOfInternal((Ordering) Ordering.natural(), (Collection) elements, false); + return copyOfInternal((Ordering) Ordering.natural(), (Collection) elements, false); } + // Unsafe, see ImmutableSortedSetFauxverideShim. + @SuppressWarnings("unchecked") public static ImmutableSortedSet copyOf(Iterable elements) { - return copyOfInternal((Ordering) Ordering.natural(), (Iterable) elements, false); + return copyOfInternal((Ordering) Ordering.natural(), (Iterable) elements, false); } + // Unsafe, see ImmutableSortedSetFauxverideShim. + @SuppressWarnings("unchecked") public static ImmutableSortedSet copyOf(Iterator elements) { - return copyOfInternal((Ordering) Ordering.natural(), (Iterator) elements); + return copyOfInternal((Ordering) Ordering.natural(), (Iterator) elements); } public static > ImmutableSortedSet copyOf(E[] elements) { @@ -166,11 +171,12 @@ public static ImmutableSortedSet copyOf( return copyOfInternal(comparator, elements); } + // We use NATURAL_ORDER only if the input was already using natural ordering. @SuppressWarnings("unchecked") public static ImmutableSortedSet copyOfSorted(SortedSet sortedSet) { Comparator comparator = sortedSet.comparator(); if (comparator == null) { - comparator = NATURAL_ORDER; + comparator = (Comparator) NATURAL_ORDER; } return copyOfInternal(comparator, sortedSet.iterator()); } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RangeGwtSerializationDependencies.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RangeGwtSerializationDependencies.java index 3e8f7ababc7f..d16804c376aa 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RangeGwtSerializationDependencies.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RangeGwtSerializationDependencies.java @@ -20,6 +20,7 @@ import java.io.Serializable; @GwtCompatible(emulated = true) +@SuppressWarnings("rawtypes") // https://github.com/google/guava/issues/989 abstract class RangeGwtSerializationDependencies implements Serializable { C dummy; } diff --git a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableBiMap.java b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableBiMap.java index 234f599f928a..6c6234ba4371 100644 --- a/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableBiMap.java +++ b/guava-gwt/src-super/com/google/common/collect/super/com/google/common/collect/RegularImmutableBiMap.java @@ -34,6 +34,7 @@ class RegularImmutableBiMap extends ImmutableBiMap { // of the lists that needs to be serialized. private ImmutableBiMap inverse; + @SuppressWarnings("unchecked") // used only for the empty map, which works for any types RegularImmutableBiMap() { super(new RegularImmutableMap(new HashMap())); this.inverse = (ImmutableBiMap) this; From 91d2a3408dcea8a4560346efa9613d009af9cdf8 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 27 Feb 2024 11:16:14 -0800 Subject: [PATCH 178/216] Bump github/codeql-action from 3.24.4 to 3.24.5 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.4 to 3.24.5. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/e2e140ad1441662206e8f97754b166877dfa1c73...47b3d888fe66b639e431abf22ebca059152f1eea) Fixes #7036 RELNOTES=n/a PiperOrigin-RevId: 610814741 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index fd5ac75d7b0a..e93fb6062374 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@e2e140ad1441662206e8f97754b166877dfa1c73 # v3.24.4 + uses: github/codeql-action/upload-sarif@47b3d888fe66b639e431abf22ebca059152f1eea # v3.24.5 with: sarif_file: results.sarif From 0ea03dae3b57cfd4a5f0123715954a25f2d21114 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Tue, 27 Feb 2024 11:22:08 -0800 Subject: [PATCH 179/216] OrderingTest: nullness type-bound fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit `immutableSortedCopy` is only applicable to itereables that don’t contain null, which is guaranteed with a runtime check in this case. Plus a rawtype tweak for J2KT. RELNOTES=n/a PiperOrigin-RevId: 610816720 --- .../test/com/google/common/collect/OrderingTest.java | 6 ++++-- .../test/com/google/common/collect/OrderingTest.java | 6 ++++-- 2 files changed, 8 insertions(+), 4 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/OrderingTest.java b/android/guava-tests/test/com/google/common/collect/OrderingTest.java index 97e9cf7dea83..311552735a1e 100644 --- a/android/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/android/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -42,6 +42,7 @@ import java.util.Random; import java.util.RandomAccess; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -916,7 +917,7 @@ private static void testExhaustively( // shoot me, but I didn't want to deal with wildcards through the whole test @SuppressWarnings("unchecked") - Scenario starter = new Scenario<>((Ordering) ordering, list, emptyArray); + Scenario starter = new Scenario<>((Ordering) ordering, list, emptyArray); verifyScenario(starter, 0); } @@ -1000,7 +1001,8 @@ void testSortedCopy() { assertEquals(strictlyOrderedList, ordering.sortedCopy(shuffledList)); if (!strictlyOrderedList.contains(null)) { - assertEquals(strictlyOrderedList, ordering.immutableSortedCopy(shuffledList)); + List<@NonNull T> nonNullShuffledList = (List<@NonNull T>) shuffledList; + assertEquals(strictlyOrderedList, ordering.immutableSortedCopy(nonNullShuffledList)); } } } diff --git a/guava-tests/test/com/google/common/collect/OrderingTest.java b/guava-tests/test/com/google/common/collect/OrderingTest.java index 97e9cf7dea83..311552735a1e 100644 --- a/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -42,6 +42,7 @@ import java.util.Random; import java.util.RandomAccess; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -916,7 +917,7 @@ private static void testExhaustively( // shoot me, but I didn't want to deal with wildcards through the whole test @SuppressWarnings("unchecked") - Scenario starter = new Scenario<>((Ordering) ordering, list, emptyArray); + Scenario starter = new Scenario<>((Ordering) ordering, list, emptyArray); verifyScenario(starter, 0); } @@ -1000,7 +1001,8 @@ void testSortedCopy() { assertEquals(strictlyOrderedList, ordering.sortedCopy(shuffledList)); if (!strictlyOrderedList.contains(null)) { - assertEquals(strictlyOrderedList, ordering.immutableSortedCopy(shuffledList)); + List<@NonNull T> nonNullShuffledList = (List<@NonNull T>) shuffledList; + assertEquals(strictlyOrderedList, ordering.immutableSortedCopy(nonNullShuffledList)); } } } From 526682c20e36827cea3730a0009fd18725568c2e Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Tue, 27 Feb 2024 11:57:58 -0800 Subject: [PATCH 180/216] Workaround https://github.com/google/guava/issues/6824 for J2KT test RELNOTES=n/a PiperOrigin-RevId: 610828206 --- .../com/google/common/collect/TableCollectorsTest.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/guava-tests/test/com/google/common/collect/TableCollectorsTest.java b/guava-tests/test/com/google/common/collect/TableCollectorsTest.java index ced6751a3b9a..8ecfcde69cb1 100644 --- a/guava-tests/test/com/google/common/collect/TableCollectorsTest.java +++ b/guava-tests/test/com/google/common/collect/TableCollectorsTest.java @@ -25,9 +25,11 @@ import com.google.common.collect.Table.Cell; import com.google.common.testing.CollectorTester; import java.util.function.BiPredicate; +import java.util.function.BinaryOperator; import java.util.stream.Collector; import java.util.stream.Stream; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** Unit tests for {@link TableCollectors}. */ @GwtCompatible(emulated = true) @@ -191,12 +193,15 @@ public void testToTable() { } public void testToTableNullMerge() { + // TODO github.com/google/guava/issues/6824 - the null merge feature is not compatible with the + // current nullness annotation of the mergeFunction parameter. Work around with casts. + BinaryOperator<@Nullable Integer> mergeFunction = (v1, v2) -> null; Collector, ?, Table> collector = TableCollectors.toTable( Cell::getRowKey, Cell::getColumnKey, Cell::getValue, - (Integer v1, Integer v2) -> null, + (BinaryOperator) mergeFunction, HashBasedTable::create); BiPredicate, Table> equivalence = pairwiseOnResultOf(Table::cellSet); From aedd3812291e626f10da16d32a211f1505f6a1fe Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Wed, 28 Feb 2024 07:19:00 -0800 Subject: [PATCH 181/216] IterablesTest: use `Iterable<@Nullable String>` where necessary The helper methods could use `@PolyNull String` but that has no Kotlin equivalent. The methods are not string-specific, so can be fully generic. RELNOTES=n/a PiperOrigin-RevId: 611093215 --- .../google/common/collect/IterablesTest.java | 22 +++++++++---------- .../google/common/collect/IterablesTest.java | 22 +++++++++---------- 2 files changed, 22 insertions(+), 22 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/IterablesTest.java b/android/guava-tests/test/com/google/common/collect/IterablesTest.java index 464def64bb7f..8ac8a0c4af6c 100644 --- a/android/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -94,11 +94,11 @@ public Iterator iterator() { assertEquals(5, Iterables.size(collection)); } - private static Iterable iterable(String... elements) { - final List list = asList(elements); - return new Iterable() { + private static Iterable iterable(T... elements) { + final List list = asList(elements); + return new Iterable() { @Override - public Iterator iterator() { + public Iterator iterator() { return list.iterator(); } }; @@ -115,7 +115,7 @@ public void test_contains_null_set_no() { } public void test_contains_null_iterable_yes() { - Iterable set = iterable("a", null, "b"); + Iterable<@Nullable String> set = iterable("a", null, "b"); assertTrue(Iterables.contains(set, null)); } @@ -135,7 +135,7 @@ public void test_contains_nonnull_set_no() { } public void test_contains_nonnull_iterable_yes() { - Iterable set = iterable("a", null, "b"); + Iterable<@Nullable String> set = iterable("a", null, "b"); assertTrue(Iterables.contains(set, "b")); } @@ -477,7 +477,7 @@ public void testPartitionNonRandomAccessInput() { public void testPaddedPartition_basic() { List list = asList(1, 2, 3, 4, 5); - Iterable> partitions = Iterables.paddedPartition(list, 2); + Iterable> partitions = Iterables.paddedPartition(list, 2); assertEquals(3, Iterables.size(partitions)); assertEquals(asList(5, null), Iterables.getLast(partitions)); } @@ -1173,11 +1173,11 @@ public void testIterableWithToStringNull() { } /** Returns a new iterable over the specified strings. */ - private static Iterable create(String... strings) { - final List list = asList(strings); - return new FluentIterable() { + private static Iterable create(T... ts) { + final List list = asList(ts); + return new FluentIterable() { @Override - public Iterator iterator() { + public Iterator iterator() { return list.iterator(); } }; diff --git a/guava-tests/test/com/google/common/collect/IterablesTest.java b/guava-tests/test/com/google/common/collect/IterablesTest.java index c155c2110211..86470b08995c 100644 --- a/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -94,11 +94,11 @@ public Iterator iterator() { assertEquals(5, Iterables.size(collection)); } - private static Iterable iterable(String... elements) { - final List list = asList(elements); - return new Iterable() { + private static Iterable iterable(T... elements) { + final List list = asList(elements); + return new Iterable() { @Override - public Iterator iterator() { + public Iterator iterator() { return list.iterator(); } }; @@ -115,7 +115,7 @@ public void test_contains_null_set_no() { } public void test_contains_null_iterable_yes() { - Iterable set = iterable("a", null, "b"); + Iterable<@Nullable String> set = iterable("a", null, "b"); assertTrue(Iterables.contains(set, null)); } @@ -135,7 +135,7 @@ public void test_contains_nonnull_set_no() { } public void test_contains_nonnull_iterable_yes() { - Iterable set = iterable("a", null, "b"); + Iterable<@Nullable String> set = iterable("a", null, "b"); assertTrue(Iterables.contains(set, "b")); } @@ -506,7 +506,7 @@ public void testPartitionNonRandomAccessInput() { public void testPaddedPartition_basic() { List list = asList(1, 2, 3, 4, 5); - Iterable> partitions = Iterables.paddedPartition(list, 2); + Iterable> partitions = Iterables.paddedPartition(list, 2); assertEquals(3, Iterables.size(partitions)); assertEquals(asList(5, null), Iterables.getLast(partitions)); } @@ -1210,11 +1210,11 @@ public void testIterableWithToStringNull() { } /** Returns a new iterable over the specified strings. */ - private static Iterable create(String... strings) { - final List list = asList(strings); - return new FluentIterable() { + private static Iterable create(T... ts) { + final List list = asList(ts); + return new FluentIterable() { @Override - public Iterator iterator() { + public Iterator iterator() { return list.iterator(); } }; From 515601dba0dc51c176158190a939fa68b15f3a94 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Wed, 28 Feb 2024 08:02:59 -0800 Subject: [PATCH 182/216] Avoid test methods with type parameters MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit When running as Kotlin tests with J2KT’s test runner, this causes “error: not enough information to infer type variable K” In one case, the extra indirection lets us remove an unchecked cast. Other change in this commit: add a type bound to `powerSet` assertion that matches `powerSet`’s. RELNOTES=n/a PiperOrigin-RevId: 611104375 --- .../com/google/common/collect/MultimapsTest.java | 8 +++++++- .../test/com/google/common/collect/SetsTest.java | 3 ++- .../com/google/common/collect/MultimapsTest.java | 8 +++++++- .../test/com/google/common/collect/SetsTest.java | 15 +++++++++------ 4 files changed, 25 insertions(+), 9 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java index 1f97ee08de89..fecf1ef28bc6 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -922,7 +922,13 @@ public String transformEntry(String key, Integer value) { assertEquals("{a=[a1, a4, a4], b=[b6]}", transformed.toString()); } - public void testSynchronizedMultimapSampleCodeCompilation() { + public void testSynchronizedMultimapSampleCodeCompilation() { + // Extra indirection for J2KT, to avoid error: not enough information to infer type variable K + this.<@Nullable Object, @Nullable Object>genericTestSynchronizedMultimapSampleCodeCompilation(); + } + + private + void genericTestSynchronizedMultimapSampleCodeCompilation() { K key = null; Multimap multimap = Multimaps.synchronizedMultimap(HashMultimap.create()); diff --git a/android/guava-tests/test/com/google/common/collect/SetsTest.java b/android/guava-tests/test/com/google/common/collect/SetsTest.java index f6af682cdfda..6809d6ef509a 100644 --- a/android/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/android/guava-tests/test/com/google/common/collect/SetsTest.java @@ -1038,7 +1038,8 @@ public int hashCode() { }; } - private static void assertPowerSetHashCode(int expected, Set elements) { + // TODO b/327389044 - `Set elements` should be enough but J2KT needs the + private static void assertPowerSetHashCode(int expected, Set elements) { assertEquals(expected, powerSet(elements).hashCode()); } diff --git a/guava-tests/test/com/google/common/collect/MultimapsTest.java b/guava-tests/test/com/google/common/collect/MultimapsTest.java index f6e9e4b6ffd2..2459834c11a9 100644 --- a/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -991,7 +991,13 @@ public String transformEntry(String key, Integer value) { assertEquals("{a=[a1, a4, a4], b=[b6]}", transformed.toString()); } - public void testSynchronizedMultimapSampleCodeCompilation() { + public void testSynchronizedMultimapSampleCodeCompilation() { + // Extra indirection for J2KT, to avoid error: not enough information to infer type variable K + this.<@Nullable Object, @Nullable Object>genericTestSynchronizedMultimapSampleCodeCompilation(); + } + + private + void genericTestSynchronizedMultimapSampleCodeCompilation() { K key = null; Multimap multimap = Multimaps.synchronizedMultimap(HashMultimap.create()); diff --git a/guava-tests/test/com/google/common/collect/SetsTest.java b/guava-tests/test/com/google/common/collect/SetsTest.java index 103d5cfad4c0..3e6f01d2b67c 100644 --- a/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/guava-tests/test/com/google/common/collect/SetsTest.java @@ -361,11 +361,13 @@ public void testToImmutableEnumSetEmpty() { assertThat(units).isEmpty(); } - public void testToImmutableEnumSetReused() { - // An unchecked cast lets us refer to the accumulator as an A and invoke the callbacks manually - @SuppressWarnings("unchecked") - Collector> collector = - (Collector) Sets.toImmutableEnumSet(); + public void testToImmutableEnumSetReused() { + // The method call lets us capture the accumulator as an A and invoke the callbacks manually + genericTestToImmutableEnumSetReused(Sets.toImmutableEnumSet()); + } + + private static void genericTestToImmutableEnumSetReused( + Collector> collector) { A accumulator = collector.supplier().get(); BiConsumer adder = collector.accumulator(); adder.accept(accumulator, SomeEnum.A); @@ -1069,7 +1071,8 @@ public int hashCode() { }; } - private static void assertPowerSetHashCode(int expected, Set elements) { + // TODO b/327389044 - `Set elements` should be enough but J2KT needs the + private static void assertPowerSetHashCode(int expected, Set elements) { assertEquals(expected, powerSet(elements).hashCode()); } From 3789a5645c2d3de4baef9a01e726066da36676d0 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 28 Feb 2024 08:31:59 -0800 Subject: [PATCH 183/216] Miscellaneous test cleanups noticed during cl/610731287 and cl/611055831. I'm removing `testIterableWithToString*` because it dates back to the days of `Iterables.IterableWithToString` (which I have no memory of :)): cl/9733960. That type was removed, and the test was updated to use `FluentIterable` in cl/28616368. `FluentIterable.toString()` is already tested by multiple tests in `FluentIterableTest.` PiperOrigin-RevId: 611112062 --- .../google/common/collect/IterablesTest.java | 24 ------------------- .../google/common/collect/MultimapsTest.java | 2 +- .../google/common/collect/IterablesTest.java | 24 ------------------- .../google/common/collect/MultimapsTest.java | 2 +- 4 files changed, 2 insertions(+), 50 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/IterablesTest.java b/android/guava-tests/test/com/google/common/collect/IterablesTest.java index 8ac8a0c4af6c..5a049862ba2f 100644 --- a/android/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -1159,30 +1159,6 @@ public boolean apply(String s) { // Iterable. Those returned by Iterators.filter() and Iterables.filter() // are not tested because they are unmodifiable. - public void testIterableWithToString() { - assertEquals("[]", create().toString()); - assertEquals("[a]", create("a").toString()); - assertEquals("[a, b, c]", create("a", "b", "c").toString()); - assertEquals("[c, a, a]", create("c", "a", "a").toString()); - } - - public void testIterableWithToStringNull() { - assertEquals("[null]", create((String) null).toString()); - assertEquals("[null, null]", create(null, null).toString()); - assertEquals("[, null, a]", create("", null, "a").toString()); - } - - /** Returns a new iterable over the specified strings. */ - private static Iterable create(T... ts) { - final List list = asList(ts); - return new FluentIterable() { - @Override - public Iterator iterator() { - return list.iterator(); - } - }; - } - public void testConsumingIterable() { // Test data List list = Lists.newArrayList(asList("a", "b")); diff --git a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java index fecf1ef28bc6..c02d1b277a90 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -941,7 +941,7 @@ void genericTestSynchronizedMultimapSampleCodeCompilation() { } } - private static void foo(Object o) {} + private static void foo(Object unused) {} public void testFilteredKeysSetMultimapReplaceValues() { SetMultimap multimap = LinkedHashMultimap.create(); diff --git a/guava-tests/test/com/google/common/collect/IterablesTest.java b/guava-tests/test/com/google/common/collect/IterablesTest.java index 86470b08995c..2e7d89712808 100644 --- a/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -1196,30 +1196,6 @@ public boolean apply(String s) { // Iterable. Those returned by Iterators.filter() and Iterables.filter() // are not tested because they are unmodifiable. - public void testIterableWithToString() { - assertEquals("[]", create().toString()); - assertEquals("[a]", create("a").toString()); - assertEquals("[a, b, c]", create("a", "b", "c").toString()); - assertEquals("[c, a, a]", create("c", "a", "a").toString()); - } - - public void testIterableWithToStringNull() { - assertEquals("[null]", create((String) null).toString()); - assertEquals("[null, null]", create(null, null).toString()); - assertEquals("[, null, a]", create("", null, "a").toString()); - } - - /** Returns a new iterable over the specified strings. */ - private static Iterable create(T... ts) { - final List list = asList(ts); - return new FluentIterable() { - @Override - public Iterator iterator() { - return list.iterator(); - } - }; - } - public void testConsumingIterable() { // Test data List list = Lists.newArrayList(asList("a", "b")); diff --git a/guava-tests/test/com/google/common/collect/MultimapsTest.java b/guava-tests/test/com/google/common/collect/MultimapsTest.java index 2459834c11a9..72b1413e492c 100644 --- a/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -1010,7 +1010,7 @@ void genericTestSynchronizedMultimapSampleCodeCompilation() { } } - private static void foo(Object o) {} + private static void foo(Object unused) {} public void testFilteredKeysSetMultimapReplaceValues() { SetMultimap multimap = LinkedHashMultimap.create(); From fe62266a3cf232f2b1d98f7ca8c7e553f2809c05 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 28 Feb 2024 10:02:36 -0800 Subject: [PATCH 184/216] Bump actions/setup-java from 4.0.0 to 4.1.0 Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.0.0 to 4.1.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/387ac29b308b003ca37ba93a6cab5eb57c8f5f93...9704b39bf258b59bc04b50fa2dd55e9ed76b47a8) Fixes #7054 RELNOTES=n/a PiperOrigin-RevId: 611138457 --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 54c80866b1e7..fc0da06b6fb1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: - name: 'Check out repository' uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: 'Set up JDK ${{ matrix.java }}' - uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 + uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 with: java-version: ${{ matrix.java }} @@ -69,7 +69,7 @@ jobs: - name: 'Check out repository' uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: 'Set up JDK 11' - uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 + uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 with: java-version: 11 @@ -95,7 +95,7 @@ jobs: - name: 'Check out repository' uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - name: 'Set up JDK 11' - uses: actions/setup-java@387ac29b308b003ca37ba93a6cab5eb57c8f5f93 + uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 with: java-version: 11 From f231543e36b7fbf006a80c137740157158e8f27d Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 29 Feb 2024 06:06:29 -0800 Subject: [PATCH 185/216] Improve nullness of types in some APIs related to `Map` merging, and fix `Collectors.toMap` null-handling. - Restrict `Collections.toMap` value-type arguments to non-nullable types. - ...in J2KT, following what [we'd found in JSpecify research](https://github.com/jspecify/jdk/commit/15eda89bf8c3112d35ab7ffcc6ff6ce71502c5b5) - Fix `Collections.toMap` to remove the key in question when `mergeFunction` returns `null`. - ...in J2KT - ...in J2CL - Use `@NonNull` / `& Any` in a few places in `Map.merge` and `Map.computeIfPresent`. - ...in J2KT - ...in Guava `Map` implementations, even though we don't yet include `@NonNull` annotations in the JDK APIs that we build Guava against. (See post-submit discussion on cl/559605577. But I've taken the shortcut of not waiting for the JDK APIs.) - Use `@Nullable` (to match the existing Kotlin `?` types) in the return types of `Map.computeIfPresent` and `Map.compute`. - ...in J2KT - Test a bunch of this. Note that the test for `mergeFunction` has to work around an overly restricted `toMap` signature that J2KT inherited from JSpecify. As discussed in a code comment there, this is fundamentally the same issue as we have in Guava with `ImmutableMap.toImmutableMap`, which is discussed as part of https://github.com/google/guava/issues/6824. RELNOTES=n/a PiperOrigin-RevId: 611445633 --- guava/src/com/google/common/collect/Maps.java | 32 +++++++++++-------- .../google/common/collect/Synchronized.java | 14 ++++---- 2 files changed, 24 insertions(+), 22 deletions(-) diff --git a/guava/src/com/google/common/collect/Maps.java b/guava/src/com/google/common/collect/Maps.java index 34f09318a05c..8fa916030306 100644 --- a/guava/src/com/google/common/collect/Maps.java +++ b/guava/src/com/google/common/collect/Maps.java @@ -1735,15 +1735,15 @@ public V computeIfAbsent( throw new UnsupportedOperationException(); } - /* - * TODO(cpovirk): Uncomment the @NonNull annotations below once our JDK stubs and J2KT - * emulations include them. - */ @Override @CheckForNull + /* + * Our checker arguably should produce a nullness error here until we see @NonNull in JDK APIs. + * But it doesn't, which may be a sign that we still permit parameter contravariance in some + * cases? + */ public V computeIfPresent( - K key, - BiFunction remappingFunction) { + K key, BiFunction remappingFunction) { throw new UnsupportedOperationException(); } @@ -1757,11 +1757,11 @@ public V compute( @Override @CheckForNull + @SuppressWarnings("nullness") // TODO(b/262880368): Remove once we see @NonNull in JDK APIs public V merge( K key, - /*@NonNull*/ V value, - BiFunction - function) { + @NonNull V value, + BiFunction function) { throw new UnsupportedOperationException(); } @@ -3659,9 +3659,13 @@ public V computeIfAbsent( */ @Override @CheckForNull + /* + * Our checker arguably should produce a nullness error here until we see @NonNull in JDK APIs. + * But it doesn't, which may be a sign that we still permit parameter contravariance in some + * cases? + */ public V computeIfPresent( - K key, - BiFunction remappingFunction) { + K key, BiFunction remappingFunction) { throw new UnsupportedOperationException(); } @@ -3675,11 +3679,11 @@ public V compute( @Override @CheckForNull + @SuppressWarnings("nullness") // TODO(b/262880368): Remove once we see @NonNull in JDK APIs public V merge( K key, - /*@NonNull*/ V value, - BiFunction - function) { + @NonNull V value, + BiFunction function) { throw new UnsupportedOperationException(); } diff --git a/guava/src/com/google/common/collect/Synchronized.java b/guava/src/com/google/common/collect/Synchronized.java index 89916cd4d80c..a8ad336b0743 100644 --- a/guava/src/com/google/common/collect/Synchronized.java +++ b/guava/src/com/google/common/collect/Synchronized.java @@ -49,6 +49,7 @@ import java.util.function.UnaryOperator; import java.util.stream.Stream; import javax.annotation.CheckForNull; +import org.checkerframework.checker.nullness.qual.NonNull; import org.checkerframework.checker.nullness.qual.Nullable; /** @@ -1187,15 +1188,11 @@ public V computeIfAbsent(K key, Function mappingFunction } } - /* - * TODO(cpovirk): Uncomment the @NonNull annotations below once our JDK stubs and J2KT - * emulations include them. - */ @Override @CheckForNull + @SuppressWarnings("nullness") // TODO(b/262880368): Remove once we see @NonNull in JDK APIs public V computeIfPresent( - K key, - BiFunction remappingFunction) { + K key, BiFunction remappingFunction) { synchronized (mutex) { return delegate().computeIfPresent(key, remappingFunction); } @@ -1213,10 +1210,11 @@ public V compute( @Override @CheckForNull + @SuppressWarnings("nullness") // TODO(b/262880368): Remove once we see @NonNull in JDK APIs public V merge( K key, - /*@NonNull*/ V value, - BiFunction + @NonNull V value, + BiFunction remappingFunction) { synchronized (mutex) { return delegate().merge(key, value, remappingFunction); From 7b8ff404458e1173ef7938aaaea3bd16ac5a00f5 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Thu, 29 Feb 2024 07:40:44 -0800 Subject: [PATCH 186/216] Enable a few more Guava Primitives tests for J2KT - some Base regex helpers have become available for J2KT since last iteration. Thanks cpovirk@ for pointing this out - there was a transpiler improvement: `GREATEST - (short) 1` is a compile time constant in Java and can be used to initialize a `short` because the compiler can verify that the value is small enough. The straight-forward translation `GREATEST - 1.toShort()` is not a compile time constant in Kotlin and cannot be used to initialize a `Short`. The transpiler handles this now RELNOTES=n/a PiperOrigin-RevId: 611467476 --- .../com/google/common/primitives/DoublesTest.java | 11 +---------- .../com/google/common/primitives/FloatsTest.java | 12 +----------- .../com/google/common/primitives/ShortsTest.java | 1 - .../src/com/google/common/primitives/Doubles.java | 4 +--- .../src/com/google/common/primitives/Floats.java | 2 -- .../com/google/common/primitives/DoublesTest.java | 11 +---------- .../com/google/common/primitives/FloatsTest.java | 12 +----------- .../com/google/common/primitives/ShortsTest.java | 1 - guava/src/com/google/common/primitives/Doubles.java | 4 +--- guava/src/com/google/common/primitives/Floats.java | 2 -- 10 files changed, 6 insertions(+), 54 deletions(-) diff --git a/android/guava-tests/test/com/google/common/primitives/DoublesTest.java b/android/guava-tests/test/com/google/common/primitives/DoublesTest.java index 8d135d053b91..2c59eefb7e95 100644 --- a/android/guava-tests/test/com/google/common/primitives/DoublesTest.java +++ b/android/guava-tests/test/com/google/common/primitives/DoublesTest.java @@ -624,7 +624,6 @@ public void testAsListEmpty() { } } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse private static void checkTryParse(String input) { Double expected = referenceTryParse(input); @@ -643,7 +642,6 @@ private static void checkTryParse(String input) { } } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse private static void checkTryParse(double expected, String input) { assertThat(Doubles.tryParse(input)).isEqualTo(Double.valueOf(expected)); @@ -653,7 +651,6 @@ private static void checkTryParse(double expected, String input) { Doubles.FLOATING_POINT_PATTERN.pattern(), Doubles.FLOATING_POINT_PATTERN.flags())); } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseHex() { for (String signChar : ImmutableList.of("", "+", "-")) { @@ -675,7 +672,6 @@ public void testTryParseHex() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseAllCodePoints() { // Exercise non-ASCII digit test cases and the like. @@ -686,7 +682,6 @@ public void testTryParseAllCodePoints() { } } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseOfToStringIsOriginal() { for (double d : NUMBERS) { @@ -694,7 +689,7 @@ public void testTryParseOfToStringIsOriginal() { } } - @J2ktIncompatible + @J2ktIncompatible // hexadecimal doubles @GwtIncompatible // Doubles.tryParse public void testTryParseOfToHexStringIsOriginal() { for (double d : NUMBERS) { @@ -702,7 +697,6 @@ public void testTryParseOfToHexStringIsOriginal() { } } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseNaN() { checkTryParse("NaN"); @@ -710,7 +704,6 @@ public void testTryParseNaN() { checkTryParse("-NaN"); } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseInfinity() { checkTryParse(Double.POSITIVE_INFINITY, "Infinity"); @@ -735,7 +728,6 @@ public void testTryParseInfinity() { "InfinityF" }; - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseFailures() { for (String badInput : BAD_TRY_PARSE_INPUTS) { @@ -797,7 +789,6 @@ public void testStringConverter_nullPointerTester() throws Exception { tester.testAllPublicInstanceMethods(Doubles.stringConverter()); } - @J2ktIncompatible @GwtIncompatible public void testTryParse_withNullNoGwt() { assertThat(Doubles.tryParse("null")).isNull(); diff --git a/android/guava-tests/test/com/google/common/primitives/FloatsTest.java b/android/guava-tests/test/com/google/common/primitives/FloatsTest.java index 79ed839c569e..223bb7e1e555 100644 --- a/android/guava-tests/test/com/google/common/primitives/FloatsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/FloatsTest.java @@ -602,19 +602,16 @@ public void testAsListEmpty() { } } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse private static void checkTryParse(String input) { assertThat(Floats.tryParse(input)).isEqualTo(referenceTryParse(input)); } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse private static void checkTryParse(float expected, String input) { assertThat(Floats.tryParse(input)).isEqualTo(Float.valueOf(expected)); } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseHex() { for (String signChar : ImmutableList.of("", "+", "-")) { @@ -636,7 +633,6 @@ public void testTryParseHex() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseAllCodePoints() { // Exercise non-ASCII digit test cases and the like. @@ -647,7 +643,6 @@ public void testTryParseAllCodePoints() { } } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseOfToStringIsOriginal() { for (float f : NUMBERS) { @@ -655,7 +650,7 @@ public void testTryParseOfToStringIsOriginal() { } } - @J2ktIncompatible + @J2ktIncompatible // hexadecimal floats @GwtIncompatible // Floats.tryParse public void testTryParseOfToHexStringIsOriginal() { for (float f : NUMBERS) { @@ -663,7 +658,6 @@ public void testTryParseOfToHexStringIsOriginal() { } } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseNaN() { checkTryParse("NaN"); @@ -671,7 +665,6 @@ public void testTryParseNaN() { checkTryParse("-NaN"); } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseInfinity() { checkTryParse(Float.POSITIVE_INFINITY, "Infinity"); @@ -696,7 +689,6 @@ public void testTryParseInfinity() { "InfinityF" }; - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseFailures() { for (String badInput : BAD_TRY_PARSE_INPUTS) { @@ -711,7 +703,6 @@ public void testNulls() { new NullPointerTester().testAllPublicStaticMethods(Floats.class); } - @J2ktIncompatible @GwtIncompatible // Float.toString returns different value in GWT. public void testStringConverter_convert() { Converter converter = Floats.stringConverter(); @@ -756,7 +747,6 @@ public void testStringConverter_nullPointerTester() throws Exception { tester.testAllPublicInstanceMethods(Floats.stringConverter()); } - @J2ktIncompatible @GwtIncompatible public void testTryParse_withNullNoGwt() { assertThat(Floats.tryParse("null")).isNull(); diff --git a/android/guava-tests/test/com/google/common/primitives/ShortsTest.java b/android/guava-tests/test/com/google/common/primitives/ShortsTest.java index 1f1f5fc3859a..a3497fda368c 100644 --- a/android/guava-tests/test/com/google/common/primitives/ShortsTest.java +++ b/android/guava-tests/test/com/google/common/primitives/ShortsTest.java @@ -315,7 +315,6 @@ public void testJoin() { assertThat(Shorts.join("", (short) 1, (short) 2, (short) 3)).isEqualTo("123"); } - @J2ktIncompatible // TODO(b/285297472): Enable public void testLexicographicalComparator() { List ordered = Arrays.asList( diff --git a/android/guava/src/com/google/common/primitives/Doubles.java b/android/guava/src/com/google/common/primitives/Doubles.java index c10d0f0d2f24..7d20829d347b 100644 --- a/android/guava/src/com/google/common/primitives/Doubles.java +++ b/android/guava/src/com/google/common/primitives/Doubles.java @@ -24,7 +24,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Converter; import java.io.Serializable; import java.util.AbstractList; @@ -705,7 +704,7 @@ public String toString() { * inputs. All valid inputs must pass this regex, but it's semantically fine if not all inputs * that pass this regex are valid -- only a performance hit is incurred, not a semantics bug. */ - @J2ktIncompatible @GwtIncompatible // regular expressions + @GwtIncompatible // regular expressions static final java.util.regex.Pattern FLOATING_POINT_PATTERN = fpPattern(); @@ -751,7 +750,6 @@ public String toString() { * @throws NullPointerException if {@code string} is {@code null} * @since 14.0 */ - @J2ktIncompatible @GwtIncompatible // regular expressions @CheckForNull public static Double tryParse(String string) { diff --git a/android/guava/src/com/google/common/primitives/Floats.java b/android/guava/src/com/google/common/primitives/Floats.java index 7bb9b848c1db..3e6c86490d10 100644 --- a/android/guava/src/com/google/common/primitives/Floats.java +++ b/android/guava/src/com/google/common/primitives/Floats.java @@ -24,7 +24,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Converter; import java.io.Serializable; import java.util.AbstractList; @@ -710,7 +709,6 @@ float[] toFloatArray() { * @throws NullPointerException if {@code string} is {@code null} * @since 14.0 */ - @J2ktIncompatible @GwtIncompatible // regular expressions @CheckForNull public static Float tryParse(String string) { diff --git a/guava-tests/test/com/google/common/primitives/DoublesTest.java b/guava-tests/test/com/google/common/primitives/DoublesTest.java index 8d135d053b91..2c59eefb7e95 100644 --- a/guava-tests/test/com/google/common/primitives/DoublesTest.java +++ b/guava-tests/test/com/google/common/primitives/DoublesTest.java @@ -624,7 +624,6 @@ public void testAsListEmpty() { } } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse private static void checkTryParse(String input) { Double expected = referenceTryParse(input); @@ -643,7 +642,6 @@ private static void checkTryParse(String input) { } } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse private static void checkTryParse(double expected, String input) { assertThat(Doubles.tryParse(input)).isEqualTo(Double.valueOf(expected)); @@ -653,7 +651,6 @@ private static void checkTryParse(double expected, String input) { Doubles.FLOATING_POINT_PATTERN.pattern(), Doubles.FLOATING_POINT_PATTERN.flags())); } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseHex() { for (String signChar : ImmutableList.of("", "+", "-")) { @@ -675,7 +672,6 @@ public void testTryParseHex() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseAllCodePoints() { // Exercise non-ASCII digit test cases and the like. @@ -686,7 +682,6 @@ public void testTryParseAllCodePoints() { } } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseOfToStringIsOriginal() { for (double d : NUMBERS) { @@ -694,7 +689,7 @@ public void testTryParseOfToStringIsOriginal() { } } - @J2ktIncompatible + @J2ktIncompatible // hexadecimal doubles @GwtIncompatible // Doubles.tryParse public void testTryParseOfToHexStringIsOriginal() { for (double d : NUMBERS) { @@ -702,7 +697,6 @@ public void testTryParseOfToHexStringIsOriginal() { } } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseNaN() { checkTryParse("NaN"); @@ -710,7 +704,6 @@ public void testTryParseNaN() { checkTryParse("-NaN"); } - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseInfinity() { checkTryParse(Double.POSITIVE_INFINITY, "Infinity"); @@ -735,7 +728,6 @@ public void testTryParseInfinity() { "InfinityF" }; - @J2ktIncompatible @GwtIncompatible // Doubles.tryParse public void testTryParseFailures() { for (String badInput : BAD_TRY_PARSE_INPUTS) { @@ -797,7 +789,6 @@ public void testStringConverter_nullPointerTester() throws Exception { tester.testAllPublicInstanceMethods(Doubles.stringConverter()); } - @J2ktIncompatible @GwtIncompatible public void testTryParse_withNullNoGwt() { assertThat(Doubles.tryParse("null")).isNull(); diff --git a/guava-tests/test/com/google/common/primitives/FloatsTest.java b/guava-tests/test/com/google/common/primitives/FloatsTest.java index 79ed839c569e..223bb7e1e555 100644 --- a/guava-tests/test/com/google/common/primitives/FloatsTest.java +++ b/guava-tests/test/com/google/common/primitives/FloatsTest.java @@ -602,19 +602,16 @@ public void testAsListEmpty() { } } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse private static void checkTryParse(String input) { assertThat(Floats.tryParse(input)).isEqualTo(referenceTryParse(input)); } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse private static void checkTryParse(float expected, String input) { assertThat(Floats.tryParse(input)).isEqualTo(Float.valueOf(expected)); } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseHex() { for (String signChar : ImmutableList.of("", "+", "-")) { @@ -636,7 +633,6 @@ public void testTryParseHex() { } @AndroidIncompatible // slow - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseAllCodePoints() { // Exercise non-ASCII digit test cases and the like. @@ -647,7 +643,6 @@ public void testTryParseAllCodePoints() { } } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseOfToStringIsOriginal() { for (float f : NUMBERS) { @@ -655,7 +650,7 @@ public void testTryParseOfToStringIsOriginal() { } } - @J2ktIncompatible + @J2ktIncompatible // hexadecimal floats @GwtIncompatible // Floats.tryParse public void testTryParseOfToHexStringIsOriginal() { for (float f : NUMBERS) { @@ -663,7 +658,6 @@ public void testTryParseOfToHexStringIsOriginal() { } } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseNaN() { checkTryParse("NaN"); @@ -671,7 +665,6 @@ public void testTryParseNaN() { checkTryParse("-NaN"); } - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseInfinity() { checkTryParse(Float.POSITIVE_INFINITY, "Infinity"); @@ -696,7 +689,6 @@ public void testTryParseInfinity() { "InfinityF" }; - @J2ktIncompatible @GwtIncompatible // Floats.tryParse public void testTryParseFailures() { for (String badInput : BAD_TRY_PARSE_INPUTS) { @@ -711,7 +703,6 @@ public void testNulls() { new NullPointerTester().testAllPublicStaticMethods(Floats.class); } - @J2ktIncompatible @GwtIncompatible // Float.toString returns different value in GWT. public void testStringConverter_convert() { Converter converter = Floats.stringConverter(); @@ -756,7 +747,6 @@ public void testStringConverter_nullPointerTester() throws Exception { tester.testAllPublicInstanceMethods(Floats.stringConverter()); } - @J2ktIncompatible @GwtIncompatible public void testTryParse_withNullNoGwt() { assertThat(Floats.tryParse("null")).isNull(); diff --git a/guava-tests/test/com/google/common/primitives/ShortsTest.java b/guava-tests/test/com/google/common/primitives/ShortsTest.java index 1f1f5fc3859a..a3497fda368c 100644 --- a/guava-tests/test/com/google/common/primitives/ShortsTest.java +++ b/guava-tests/test/com/google/common/primitives/ShortsTest.java @@ -315,7 +315,6 @@ public void testJoin() { assertThat(Shorts.join("", (short) 1, (short) 2, (short) 3)).isEqualTo("123"); } - @J2ktIncompatible // TODO(b/285297472): Enable public void testLexicographicalComparator() { List ordered = Arrays.asList( diff --git a/guava/src/com/google/common/primitives/Doubles.java b/guava/src/com/google/common/primitives/Doubles.java index 42804eb3d09c..97a6d300ebf9 100644 --- a/guava/src/com/google/common/primitives/Doubles.java +++ b/guava/src/com/google/common/primitives/Doubles.java @@ -24,7 +24,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Converter; import java.io.Serializable; import java.util.AbstractList; @@ -712,7 +711,7 @@ public String toString() { * inputs. All valid inputs must pass this regex, but it's semantically fine if not all inputs * that pass this regex are valid -- only a performance hit is incurred, not a semantics bug. */ - @J2ktIncompatible @GwtIncompatible // regular expressions + @GwtIncompatible // regular expressions static final java.util.regex.Pattern FLOATING_POINT_PATTERN = fpPattern(); @@ -758,7 +757,6 @@ public String toString() { * @throws NullPointerException if {@code string} is {@code null} * @since 14.0 */ - @J2ktIncompatible @GwtIncompatible // regular expressions @CheckForNull public static Double tryParse(String string) { diff --git a/guava/src/com/google/common/primitives/Floats.java b/guava/src/com/google/common/primitives/Floats.java index 7bb9b848c1db..3e6c86490d10 100644 --- a/guava/src/com/google/common/primitives/Floats.java +++ b/guava/src/com/google/common/primitives/Floats.java @@ -24,7 +24,6 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; -import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Converter; import java.io.Serializable; import java.util.AbstractList; @@ -710,7 +709,6 @@ float[] toFloatArray() { * @throws NullPointerException if {@code string} is {@code null} * @since 14.0 */ - @J2ktIncompatible @GwtIncompatible // regular expressions @CheckForNull public static Float tryParse(String string) { From e6ef6675984093a4566d62376de109fd8d29b379 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 29 Feb 2024 08:14:58 -0800 Subject: [PATCH 187/216] Bump github/codeql-action from 3.24.5 to 3.24.6 Bumps [github/codeql-action](https://github.com/github/codeql-action) from 3.24.5 to 3.24.6. - [Release notes](https://github.com/github/codeql-action/releases) - [Changelog](https://github.com/github/codeql-action/blob/main/CHANGELOG.md) - [Commits](https://github.com/github/codeql-action/compare/47b3d888fe66b639e431abf22ebca059152f1eea...8a470fddafa5cbb6266ee11b37ef4d8aae19c571) Fixes #7060 RELNOTES=n/a PiperOrigin-RevId: 611476830 --- .github/workflows/scorecard.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index e93fb6062374..b42a78370343 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -67,6 +67,6 @@ jobs: # Upload the results to GitHub's code scanning dashboard. - name: "Upload to code-scanning" - uses: github/codeql-action/upload-sarif@47b3d888fe66b639e431abf22ebca059152f1eea # v3.24.5 + uses: github/codeql-action/upload-sarif@8a470fddafa5cbb6266ee11b37ef4d8aae19c571 # v3.24.6 with: sarif_file: results.sarif From 174d4cd1c9fab685b55d9d4360aa5649d7cd0d12 Mon Sep 17 00:00:00 2001 From: Google Java Core Libraries Date: Thu, 29 Feb 2024 08:46:06 -0800 Subject: [PATCH 188/216] Added isEmpty() override for sequential Lists.transform() implementation. RELNOTES=n/a PiperOrigin-RevId: 611485469 --- .../test/com/google/common/collect/ListsTest.java | 10 ++++++++++ android/guava/src/com/google/common/collect/Lists.java | 7 +++++-- .../test/com/google/common/collect/ListsTest.java | 10 ++++++++++ guava/src/com/google/common/collect/Lists.java | 7 +++++-- 4 files changed, 30 insertions(+), 4 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/ListsTest.java b/android/guava-tests/test/com/google/common/collect/ListsTest.java index 1b09d1f3b907..d5da43a7ae50 100644 --- a/android/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/android/guava-tests/test/com/google/common/collect/ListsTest.java @@ -748,6 +748,16 @@ public void testTransformSequential() { assertFalse(list instanceof RandomAccess); } + public void testTransformRandomAccessIsNotEmpty() { + List transformedList = Lists.transform(SOME_LIST, SOME_FUNCTION); + assertFalse(transformedList.isEmpty()); + } + + public void testTransformSequentialIsNotEmpty() { + List transformedList = Lists.transform(SOME_SEQUENTIAL_LIST, SOME_FUNCTION); + assertFalse(transformedList.isEmpty()); + } + public void testTransformListIteratorRandomAccess() { List fromList = Lists.newArrayList(SOME_LIST); List list = Lists.transform(fromList, SOME_FUNCTION); diff --git a/android/guava/src/com/google/common/collect/Lists.java b/android/guava/src/com/google/common/collect/Lists.java index 969b69c9ce0e..9846cd282aac 100644 --- a/android/guava/src/com/google/common/collect/Lists.java +++ b/android/guava/src/com/google/common/collect/Lists.java @@ -565,6 +565,11 @@ public int size() { return fromList.size(); } + @Override + public boolean isEmpty() { + return fromList.isEmpty(); + } + @Override public ListIterator listIterator(final int index) { return new TransformedListIterator(fromList.listIterator(index)) { @@ -627,8 +632,6 @@ T transform(F from) { }; } - // TODO: cpovirk - Why override `isEmpty` here but not in TransformingSequentialList? - @Override public boolean isEmpty() { return fromList.isEmpty(); diff --git a/guava-tests/test/com/google/common/collect/ListsTest.java b/guava-tests/test/com/google/common/collect/ListsTest.java index 1b09d1f3b907..d5da43a7ae50 100644 --- a/guava-tests/test/com/google/common/collect/ListsTest.java +++ b/guava-tests/test/com/google/common/collect/ListsTest.java @@ -748,6 +748,16 @@ public void testTransformSequential() { assertFalse(list instanceof RandomAccess); } + public void testTransformRandomAccessIsNotEmpty() { + List transformedList = Lists.transform(SOME_LIST, SOME_FUNCTION); + assertFalse(transformedList.isEmpty()); + } + + public void testTransformSequentialIsNotEmpty() { + List transformedList = Lists.transform(SOME_SEQUENTIAL_LIST, SOME_FUNCTION); + assertFalse(transformedList.isEmpty()); + } + public void testTransformListIteratorRandomAccess() { List fromList = Lists.newArrayList(SOME_LIST); List list = Lists.transform(fromList, SOME_FUNCTION); diff --git a/guava/src/com/google/common/collect/Lists.java b/guava/src/com/google/common/collect/Lists.java index 52e90c1c177e..d6af57d0313a 100644 --- a/guava/src/com/google/common/collect/Lists.java +++ b/guava/src/com/google/common/collect/Lists.java @@ -566,6 +566,11 @@ public int size() { return fromList.size(); } + @Override + public boolean isEmpty() { + return fromList.isEmpty(); + } + @Override public ListIterator listIterator(final int index) { return new TransformedListIterator(fromList.listIterator(index)) { @@ -634,8 +639,6 @@ T transform(F from) { }; } - // TODO: cpovirk - Why override `isEmpty` here but not in TransformingSequentialList? - @Override public boolean isEmpty() { return fromList.isEmpty(); From a6a34dc42627f2dc5b8937f428322739b74ce8f3 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 29 Feb 2024 14:24:11 -0800 Subject: [PATCH 189/216] Bump Truth to 1.4.2. RELNOTES=n/a PiperOrigin-RevId: 611595426 --- android/pom.xml | 2 +- pom.xml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index 76db2085eb64..d59ce39455b6 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -14,7 +14,7 @@ %regex[.*.class] - 1.4.1 + 1.4.2 3.0.2 3.42.0 2.24.1 diff --git a/pom.xml b/pom.xml index 559d252b478d..83c3fa11ab3b 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ %regex[.*.class] - 1.4.1 + 1.4.2 3.0.2 3.42.0 2.24.1 From 71aa784c6c1a1cababc6c464b248ee3459f54126 Mon Sep 17 00:00:00 2001 From: Kurt Alfred Kluever Date: Mon, 4 Mar 2024 07:38:41 -0800 Subject: [PATCH 190/216] The boxed primitive constructors are no longer scheduled for removal. PiperOrigin-RevId: 612445353 --- .../test/com/google/common/primitives/BooleansTest.java | 4 ++-- .../test/com/google/common/primitives/BooleansTest.java | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/guava-tests/test/com/google/common/primitives/BooleansTest.java b/android/guava-tests/test/com/google/common/primitives/BooleansTest.java index a968353a9f57..e6fbd1aed90d 100644 --- a/android/guava-tests/test/com/google/common/primitives/BooleansTest.java +++ b/android/guava-tests/test/com/google/common/primitives/BooleansTest.java @@ -579,9 +579,9 @@ public void testAsListCanonicalValues() { assertThat(list.get(0)).isSameInstanceAs(true); assertThat(list.get(1)).isSameInstanceAs(false); @SuppressWarnings("deprecation") - Boolean anotherTrue = true; + Boolean anotherTrue = new Boolean(true); @SuppressWarnings("deprecation") - Boolean anotherFalse = false; + Boolean anotherFalse = new Boolean(false); list.set(0, anotherTrue); assertThat(list.get(0)).isSameInstanceAs(true); list.set(1, anotherFalse); diff --git a/guava-tests/test/com/google/common/primitives/BooleansTest.java b/guava-tests/test/com/google/common/primitives/BooleansTest.java index a968353a9f57..e6fbd1aed90d 100644 --- a/guava-tests/test/com/google/common/primitives/BooleansTest.java +++ b/guava-tests/test/com/google/common/primitives/BooleansTest.java @@ -579,9 +579,9 @@ public void testAsListCanonicalValues() { assertThat(list.get(0)).isSameInstanceAs(true); assertThat(list.get(1)).isSameInstanceAs(false); @SuppressWarnings("deprecation") - Boolean anotherTrue = true; + Boolean anotherTrue = new Boolean(true); @SuppressWarnings("deprecation") - Boolean anotherFalse = false; + Boolean anotherFalse = new Boolean(false); list.set(0, anotherTrue); assertThat(list.get(0)).isSameInstanceAs(true); list.set(1, anotherFalse); From 5c8fd7bd06a5ebd66f32b8a8142f9cca2aa68e98 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 4 Mar 2024 07:39:47 -0800 Subject: [PATCH 191/216] =?UTF-8?q?Add=20more=20=E2=80=9Ctrivial=E2=80=9D?= =?UTF-8?q?=20`@Nullable`=20to=20collection=20tests?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit These were overlooked in cl 608912815 RELNOTES=n/a PiperOrigin-RevId: 612445715 --- .../test/com/google/common/collect/MultimapsTest.java | 8 ++++---- .../test/com/google/common/collect/TablesTest.java | 4 +++- .../test/com/google/common/collect/MultimapsTest.java | 8 ++++---- .../com/google/common/collect/TableCollectorsTest.java | 3 ++- .../test/com/google/common/collect/TablesTest.java | 4 +++- 5 files changed, 16 insertions(+), 11 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java index c02d1b277a90..e262c0ab9095 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -338,7 +338,7 @@ private static Multimap prepareUnmodifiableTests( return unmodifiable; } - private static void assertUnmodifiableIterableInTandem( + private static void assertUnmodifiableIterableInTandem( Iterable unmodifiable, Iterable modifiable) { UnmodifiableCollectionTests.assertIteratorIsUnmodifiable(unmodifiable.iterator()); UnmodifiableCollectionTests.assertIteratorsInOrder( @@ -510,7 +510,7 @@ public void testForMapGetIteration() { IteratorTester tester = new IteratorTester( 4, MODIFIABLE, newHashSet(1), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -809,9 +809,9 @@ public Integer apply(String input) { } public void testIndex_nullValue() { - List values = Arrays.asList(1, null); + List<@Nullable Integer> values = Arrays.asList(1, null); try { - Multimaps.index(values, Functions.identity()); + Multimaps.index((List) values, Functions.identity()); fail(); } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/TablesTest.java b/android/guava-tests/test/com/google/common/collect/TablesTest.java index 239f2ef50980..23915f2723d0 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTest.java @@ -22,6 +22,7 @@ import com.google.common.testing.EqualsTester; import com.google.common.testing.SerializableTester; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link Tables}. @@ -42,7 +43,8 @@ public void testImmutableEntryToString() { Cell entry = Tables.immutableCell("foo", 1, 'a'); assertEquals("(foo,1)=a", entry.toString()); - Cell nullEntry = Tables.immutableCell(null, null, null); + Cell<@Nullable String, @Nullable Integer, @Nullable Character> nullEntry = + Tables.immutableCell(null, null, null); assertEquals("(null,null)=null", nullEntry.toString()); } diff --git a/guava-tests/test/com/google/common/collect/MultimapsTest.java b/guava-tests/test/com/google/common/collect/MultimapsTest.java index 72b1413e492c..04ac2f8bb8ca 100644 --- a/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -407,7 +407,7 @@ private static Multimap prepareUnmodifiableTests( return unmodifiable; } - private static void assertUnmodifiableIterableInTandem( + private static void assertUnmodifiableIterableInTandem( Iterable unmodifiable, Iterable modifiable) { UnmodifiableCollectionTests.assertIteratorIsUnmodifiable(unmodifiable.iterator()); UnmodifiableCollectionTests.assertIteratorsInOrder( @@ -579,7 +579,7 @@ public void testForMapGetIteration() { IteratorTester tester = new IteratorTester( 4, MODIFIABLE, newHashSet(1), IteratorTester.KnownOrder.KNOWN_ORDER) { - private Multimap multimap; + private @Nullable Multimap multimap; @Override protected Iterator newTargetIterator() { @@ -878,9 +878,9 @@ public Integer apply(String input) { } public void testIndex_nullValue() { - List values = Arrays.asList(1, null); + List<@Nullable Integer> values = Arrays.asList(1, null); try { - Multimaps.index(values, Functions.identity()); + Multimaps.index((List) values, Functions.identity()); fail(); } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/TableCollectorsTest.java b/guava-tests/test/com/google/common/collect/TableCollectorsTest.java index 8ecfcde69cb1..7380923ca57a 100644 --- a/guava-tests/test/com/google/common/collect/TableCollectorsTest.java +++ b/guava-tests/test/com/google/common/collect/TableCollectorsTest.java @@ -260,7 +260,8 @@ public void testToTableMerging() { // This function specifically returns a BiPredicate, because Guava7’s Equivalence class does not // actually implement BiPredicate, and CollectorTests expects a BiPredicate. - static > BiPredicate pairwiseOnResultOf(Function arg) { + static > + BiPredicate pairwiseOnResultOf(Function arg) { Equivalence equivalence = Equivalence.equals().pairwise().onResultOf(arg); return equivalence::equivalent; } diff --git a/guava-tests/test/com/google/common/collect/TablesTest.java b/guava-tests/test/com/google/common/collect/TablesTest.java index 4469be090a9f..b1b1fb2d6357 100644 --- a/guava-tests/test/com/google/common/collect/TablesTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTest.java @@ -22,6 +22,7 @@ import com.google.common.testing.EqualsTester; import com.google.common.testing.SerializableTester; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Tests for {@link Tables}. @@ -41,7 +42,8 @@ public void testImmutableEntryToString() { Cell entry = Tables.immutableCell("foo", 1, 'a'); assertEquals("(foo,1)=a", entry.toString()); - Cell nullEntry = Tables.immutableCell(null, null, null); + Cell<@Nullable String, @Nullable Integer, @Nullable Character> nullEntry = + Tables.immutableCell(null, null, null); assertEquals("(null,null)=null", nullEntry.toString()); } From 61766305f8e75dc8ebc665f025f1bbe7d3081d48 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 4 Mar 2024 08:03:16 -0800 Subject: [PATCH 192/216] MapsTest tweak to avoid J2KT `` bug `` is misparsed as unbounded. RELNOTES=n/a PiperOrigin-RevId: 612452240 --- .../guava-tests/test/com/google/common/collect/MapsTest.java | 3 +-- guava-tests/test/com/google/common/collect/MapsTest.java | 3 +-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/MapsTest.java b/android/guava-tests/test/com/google/common/collect/MapsTest.java index e910f1d3500d..07bdee8dfb1d 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsTest.java @@ -95,8 +95,7 @@ public void testHashMapGeneralizesTypes() { original.put("a", 1); original.put("b", 2); original.put("c", 3); - HashMap map = - Maps.newHashMap((Map) original); + HashMap map = Maps.newHashMap(original); assertEquals(original, map); } diff --git a/guava-tests/test/com/google/common/collect/MapsTest.java b/guava-tests/test/com/google/common/collect/MapsTest.java index 18a0e7d40f23..daf688f41627 100644 --- a/guava-tests/test/com/google/common/collect/MapsTest.java +++ b/guava-tests/test/com/google/common/collect/MapsTest.java @@ -95,8 +95,7 @@ public void testHashMapGeneralizesTypes() { original.put("a", 1); original.put("b", 2); original.put("c", 3); - HashMap map = - Maps.newHashMap((Map) original); + HashMap map = Maps.newHashMap(original); assertEquals(original, map); } From 032e2f92a3807cd8a2a1a7ab772f11e096c320b5 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 4 Mar 2024 08:26:44 -0800 Subject: [PATCH 193/216] Workaround bad J2KT/Kotlin smartcast interaction - `Arrays.copyOf` is annotated (in J2KT and JSpecify) as ` @Nullable T[] copyOf(@Nullable T[] original, int newLength)`. J2KT will cast the `original` argument to `@Nullable T[]` (`array1` in this case) - Kotlin (pre-2.0) has a bug with smartcasts involving generics (Kotlin arrays are generic types) where the smartcast can widen the type(!), so in this file, `array1` acts like `@Nullable Integer[]` later on in the control flow - `Collection#toArray` is annotated ` T[] toArray(T[] a)`, so due to the smartcast bug, `list.toArray(array1)` is not assignable to `Object[]` (but to `@Nullable Object[]`) Adding an extra temporary variable avoids the smartcast bug. RELNOTES=n/a PiperOrigin-RevId: 612458902 --- .../test/com/google/common/collect/ObjectArraysTest.java | 4 +++- .../test/com/google/common/collect/ObjectArraysTest.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java b/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java index edbcf2a9e55e..62a1b76b2995 100644 --- a/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java +++ b/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java @@ -150,7 +150,9 @@ public void testToArrayImpl2() { private void doTestToArrayImpl2(List list, Integer[] array1, boolean expectModify) { Integer[] starting = Arrays.copyOf(array1, array1.length); Integer[] array2 = Arrays.copyOf(array1, array1.length); - Object[] reference = list.toArray(array1); + // TODO b/283448200 - Remove temporary variable when Kotlin smartcast issue is resolved. + Integer[] array1Tmp = array1; + Object[] reference = list.toArray(array1Tmp); Object[] target = ObjectArrays.toArrayImpl(list, array2); diff --git a/guava-tests/test/com/google/common/collect/ObjectArraysTest.java b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java index edbcf2a9e55e..62a1b76b2995 100644 --- a/guava-tests/test/com/google/common/collect/ObjectArraysTest.java +++ b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java @@ -150,7 +150,9 @@ public void testToArrayImpl2() { private void doTestToArrayImpl2(List list, Integer[] array1, boolean expectModify) { Integer[] starting = Arrays.copyOf(array1, array1.length); Integer[] array2 = Arrays.copyOf(array1, array1.length); - Object[] reference = list.toArray(array1); + // TODO b/283448200 - Remove temporary variable when Kotlin smartcast issue is resolved. + Integer[] array1Tmp = array1; + Object[] reference = list.toArray(array1Tmp); Object[] target = ObjectArrays.toArrayImpl(list, array2); From b775e685131023d1dbafd98f10b8ff299a6fe22a Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 4 Mar 2024 08:51:17 -0800 Subject: [PATCH 194/216] Table tests: add type parameter to express whether table can contain null `ArrayTable`s are tested with null values, other table classes aren't PiperOrigin-RevId: 612466816 --- .../common/collect/AbstractTableReadTest.java | 22 ++++---- .../common/collect/AbstractTableTest.java | 54 ++++++++++++------- .../google/common/collect/ArrayTableTest.java | 20 +++---- .../common/collect/HashBasedTableTest.java | 5 +- .../common/collect/ImmutableTableTest.java | 4 +- .../common/collect/NewCustomTableTest.java | 5 +- .../common/collect/SynchronizedTableTest.java | 4 +- .../collect/TablesTransformValuesTest.java | 4 +- .../common/collect/TransposedTableTest.java | 5 +- .../common/collect/TreeBasedTableTest.java | 5 +- .../common/collect/AbstractTableReadTest.java | 22 ++++---- .../common/collect/AbstractTableTest.java | 54 ++++++++++++------- .../google/common/collect/ArrayTableTest.java | 20 +++---- .../common/collect/HashBasedTableTest.java | 5 +- .../common/collect/ImmutableTableTest.java | 4 +- .../common/collect/NewCustomTableTest.java | 5 +- .../common/collect/SynchronizedTableTest.java | 4 +- .../common/collect/TableCollectorsTest.java | 13 ++--- .../collect/TablesTransformValuesTest.java | 4 +- .../common/collect/TransposedTableTest.java | 5 +- .../common/collect/TreeBasedTableTest.java | 5 +- 21 files changed, 153 insertions(+), 116 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java b/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java index d89be34623ae..caa40a63a122 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java @@ -25,6 +25,7 @@ import com.google.common.testing.EqualsTester; import com.google.common.testing.NullPointerTester; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link Table} read operations. @@ -33,8 +34,8 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public abstract class AbstractTableReadTest extends TestCase { - protected Table table; +public abstract class AbstractTableReadTest extends TestCase { + protected Table table; /** * Creates a table with the specified data. @@ -43,7 +44,7 @@ public abstract class AbstractTableReadTest extends TestCase { * @throws IllegalArgumentException if the size of {@code data} isn't a multiple of 3 * @throws ClassCastException if a data element has the wrong type */ - protected abstract Table create(Object... data); + protected abstract Table create(@Nullable Object... data); protected void assertSize(int expectedSize) { assertEquals(expectedSize, table.size()); @@ -120,14 +121,13 @@ public void testSize() { public void testEquals() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Table hashCopy = HashBasedTable.create(table); - Table reordered = - create("foo", 3, 'c', "foo", 1, 'a', "bar", 1, 'b'); - Table smaller = create("foo", 1, 'a', "bar", 1, 'b'); - Table swapOuter = - create("bar", 1, 'a', "foo", 1, 'b', "bar", 3, 'c'); - Table swapValues = - create("foo", 1, 'c', "bar", 1, 'b', "foo", 3, 'a'); + // We know that we have only added non-null Characters. + Table hashCopy = + HashBasedTable.create((Table) table); + Table reordered = create("foo", 3, 'c', "foo", 1, 'a', "bar", 1, 'b'); + Table smaller = create("foo", 1, 'a', "bar", 1, 'b'); + Table swapOuter = create("bar", 1, 'a', "foo", 1, 'b', "bar", 3, 'c'); + Table swapValues = create("foo", 1, 'c', "bar", 1, 'b', "foo", 3, 'a'); new EqualsTester() .addEqualityGroup(table, hashCopy, reordered) diff --git a/android/guava-tests/test/com/google/common/collect/AbstractTableTest.java b/android/guava-tests/test/com/google/common/collect/AbstractTableTest.java index c8d9052d9c60..0639f2d325d0 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractTableTest.java @@ -20,6 +20,8 @@ import com.google.common.annotations.GwtCompatible; import java.util.Map; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for a {@link Table} implementation supporting reads and writes. @@ -29,12 +31,14 @@ */ @GwtCompatible @ElementTypesAreNonnullByDefault -public abstract class AbstractTableTest extends AbstractTableReadTest { +public abstract class AbstractTableTest + extends AbstractTableReadTest { - protected void populate(Table table, Object... data) { + protected void populate(Table table, @Nullable Object... data) { checkArgument(data.length % 3 == 0); for (int i = 0; i < data.length; i += 3) { - table.put((String) data[i], (Integer) data[i + 1], (Character) data[i + 2]); + table.put( + (String) data[i], (Integer) data[i + 1], nullableCellValue((Character) data[i + 2])); } } @@ -62,29 +66,28 @@ public void testClear() { } public void testPut() { - assertNull(table.put("foo", 1, 'a')); - assertNull(table.put("bar", 1, 'b')); - assertNull(table.put("foo", 3, 'c')); - assertEquals((Character) 'a', table.put("foo", 1, 'd')); + assertNull(table.put("foo", 1, cellValue('a'))); + assertNull(table.put("bar", 1, cellValue('b'))); + assertNull(table.put("foo", 3, cellValue('c'))); + assertEquals((Character) 'a', table.put("foo", 1, cellValue('d'))); assertEquals((Character) 'd', table.get("foo", 1)); assertEquals((Character) 'b', table.get("bar", 1)); assertSize(3); - assertEquals((Character) 'd', table.put("foo", 1, 'd')); + assertEquals((Character) 'd', table.put("foo", 1, cellValue('d'))); assertEquals((Character) 'd', table.get("foo", 1)); assertSize(3); } - // This test assumes that the implementation does not support nulls. public void testPutNull() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); assertSize(3); try { - table.put(null, 2, 'd'); + table.put(null, 2, cellValue('d')); fail(); } catch (NullPointerException expected) { } try { - table.put("cat", null, 'd'); + table.put("cat", null, cellValue('d')); fail(); } catch (NullPointerException expected) { } @@ -105,11 +108,11 @@ public void testPutNullReplace() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); if (supportsNullValues()) { - assertEquals((Character) 'b', table.put("bar", 1, null)); + assertEquals((Character) 'b', table.put("bar", 1, nullableCellValue(null))); assertNull(table.get("bar", 1)); } else { try { - table.put("bar", 1, null); + table.put("bar", 1, nullableCellValue(null)); fail(); } catch (NullPointerException expected) { } @@ -118,10 +121,10 @@ public void testPutNullReplace() { public void testPutAllTable() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Table other = HashBasedTable.create(); - other.put("foo", 1, 'd'); - other.put("bar", 2, 'e'); - other.put("cat", 2, 'f'); + Table other = HashBasedTable.create(); + other.put("foo", 1, cellValue('d')); + other.put("bar", 2, cellValue('e')); + other.put("cat", 2, cellValue('f')); table.putAll(other); assertEquals((Character) 'd', table.get("foo", 1)); assertEquals((Character) 'b', table.get("bar", 1)); @@ -159,18 +162,29 @@ public void testRemove() { public void testRowClearAndPut() { if (supportsRemove()) { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Map row = table.row("foo"); + Map row = table.row("foo"); assertEquals(ImmutableMap.of(1, 'a', 3, 'c'), row); table.remove("foo", 3); assertEquals(ImmutableMap.of(1, 'a'), row); table.remove("foo", 1); assertEquals(ImmutableMap.of(), row); - table.put("foo", 2, 'b'); + table.put("foo", 2, cellValue('b')); assertEquals(ImmutableMap.of(2, 'b'), row); row.clear(); assertEquals(ImmutableMap.of(), row); - table.put("foo", 5, 'x'); + table.put("foo", 5, cellValue('x')); assertEquals(ImmutableMap.of(5, 'x'), row); } } + + @SuppressWarnings("unchecked") // C can only be @Nullable Character or Character + protected @NonNull C cellValue(Character character) { + return (C) character; + } + + // Only safe wrt. ClassCastException. Not null-safe (can be used to test expected Table NPEs) + @SuppressWarnings("unchecked") + protected C nullableCellValue(@Nullable Character character) { + return (C) character; + } } diff --git a/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java b/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java index 77abcc3e0734..f97a4393da7f 100644 --- a/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/ArrayTableTest.java @@ -38,10 +38,10 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public class ArrayTableTest extends AbstractTableTest { +public class ArrayTableTest extends AbstractTableTest<@Nullable Character> { @Override - protected ArrayTable create(Object... data) { + protected ArrayTable create(@Nullable Object... data) { // TODO: Specify different numbers of rows and columns, to detect problems // that arise when the wrong size is used. ArrayTable table = @@ -128,12 +128,12 @@ public void testEquals() { hashCopy.put("foo", 1, 'a'); hashCopy.put("bar", 1, 'b'); hashCopy.put("foo", 3, 'c'); - Table reordered = + Table reordered = create("foo", 3, 'c', "foo", 1, 'a', "bar", 1, 'b'); - Table smaller = create("foo", 1, 'a', "bar", 1, 'b'); - Table swapOuter = + Table smaller = create("foo", 1, 'a', "bar", 1, 'b'); + Table swapOuter = create("bar", 1, 'a', "foo", 1, 'b', "bar", 3, 'c'); - Table swapValues = + Table swapValues = create("foo", 1, 'c', "bar", 1, 'b', "foo", 3, 'a'); new EqualsTester() @@ -242,9 +242,9 @@ public void testEmptyToArry() { } public void testCreateCopyArrayTable() { - Table original = + Table original = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Table copy = ArrayTable.create(original); + Table copy = ArrayTable.create(original); assertEquals(original, copy); original.put("foo", 1, 'd'); assertEquals((Character) 'd', original.get("foo", 1)); @@ -258,7 +258,7 @@ public void testCreateCopyHashBasedTable() { original.put("foo", 1, 'a'); original.put("bar", 1, 'b'); original.put("foo", 3, 'c'); - Table copy = ArrayTable.create(original); + Table copy = ArrayTable.create(original); assertEquals(4, copy.size()); assertEquals((Character) 'a', copy.get("foo", 1)); assertEquals((Character) 'b', copy.get("bar", 1)); @@ -281,7 +281,7 @@ public void testCreateCopyEmptyTable() { } public void testCreateCopyEmptyArrayTable() { - Table original = + Table original = ArrayTable.create(Arrays.asList(), Arrays.asList()); ArrayTable copy = ArrayTable.create(original); assertThat(copy).isEqualTo(original); diff --git a/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java b/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java index fac4794dfff2..15ca3482d2e6 100644 --- a/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/HashBasedTableTest.java @@ -23,6 +23,7 @@ import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link HashBasedTable}. @@ -31,10 +32,10 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public class HashBasedTableTest extends AbstractTableTest { +public class HashBasedTableTest extends AbstractTableTest { @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { Table table = HashBasedTable.create(); table.put("foo", 4, 'a'); table.put("cat", 1, 'b'); diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java index a3cf4e6b1685..7c9aa8db5959 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableTableTest.java @@ -31,9 +31,9 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public class ImmutableTableTest extends AbstractTableReadTest { +public class ImmutableTableTest extends AbstractTableReadTest { @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { ImmutableTable.Builder builder = ImmutableTable.builder(); for (int i = 0; i < data.length; i = i + 3) { builder.put((String) data[i], (Integer) data[i + 1], (Character) data[i + 2]); diff --git a/android/guava-tests/test/com/google/common/collect/NewCustomTableTest.java b/android/guava-tests/test/com/google/common/collect/NewCustomTableTest.java index b048e4648a38..fc905f43ed90 100644 --- a/android/guava-tests/test/com/google/common/collect/NewCustomTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/NewCustomTableTest.java @@ -22,6 +22,7 @@ import com.google.common.base.Supplier; import java.util.Map; import java.util.TreeMap; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link Tables#newCustomTable}. @@ -30,10 +31,10 @@ */ @GwtCompatible @ElementTypesAreNonnullByDefault -public class NewCustomTableTest extends AbstractTableTest { +public class NewCustomTableTest extends AbstractTableTest { @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { Supplier> factory = new Supplier>() { @Override diff --git a/android/guava-tests/test/com/google/common/collect/SynchronizedTableTest.java b/android/guava-tests/test/com/google/common/collect/SynchronizedTableTest.java index 216f32b2e6cf..aaa7d1662fc6 100644 --- a/android/guava-tests/test/com/google/common/collect/SynchronizedTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/SynchronizedTableTest.java @@ -22,7 +22,7 @@ import java.util.Set; import org.checkerframework.checker.nullness.qual.Nullable; -public class SynchronizedTableTest extends AbstractTableTest { +public class SynchronizedTableTest extends AbstractTableTest { private static final class TestTable implements Table, Serializable { final Table delegate = HashBasedTable.create(); public final Object mutex = new Integer(1); // something Serializable @@ -164,7 +164,7 @@ public Map> rowMap() { } @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { TestTable table = new TestTable<>(); Table synced = Synchronized.table(table, table.mutex); populate(synced, data); diff --git a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java index 20251795ce9a..8039b1dec5c1 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java @@ -31,7 +31,7 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public class TablesTransformValuesTest extends AbstractTableTest { +public class TablesTransformValuesTest extends AbstractTableTest { private static final Function<@Nullable String, @Nullable Character> FIRST_CHARACTER = new Function<@Nullable String, @Nullable Character>() { @@ -42,7 +42,7 @@ public class TablesTransformValuesTest extends AbstractTableTest { }; @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { Table table = HashBasedTable.create(); checkArgument(data.length % 3 == 0); for (int i = 0; i < data.length; i += 3) { diff --git a/android/guava-tests/test/com/google/common/collect/TransposedTableTest.java b/android/guava-tests/test/com/google/common/collect/TransposedTableTest.java index e556ea88fa9a..c560aa2dda19 100644 --- a/android/guava-tests/test/com/google/common/collect/TransposedTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/TransposedTableTest.java @@ -17,6 +17,7 @@ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link Tables#transpose}. @@ -25,10 +26,10 @@ */ @GwtCompatible @ElementTypesAreNonnullByDefault -public class TransposedTableTest extends AbstractTableTest { +public class TransposedTableTest extends AbstractTableTest { @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { Table original = HashBasedTable.create(); Table table = Tables.transpose(original); table.clear(); diff --git a/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java b/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java index f42673766a21..7f4d8ff822ab 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java @@ -35,6 +35,7 @@ import java.util.SortedMap; import junit.framework.Test; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link TreeBasedTable}. @@ -44,7 +45,7 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public class TreeBasedTableTest extends AbstractTableTest { +public class TreeBasedTableTest extends AbstractTableTest { @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { @@ -90,7 +91,7 @@ protected TreeBasedTable create( } @Override - protected TreeBasedTable create(Object... data) { + protected TreeBasedTable create(@Nullable Object... data) { TreeBasedTable table = TreeBasedTable.create(); table.put("foo", 4, 'a'); table.put("cat", 1, 'b'); diff --git a/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java b/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java index d89be34623ae..caa40a63a122 100644 --- a/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractTableReadTest.java @@ -25,6 +25,7 @@ import com.google.common.testing.EqualsTester; import com.google.common.testing.NullPointerTester; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link Table} read operations. @@ -33,8 +34,8 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public abstract class AbstractTableReadTest extends TestCase { - protected Table table; +public abstract class AbstractTableReadTest extends TestCase { + protected Table table; /** * Creates a table with the specified data. @@ -43,7 +44,7 @@ public abstract class AbstractTableReadTest extends TestCase { * @throws IllegalArgumentException if the size of {@code data} isn't a multiple of 3 * @throws ClassCastException if a data element has the wrong type */ - protected abstract Table create(Object... data); + protected abstract Table create(@Nullable Object... data); protected void assertSize(int expectedSize) { assertEquals(expectedSize, table.size()); @@ -120,14 +121,13 @@ public void testSize() { public void testEquals() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Table hashCopy = HashBasedTable.create(table); - Table reordered = - create("foo", 3, 'c', "foo", 1, 'a', "bar", 1, 'b'); - Table smaller = create("foo", 1, 'a', "bar", 1, 'b'); - Table swapOuter = - create("bar", 1, 'a', "foo", 1, 'b', "bar", 3, 'c'); - Table swapValues = - create("foo", 1, 'c', "bar", 1, 'b', "foo", 3, 'a'); + // We know that we have only added non-null Characters. + Table hashCopy = + HashBasedTable.create((Table) table); + Table reordered = create("foo", 3, 'c', "foo", 1, 'a', "bar", 1, 'b'); + Table smaller = create("foo", 1, 'a', "bar", 1, 'b'); + Table swapOuter = create("bar", 1, 'a', "foo", 1, 'b', "bar", 3, 'c'); + Table swapValues = create("foo", 1, 'c', "bar", 1, 'b', "foo", 3, 'a'); new EqualsTester() .addEqualityGroup(table, hashCopy, reordered) diff --git a/guava-tests/test/com/google/common/collect/AbstractTableTest.java b/guava-tests/test/com/google/common/collect/AbstractTableTest.java index c8d9052d9c60..0639f2d325d0 100644 --- a/guava-tests/test/com/google/common/collect/AbstractTableTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractTableTest.java @@ -20,6 +20,8 @@ import com.google.common.annotations.GwtCompatible; import java.util.Map; +import org.checkerframework.checker.nullness.qual.NonNull; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for a {@link Table} implementation supporting reads and writes. @@ -29,12 +31,14 @@ */ @GwtCompatible @ElementTypesAreNonnullByDefault -public abstract class AbstractTableTest extends AbstractTableReadTest { +public abstract class AbstractTableTest + extends AbstractTableReadTest { - protected void populate(Table table, Object... data) { + protected void populate(Table table, @Nullable Object... data) { checkArgument(data.length % 3 == 0); for (int i = 0; i < data.length; i += 3) { - table.put((String) data[i], (Integer) data[i + 1], (Character) data[i + 2]); + table.put( + (String) data[i], (Integer) data[i + 1], nullableCellValue((Character) data[i + 2])); } } @@ -62,29 +66,28 @@ public void testClear() { } public void testPut() { - assertNull(table.put("foo", 1, 'a')); - assertNull(table.put("bar", 1, 'b')); - assertNull(table.put("foo", 3, 'c')); - assertEquals((Character) 'a', table.put("foo", 1, 'd')); + assertNull(table.put("foo", 1, cellValue('a'))); + assertNull(table.put("bar", 1, cellValue('b'))); + assertNull(table.put("foo", 3, cellValue('c'))); + assertEquals((Character) 'a', table.put("foo", 1, cellValue('d'))); assertEquals((Character) 'd', table.get("foo", 1)); assertEquals((Character) 'b', table.get("bar", 1)); assertSize(3); - assertEquals((Character) 'd', table.put("foo", 1, 'd')); + assertEquals((Character) 'd', table.put("foo", 1, cellValue('d'))); assertEquals((Character) 'd', table.get("foo", 1)); assertSize(3); } - // This test assumes that the implementation does not support nulls. public void testPutNull() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); assertSize(3); try { - table.put(null, 2, 'd'); + table.put(null, 2, cellValue('d')); fail(); } catch (NullPointerException expected) { } try { - table.put("cat", null, 'd'); + table.put("cat", null, cellValue('d')); fail(); } catch (NullPointerException expected) { } @@ -105,11 +108,11 @@ public void testPutNullReplace() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); if (supportsNullValues()) { - assertEquals((Character) 'b', table.put("bar", 1, null)); + assertEquals((Character) 'b', table.put("bar", 1, nullableCellValue(null))); assertNull(table.get("bar", 1)); } else { try { - table.put("bar", 1, null); + table.put("bar", 1, nullableCellValue(null)); fail(); } catch (NullPointerException expected) { } @@ -118,10 +121,10 @@ public void testPutNullReplace() { public void testPutAllTable() { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Table other = HashBasedTable.create(); - other.put("foo", 1, 'd'); - other.put("bar", 2, 'e'); - other.put("cat", 2, 'f'); + Table other = HashBasedTable.create(); + other.put("foo", 1, cellValue('d')); + other.put("bar", 2, cellValue('e')); + other.put("cat", 2, cellValue('f')); table.putAll(other); assertEquals((Character) 'd', table.get("foo", 1)); assertEquals((Character) 'b', table.get("bar", 1)); @@ -159,18 +162,29 @@ public void testRemove() { public void testRowClearAndPut() { if (supportsRemove()) { table = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Map row = table.row("foo"); + Map row = table.row("foo"); assertEquals(ImmutableMap.of(1, 'a', 3, 'c'), row); table.remove("foo", 3); assertEquals(ImmutableMap.of(1, 'a'), row); table.remove("foo", 1); assertEquals(ImmutableMap.of(), row); - table.put("foo", 2, 'b'); + table.put("foo", 2, cellValue('b')); assertEquals(ImmutableMap.of(2, 'b'), row); row.clear(); assertEquals(ImmutableMap.of(), row); - table.put("foo", 5, 'x'); + table.put("foo", 5, cellValue('x')); assertEquals(ImmutableMap.of(5, 'x'), row); } } + + @SuppressWarnings("unchecked") // C can only be @Nullable Character or Character + protected @NonNull C cellValue(Character character) { + return (C) character; + } + + // Only safe wrt. ClassCastException. Not null-safe (can be used to test expected Table NPEs) + @SuppressWarnings("unchecked") + protected C nullableCellValue(@Nullable Character character) { + return (C) character; + } } diff --git a/guava-tests/test/com/google/common/collect/ArrayTableTest.java b/guava-tests/test/com/google/common/collect/ArrayTableTest.java index 77abcc3e0734..f97a4393da7f 100644 --- a/guava-tests/test/com/google/common/collect/ArrayTableTest.java +++ b/guava-tests/test/com/google/common/collect/ArrayTableTest.java @@ -38,10 +38,10 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public class ArrayTableTest extends AbstractTableTest { +public class ArrayTableTest extends AbstractTableTest<@Nullable Character> { @Override - protected ArrayTable create(Object... data) { + protected ArrayTable create(@Nullable Object... data) { // TODO: Specify different numbers of rows and columns, to detect problems // that arise when the wrong size is used. ArrayTable table = @@ -128,12 +128,12 @@ public void testEquals() { hashCopy.put("foo", 1, 'a'); hashCopy.put("bar", 1, 'b'); hashCopy.put("foo", 3, 'c'); - Table reordered = + Table reordered = create("foo", 3, 'c', "foo", 1, 'a', "bar", 1, 'b'); - Table smaller = create("foo", 1, 'a', "bar", 1, 'b'); - Table swapOuter = + Table smaller = create("foo", 1, 'a', "bar", 1, 'b'); + Table swapOuter = create("bar", 1, 'a', "foo", 1, 'b', "bar", 3, 'c'); - Table swapValues = + Table swapValues = create("foo", 1, 'c', "bar", 1, 'b', "foo", 3, 'a'); new EqualsTester() @@ -242,9 +242,9 @@ public void testEmptyToArry() { } public void testCreateCopyArrayTable() { - Table original = + Table original = create("foo", 1, 'a', "bar", 1, 'b', "foo", 3, 'c'); - Table copy = ArrayTable.create(original); + Table copy = ArrayTable.create(original); assertEquals(original, copy); original.put("foo", 1, 'd'); assertEquals((Character) 'd', original.get("foo", 1)); @@ -258,7 +258,7 @@ public void testCreateCopyHashBasedTable() { original.put("foo", 1, 'a'); original.put("bar", 1, 'b'); original.put("foo", 3, 'c'); - Table copy = ArrayTable.create(original); + Table copy = ArrayTable.create(original); assertEquals(4, copy.size()); assertEquals((Character) 'a', copy.get("foo", 1)); assertEquals((Character) 'b', copy.get("bar", 1)); @@ -281,7 +281,7 @@ public void testCreateCopyEmptyTable() { } public void testCreateCopyEmptyArrayTable() { - Table original = + Table original = ArrayTable.create(Arrays.asList(), Arrays.asList()); ArrayTable copy = ArrayTable.create(original); assertThat(copy).isEqualTo(original); diff --git a/guava-tests/test/com/google/common/collect/HashBasedTableTest.java b/guava-tests/test/com/google/common/collect/HashBasedTableTest.java index fac4794dfff2..15ca3482d2e6 100644 --- a/guava-tests/test/com/google/common/collect/HashBasedTableTest.java +++ b/guava-tests/test/com/google/common/collect/HashBasedTableTest.java @@ -23,6 +23,7 @@ import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link HashBasedTable}. @@ -31,10 +32,10 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public class HashBasedTableTest extends AbstractTableTest { +public class HashBasedTableTest extends AbstractTableTest { @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { Table table = HashBasedTable.create(); table.put("foo", 4, 'a'); table.put("cat", 1, 'b'); diff --git a/guava-tests/test/com/google/common/collect/ImmutableTableTest.java b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java index 22d151fb088c..5baf6344e454 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableTableTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableTableTest.java @@ -34,9 +34,9 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public class ImmutableTableTest extends AbstractTableReadTest { +public class ImmutableTableTest extends AbstractTableReadTest { @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { ImmutableTable.Builder builder = ImmutableTable.builder(); for (int i = 0; i < data.length; i = i + 3) { builder.put((String) data[i], (Integer) data[i + 1], (Character) data[i + 2]); diff --git a/guava-tests/test/com/google/common/collect/NewCustomTableTest.java b/guava-tests/test/com/google/common/collect/NewCustomTableTest.java index b048e4648a38..fc905f43ed90 100644 --- a/guava-tests/test/com/google/common/collect/NewCustomTableTest.java +++ b/guava-tests/test/com/google/common/collect/NewCustomTableTest.java @@ -22,6 +22,7 @@ import com.google.common.base.Supplier; import java.util.Map; import java.util.TreeMap; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link Tables#newCustomTable}. @@ -30,10 +31,10 @@ */ @GwtCompatible @ElementTypesAreNonnullByDefault -public class NewCustomTableTest extends AbstractTableTest { +public class NewCustomTableTest extends AbstractTableTest { @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { Supplier> factory = new Supplier>() { @Override diff --git a/guava-tests/test/com/google/common/collect/SynchronizedTableTest.java b/guava-tests/test/com/google/common/collect/SynchronizedTableTest.java index 216f32b2e6cf..aaa7d1662fc6 100644 --- a/guava-tests/test/com/google/common/collect/SynchronizedTableTest.java +++ b/guava-tests/test/com/google/common/collect/SynchronizedTableTest.java @@ -22,7 +22,7 @@ import java.util.Set; import org.checkerframework.checker.nullness.qual.Nullable; -public class SynchronizedTableTest extends AbstractTableTest { +public class SynchronizedTableTest extends AbstractTableTest { private static final class TestTable implements Table, Serializable { final Table delegate = HashBasedTable.create(); public final Object mutex = new Integer(1); // something Serializable @@ -164,7 +164,7 @@ public Map> rowMap() { } @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { TestTable table = new TestTable<>(); Table synced = Synchronized.table(table, table.mutex); populate(synced, data); diff --git a/guava-tests/test/com/google/common/collect/TableCollectorsTest.java b/guava-tests/test/com/google/common/collect/TableCollectorsTest.java index 7380923ca57a..dff766cef3b6 100644 --- a/guava-tests/test/com/google/common/collect/TableCollectorsTest.java +++ b/guava-tests/test/com/google/common/collect/TableCollectorsTest.java @@ -211,12 +211,13 @@ public void testToTableNullMerge() { } public void testToTableNullValues() { - Collector, ?, Table> collector = - TableCollectors.toTable( - Cell::getRowKey, - Cell::getColumnKey, - Cell::getValue, - () -> ArrayTable.create(ImmutableList.of("one"), ImmutableList.of("uno"))); + Collector, ?, Table> + collector = + TableCollectors.toTable( + Cell::getRowKey, + Cell::getColumnKey, + Cell::getValue, + () -> ArrayTable.create(ImmutableList.of("one"), ImmutableList.of("uno"))); try { Stream.of(immutableCell("one", "uno", (Integer) null)).collect(collector); fail("Expected NullPointerException"); diff --git a/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java b/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java index 20251795ce9a..8039b1dec5c1 100644 --- a/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTransformValuesTest.java @@ -31,7 +31,7 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public class TablesTransformValuesTest extends AbstractTableTest { +public class TablesTransformValuesTest extends AbstractTableTest { private static final Function<@Nullable String, @Nullable Character> FIRST_CHARACTER = new Function<@Nullable String, @Nullable Character>() { @@ -42,7 +42,7 @@ public class TablesTransformValuesTest extends AbstractTableTest { }; @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { Table table = HashBasedTable.create(); checkArgument(data.length % 3 == 0); for (int i = 0; i < data.length; i += 3) { diff --git a/guava-tests/test/com/google/common/collect/TransposedTableTest.java b/guava-tests/test/com/google/common/collect/TransposedTableTest.java index e556ea88fa9a..c560aa2dda19 100644 --- a/guava-tests/test/com/google/common/collect/TransposedTableTest.java +++ b/guava-tests/test/com/google/common/collect/TransposedTableTest.java @@ -17,6 +17,7 @@ package com.google.common.collect; import com.google.common.annotations.GwtCompatible; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link Tables#transpose}. @@ -25,10 +26,10 @@ */ @GwtCompatible @ElementTypesAreNonnullByDefault -public class TransposedTableTest extends AbstractTableTest { +public class TransposedTableTest extends AbstractTableTest { @Override - protected Table create(Object... data) { + protected Table create(@Nullable Object... data) { Table original = HashBasedTable.create(); Table table = Tables.transpose(original); table.clear(); diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java index f42673766a21..7f4d8ff822ab 100644 --- a/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java +++ b/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java @@ -35,6 +35,7 @@ import java.util.SortedMap; import junit.framework.Test; import junit.framework.TestSuite; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Test cases for {@link TreeBasedTable}. @@ -44,7 +45,7 @@ */ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault -public class TreeBasedTableTest extends AbstractTableTest { +public class TreeBasedTableTest extends AbstractTableTest { @J2ktIncompatible @GwtIncompatible // suite public static Test suite() { @@ -90,7 +91,7 @@ protected TreeBasedTable create( } @Override - protected TreeBasedTable create(Object... data) { + protected TreeBasedTable create(@Nullable Object... data) { TreeBasedTable table = TreeBasedTable.create(); table.put("foo", 4, 'a'); table.put("cat", 1, 'b'); From 14eef4bb930b5084c19034ebbb07128e7b210371 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 4 Mar 2024 09:48:02 -0800 Subject: [PATCH 195/216] `ObjectArraysTest` J2KT fixes MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - use a different superclass of `String` for `testConcatWithMoreGeneralType`: KMP `String` does not implement `Serializable` - disable a test that needs array class literals. Kotlin treats arrays as generic (with special handling on JVM/for Java interop), so doesn’t really support array class literals which in one test is required for correct type inference. PiperOrigin-RevId: 612483924 --- .../test/com/google/common/collect/ObjectArraysTest.java | 6 +++--- .../test/com/google/common/collect/ObjectArraysTest.java | 6 +++--- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java b/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java index 62a1b76b2995..7e6646d354a3 100644 --- a/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java +++ b/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java @@ -22,7 +22,6 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.NullPointerTester; -import java.io.Serializable; import java.util.Arrays; import java.util.List; import junit.framework.TestCase; @@ -58,6 +57,7 @@ public void testNewArray_fromClass_Nonempty() { assertNull(array[0]); } + @J2ktIncompatible // Array::class literal not available in Kotlin KMP @GwtIncompatible // ObjectArrays.newArray(Class, int) public void testNewArray_fromClass_OfArray() { String[][] array = ObjectArrays.newArray(String[].class, 1); @@ -117,8 +117,8 @@ public void testConcatBasic() { @GwtIncompatible // ObjectArrays.concat(Object[], Object[], Class) public void testConcatWithMoreGeneralType() { - Serializable[] result = ObjectArrays.concat(new String[0], new String[0], Serializable.class); - assertEquals(Serializable[].class, result.getClass()); + CharSequence[] result = ObjectArrays.concat(new String[0], new String[0], CharSequence.class); + assertEquals(CharSequence[].class, result.getClass()); } public void testToArrayImpl1() { diff --git a/guava-tests/test/com/google/common/collect/ObjectArraysTest.java b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java index 62a1b76b2995..7e6646d354a3 100644 --- a/guava-tests/test/com/google/common/collect/ObjectArraysTest.java +++ b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java @@ -22,7 +22,6 @@ import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.testing.NullPointerTester; -import java.io.Serializable; import java.util.Arrays; import java.util.List; import junit.framework.TestCase; @@ -58,6 +57,7 @@ public void testNewArray_fromClass_Nonempty() { assertNull(array[0]); } + @J2ktIncompatible // Array::class literal not available in Kotlin KMP @GwtIncompatible // ObjectArrays.newArray(Class, int) public void testNewArray_fromClass_OfArray() { String[][] array = ObjectArrays.newArray(String[].class, 1); @@ -117,8 +117,8 @@ public void testConcatBasic() { @GwtIncompatible // ObjectArrays.concat(Object[], Object[], Class) public void testConcatWithMoreGeneralType() { - Serializable[] result = ObjectArrays.concat(new String[0], new String[0], Serializable.class); - assertEquals(Serializable[].class, result.getClass()); + CharSequence[] result = ObjectArrays.concat(new String[0], new String[0], CharSequence.class); + assertEquals(CharSequence[].class, result.getClass()); } public void testToArrayImpl1() { From c7d03fd3f8d46fb849e748253c0ffaedc70db23a Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 4 Mar 2024 11:26:41 -0800 Subject: [PATCH 196/216] Add missing `@Nullable`s to MultimapsTest The unmodifiable multimap tests all test maps with null keys/null values. RELNOTES=n/a PiperOrigin-RevId: 612521220 --- .../google/common/collect/MultimapsTest.java | 21 ++++++++++++------- .../google/common/collect/MultimapsTest.java | 21 ++++++++++++------- 2 files changed, 26 insertions(+), 16 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java index e262c0ab9095..3cb1b6d75873 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -263,7 +263,7 @@ public void testUnmodifiableMultimapEntries() { * multimap must support null keys and values. */ private static void checkUnmodifiableMultimap( - Multimap multimap, boolean permitsDuplicates) { + Multimap<@Nullable String, @Nullable Integer> multimap, boolean permitsDuplicates) { checkUnmodifiableMultimap(multimap, permitsDuplicates, null, null); } @@ -273,7 +273,7 @@ private static void checkUnmodifiableMultimap( * involving nulls. */ private static void checkUnmodifiableMultimap( - Multimap multimap, + Multimap<@Nullable String, @Nullable Integer> multimap, boolean permitsDuplicates, @Nullable String nullKey, @Nullable Integer nullValue) { @@ -302,8 +302,8 @@ private static void checkUnmodifiableMultimap( } /** Prepares the multimap for unmodifiable tests, returning an unmodifiable view of the map. */ - private static Multimap prepareUnmodifiableTests( - Multimap multimap, + private static Multimap<@Nullable String, @Nullable Integer> prepareUnmodifiableTests( + Multimap<@Nullable String, @Nullable Integer> multimap, boolean permitsDuplicates, @Nullable String nullKey, @Nullable Integer nullValue) { @@ -324,14 +324,19 @@ private static Multimap prepareUnmodifiableTests( assertEquals(8, multimap.size()); } - Multimap unmodifiable; + Multimap<@Nullable String, @Nullable Integer> unmodifiable; if (multimap instanceof SortedSetMultimap) { unmodifiable = - Multimaps.unmodifiableSortedSetMultimap((SortedSetMultimap) multimap); + Multimaps.unmodifiableSortedSetMultimap( + (SortedSetMultimap<@Nullable String, @Nullable Integer>) multimap); } else if (multimap instanceof SetMultimap) { - unmodifiable = Multimaps.unmodifiableSetMultimap((SetMultimap) multimap); + unmodifiable = + Multimaps.unmodifiableSetMultimap( + (SetMultimap<@Nullable String, @Nullable Integer>) multimap); } else if (multimap instanceof ListMultimap) { - unmodifiable = Multimaps.unmodifiableListMultimap((ListMultimap) multimap); + unmodifiable = + Multimaps.unmodifiableListMultimap( + (ListMultimap<@Nullable String, @Nullable Integer>) multimap); } else { unmodifiable = Multimaps.unmodifiableMultimap(multimap); } diff --git a/guava-tests/test/com/google/common/collect/MultimapsTest.java b/guava-tests/test/com/google/common/collect/MultimapsTest.java index 04ac2f8bb8ca..2555cb5ea63b 100644 --- a/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -332,7 +332,7 @@ public void testUnmodifiableMultimapEntries() { * multimap must support null keys and values. */ private static void checkUnmodifiableMultimap( - Multimap multimap, boolean permitsDuplicates) { + Multimap<@Nullable String, @Nullable Integer> multimap, boolean permitsDuplicates) { checkUnmodifiableMultimap(multimap, permitsDuplicates, null, null); } @@ -342,7 +342,7 @@ private static void checkUnmodifiableMultimap( * involving nulls. */ private static void checkUnmodifiableMultimap( - Multimap multimap, + Multimap<@Nullable String, @Nullable Integer> multimap, boolean permitsDuplicates, @Nullable String nullKey, @Nullable Integer nullValue) { @@ -371,8 +371,8 @@ private static void checkUnmodifiableMultimap( } /** Prepares the multimap for unmodifiable tests, returning an unmodifiable view of the map. */ - private static Multimap prepareUnmodifiableTests( - Multimap multimap, + private static Multimap<@Nullable String, @Nullable Integer> prepareUnmodifiableTests( + Multimap<@Nullable String, @Nullable Integer> multimap, boolean permitsDuplicates, @Nullable String nullKey, @Nullable Integer nullValue) { @@ -393,14 +393,19 @@ private static Multimap prepareUnmodifiableTests( assertEquals(8, multimap.size()); } - Multimap unmodifiable; + Multimap<@Nullable String, @Nullable Integer> unmodifiable; if (multimap instanceof SortedSetMultimap) { unmodifiable = - Multimaps.unmodifiableSortedSetMultimap((SortedSetMultimap) multimap); + Multimaps.unmodifiableSortedSetMultimap( + (SortedSetMultimap<@Nullable String, @Nullable Integer>) multimap); } else if (multimap instanceof SetMultimap) { - unmodifiable = Multimaps.unmodifiableSetMultimap((SetMultimap) multimap); + unmodifiable = + Multimaps.unmodifiableSetMultimap( + (SetMultimap<@Nullable String, @Nullable Integer>) multimap); } else if (multimap instanceof ListMultimap) { - unmodifiable = Multimaps.unmodifiableListMultimap((ListMultimap) multimap); + unmodifiable = + Multimaps.unmodifiableListMultimap( + (ListMultimap<@Nullable String, @Nullable Integer>) multimap); } else { unmodifiable = Multimaps.unmodifiableMultimap(multimap); } From 43abfe4e6ffb7ac03cc7774eac379bee5a0a70b1 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Mon, 4 Mar 2024 12:14:00 -0800 Subject: [PATCH 197/216] Disable a `LongMath` test that is slow on J2KT PiperOrigin-RevId: 612539161 --- .../guava-tests/test/com/google/common/math/LongMathTest.java | 1 + guava-tests/test/com/google/common/math/LongMathTest.java | 1 + 2 files changed, 2 insertions(+) diff --git a/android/guava-tests/test/com/google/common/math/LongMathTest.java b/android/guava-tests/test/com/google/common/math/LongMathTest.java index 25ad1dc325f0..21de0f55a837 100644 --- a/android/guava-tests/test/com/google/common/math/LongMathTest.java +++ b/android/guava-tests/test/com/google/common/math/LongMathTest.java @@ -786,6 +786,7 @@ public void testBinomialNegative() { } + @J2ktIncompatible // slow enough to cause flakiness @GwtIncompatible // far too slow public void testSqrtOfPerfectSquareAsDoubleIsPerfect() { // This takes just over a minute on my machine. diff --git a/guava-tests/test/com/google/common/math/LongMathTest.java b/guava-tests/test/com/google/common/math/LongMathTest.java index 25ad1dc325f0..21de0f55a837 100644 --- a/guava-tests/test/com/google/common/math/LongMathTest.java +++ b/guava-tests/test/com/google/common/math/LongMathTest.java @@ -786,6 +786,7 @@ public void testBinomialNegative() { } + @J2ktIncompatible // slow enough to cause flakiness @GwtIncompatible // far too slow public void testSqrtOfPerfectSquareAsDoubleIsPerfect() { // This takes just over a minute on my machine. From 5f7750959a391e78ae17165921933b78a3a815d5 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Mon, 4 Mar 2024 14:42:09 -0800 Subject: [PATCH 198/216] Declare the `V` parameter of `toTable` as non-nullable. ...on account of [how it is](https://github.com/google/guava/blob/a6a34dc42627f2dc5b8937f428322739b74ce8f3/guava/src/com/google/common/collect/TableCollectors.java#L206). I noticed this during cl/611440623, and I just wrote a bit about `Preconditions.checkNotNull` in some extremely post-submit commentary on cl/372346107. RELNOTES=n/a PiperOrigin-RevId: 612591080 --- .../guava/src/com/google/common/collect/TableCollectors.java | 4 ++-- android/guava/src/com/google/common/collect/Tables.java | 4 ++-- guava/src/com/google/common/collect/TableCollectors.java | 4 ++-- guava/src/com/google/common/collect/Tables.java | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/android/guava/src/com/google/common/collect/TableCollectors.java b/android/guava/src/com/google/common/collect/TableCollectors.java index 64ee1d587e3c..0508c4802fc9 100644 --- a/android/guava/src/com/google/common/collect/TableCollectors.java +++ b/android/guava/src/com/google/common/collect/TableCollectors.java @@ -86,7 +86,7 @@ final class TableCollectors { T extends @Nullable Object, R extends @Nullable Object, C extends @Nullable Object, - V extends @Nullable Object, + V, I extends Table> Collector toTable( java.util.function.Function rowFunction, @@ -107,7 +107,7 @@ final class TableCollectors { T extends @Nullable Object, R extends @Nullable Object, C extends @Nullable Object, - V extends @Nullable Object, + V, I extends Table> Collector toTable( java.util.function.Function rowFunction, diff --git a/android/guava/src/com/google/common/collect/Tables.java b/android/guava/src/com/google/common/collect/Tables.java index 46c26311f9f2..ba276d510abb 100644 --- a/android/guava/src/com/google/common/collect/Tables.java +++ b/android/guava/src/com/google/common/collect/Tables.java @@ -69,7 +69,7 @@ private Tables() {} T extends @Nullable Object, R extends @Nullable Object, C extends @Nullable Object, - V extends @Nullable Object, + V, I extends Table> Collector toTable( java.util.function.Function rowFunction, @@ -98,7 +98,7 @@ private Tables() {} T extends @Nullable Object, R extends @Nullable Object, C extends @Nullable Object, - V extends @Nullable Object, + V, I extends Table> Collector toTable( java.util.function.Function rowFunction, diff --git a/guava/src/com/google/common/collect/TableCollectors.java b/guava/src/com/google/common/collect/TableCollectors.java index 0257954ee802..1164e822de53 100644 --- a/guava/src/com/google/common/collect/TableCollectors.java +++ b/guava/src/com/google/common/collect/TableCollectors.java @@ -83,7 +83,7 @@ final class TableCollectors { T extends @Nullable Object, R extends @Nullable Object, C extends @Nullable Object, - V extends @Nullable Object, + V, I extends Table> Collector toTable( java.util.function.Function rowFunction, @@ -104,7 +104,7 @@ final class TableCollectors { T extends @Nullable Object, R extends @Nullable Object, C extends @Nullable Object, - V extends @Nullable Object, + V, I extends Table> Collector toTable( java.util.function.Function rowFunction, diff --git a/guava/src/com/google/common/collect/Tables.java b/guava/src/com/google/common/collect/Tables.java index 326ae35153d6..d8aabde00ab3 100644 --- a/guava/src/com/google/common/collect/Tables.java +++ b/guava/src/com/google/common/collect/Tables.java @@ -70,7 +70,7 @@ private Tables() {} T extends @Nullable Object, R extends @Nullable Object, C extends @Nullable Object, - V extends @Nullable Object, + V, I extends Table> Collector toTable( java.util.function.Function rowFunction, @@ -99,7 +99,7 @@ private Tables() {} T extends @Nullable Object, R extends @Nullable Object, C extends @Nullable Object, - V extends @Nullable Object, + V, I extends Table> Collector toTable( java.util.function.Function rowFunction, From 4f7989d63639a4c680dad6f165c3648c850bed22 Mon Sep 17 00:00:00 2001 From: Stefan Haustein Date: Tue, 5 Mar 2024 05:13:11 -0800 Subject: [PATCH 199/216] Enable manual j2kt tests for com.google.common.net RELNOTES=n/a PiperOrigin-RevId: 612802137 --- .../com/google/common/net/InternetDomainNameTest.java | 2 ++ .../test/com/google/common/net/MediaTypeTest.java | 10 ++++++++++ .../com/google/common/net/InternetDomainNameTest.java | 2 ++ .../test/com/google/common/net/MediaTypeTest.java | 10 ++++++++++ 4 files changed, 24 insertions(+) diff --git a/android/guava-tests/test/com/google/common/net/InternetDomainNameTest.java b/android/guava-tests/test/com/google/common/net/InternetDomainNameTest.java index c440ee53f509..b4cdb9b3b856 100644 --- a/android/guava-tests/test/com/google/common/net/InternetDomainNameTest.java +++ b/android/guava-tests/test/com/google/common/net/InternetDomainNameTest.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Ascii; import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; @@ -501,6 +502,7 @@ private static InternetDomainName idn(String domain) { return InternetDomainName.from(domain); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNulls() { final NullPointerTester tester = new NullPointerTester(); diff --git a/android/guava-tests/test/com/google/common/net/MediaTypeTest.java b/android/guava-tests/test/com/google/common/net/MediaTypeTest.java index a3428b32f53d..84ad5bc19fa7 100644 --- a/android/guava-tests/test/com/google/common/net/MediaTypeTest.java +++ b/android/guava-tests/test/com/google/common/net/MediaTypeTest.java @@ -35,6 +35,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.base.Predicate; @@ -57,6 +58,7 @@ */ @GwtCompatible(emulated = true) public class MediaTypeTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // reflection public void testParse_useConstants() throws Exception { for (MediaType constant : getConstants()) { @@ -64,6 +66,7 @@ public void testParse_useConstants() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testCreate_useConstants() throws Exception { for (MediaType constant : getConstants()) { @@ -74,6 +77,7 @@ public void testCreate_useConstants() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testConstants_charset() throws Exception { for (Field field : getConstantFields()) { @@ -86,11 +90,13 @@ public void testConstants_charset() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testConstants_areUnique() { assertThat(getConstants()).containsNoDuplicates(); } + @J2ktIncompatible @GwtIncompatible // reflection private static FluentIterable getConstantFields() { return FluentIterable.from(asList(MediaType.class.getDeclaredFields())) @@ -107,6 +113,7 @@ && isFinal(modifiers) }); } + @J2ktIncompatible @GwtIncompatible // reflection private static FluentIterable getConstants() { return getConstantFields() @@ -525,6 +532,7 @@ public void testGetCharset() { assertThat(MediaType.parse("text/plain; charset=utf-8").charset()).hasValue(UTF_8); } + @J2ktIncompatible @GwtIncompatible // Non-UTF-8 Charset public void testGetCharset_utf16() { assertThat(MediaType.parse("text/plain; charset=utf-16").charset()).hasValue(UTF_16); @@ -604,6 +612,7 @@ public void testEquals() { .testEquals(); } + @J2ktIncompatible @GwtIncompatible // Non-UTF-8 Charset public void testEquals_nonUtf8Charsets() { new EqualsTester() @@ -613,6 +622,7 @@ public void testEquals_nonUtf8Charsets() { .testEquals(); } + @J2ktIncompatible @GwtIncompatible // com.google.common.testing.NullPointerTester public void testNullPointer() { NullPointerTester tester = new NullPointerTester(); diff --git a/guava-tests/test/com/google/common/net/InternetDomainNameTest.java b/guava-tests/test/com/google/common/net/InternetDomainNameTest.java index c440ee53f509..b4cdb9b3b856 100644 --- a/guava-tests/test/com/google/common/net/InternetDomainNameTest.java +++ b/guava-tests/test/com/google/common/net/InternetDomainNameTest.java @@ -19,6 +19,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Ascii; import com.google.common.base.Strings; import com.google.common.collect.ImmutableSet; @@ -501,6 +502,7 @@ private static InternetDomainName idn(String domain) { return InternetDomainName.from(domain); } + @J2ktIncompatible @GwtIncompatible // NullPointerTester public void testNulls() { final NullPointerTester tester = new NullPointerTester(); diff --git a/guava-tests/test/com/google/common/net/MediaTypeTest.java b/guava-tests/test/com/google/common/net/MediaTypeTest.java index a3428b32f53d..84ad5bc19fa7 100644 --- a/guava-tests/test/com/google/common/net/MediaTypeTest.java +++ b/guava-tests/test/com/google/common/net/MediaTypeTest.java @@ -35,6 +35,7 @@ import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Function; import com.google.common.base.Optional; import com.google.common.base.Predicate; @@ -57,6 +58,7 @@ */ @GwtCompatible(emulated = true) public class MediaTypeTest extends TestCase { + @J2ktIncompatible @GwtIncompatible // reflection public void testParse_useConstants() throws Exception { for (MediaType constant : getConstants()) { @@ -64,6 +66,7 @@ public void testParse_useConstants() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testCreate_useConstants() throws Exception { for (MediaType constant : getConstants()) { @@ -74,6 +77,7 @@ public void testCreate_useConstants() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testConstants_charset() throws Exception { for (Field field : getConstantFields()) { @@ -86,11 +90,13 @@ public void testConstants_charset() throws Exception { } } + @J2ktIncompatible @GwtIncompatible // reflection public void testConstants_areUnique() { assertThat(getConstants()).containsNoDuplicates(); } + @J2ktIncompatible @GwtIncompatible // reflection private static FluentIterable getConstantFields() { return FluentIterable.from(asList(MediaType.class.getDeclaredFields())) @@ -107,6 +113,7 @@ && isFinal(modifiers) }); } + @J2ktIncompatible @GwtIncompatible // reflection private static FluentIterable getConstants() { return getConstantFields() @@ -525,6 +532,7 @@ public void testGetCharset() { assertThat(MediaType.parse("text/plain; charset=utf-8").charset()).hasValue(UTF_8); } + @J2ktIncompatible @GwtIncompatible // Non-UTF-8 Charset public void testGetCharset_utf16() { assertThat(MediaType.parse("text/plain; charset=utf-16").charset()).hasValue(UTF_16); @@ -604,6 +612,7 @@ public void testEquals() { .testEquals(); } + @J2ktIncompatible @GwtIncompatible // Non-UTF-8 Charset public void testEquals_nonUtf8Charsets() { new EqualsTester() @@ -613,6 +622,7 @@ public void testEquals_nonUtf8Charsets() { .testEquals(); } + @J2ktIncompatible @GwtIncompatible // com.google.common.testing.NullPointerTester public void testNullPointer() { NullPointerTester tester = new NullPointerTester(); From c96c7d42bf109657892646e9ca89f7751981b4e0 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Tue, 5 Mar 2024 08:00:11 -0800 Subject: [PATCH 200/216] Make null-unsafety explicit in `TableCollectorsTest#testToTableNullValues` Casting `ArrayTable` to `Table` is necessary as of cl 612591080, casting the immutable cell was overlooked because it was masked by incorrect type inference in J2KT (which meant that for J2KT, a different NPE was caught than the expected NPE). But now the test crashes on Kotlin Native due to robustness issues when it comes to incorrect unchecked casts. PiperOrigin-RevId: 612842812 --- .../common/collect/TableCollectorsTest.java | 23 ++++++++++++------- 1 file changed, 15 insertions(+), 8 deletions(-) diff --git a/guava-tests/test/com/google/common/collect/TableCollectorsTest.java b/guava-tests/test/com/google/common/collect/TableCollectorsTest.java index dff766cef3b6..cfd9161e98df 100644 --- a/guava-tests/test/com/google/common/collect/TableCollectorsTest.java +++ b/guava-tests/test/com/google/common/collect/TableCollectorsTest.java @@ -19,6 +19,7 @@ import static com.google.common.collect.Tables.immutableCell; import com.google.common.annotations.GwtCompatible; +import com.google.common.annotations.J2ktIncompatible; import com.google.common.base.Equivalence; import com.google.common.base.Function; import com.google.common.base.MoreObjects; @@ -210,16 +211,22 @@ public void testToTableNullMerge() { ImmutableTable.of(), immutableCell("one", "uno", 1), immutableCell("one", "uno", 2)); } + // https://youtrack.jetbrains.com/issue/KT-58242/. Crash when getValue result (null) is unboxed + @J2ktIncompatible public void testToTableNullValues() { - Collector, ?, Table> - collector = - TableCollectors.toTable( - Cell::getRowKey, - Cell::getColumnKey, - Cell::getValue, - () -> ArrayTable.create(ImmutableList.of("one"), ImmutableList.of("uno"))); + Collector, ?, Table> collector = + TableCollectors.toTable( + Cell::getRowKey, + Cell::getColumnKey, + Cell::getValue, + () -> { + Table table = + ArrayTable.create(ImmutableList.of("one"), ImmutableList.of("uno")); + return (Table) table; + }); try { - Stream.of(immutableCell("one", "uno", (Integer) null)).collect(collector); + Cell cell = immutableCell("one", "uno", null); + Stream.of((Cell) cell).collect(collector); fail("Expected NullPointerException"); } catch (NullPointerException expected) { } From aa1df9f08b7377cb94ec3ad8566bd8edf4409e99 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 6 Mar 2024 07:09:59 -0800 Subject: [PATCH 201/216] Migrate from soon-to-be-deprecated `propagateIfPossible` to equivalent `throwIfInstanceOf` and `throwIfUnchecked` calls. RELNOTES=n/a PiperOrigin-RevId: 613203993 --- .../test/com/google/common/io/CloserTest.java | 6 ++++-- .../src/com/google/common/io/Closer.java | 20 ++++++++++++------- .../test/com/google/common/io/CloserTest.java | 6 ++++-- guava/src/com/google/common/io/Closer.java | 20 ++++++++++++------- 4 files changed, 34 insertions(+), 18 deletions(-) diff --git a/android/guava-tests/test/com/google/common/io/CloserTest.java b/android/guava-tests/test/com/google/common/io/CloserTest.java index f30d771a8743..90c4eefe88af 100644 --- a/android/guava-tests/test/com/google/common/io/CloserTest.java +++ b/android/guava-tests/test/com/google/common/io/CloserTest.java @@ -16,11 +16,12 @@ package com.google.common.io; +import static com.google.common.base.Throwables.throwIfInstanceOf; +import static com.google.common.base.Throwables.throwIfUnchecked; import static com.google.common.truth.Truth.assertThat; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; @@ -447,7 +448,8 @@ public boolean isClosed() { public void close() throws IOException { closed = true; if (throwOnClose != null) { - Throwables.propagateIfPossible(throwOnClose, IOException.class); + throwIfInstanceOf(throwOnClose, IOException.class); + throwIfUnchecked(throwOnClose); throw new AssertionError(throwOnClose); } } diff --git a/android/guava/src/com/google/common/io/Closer.java b/android/guava/src/com/google/common/io/Closer.java index 8e1db7a83096..b1512ae14ca7 100644 --- a/android/guava/src/com/google/common/io/Closer.java +++ b/android/guava/src/com/google/common/io/Closer.java @@ -15,11 +15,12 @@ package com.google.common.io; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Throwables.throwIfInstanceOf; +import static com.google.common.base.Throwables.throwIfUnchecked; import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Throwables; import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.io.Closeable; import java.io.IOException; @@ -149,7 +150,8 @@ public static Closer create() { public RuntimeException rethrow(Throwable e) throws IOException { checkNotNull(e); thrown = e; - Throwables.propagateIfPossible(e, IOException.class); + throwIfInstanceOf(e, IOException.class); + throwIfUnchecked(e); throw new RuntimeException(e); } @@ -171,8 +173,9 @@ public RuntimeException rethrow(Throwable e, Class decl throws IOException, X { checkNotNull(e); thrown = e; - Throwables.propagateIfPossible(e, IOException.class); - Throwables.propagateIfPossible(e, declaredType); + throwIfInstanceOf(e, IOException.class); + throwIfInstanceOf(e, declaredType); + throwIfUnchecked(e); throw new RuntimeException(e); } @@ -195,8 +198,10 @@ public RuntimeException rethrow( Throwable e, Class declaredType1, Class declaredType2) throws IOException, X1, X2 { checkNotNull(e); thrown = e; - Throwables.propagateIfPossible(e, IOException.class); - Throwables.propagateIfPossible(e, declaredType1, declaredType2); + throwIfInstanceOf(e, IOException.class); + throwIfInstanceOf(e, declaredType1); + throwIfInstanceOf(e, declaredType2); + throwIfUnchecked(e); throw new RuntimeException(e); } @@ -226,7 +231,8 @@ public void close() throws IOException { } if (thrown == null && throwable != null) { - Throwables.propagateIfPossible(throwable, IOException.class); + throwIfInstanceOf(throwable, IOException.class); + throwIfUnchecked(throwable); throw new AssertionError(throwable); // not possible } } diff --git a/guava-tests/test/com/google/common/io/CloserTest.java b/guava-tests/test/com/google/common/io/CloserTest.java index f30d771a8743..90c4eefe88af 100644 --- a/guava-tests/test/com/google/common/io/CloserTest.java +++ b/guava-tests/test/com/google/common/io/CloserTest.java @@ -16,11 +16,12 @@ package com.google.common.io; +import static com.google.common.base.Throwables.throwIfInstanceOf; +import static com.google.common.base.Throwables.throwIfUnchecked; import static com.google.common.truth.Truth.assertThat; import com.google.common.base.MoreObjects; import com.google.common.base.Objects; -import com.google.common.base.Throwables; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Lists; @@ -447,7 +448,8 @@ public boolean isClosed() { public void close() throws IOException { closed = true; if (throwOnClose != null) { - Throwables.propagateIfPossible(throwOnClose, IOException.class); + throwIfInstanceOf(throwOnClose, IOException.class); + throwIfUnchecked(throwOnClose); throw new AssertionError(throwOnClose); } } diff --git a/guava/src/com/google/common/io/Closer.java b/guava/src/com/google/common/io/Closer.java index 8e1db7a83096..b1512ae14ca7 100644 --- a/guava/src/com/google/common/io/Closer.java +++ b/guava/src/com/google/common/io/Closer.java @@ -15,11 +15,12 @@ package com.google.common.io; import static com.google.common.base.Preconditions.checkNotNull; +import static com.google.common.base.Throwables.throwIfInstanceOf; +import static com.google.common.base.Throwables.throwIfUnchecked; import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; import com.google.common.annotations.VisibleForTesting; -import com.google.common.base.Throwables; import com.google.errorprone.annotations.CanIgnoreReturnValue; import java.io.Closeable; import java.io.IOException; @@ -149,7 +150,8 @@ public static Closer create() { public RuntimeException rethrow(Throwable e) throws IOException { checkNotNull(e); thrown = e; - Throwables.propagateIfPossible(e, IOException.class); + throwIfInstanceOf(e, IOException.class); + throwIfUnchecked(e); throw new RuntimeException(e); } @@ -171,8 +173,9 @@ public RuntimeException rethrow(Throwable e, Class decl throws IOException, X { checkNotNull(e); thrown = e; - Throwables.propagateIfPossible(e, IOException.class); - Throwables.propagateIfPossible(e, declaredType); + throwIfInstanceOf(e, IOException.class); + throwIfInstanceOf(e, declaredType); + throwIfUnchecked(e); throw new RuntimeException(e); } @@ -195,8 +198,10 @@ public RuntimeException rethrow( Throwable e, Class declaredType1, Class declaredType2) throws IOException, X1, X2 { checkNotNull(e); thrown = e; - Throwables.propagateIfPossible(e, IOException.class); - Throwables.propagateIfPossible(e, declaredType1, declaredType2); + throwIfInstanceOf(e, IOException.class); + throwIfInstanceOf(e, declaredType1); + throwIfInstanceOf(e, declaredType2); + throwIfUnchecked(e); throw new RuntimeException(e); } @@ -226,7 +231,8 @@ public void close() throws IOException { } if (thrown == null && throwable != null) { - Throwables.propagateIfPossible(throwable, IOException.class); + throwIfInstanceOf(throwable, IOException.class); + throwIfUnchecked(throwable); throw new AssertionError(throwable); // not possible } } From cf86414a87e6e0d008f9438619e97eeefd22a32f Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 6 Mar 2024 07:35:58 -0800 Subject: [PATCH 202/216] Deprecate the remaining two `propagateIfPossible` overloads. We'd missed these years ago. They won't be deleted, but we recommend migrating off them: Their behavior is less clear, and we are considering some static analysis that would likely apply to the new methods but not the old. (I notice that there is already [ThrowIfUncheckedKnownChecked](https://errorprone.info/bugpattern/ThrowIfUncheckedKnownChecked). That's a little different, since `propagateIfPossible(knownCheckedException, clazz)` isn't necessarily a no-op. But that could probably would be better written with `throwIfInstanceOf` to make clear that we know we're not rethrowing unchecked exceptions. Anyway, the possible future static analysis includes `throwIfInstanceOf(exception, classThatItCouldNeverBeAnInstanceOf)`, as sometimes seen when accidentally operating on an `ExecutionException` instead of its cause.) RELNOTES=`base`: Deprecated the remaining two overloads of `Throwables.propagateIfPossible`. They won't be deleted, but we recommend migrating off them. PiperOrigin-RevId: 613210259 --- .../guava/src/com/google/common/base/Throwables.java | 10 +++++++--- guava/src/com/google/common/base/Throwables.java | 10 +++++++--- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/android/guava/src/com/google/common/base/Throwables.java b/android/guava/src/com/google/common/base/Throwables.java index 1f1c346e0256..73dad9790a85 100644 --- a/android/guava/src/com/google/common/base/Throwables.java +++ b/android/guava/src/com/google/common/base/Throwables.java @@ -162,7 +162,10 @@ public static void propagateIfPossible(@CheckForNull Throwable throwable) { * * @param throwable the Throwable to possibly propagate * @param declaredType the single checked exception type declared by the calling method + * @deprecated Use a combination of {@link #throwIfInstanceOf} and {@link #throwIfUnchecked}, + * which togther provide the same behavior except that they reject {@code null}. */ + @Deprecated @J2ktIncompatible @GwtIncompatible // propagateIfInstanceOf public static void propagateIfPossible( @@ -175,13 +178,14 @@ public static void propagateIfPossible( * Propagates {@code throwable} exactly as-is, if and only if it is an instance of {@link * RuntimeException}, {@link Error}, {@code declaredType1}, or {@code declaredType2}. * - *

    Discouraged in favor of calling {@link #throwIfInstanceOf} and {@link - * #throwIfUnchecked}. - * * @param throwable the Throwable to possibly propagate * @param declaredType1 any checked exception type declared by the calling method * @param declaredType2 any other checked exception type declared by the calling method + * @deprecated Use a combination of two calls to {@link #throwIfInstanceOf} and one call to {@link + * #throwIfUnchecked}, which togther provide the same behavior except that they reject {@code + * null}. */ + @Deprecated @J2ktIncompatible @GwtIncompatible // propagateIfInstanceOf public static void propagateIfPossible( diff --git a/guava/src/com/google/common/base/Throwables.java b/guava/src/com/google/common/base/Throwables.java index 1f1c346e0256..73dad9790a85 100644 --- a/guava/src/com/google/common/base/Throwables.java +++ b/guava/src/com/google/common/base/Throwables.java @@ -162,7 +162,10 @@ public static void propagateIfPossible(@CheckForNull Throwable throwable) { * * @param throwable the Throwable to possibly propagate * @param declaredType the single checked exception type declared by the calling method + * @deprecated Use a combination of {@link #throwIfInstanceOf} and {@link #throwIfUnchecked}, + * which togther provide the same behavior except that they reject {@code null}. */ + @Deprecated @J2ktIncompatible @GwtIncompatible // propagateIfInstanceOf public static void propagateIfPossible( @@ -175,13 +178,14 @@ public static void propagateIfPossible( * Propagates {@code throwable} exactly as-is, if and only if it is an instance of {@link * RuntimeException}, {@link Error}, {@code declaredType1}, or {@code declaredType2}. * - *

    Discouraged in favor of calling {@link #throwIfInstanceOf} and {@link - * #throwIfUnchecked}. - * * @param throwable the Throwable to possibly propagate * @param declaredType1 any checked exception type declared by the calling method * @param declaredType2 any other checked exception type declared by the calling method + * @deprecated Use a combination of two calls to {@link #throwIfInstanceOf} and one call to {@link + * #throwIfUnchecked}, which togther provide the same behavior except that they reject {@code + * null}. */ + @Deprecated @J2ktIncompatible @GwtIncompatible // propagateIfInstanceOf public static void propagateIfPossible( From b90ce5bde751e20ca24574aad7dd22646269ab07 Mon Sep 17 00:00:00 2001 From: Marcono1234 Date: Wed, 6 Mar 2024 08:28:32 -0800 Subject: [PATCH 203/216] Add action version comments in GitHub workflow files Resolves #7068 Fixes #7079 RELNOTES=n/a PiperOrigin-RevId: 613225504 --- .github/workflows/ci.yml | 14 +++++++------- .github/workflows/gradle-wrapper-validation.yml | 4 ++-- 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index fc0da06b6fb1..c0cac9d8e013 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -32,13 +32,13 @@ jobs: steps: # Cancel any previous runs for the same branch that are still running. - name: 'Cancel previous runs' - uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa + uses: styfle/cancel-workflow-action@85880fa0301c86cca9da44039ee3bb12d3bedbfa # 0.12.1 with: access_token: ${{ github.token }} - name: 'Check out repository' - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: 'Set up JDK ${{ matrix.java }}' - uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 + uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 with: java-version: ${{ matrix.java }} @@ -67,9 +67,9 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Check out repository' - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: 'Set up JDK 11' - uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 + uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 with: java-version: 11 @@ -93,9 +93,9 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Check out repository' - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 + uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 - name: 'Set up JDK 11' - uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 + uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 with: java-version: 11 diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 3a198d0b17a9..317c184351f5 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -9,5 +9,5 @@ jobs: name: "Validation" runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 - - uses: gradle/wrapper-validation-action@699bb18358f12c5b78b37bb0111d3a0e2276e0e2 + - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - uses: gradle/wrapper-validation-action@699bb18358f12c5b78b37bb0111d3a0e2276e0e2 # v2.1.1 From 1bb3c4386bd5cc7a3cf4a6aa817aaeb2a179622d Mon Sep 17 00:00:00 2001 From: cpovirk Date: Thu, 7 Mar 2024 09:45:21 -0800 Subject: [PATCH 204/216] Deprecate the constructors of our `ExecutionException`-like classes that don't accept a cause. Callers commonly assume that instances of these types have a cause, and in practice, they nearly always do. See https://github.com/jspecify/jspecify/issues/490. RELNOTES=`util.concurrent`: Deprecated the constructors of `UncheckedExecutionException` and `ExecutionError` that don't accept a cause. We won't remove these constructors, but we recommend migrating off them, as users of those classes often assume that instances will contain a cause. PiperOrigin-RevId: 613614892 --- .../util/concurrent/ExecutionError.java | 42 ++++++++++++++++--- .../UncheckedExecutionException.java | 42 ++++++++++++++++--- .../util/concurrent/ExecutionError.java | 42 ++++++++++++++++--- .../UncheckedExecutionException.java | 42 ++++++++++++++++--- 4 files changed, 144 insertions(+), 24 deletions(-) diff --git a/android/guava/src/com/google/common/util/concurrent/ExecutionError.java b/android/guava/src/com/google/common/util/concurrent/ExecutionError.java index 303383039fc0..a5a2a1a3aae9 100644 --- a/android/guava/src/com/google/common/util/concurrent/ExecutionError.java +++ b/android/guava/src/com/google/common/util/concurrent/ExecutionError.java @@ -31,25 +31,55 @@ @ElementTypesAreNonnullByDefault public class ExecutionError extends Error { /* - * Ideally, this class would have exposed only constructors that require a non-null cause. We - * might try to move in that direction, but there are complications. See + * Ideally, this class would have exposed only constructors that require a non-null cause. See * https://github.com/jspecify/jspecify-reference-checker/blob/61aafa4ae52594830cfc2d61c8b113009dbdb045/src/main/java/com/google/jspecify/nullness/NullSpecTransfer.java#L789 + * and https://github.com/jspecify/jspecify/issues/490. + * + * (That would also have ensured that its cause was always an Error, rather than possibly another + * kind of Throwable that was later passed to initCause. Then we could have declared the override + * `public final Error getCause()`.) */ - /** Creates a new instance with {@code null} as its detail message. */ + /** + * Creates a new instance with {@code null} as its detail message and no cause. + * + * @deprecated Prefer {@linkplain ExecutionError(Error)} a constructor that accepts a cause: Users + * of this class typically expect for instances to have a non-null cause. At the moment, you + * can usually still preserve behavior by passing an explicit {@code null} cause. Note, + * however, that passing an explicit {@code null} cause prevents anyone from calling {@link + * #initCause} later, so it is not quite equivalent to using a constructor that omits the + * cause. + */ + @Deprecated protected ExecutionError() {} - /** Creates a new instance with the given detail message. */ + /** + * Creates a new instance with the given detail message and no cause. + * + * @deprecated Prefer {@linkplain ExecutionError(String, Error)} a constructor that accepts a + * cause: Users of this class typically expect for instances to have a non-null cause. At the + * moment, you can usually still preserve behavior by passing an explicit {@code null} + * cause. Note, however, that passing an explicit {@code null} cause prevents anyone from + * calling {@link #initCause} later, so it is not quite equivalent to using a constructor that + * omits the cause. + */ + @Deprecated protected ExecutionError(@CheckForNull String message) { super(message); } - /** Creates a new instance with the given detail message and cause. */ + /** + * Creates a new instance with the given detail message and cause. Prefer to provide a + * non-nullable {@code cause}, as many users expect to find one. + */ public ExecutionError(@CheckForNull String message, @CheckForNull Error cause) { super(message, cause); } - /** Creates a new instance with the given cause. */ + /** + * Creates a new instance with {@code null} as its detail message and the given cause. Prefer to + * provide a non-nullable {@code cause}, as many users expect to find one. + */ public ExecutionError(@CheckForNull Error cause) { super(cause); } diff --git a/android/guava/src/com/google/common/util/concurrent/UncheckedExecutionException.java b/android/guava/src/com/google/common/util/concurrent/UncheckedExecutionException.java index a0ec427eeca4..bb6f5e04d054 100644 --- a/android/guava/src/com/google/common/util/concurrent/UncheckedExecutionException.java +++ b/android/guava/src/com/google/common/util/concurrent/UncheckedExecutionException.java @@ -36,25 +36,55 @@ @ElementTypesAreNonnullByDefault public class UncheckedExecutionException extends RuntimeException { /* - * Ideally, this class would have exposed only constructors that require a non-null cause. We - * might try to move in that direction, but there are complications. See + * Ideally, this class would have exposed only constructors that require a non-null cause. See * https://github.com/jspecify/jspecify-reference-checker/blob/61aafa4ae52594830cfc2d61c8b113009dbdb045/src/main/java/com/google/jspecify/nullness/NullSpecTransfer.java#L789 + * and https://github.com/jspecify/jspecify/issues/490. + * + * (Perhaps it should also have required that its cause was a RuntimeException. However, that + * would have required that we throw a different kind of exception for wrapping *checked* + * exceptions in methods like Futures.getUnchecked and LoadingCache.get.) */ - /** Creates a new instance with {@code null} as its detail message. */ + /** + * Creates a new instance with {@code null} as its detail message and no cause. + * + * @deprecated Prefer {@linkplain UncheckedExecutionException(Throwable)} a constructor that + * accepts a cause: Users of this class typically expect for instances to have a non-null + * cause. At the moment, you can usually still preserve behavior by passing an explicit + * {@code null} cause. Note, however, that passing an explicit {@code null} cause prevents + * anyone from calling {@link #initCause} later, so it is not quite equivalent to using a + * constructor that omits the cause. + */ + @Deprecated protected UncheckedExecutionException() {} - /** Creates a new instance with the given detail message. */ + /** + * Creates a new instance with the given detail message and no cause. + * + * @deprecated Prefer {@linkplain UncheckedExecutionException(String, Throwable)} a constructor + * that accepts a cause: Users of this class typically expect for instances to have a non-null + * cause. At the moment, you can usually still preserve behavior by passing an explicit + * {@code null} cause. Note, however, that passing an explicit {@code null} cause prevents + * anyone from calling {@link #initCause} later, so it is not quite equivalent to using a + * constructor that omits the cause. + */ + @Deprecated protected UncheckedExecutionException(@CheckForNull String message) { super(message); } - /** Creates a new instance with the given detail message and cause. */ + /** + * Creates a new instance with the given detail message and cause. Prefer to provide a + * non-nullable {@code cause}, as many users expect to find one. + */ public UncheckedExecutionException(@CheckForNull String message, @CheckForNull Throwable cause) { super(message, cause); } - /** Creates a new instance with the given cause. */ + /** + * Creates a new instance with {@code null} as its detail message and the given cause. Prefer to + * provide a non-nullable {@code cause}, as many users expect to find one. + */ public UncheckedExecutionException(@CheckForNull Throwable cause) { super(cause); } diff --git a/guava/src/com/google/common/util/concurrent/ExecutionError.java b/guava/src/com/google/common/util/concurrent/ExecutionError.java index 303383039fc0..a5a2a1a3aae9 100644 --- a/guava/src/com/google/common/util/concurrent/ExecutionError.java +++ b/guava/src/com/google/common/util/concurrent/ExecutionError.java @@ -31,25 +31,55 @@ @ElementTypesAreNonnullByDefault public class ExecutionError extends Error { /* - * Ideally, this class would have exposed only constructors that require a non-null cause. We - * might try to move in that direction, but there are complications. See + * Ideally, this class would have exposed only constructors that require a non-null cause. See * https://github.com/jspecify/jspecify-reference-checker/blob/61aafa4ae52594830cfc2d61c8b113009dbdb045/src/main/java/com/google/jspecify/nullness/NullSpecTransfer.java#L789 + * and https://github.com/jspecify/jspecify/issues/490. + * + * (That would also have ensured that its cause was always an Error, rather than possibly another + * kind of Throwable that was later passed to initCause. Then we could have declared the override + * `public final Error getCause()`.) */ - /** Creates a new instance with {@code null} as its detail message. */ + /** + * Creates a new instance with {@code null} as its detail message and no cause. + * + * @deprecated Prefer {@linkplain ExecutionError(Error)} a constructor that accepts a cause: Users + * of this class typically expect for instances to have a non-null cause. At the moment, you + * can usually still preserve behavior by passing an explicit {@code null} cause. Note, + * however, that passing an explicit {@code null} cause prevents anyone from calling {@link + * #initCause} later, so it is not quite equivalent to using a constructor that omits the + * cause. + */ + @Deprecated protected ExecutionError() {} - /** Creates a new instance with the given detail message. */ + /** + * Creates a new instance with the given detail message and no cause. + * + * @deprecated Prefer {@linkplain ExecutionError(String, Error)} a constructor that accepts a + * cause: Users of this class typically expect for instances to have a non-null cause. At the + * moment, you can usually still preserve behavior by passing an explicit {@code null} + * cause. Note, however, that passing an explicit {@code null} cause prevents anyone from + * calling {@link #initCause} later, so it is not quite equivalent to using a constructor that + * omits the cause. + */ + @Deprecated protected ExecutionError(@CheckForNull String message) { super(message); } - /** Creates a new instance with the given detail message and cause. */ + /** + * Creates a new instance with the given detail message and cause. Prefer to provide a + * non-nullable {@code cause}, as many users expect to find one. + */ public ExecutionError(@CheckForNull String message, @CheckForNull Error cause) { super(message, cause); } - /** Creates a new instance with the given cause. */ + /** + * Creates a new instance with {@code null} as its detail message and the given cause. Prefer to + * provide a non-nullable {@code cause}, as many users expect to find one. + */ public ExecutionError(@CheckForNull Error cause) { super(cause); } diff --git a/guava/src/com/google/common/util/concurrent/UncheckedExecutionException.java b/guava/src/com/google/common/util/concurrent/UncheckedExecutionException.java index a0ec427eeca4..bb6f5e04d054 100644 --- a/guava/src/com/google/common/util/concurrent/UncheckedExecutionException.java +++ b/guava/src/com/google/common/util/concurrent/UncheckedExecutionException.java @@ -36,25 +36,55 @@ @ElementTypesAreNonnullByDefault public class UncheckedExecutionException extends RuntimeException { /* - * Ideally, this class would have exposed only constructors that require a non-null cause. We - * might try to move in that direction, but there are complications. See + * Ideally, this class would have exposed only constructors that require a non-null cause. See * https://github.com/jspecify/jspecify-reference-checker/blob/61aafa4ae52594830cfc2d61c8b113009dbdb045/src/main/java/com/google/jspecify/nullness/NullSpecTransfer.java#L789 + * and https://github.com/jspecify/jspecify/issues/490. + * + * (Perhaps it should also have required that its cause was a RuntimeException. However, that + * would have required that we throw a different kind of exception for wrapping *checked* + * exceptions in methods like Futures.getUnchecked and LoadingCache.get.) */ - /** Creates a new instance with {@code null} as its detail message. */ + /** + * Creates a new instance with {@code null} as its detail message and no cause. + * + * @deprecated Prefer {@linkplain UncheckedExecutionException(Throwable)} a constructor that + * accepts a cause: Users of this class typically expect for instances to have a non-null + * cause. At the moment, you can usually still preserve behavior by passing an explicit + * {@code null} cause. Note, however, that passing an explicit {@code null} cause prevents + * anyone from calling {@link #initCause} later, so it is not quite equivalent to using a + * constructor that omits the cause. + */ + @Deprecated protected UncheckedExecutionException() {} - /** Creates a new instance with the given detail message. */ + /** + * Creates a new instance with the given detail message and no cause. + * + * @deprecated Prefer {@linkplain UncheckedExecutionException(String, Throwable)} a constructor + * that accepts a cause: Users of this class typically expect for instances to have a non-null + * cause. At the moment, you can usually still preserve behavior by passing an explicit + * {@code null} cause. Note, however, that passing an explicit {@code null} cause prevents + * anyone from calling {@link #initCause} later, so it is not quite equivalent to using a + * constructor that omits the cause. + */ + @Deprecated protected UncheckedExecutionException(@CheckForNull String message) { super(message); } - /** Creates a new instance with the given detail message and cause. */ + /** + * Creates a new instance with the given detail message and cause. Prefer to provide a + * non-nullable {@code cause}, as many users expect to find one. + */ public UncheckedExecutionException(@CheckForNull String message, @CheckForNull Throwable cause) { super(message, cause); } - /** Creates a new instance with the given cause. */ + /** + * Creates a new instance with {@code null} as its detail message and the given cause. Prefer to + * provide a non-nullable {@code cause}, as many users expect to find one. + */ public UncheckedExecutionException(@CheckForNull Throwable cause) { super(cause); } From 0b1c477311b2c7a0a89f5e0ac785084e3ab15d34 Mon Sep 17 00:00:00 2001 From: Martin Kretzschmar Date: Thu, 7 Mar 2024 10:29:52 -0800 Subject: [PATCH 205/216] Collection tests: Add explicit type parameters for J2KT and enable J2KT tests MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - The J2KT type inference often cannot infer `@Nullable` on type arguments - Kotlin doesn’t allow infering a function’s type arguments from the return type alone. J2KT errs on the side of printing anything that can be inferred in Java, but there are some situations where it backs off (`this.of()` in this cl) PiperOrigin-RevId: 613629330 --- .../collect/AbstractImmutableSetTest.java | 8 +-- .../AbstractMapsTransformValuesTest.java | 9 +-- .../ForwardingSortedMapImplementsMapTest.java | 2 +- .../common/collect/GeneralRangeTest.java | 5 +- .../collect/ImmutableListMultimapTest.java | 6 +- .../common/collect/ImmutableListTest.java | 5 +- .../common/collect/ImmutableMultisetTest.java | 16 +++-- .../collect/ImmutableSetMultimapTest.java | 6 +- .../collect/ImmutableSortedMapTest.java | 10 +-- .../collect/ImmutableSortedSetTest.java | 26 ++++---- .../google/common/collect/IterablesTest.java | 16 ++--- .../google/common/collect/IteratorsTest.java | 34 +++++----- ...ansformValuesUnmodifiableIteratorTest.java | 9 +-- .../collect/MinMaxPriorityQueueTest.java | 2 +- .../google/common/collect/MultimapsTest.java | 13 ++-- .../common/collect/ObjectArraysTest.java | 9 +-- .../google/common/collect/OrderingTest.java | 63 ++++++++++--------- .../common/collect/PeekingIteratorTest.java | 2 +- .../com/google/common/collect/SetsTest.java | 2 +- .../com/google/common/collect/TablesTest.java | 21 +++++-- .../common/collect/TopKSelectorTest.java | 4 +- .../common/collect/TreeBasedTableTest.java | 2 +- .../collect/TreeMultimapExplicitTest.java | 10 +-- .../collect/TreeMultimapNaturalTest.java | 2 +- .../common/collect/TreeMultisetTest.java | 4 +- .../collect/AbstractImmutableSetTest.java | 8 +-- .../AbstractMapsTransformValuesTest.java | 9 +-- .../ForwardingSortedMapImplementsMapTest.java | 2 +- .../common/collect/GeneralRangeTest.java | 5 +- .../collect/ImmutableListMultimapTest.java | 6 +- .../common/collect/ImmutableListTest.java | 5 +- .../common/collect/ImmutableMultisetTest.java | 16 +++-- .../collect/ImmutableSetMultimapTest.java | 6 +- .../collect/ImmutableSortedMapTest.java | 10 +-- .../collect/ImmutableSortedSetTest.java | 26 ++++---- .../google/common/collect/IterablesTest.java | 16 ++--- .../google/common/collect/IteratorsTest.java | 36 ++++++----- ...ansformValuesUnmodifiableIteratorTest.java | 9 +-- .../collect/MinMaxPriorityQueueTest.java | 2 +- .../common/collect/MoreCollectorsTest.java | 3 +- .../google/common/collect/MultimapsTest.java | 13 ++-- .../common/collect/ObjectArraysTest.java | 9 +-- .../google/common/collect/OrderingTest.java | 63 ++++++++++--------- .../common/collect/PeekingIteratorTest.java | 2 +- .../com/google/common/collect/SetsTest.java | 2 +- .../google/common/collect/StreamsTest.java | 7 ++- .../com/google/common/collect/TablesTest.java | 21 +++++-- .../common/collect/TopKSelectorTest.java | 4 +- .../common/collect/TreeBasedTableTest.java | 2 +- .../collect/TreeMultimapExplicitTest.java | 10 +-- .../collect/TreeMultimapNaturalTest.java | 2 +- .../common/collect/TreeMultisetTest.java | 4 +- 52 files changed, 326 insertions(+), 258 deletions(-) diff --git a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index c8989d34d884..e87c42be38bc 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -75,7 +75,7 @@ protected abstract > Set copyOf( public void testCreation_noArgs() { Set set = of(); assertEquals(Collections.emptySet(), set); - assertSame(of(), set); + assertSame(this.of(), set); } public void testCreation_oneElement() { @@ -122,7 +122,7 @@ public void testCopyOf_emptyArray() { String[] array = new String[0]; Set set = copyOf(array); assertEquals(Collections.emptySet(), set); - assertSame(of(), set); + assertSame(this.of(), set); } public void testCopyOf_arrayOfOneElement() { @@ -153,7 +153,7 @@ public void testCopyOf_collection_empty() { Collection c = MinimalCollection.of(); Set set = copyOf(c); assertEquals(Collections.emptySet(), set); - assertSame(of(), set); + assertSame(this.of(), set); } public void testCopyOf_collection_oneElement() { @@ -203,7 +203,7 @@ public void testCopyOf_iterator_empty() { Iterator iterator = Iterators.emptyIterator(); Set set = copyOf(iterator); assertEquals(Collections.emptySet(), set); - assertSame(of(), set); + assertSame(this.of(), set); } public void testCopyOf_iterator_oneElement() { diff --git a/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java b/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java index 3a46bb4c3034..67a47e67d355 100644 --- a/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java +++ b/android/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java @@ -249,11 +249,12 @@ public void testTransformEntrySetContains() { Set> entries = map.entrySet(); assertTrue(entries.contains(Maps.immutableEntry("a", true))); - assertTrue(entries.contains(Maps.immutableEntry("b", (Boolean) null))); - assertTrue(entries.contains(Maps.immutableEntry((String) null, (Boolean) null))); + assertTrue(entries.contains(Maps.immutableEntry("b", null))); + assertTrue( + entries.contains(Maps.<@Nullable String, @Nullable Boolean>immutableEntry(null, null))); - assertFalse(entries.contains(Maps.immutableEntry("c", (Boolean) null))); - assertFalse(entries.contains(Maps.immutableEntry((String) null, true))); + assertFalse(entries.contains(Maps.immutableEntry("c", null))); + assertFalse(entries.contains(Maps.<@Nullable String, Boolean>immutableEntry(null, true))); } @Override diff --git a/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java b/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java index daa929df6c2c..b021a0de47f0 100644 --- a/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java @@ -52,7 +52,7 @@ public ForwardingSortedMapImplementsMapTest() { @Override protected SortedMap makeEmptyMap() { return new SimpleForwardingSortedMap<>( - new TreeMap(Ordering.natural().nullsFirst())); + new TreeMap(Ordering.natural().nullsFirst())); } @Override diff --git a/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java b/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java index d2b1d488878d..c50f1f5c46d1 100644 --- a/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java +++ b/android/guava-tests/test/com/google/common/collect/GeneralRangeTest.java @@ -35,7 +35,8 @@ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public class GeneralRangeTest extends TestCase { - private static final Ordering<@Nullable Integer> ORDERING = Ordering.natural().nullsFirst(); + private static final Ordering<@Nullable Integer> ORDERING = + Ordering.natural().nullsFirst(); private static final List<@Nullable Integer> IN_ORDER_VALUES = Arrays.asList(null, 1, 2, 3, 4, 5); @@ -150,7 +151,7 @@ public void testIntersectAgainstBiggerRange() { assertEquals( GeneralRange.range(ORDERING, 2, CLOSED, 4, OPEN), - range.intersect(GeneralRange.range(ORDERING, null, OPEN, 5, CLOSED))); + range.intersect(GeneralRange.<@Nullable Integer>range(ORDERING, null, OPEN, 5, CLOSED))); assertEquals( GeneralRange.range(ORDERING, 2, OPEN, 4, OPEN), diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java index 59c8e3361214..a5f501ea5ad4 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java @@ -383,10 +383,10 @@ public void testCopyOfNullKey() { } public void testCopyOfNullValue() { - ArrayListMultimap input = ArrayListMultimap.create(); - input.putAll("foo", Arrays.asList(1, null, 3)); + ArrayListMultimap input = ArrayListMultimap.create(); + input.putAll("foo", Arrays.<@Nullable Integer>asList(1, null, 3)); try { - ImmutableListMultimap.copyOf(input); + ImmutableListMultimap.copyOf((ArrayListMultimap) input); fail(); } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java index 7fe9305ac6b9..46ac06279f63 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableListTest.java @@ -635,9 +635,10 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } builder = ImmutableList.builder(); - Iterator iteratorWithNulls = asList("a", null, "b").iterator(); + Iterator<@Nullable String> iteratorWithNulls = + Arrays.<@Nullable String>asList("a", null, "b").iterator(); try { - builder.addAll(iteratorWithNulls); + builder.addAll((Iterator) iteratorWithNulls); fail("expected NullPointerException"); } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java index 1bf1f4f841f5..815c7529eb3b 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java @@ -37,6 +37,7 @@ import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; @@ -264,9 +265,10 @@ public void testCopyOf_multiset_general() { } public void testCopyOf_multisetContainingNull() { - Multiset c = HashMultiset.create(asList("a", null, "b")); + Multiset<@Nullable String> c = + HashMultiset.create(Arrays.<@Nullable String>asList("a", null, "b")); try { - ImmutableMultiset.copyOf(c); + ImmutableMultiset.copyOf((Multiset) c); fail(); } catch (NullPointerException expected) { } @@ -291,9 +293,10 @@ public void testCopyOf_iterator_general() { } public void testCopyOf_iteratorContainingNull() { - Iterator iterator = asList("a", null, "b").iterator(); + Iterator<@Nullable String> iterator = + Arrays.<@Nullable String>asList("a", null, "b").iterator(); try { - ImmutableMultiset.copyOf(iterator); + ImmutableMultiset.copyOf((Iterator) iterator); fail(); } catch (NullPointerException expected) { } @@ -430,9 +433,10 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } builder = ImmutableMultiset.builder(); - Multiset multisetWithNull = LinkedHashMultiset.create(asList("a", null, "b")); + Multiset<@Nullable String> multisetWithNull = + LinkedHashMultiset.create(Arrays.<@Nullable String>asList("a", null, "b")); try { - builder.addAll(multisetWithNull); + builder.addAll((Multiset) multisetWithNull); fail("expected NullPointerException"); } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java index 33c6c0f0c570..a8663f619419 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java @@ -396,10 +396,10 @@ public void testCopyOfNullKey() { } public void testCopyOfNullValue() { - HashMultimap input = HashMultimap.create(); - input.putAll("foo", Arrays.asList(1, null, 3)); + HashMultimap input = HashMultimap.create(); + input.putAll("foo", Arrays.<@Nullable Integer>asList(1, null, 3)); try { - ImmutableSetMultimap.copyOf(input); + ImmutableSetMultimap.copyOf((Multimap) input); fail(); } catch (NullPointerException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index 1bdc6092f4f7..2180f947dfb0 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -511,7 +511,7 @@ public void testCopyOf() { } public void testCopyOfExplicitComparator() { - Comparator comparator = Ordering.natural().reverse(); + Comparator comparator = Ordering.natural().reverse(); Map original = new LinkedHashMap<>(); original.put("one", 1); original.put("two", 2); @@ -524,7 +524,7 @@ public void testCopyOfExplicitComparator() { } public void testCopyOfImmutableSortedSetDifferentComparator() { - Comparator comparator = Ordering.natural().reverse(); + Comparator comparator = Ordering.natural().reverse(); Map original = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3); ImmutableSortedMap copy = ImmutableSortedMap.copyOf(original, comparator); assertMapEquals(copy, "two", 2, "three", 3, "one", 1); @@ -545,7 +545,7 @@ public void testCopyOfSortedNatural() { } public void testCopyOfSortedExplicit() { - Comparator comparator = Ordering.natural().reverse(); + Comparator comparator = Ordering.natural().reverse(); SortedMap original = Maps.newTreeMap(comparator); original.put("one", 1); original.put("two", 2); @@ -613,11 +613,11 @@ public void testBuilderReverseOrder() { .put("five", 5) .build(); assertMapEquals(map, "two", 2, "three", 3, "one", 1, "four", 4, "five", 5); - assertEquals(Ordering.natural().reverse(), map.comparator()); + assertEquals(Ordering.natural().reverse(), map.comparator()); } public void testBuilderComparator() { - Comparator comparator = Ordering.natural().reverse(); + Comparator comparator = Ordering.natural().reverse(); ImmutableSortedMap map = new ImmutableSortedMap.Builder(comparator) .put("one", 1) diff --git a/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java b/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java index 644d474b8d31..4f518b6eb8b3 100644 --- a/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java +++ b/android/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java @@ -293,8 +293,8 @@ public void testSingle_headSet() { SortedSet set = of("e"); assertTrue(set.headSet("g") instanceof ImmutableSortedSet); assertThat(set.headSet("g")).contains("e"); - assertSame(of(), set.headSet("c")); - assertSame(of(), set.headSet("e")); + assertSame(this.of(), set.headSet("c")); + assertSame(this.of(), set.headSet("e")); } public void testSingle_tailSet() { @@ -302,7 +302,7 @@ public void testSingle_tailSet() { assertTrue(set.tailSet("c") instanceof ImmutableSortedSet); assertThat(set.tailSet("c")).contains("e"); assertThat(set.tailSet("e")).contains("e"); - assertSame(of(), set.tailSet("g")); + assertSame(this.of(), set.tailSet("g")); } public void testSingle_subSet() { @@ -310,9 +310,9 @@ public void testSingle_subSet() { assertTrue(set.subSet("c", "g") instanceof ImmutableSortedSet); assertThat(set.subSet("c", "g")).contains("e"); assertThat(set.subSet("e", "g")).contains("e"); - assertSame(of(), set.subSet("f", "g")); - assertSame(of(), set.subSet("c", "e")); - assertSame(of(), set.subSet("c", "d")); + assertSame(this.of(), set.subSet("f", "g")); + assertSame(this.of(), set.subSet("c", "e")); + assertSame(this.of(), set.subSet("c", "d")); } public void testSingle_first() { @@ -398,8 +398,8 @@ public void testOf_headSet() { assertTrue(set.headSet("e") instanceof ImmutableSortedSet); assertThat(set.headSet("e")).containsExactly("b", "c", "d").inOrder(); assertThat(set.headSet("g")).containsExactly("b", "c", "d", "e", "f").inOrder(); - assertSame(of(), set.headSet("a")); - assertSame(of(), set.headSet("b")); + assertSame(this.of(), set.headSet("a")); + assertSame(this.of(), set.headSet("b")); } public void testOf_tailSet() { @@ -407,7 +407,7 @@ public void testOf_tailSet() { assertTrue(set.tailSet("e") instanceof ImmutableSortedSet); assertThat(set.tailSet("e")).containsExactly("e", "f").inOrder(); assertThat(set.tailSet("a")).containsExactly("b", "c", "d", "e", "f").inOrder(); - assertSame(of(), set.tailSet("g")); + assertSame(this.of(), set.tailSet("g")); } public void testOf_subSet() { @@ -415,9 +415,9 @@ public void testOf_subSet() { assertTrue(set.subSet("c", "e") instanceof ImmutableSortedSet); assertThat(set.subSet("c", "e")).containsExactly("c", "d").inOrder(); assertThat(set.subSet("a", "g")).containsExactly("b", "c", "d", "e", "f").inOrder(); - assertSame(of(), set.subSet("a", "b")); - assertSame(of(), set.subSet("g", "h")); - assertSame(of(), set.subSet("c", "c")); + assertSame(this.of(), set.subSet("a", "b")); + assertSame(this.of(), set.subSet("g", "h")); + assertSame(this.of(), set.subSet("c", "c")); try { set.subSet("e", "c"); fail(); @@ -1138,7 +1138,7 @@ private static ImmutableList sortedNumberNames(int i, int j) { ImmutableList.of("one", "two", "three", "four", "five", "six", "seven"); private static final ImmutableList SORTED_NUMBER_NAMES = - Ordering.natural().immutableSortedCopy(NUMBER_NAMES); + Ordering.natural().immutableSortedCopy(NUMBER_NAMES); private static class SelfComparableExample implements Comparable { @Override diff --git a/android/guava-tests/test/com/google/common/collect/IterablesTest.java b/android/guava-tests/test/com/google/common/collect/IterablesTest.java index 5a049862ba2f..9d3ab7a35494 100644 --- a/android/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -179,7 +179,7 @@ public void testGetOnlyElement_withDefault_empty() { public void testGetOnlyElement_withDefault_empty_null() { Iterable iterable = Collections.emptyList(); - assertNull(Iterables.getOnlyElement(iterable, null)); + assertNull(Iterables.<@Nullable String>getOnlyElement(iterable, null)); } public void testGetOnlyElement_withDefault_multiple() { @@ -479,7 +479,7 @@ public void testPaddedPartition_basic() { List list = asList(1, 2, 3, 4, 5); Iterable> partitions = Iterables.paddedPartition(list, 2); assertEquals(3, Iterables.size(partitions)); - assertEquals(asList(5, null), Iterables.getLast(partitions)); + assertEquals(Arrays.<@Nullable Integer>asList(5, null), Iterables.getLast(partitions)); } public void testPaddedPartitionRandomAccessInput() { @@ -537,7 +537,7 @@ public void testElementsEqual() throws Exception { assertFalse(Iterables.elementsEqual(a, b)); // null versus non-null. - a = asList(4, 8, 15, null, 23, 42); + a = Arrays.<@Nullable Integer>asList(4, 8, 15, null, 23, 42); b = asList(4, 8, 15, 16, 23, 42); assertFalse(Iterables.elementsEqual(a, b)); assertFalse(Iterables.elementsEqual(b, a)); @@ -824,7 +824,7 @@ public void testGetFirst_withDefault_empty() { public void testGetFirst_withDefault_empty_null() { Iterable iterable = Collections.emptyList(); - assertNull(Iterables.getFirst(iterable, null)); + assertNull(Iterables.<@Nullable String>getFirst(iterable, null)); } public void testGetFirst_withDefault_multiple() { @@ -863,7 +863,7 @@ public void testGetLast_withDefault_empty() { public void testGetLast_withDefault_empty_null() { Iterable iterable = Collections.emptyList(); - assertNull(Iterables.getLast(iterable, null)); + assertNull(Iterables.<@Nullable String>getLast(iterable, null)); } public void testGetLast_withDefault_multiple() { @@ -1350,7 +1350,7 @@ public void testMergeSorted_pyramid() { list.add(j); allIntegers.add(j); } - iterables.add(Ordering.natural().sortedCopy(list)); + iterables.add(Ordering.natural().sortedCopy(list)); } verifyMergeSorted(iterables, allIntegers); @@ -1367,7 +1367,7 @@ public void testMergeSorted_skipping_pyramid() { list.add(j * i); allIntegers.add(j * i); } - iterables.add(Ordering.natural().sortedCopy(list)); + iterables.add(Ordering.natural().sortedCopy(list)); } verifyMergeSorted(iterables, allIntegers); @@ -1385,7 +1385,7 @@ public void testIterables_nullCheck() throws Exception { private static void verifyMergeSorted( Iterable> iterables, Iterable unsortedExpected) { - Iterable expected = Ordering.natural().sortedCopy(unsortedExpected); + Iterable expected = Ordering.natural().sortedCopy(unsortedExpected); Iterable mergedIterator = Iterables.mergeSorted(iterables, Ordering.natural()); diff --git a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java index 6d4b4307f237..aba34944c1fa 100644 --- a/android/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/android/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -162,7 +162,7 @@ public void testSize_partiallyConsumed() { } public void test_contains_nonnull_yes() { - Iterator set = asList("a", null, "b").iterator(); + Iterator<@Nullable String> set = Arrays.<@Nullable String>asList("a", null, "b").iterator(); assertTrue(Iterators.contains(set, "b")); } @@ -172,7 +172,7 @@ public void test_contains_nonnull_no() { } public void test_contains_null_yes() { - Iterator set = asList("a", null, "b").iterator(); + Iterator<@Nullable String> set = Arrays.<@Nullable String>asList("a", null, "b").iterator(); assertTrue(Iterators.contains(set, null)); } @@ -241,7 +241,7 @@ public void testGetOnlyElement_withDefault_empty() { public void testGetOnlyElement_withDefault_empty_null() { Iterator iterator = Iterators.emptyIterator(); - assertNull(Iterators.getOnlyElement(iterator, null)); + assertNull(Iterators.<@Nullable String>getOnlyElement(iterator, null)); } public void testGetOnlyElement_withDefault_two() { @@ -821,7 +821,10 @@ public void testConcatPartiallyAdvancedFirst() { /** Illustrates the somewhat bizarre behavior when a null is passed in. */ public void testConcatContainingNull() { - Iterator> input = asList(iterateOver(1, 2), null, iterateOver(3)).iterator(); + Iterator> input = + (Iterator>) + Arrays.<@Nullable Iterator>asList(iterateOver(1, 2), null, iterateOver(3)) + .iterator(); Iterator result = Iterators.concat(input); assertEquals(1, (int) result.next()); assertEquals(2, (int) result.next()); @@ -939,8 +942,8 @@ public void testElementsEqual() { assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator())); // The same, but with nulls. - a = asList(4, 8, null, 16, 23, 42); - b = asList(4, 8, null, 16, 23, 42); + a = Arrays.<@Nullable Integer>asList(4, 8, null, 16, 23, 42); + b = Arrays.<@Nullable Integer>asList(4, 8, null, 16, 23, 42); assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator())); // Different Iterable types (still equal elements, though). @@ -954,7 +957,7 @@ public void testElementsEqual() { assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator())); // null versus non-null. - a = asList(4, 8, 15, null, 23, 42); + a = Arrays.<@Nullable Integer>asList(4, 8, 15, null, 23, 42); b = asList(4, 8, 15, 16, 23, 42); assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator())); assertFalse(Iterators.elementsEqual(b.iterator(), a.iterator())); @@ -1072,17 +1075,17 @@ public void testPaddedPartition_singleton2() { Iterator> partitions = Iterators.paddedPartition(source, 2); assertTrue(partitions.hasNext()); assertTrue(partitions.hasNext()); - assertEquals(asList(1, null), partitions.next()); + assertEquals(Arrays.<@Nullable Integer>asList(1, null), partitions.next()); assertFalse(partitions.hasNext()); } @GwtIncompatible // fairly slow (~50s) public void testPaddedPartition_general() { + ImmutableList> expectedElements = + ImmutableList.of( + asList(1, 2, 3), asList(4, 5, 6), Arrays.<@Nullable Integer>asList(7, null, null)); new IteratorTester>( - 5, - IteratorFeature.UNMODIFIABLE, - ImmutableList.of(asList(1, 2, 3), asList(4, 5, 6), asList(7, null, null)), - IteratorTester.KnownOrder.KNOWN_ORDER) { + 5, IteratorFeature.UNMODIFIABLE, expectedElements, IteratorTester.KnownOrder.KNOWN_ORDER) { @Override protected Iterator> newTargetIterator() { Iterator source = Iterators.forArray(1, 2, 3, 4, 5, 6, 7); @@ -1287,7 +1290,8 @@ public void testToString() { } public void testToStringWithNull() { - Iterator iterator = Lists.newArrayList("hello", null, "world").iterator(); + Iterator<@Nullable String> iterator = + Lists.<@Nullable String>newArrayList("hello", null, "world").iterator(); assertEquals("[hello, null, world]", Iterators.toString(iterator)); } @@ -1355,7 +1359,7 @@ public void testGetNext_withDefault_empty() { public void testGetNext_withDefault_empty_null() { Iterator iterator = Iterators.emptyIterator(); - assertNull(Iterators.getNext(iterator, null)); + assertNull(Iterators.<@Nullable String>getNext(iterator, null)); } public void testGetNext_withDefault_two() { @@ -1391,7 +1395,7 @@ public void testGetLast_withDefault_empty() { public void testGetLast_withDefault_empty_null() { Iterator iterator = Iterators.emptyIterator(); - assertNull(Iterators.getLast(iterator, null)); + assertNull(Iterators.<@Nullable String>getLast(iterator, null)); } public void testGetLast_withDefault_two() { diff --git a/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java b/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java index 049c1ea7df85..3583c5675848 100644 --- a/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java @@ -358,11 +358,12 @@ public void testTransformEntrySetContains() { Set> entries = map.entrySet(); assertTrue(entries.contains(Maps.immutableEntry("a", true))); - assertTrue(entries.contains(Maps.immutableEntry("b", (Boolean) null))); - assertTrue(entries.contains(Maps.immutableEntry((String) null, (Boolean) null))); + assertTrue(entries.contains(Maps.immutableEntry("b", null))); + assertTrue( + entries.contains(Maps.<@Nullable String, @Nullable Boolean>immutableEntry(null, null))); - assertFalse(entries.contains(Maps.immutableEntry("c", (Boolean) null))); - assertFalse(entries.contains(Maps.immutableEntry((String) null, true))); + assertFalse(entries.contains(Maps.immutableEntry("c", null))); + assertFalse(entries.contains(Maps.<@Nullable String, Boolean>immutableEntry(null, true))); } @Override diff --git a/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java b/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java index 83a835609a3a..ca19020ab9fd 100644 --- a/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java +++ b/android/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java @@ -59,7 +59,7 @@ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public class MinMaxPriorityQueueTest extends TestCase { - private static final Ordering SOME_COMPARATOR = Ordering.natural().reverse(); + private static final Ordering SOME_COMPARATOR = Ordering.natural().reverse(); @J2ktIncompatible @GwtIncompatible // suite diff --git a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java index 3cb1b6d75873..37ad3fece911 100644 --- a/android/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/android/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -110,7 +110,8 @@ public void testUnmodifiableMultimapShortCircuit() { @GwtIncompatible // slow (~10s) public void testUnmodifiableArrayListMultimap() { - checkUnmodifiableMultimap(ArrayListMultimap.create(), true); + checkUnmodifiableMultimap( + ArrayListMultimap.<@Nullable String, @Nullable Integer>create(), true); } @J2ktIncompatible @@ -141,7 +142,7 @@ public void testUnmodifiableLinkedListMultimapRandomAccess() { @GwtIncompatible // slow (~10s) public void testUnmodifiableHashMultimap() { - checkUnmodifiableMultimap(HashMultimap.create(), false); + checkUnmodifiableMultimap(HashMultimap.<@Nullable String, @Nullable Integer>create(), false); } @J2ktIncompatible @@ -168,7 +169,9 @@ public void testSerializingUnmodifiableTreeMultimap() { @GwtIncompatible // slow (~10s) public void testUnmodifiableSynchronizedArrayListMultimap() { checkUnmodifiableMultimap( - Multimaps.synchronizedListMultimap(ArrayListMultimap.create()), true); + Multimaps.synchronizedListMultimap( + ArrayListMultimap.<@Nullable String, @Nullable Integer>create()), + true); } @J2ktIncompatible @@ -186,7 +189,9 @@ public void testSerializingUnmodifiableSynchronizedArrayListMultimap() { @GwtIncompatible // slow (~10s) public void testUnmodifiableSynchronizedHashMultimap() { checkUnmodifiableMultimap( - Multimaps.synchronizedSetMultimap(HashMultimap.create()), false); + Multimaps.synchronizedSetMultimap( + HashMultimap.<@Nullable String, @Nullable Integer>create()), + false); } @J2ktIncompatible diff --git a/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java b/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java index 7e6646d354a3..c3ad40278fb2 100644 --- a/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java +++ b/android/guava-tests/test/com/google/common/collect/ObjectArraysTest.java @@ -25,6 +25,7 @@ import java.util.Arrays; import java.util.List; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@code ObjectArrays}. @@ -124,7 +125,7 @@ public void testConcatWithMoreGeneralType() { public void testToArrayImpl1() { doTestToArrayImpl1(Lists.newArrayList()); doTestToArrayImpl1(Lists.newArrayList(1)); - doTestToArrayImpl1(Lists.newArrayList(1, null, 3)); + doTestToArrayImpl1(Lists.<@Nullable Integer>newArrayList(1, null, 3)); } private void doTestToArrayImpl1(List list) { @@ -142,9 +143,9 @@ public void testToArrayImpl2() { doTestToArrayImpl2(Lists.newArrayList(1), new Integer[1], true); doTestToArrayImpl2(Lists.newArrayList(1), new Integer[] {2, 3}, true); - doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[0], false); - doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[2], false); - doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[3], true); + doTestToArrayImpl2(Lists.<@Nullable Integer>newArrayList(1, null, 3), new Integer[0], false); + doTestToArrayImpl2(Lists.<@Nullable Integer>newArrayList(1, null, 3), new Integer[2], false); + doTestToArrayImpl2(Lists.<@Nullable Integer>newArrayList(1, null, 3), new Integer[3], true); } private void doTestToArrayImpl2(List list, Integer[] array1, boolean expectModify) { diff --git a/android/guava-tests/test/com/google/common/collect/OrderingTest.java b/android/guava-tests/test/com/google/common/collect/OrderingTest.java index 311552735a1e..3a50b54e648f 100644 --- a/android/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/android/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -97,9 +97,9 @@ public void testComplicatedOrderingExample() { // [[null, null], [null], [1, null, 2], [1, 1], [1, 2], [1], [2], [], null] assertThat(sorted) .containsExactly( - Lists.newArrayList(nullInt, nullInt), - Lists.newArrayList(nullInt), - Lists.newArrayList(1, null, 2), + Lists.<@Nullable Integer>newArrayList(nullInt, nullInt), + Lists.<@Nullable Integer>newArrayList(nullInt), + Lists.<@Nullable Integer>newArrayList(1, null, 2), Lists.newArrayList(1, 1), Lists.newArrayList(1, 2), Lists.newArrayList(1), @@ -291,7 +291,7 @@ public Character apply(String string) { } private static Ordering byCharAt(int index) { - return Ordering.natural().onResultOf(CharAtFunction.values()[index]); + return Ordering.natural().onResultOf(CharAtFunction.values()[index]); } public void testCompound_static() { @@ -385,18 +385,18 @@ public Integer apply(String string) { } } - private static final Ordering DECREASING_INTEGER = Ordering.natural().reverse(); + private static final Ordering DECREASING_INTEGER = Ordering.natural().reverse(); public void testOnResultOf_natural() { Comparator comparator = - Ordering.natural().onResultOf(StringLengthFunction.StringLength); + Ordering.natural().onResultOf(StringLengthFunction.StringLength); assertTrue(comparator.compare("to", "be") == 0); assertTrue(comparator.compare("or", "not") < 0); assertTrue(comparator.compare("that", "to") > 0); new EqualsTester() .addEqualityGroup( - comparator, Ordering.natural().onResultOf(StringLengthFunction.StringLength)) + comparator, Ordering.natural().onResultOf(StringLengthFunction.StringLength)) .addEqualityGroup(DECREASING_INTEGER) .testEquals(); reserializeAndAssert(comparator); @@ -440,8 +440,8 @@ public void testLexicographical() { } public void testNullsFirst() { - Ordering ordering = Ordering.natural().nullsFirst(); - Helpers.testComparator(ordering, null, Integer.MIN_VALUE, 0, 1); + Ordering<@Nullable Integer> ordering = Ordering.natural().nullsFirst(); + Helpers.<@Nullable Integer>testComparator(ordering, null, Integer.MIN_VALUE, 0, 1); new EqualsTester() .addEqualityGroup(ordering, Ordering.natural().nullsFirst()) @@ -451,8 +451,8 @@ public void testNullsFirst() { } public void testNullsLast() { - Ordering ordering = Ordering.natural().nullsLast(); - Helpers.testComparator(ordering, 0, 1, Integer.MAX_VALUE, null); + Ordering<@Nullable Integer> ordering = Ordering.natural().nullsLast(); + Helpers.<@Nullable Integer>testComparator(ordering, 0, 1, Integer.MAX_VALUE, null); new EqualsTester() .addEqualityGroup(ordering, Ordering.natural().nullsLast()) @@ -467,9 +467,10 @@ public void testBinarySearch() { } public void testSortedCopy() { - List unsortedInts = Collections.unmodifiableList(Arrays.asList(5, 0, 3, null, 0, 9)); - List sortedInts = numberOrdering.nullsLast().sortedCopy(unsortedInts); - assertEquals(Arrays.asList(0, 0, 3, 5, 9, null), sortedInts); + List<@Nullable Integer> unsortedInts = + Collections.unmodifiableList(Arrays.<@Nullable Integer>asList(5, 0, 3, null, 0, 9)); + List<@Nullable Integer> sortedInts = numberOrdering.nullsLast().sortedCopy(unsortedInts); + assertEquals(Arrays.<@Nullable Integer>asList(0, 0, 3, 5, 9, null), sortedInts); assertEquals( Collections.emptyList(), numberOrdering.sortedCopy(Collections.emptyList())); @@ -484,9 +485,9 @@ public void testImmutableSortedCopy() { Collections.emptyList(), numberOrdering.immutableSortedCopy(Collections.emptyList())); - List listWithNull = Arrays.asList(5, 3, null, 9); + List<@Nullable Integer> listWithNull = Arrays.asList(5, 3, null, 9); try { - Ordering.natural().nullsFirst().immutableSortedCopy(listWithNull); + Ordering.natural().nullsFirst().immutableSortedCopy((List) listWithNull); fail(); } catch (NullPointerException expected) { } @@ -599,16 +600,17 @@ public void testLeastOfIterator_simple_1() { } public void testLeastOfIterable_simple_nMinusOne_withNullElement() { - List list = Arrays.asList(3, null, 5, -1); - List result = Ordering.natural().nullsLast().leastOf(list, list.size() - 1); + List<@Nullable Integer> list = Arrays.asList(3, null, 5, -1); + List<@Nullable Integer> result = + Ordering.natural().nullsLast().leastOf(list, list.size() - 1); assertTrue(result instanceof RandomAccess); assertListImmutable(result); assertEquals(ImmutableList.of(-1, 3, 5), result); } public void testLeastOfIterator_simple_nMinusOne_withNullElement() { - Iterator itr = Iterators.forArray(3, null, 5, -1); - List result = Ordering.natural().nullsLast().leastOf(itr, 3); + Iterator<@Nullable Integer> itr = Iterators.forArray(3, null, 5, -1); + List<@Nullable Integer> result = Ordering.natural().nullsLast().leastOf(itr, 3); assertTrue(result instanceof RandomAccess); assertListImmutable(result); assertEquals(ImmutableList.of(-1, 3, 5), result); @@ -647,19 +649,21 @@ public void testLeastOfIterator_simple_n() { } public void testLeastOfIterable_simple_n_withNullElement() { - List list = Arrays.asList(3, 4, 5, null, -1); - List result = Ordering.natural().nullsLast().leastOf(list, list.size()); + List<@Nullable Integer> list = Arrays.asList(3, 4, 5, null, -1); + List<@Nullable Integer> result = + Ordering.natural().nullsLast().leastOf(list, list.size()); assertTrue(result instanceof RandomAccess); assertListImmutable(result); - assertEquals(Arrays.asList(-1, 3, 4, 5, null), result); + assertEquals(Arrays.<@Nullable Integer>asList(-1, 3, 4, 5, null), result); } public void testLeastOfIterator_simple_n_withNullElement() { - List list = Arrays.asList(3, 4, 5, null, -1); - List result = Ordering.natural().nullsLast().leastOf(list.iterator(), list.size()); + List<@Nullable Integer> list = Arrays.asList(3, 4, 5, null, -1); + List<@Nullable Integer> result = + Ordering.natural().nullsLast().leastOf(list.iterator(), list.size()); assertTrue(result instanceof RandomAccess); assertListImmutable(result); - assertEquals(Arrays.asList(-1, 3, 4, 5, null), result); + assertEquals(Arrays.<@Nullable Integer>asList(-1, 3, 4, 5, null), result); } public void testLeastOfIterable_simple_nPlusOne() { @@ -730,14 +734,15 @@ private static void runLeastOfComparison(int iterations, int elements, int seeds public void testLeastOfIterableLargeK() { List list = Arrays.asList(4, 2, 3, 5, 1); - assertEquals(Arrays.asList(1, 2, 3, 4, 5), Ordering.natural().leastOf(list, Integer.MAX_VALUE)); + assertEquals( + Arrays.asList(1, 2, 3, 4, 5), Ordering.natural().leastOf(list, Integer.MAX_VALUE)); } public void testLeastOfIteratorLargeK() { List list = Arrays.asList(4, 2, 3, 5, 1); assertEquals( Arrays.asList(1, 2, 3, 4, 5), - Ordering.natural().leastOf(list.iterator(), Integer.MAX_VALUE)); + Ordering.natural().leastOf(list.iterator(), Integer.MAX_VALUE)); } public void testGreatestOfIterable_simple() { @@ -1094,7 +1099,7 @@ public T apply(Integer from) { composites.add(new Composite(t, 2)); } Ordering> ordering = - Ordering.natural() + Ordering.>natural() .compound(scenario.ordering.onResultOf(Composite.getValueFunction())); return new Scenario>( ordering, composites, (Composite[]) new Composite[0]); diff --git a/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java b/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java index d070936c3bac..22686633c6ae 100644 --- a/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java +++ b/android/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java @@ -106,7 +106,7 @@ public void testPeekingIteratorBehavesLikeIteratorOnThreeElementIterable() { @GwtIncompatible // works but takes 5 minutes to run public void testPeekingIteratorAcceptsNullElements() { - actsLikeIteratorHelper(Lists.newArrayList(null, "A", null)); + actsLikeIteratorHelper(Lists.<@Nullable String>newArrayList(null, "A", null)); } public void testPeekOnEmptyList() { diff --git a/android/guava-tests/test/com/google/common/collect/SetsTest.java b/android/guava-tests/test/com/google/common/collect/SetsTest.java index 6809d6ef509a..4306b7343717 100644 --- a/android/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/android/guava-tests/test/com/google/common/collect/SetsTest.java @@ -861,7 +861,7 @@ public void testPowerSetContents() { assertTrue(powerSet.contains(subset)); } assertFalse(powerSet.contains(ImmutableSet.of(1, 2, 4))); - assertFalse(powerSet.contains(singleton(null))); + assertFalse(powerSet.contains(Collections.<@Nullable Integer>singleton(null))); assertFalse(powerSet.contains(null)); assertFalse(powerSet.contains((Object) "notASet")); } diff --git a/android/guava-tests/test/com/google/common/collect/TablesTest.java b/android/guava-tests/test/com/google/common/collect/TablesTest.java index 23915f2723d0..fd1096fc4475 100644 --- a/android/guava-tests/test/com/google/common/collect/TablesTest.java +++ b/android/guava-tests/test/com/google/common/collect/TablesTest.java @@ -56,18 +56,27 @@ public void testEntryEquals() { .addEqualityGroup(Tables.immutableCell("bar", 1, 'a')) .addEqualityGroup(Tables.immutableCell("foo", 2, 'a')) .addEqualityGroup(Tables.immutableCell("foo", 1, 'b')) - .addEqualityGroup(Tables.immutableCell(null, null, null)) + .addEqualityGroup( + Tables.<@Nullable Object, @Nullable Object, @Nullable Object>immutableCell( + null, null, null)) .testEquals(); } public void testEntryEqualsNull() { - Cell entry = Tables.immutableCell(null, null, null); + Cell<@Nullable String, @Nullable Integer, @Nullable Character> entry = + Tables.immutableCell(null, null, null); new EqualsTester() - .addEqualityGroup(entry, Tables.immutableCell(null, null, null)) - .addEqualityGroup(Tables.immutableCell("bar", null, null)) - .addEqualityGroup(Tables.immutableCell(null, 2, null)) - .addEqualityGroup(Tables.immutableCell(null, null, 'b')) + .addEqualityGroup( + entry, + Tables.<@Nullable Object, @Nullable Object, @Nullable Object>immutableCell( + null, null, null)) + .addEqualityGroup( + Tables.immutableCell("bar", null, null)) + .addEqualityGroup( + Tables.<@Nullable Object, Integer, @Nullable Object>immutableCell(null, 2, null)) + .addEqualityGroup( + Tables.<@Nullable Object, @Nullable Object, Character>immutableCell(null, null, 'b')) .addEqualityGroup(Tables.immutableCell("foo", 1, 'a')) .testEquals(); } diff --git a/android/guava-tests/test/com/google/common/collect/TopKSelectorTest.java b/android/guava-tests/test/com/google/common/collect/TopKSelectorTest.java index 2cebdc338b08..05ecb2040fe4 100644 --- a/android/guava-tests/test/com/google/common/collect/TopKSelectorTest.java +++ b/android/guava-tests/test/com/google/common/collect/TopKSelectorTest.java @@ -37,12 +37,12 @@ public class TopKSelectorTest extends TestCase { public void testNegativeK() { try { - TopKSelector.least(-1); + TopKSelector.least(-1); fail(); } catch (IllegalArgumentException expected) { } try { - TopKSelector.greatest(-1); + TopKSelector.greatest(-1); fail(); } catch (IllegalArgumentException expected) { } diff --git a/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java b/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java index 7f4d8ff822ab..c1a9f0066b9f 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java @@ -286,7 +286,7 @@ public void testColumnKeySet_isSortedWithRealComparator() { table = create( String.CASE_INSENSITIVE_ORDER, - Ordering.natural().reverse(), + Ordering.natural().reverse(), "a", 2, 'X', diff --git a/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java b/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java index 601709b105e6..e887c0fadfa4 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java @@ -150,10 +150,10 @@ public void testOrderedEntries() { TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertThat(multimap.entries()) .containsExactly( - Maps.immutableEntry((String) null, 7), - Maps.immutableEntry((String) null, 3), - Maps.immutableEntry((String) null, 1), - Maps.immutableEntry("tree", (Integer) null), + Maps.<@Nullable String, Integer>immutableEntry(null, 7), + Maps.<@Nullable String, Integer>immutableEntry(null, 3), + Maps.<@Nullable String, Integer>immutableEntry(null, 1), + Maps.immutableEntry("tree", null), Maps.immutableEntry("tree", 0), Maps.immutableEntry("google", 6), Maps.immutableEntry("google", 2)) @@ -193,7 +193,7 @@ public void testSortedKeySet() { assertEquals(null, keySet.first()); assertEquals("google", keySet.last()); assertEquals(StringLength.COMPARATOR, keySet.comparator()); - assertEquals(Sets.newHashSet(null, "tree"), keySet.headSet("yahoo")); + assertEquals(Sets.<@Nullable String>newHashSet(null, "tree"), keySet.headSet("yahoo")); assertEquals(Sets.newHashSet("google"), keySet.tailSet("yahoo")); assertEquals(Sets.newHashSet("tree"), keySet.subSet("ask", "yahoo")); } diff --git a/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java b/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java index 012a14c5aab6..f475e87f996c 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java @@ -354,7 +354,7 @@ public void testMultimapConstructor() { private static final Comparator KEY_COMPARATOR = Ordering.natural(); private static final Comparator VALUE_COMPARATOR = - Ordering.natural().reverse().nullsFirst(); + Ordering.natural().reverse().nullsFirst(); /** * Test that creating one TreeMultimap from another does not copy the comparators from the source diff --git a/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java b/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java index 0077b75d168a..6f9651a9df51 100644 --- a/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java +++ b/android/guava-tests/test/com/google/common/collect/TreeMultisetTest.java @@ -287,8 +287,8 @@ public int compare(String o1, String o2) { } public void testNullAcceptingComparator() throws Exception { - Comparator comparator = Ordering.natural().nullsFirst(); - TreeMultiset ms = TreeMultiset.create(comparator); + Comparator<@Nullable String> comparator = Ordering.natural().nullsFirst(); + TreeMultiset<@Nullable String> ms = TreeMultiset.create(comparator); ms.add("b"); ms.add(null); diff --git a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java index c8989d34d884..e87c42be38bc 100644 --- a/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractImmutableSetTest.java @@ -75,7 +75,7 @@ protected abstract > Set copyOf( public void testCreation_noArgs() { Set set = of(); assertEquals(Collections.emptySet(), set); - assertSame(of(), set); + assertSame(this.of(), set); } public void testCreation_oneElement() { @@ -122,7 +122,7 @@ public void testCopyOf_emptyArray() { String[] array = new String[0]; Set set = copyOf(array); assertEquals(Collections.emptySet(), set); - assertSame(of(), set); + assertSame(this.of(), set); } public void testCopyOf_arrayOfOneElement() { @@ -153,7 +153,7 @@ public void testCopyOf_collection_empty() { Collection c = MinimalCollection.of(); Set set = copyOf(c); assertEquals(Collections.emptySet(), set); - assertSame(of(), set); + assertSame(this.of(), set); } public void testCopyOf_collection_oneElement() { @@ -203,7 +203,7 @@ public void testCopyOf_iterator_empty() { Iterator iterator = Iterators.emptyIterator(); Set set = copyOf(iterator); assertEquals(Collections.emptySet(), set); - assertSame(of(), set); + assertSame(this.of(), set); } public void testCopyOf_iterator_oneElement() { diff --git a/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java b/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java index 3a46bb4c3034..67a47e67d355 100644 --- a/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java +++ b/guava-tests/test/com/google/common/collect/AbstractMapsTransformValuesTest.java @@ -249,11 +249,12 @@ public void testTransformEntrySetContains() { Set> entries = map.entrySet(); assertTrue(entries.contains(Maps.immutableEntry("a", true))); - assertTrue(entries.contains(Maps.immutableEntry("b", (Boolean) null))); - assertTrue(entries.contains(Maps.immutableEntry((String) null, (Boolean) null))); + assertTrue(entries.contains(Maps.immutableEntry("b", null))); + assertTrue( + entries.contains(Maps.<@Nullable String, @Nullable Boolean>immutableEntry(null, null))); - assertFalse(entries.contains(Maps.immutableEntry("c", (Boolean) null))); - assertFalse(entries.contains(Maps.immutableEntry((String) null, true))); + assertFalse(entries.contains(Maps.immutableEntry("c", null))); + assertFalse(entries.contains(Maps.<@Nullable String, Boolean>immutableEntry(null, true))); } @Override diff --git a/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java b/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java index daa929df6c2c..b021a0de47f0 100644 --- a/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java +++ b/guava-tests/test/com/google/common/collect/ForwardingSortedMapImplementsMapTest.java @@ -52,7 +52,7 @@ public ForwardingSortedMapImplementsMapTest() { @Override protected SortedMap makeEmptyMap() { return new SimpleForwardingSortedMap<>( - new TreeMap(Ordering.natural().nullsFirst())); + new TreeMap(Ordering.natural().nullsFirst())); } @Override diff --git a/guava-tests/test/com/google/common/collect/GeneralRangeTest.java b/guava-tests/test/com/google/common/collect/GeneralRangeTest.java index d2b1d488878d..c50f1f5c46d1 100644 --- a/guava-tests/test/com/google/common/collect/GeneralRangeTest.java +++ b/guava-tests/test/com/google/common/collect/GeneralRangeTest.java @@ -35,7 +35,8 @@ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public class GeneralRangeTest extends TestCase { - private static final Ordering<@Nullable Integer> ORDERING = Ordering.natural().nullsFirst(); + private static final Ordering<@Nullable Integer> ORDERING = + Ordering.natural().nullsFirst(); private static final List<@Nullable Integer> IN_ORDER_VALUES = Arrays.asList(null, 1, 2, 3, 4, 5); @@ -150,7 +151,7 @@ public void testIntersectAgainstBiggerRange() { assertEquals( GeneralRange.range(ORDERING, 2, CLOSED, 4, OPEN), - range.intersect(GeneralRange.range(ORDERING, null, OPEN, 5, CLOSED))); + range.intersect(GeneralRange.<@Nullable Integer>range(ORDERING, null, OPEN, 5, CLOSED))); assertEquals( GeneralRange.range(ORDERING, 2, OPEN, 4, OPEN), diff --git a/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java index acd02621bb5d..1c4520ea2aa5 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableListMultimapTest.java @@ -389,10 +389,10 @@ public void testCopyOfNullKey() { } public void testCopyOfNullValue() { - ArrayListMultimap input = ArrayListMultimap.create(); - input.putAll("foo", Arrays.asList(1, null, 3)); + ArrayListMultimap input = ArrayListMultimap.create(); + input.putAll("foo", Arrays.<@Nullable Integer>asList(1, null, 3)); try { - ImmutableListMultimap.copyOf(input); + ImmutableListMultimap.copyOf((ArrayListMultimap) input); fail(); } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/ImmutableListTest.java b/guava-tests/test/com/google/common/collect/ImmutableListTest.java index d804778b5fb6..c0bb5fab9ede 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableListTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableListTest.java @@ -633,9 +633,10 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } builder = ImmutableList.builder(); - Iterator iteratorWithNulls = asList("a", null, "b").iterator(); + Iterator<@Nullable String> iteratorWithNulls = + Arrays.<@Nullable String>asList("a", null, "b").iterator(); try { - builder.addAll(iteratorWithNulls); + builder.addAll((Iterator) iteratorWithNulls); fail("expected NullPointerException"); } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java b/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java index 3e556c35c9fc..2ef1c8a46b7c 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableMultisetTest.java @@ -38,6 +38,7 @@ import com.google.common.testing.NullPointerTester; import com.google.common.testing.SerializableTester; import java.util.ArrayList; +import java.util.Arrays; import java.util.Collection; import java.util.HashSet; import java.util.Iterator; @@ -282,9 +283,10 @@ public void testCopyOf_multiset_general() { } public void testCopyOf_multisetContainingNull() { - Multiset c = HashMultiset.create(asList("a", null, "b")); + Multiset<@Nullable String> c = + HashMultiset.create(Arrays.<@Nullable String>asList("a", null, "b")); try { - ImmutableMultiset.copyOf(c); + ImmutableMultiset.copyOf((Multiset) c); fail(); } catch (NullPointerException expected) { } @@ -309,9 +311,10 @@ public void testCopyOf_iterator_general() { } public void testCopyOf_iteratorContainingNull() { - Iterator iterator = asList("a", null, "b").iterator(); + Iterator<@Nullable String> iterator = + Arrays.<@Nullable String>asList("a", null, "b").iterator(); try { - ImmutableMultiset.copyOf(iterator); + ImmutableMultiset.copyOf((Iterator) iterator); fail(); } catch (NullPointerException expected) { } @@ -536,9 +539,10 @@ public void testBuilderAddAllHandlesNullsCorrectly() { } builder = ImmutableMultiset.builder(); - Multiset multisetWithNull = LinkedHashMultiset.create(asList("a", null, "b")); + Multiset<@Nullable String> multisetWithNull = + LinkedHashMultiset.create(Arrays.<@Nullable String>asList("a", null, "b")); try { - builder.addAll(multisetWithNull); + builder.addAll((Multiset) multisetWithNull); fail("expected NullPointerException"); } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java index 6115cdddd584..776215293ba0 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSetMultimapTest.java @@ -402,10 +402,10 @@ public void testCopyOfNullKey() { } public void testCopyOfNullValue() { - HashMultimap input = HashMultimap.create(); - input.putAll("foo", Arrays.asList(1, null, 3)); + HashMultimap input = HashMultimap.create(); + input.putAll("foo", Arrays.<@Nullable Integer>asList(1, null, 3)); try { - ImmutableSetMultimap.copyOf(input); + ImmutableSetMultimap.copyOf((Multimap) input); fail(); } catch (NullPointerException expected) { } diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java index badaf835ccdf..5c923fbf6545 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSortedMapTest.java @@ -517,7 +517,7 @@ public void testCopyOf() { } public void testCopyOfExplicitComparator() { - Comparator comparator = Ordering.natural().reverse(); + Comparator comparator = Ordering.natural().reverse(); Map original = new LinkedHashMap<>(); original.put("one", 1); original.put("two", 2); @@ -530,7 +530,7 @@ public void testCopyOfExplicitComparator() { } public void testCopyOfImmutableSortedSetDifferentComparator() { - Comparator comparator = Ordering.natural().reverse(); + Comparator comparator = Ordering.natural().reverse(); Map original = ImmutableSortedMap.of("one", 1, "two", 2, "three", 3); ImmutableSortedMap copy = ImmutableSortedMap.copyOf(original, comparator); assertMapEquals(copy, "two", 2, "three", 3, "one", 1); @@ -551,7 +551,7 @@ public void testCopyOfSortedNatural() { } public void testCopyOfSortedExplicit() { - Comparator comparator = Ordering.natural().reverse(); + Comparator comparator = Ordering.natural().reverse(); SortedMap original = Maps.newTreeMap(comparator); original.put("one", 1); original.put("two", 2); @@ -619,11 +619,11 @@ public void testBuilderReverseOrder() { .put("five", 5) .build(); assertMapEquals(map, "two", 2, "three", 3, "one", 1, "four", 4, "five", 5); - assertEquals(Ordering.natural().reverse(), map.comparator()); + assertEquals(Ordering.natural().reverse(), map.comparator()); } public void testBuilderComparator() { - Comparator comparator = Ordering.natural().reverse(); + Comparator comparator = Ordering.natural().reverse(); ImmutableSortedMap map = new ImmutableSortedMap.Builder(comparator) .put("one", 1) diff --git a/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java b/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java index 32c1b81dcb00..4bb9736e3a7e 100644 --- a/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java +++ b/guava-tests/test/com/google/common/collect/ImmutableSortedSetTest.java @@ -298,8 +298,8 @@ public void testSingle_headSet() { SortedSet set = of("e"); assertTrue(set.headSet("g") instanceof ImmutableSortedSet); assertThat(set.headSet("g")).contains("e"); - assertSame(of(), set.headSet("c")); - assertSame(of(), set.headSet("e")); + assertSame(this.of(), set.headSet("c")); + assertSame(this.of(), set.headSet("e")); } public void testSingle_tailSet() { @@ -307,7 +307,7 @@ public void testSingle_tailSet() { assertTrue(set.tailSet("c") instanceof ImmutableSortedSet); assertThat(set.tailSet("c")).contains("e"); assertThat(set.tailSet("e")).contains("e"); - assertSame(of(), set.tailSet("g")); + assertSame(this.of(), set.tailSet("g")); } public void testSingle_subSet() { @@ -315,9 +315,9 @@ public void testSingle_subSet() { assertTrue(set.subSet("c", "g") instanceof ImmutableSortedSet); assertThat(set.subSet("c", "g")).contains("e"); assertThat(set.subSet("e", "g")).contains("e"); - assertSame(of(), set.subSet("f", "g")); - assertSame(of(), set.subSet("c", "e")); - assertSame(of(), set.subSet("c", "d")); + assertSame(this.of(), set.subSet("f", "g")); + assertSame(this.of(), set.subSet("c", "e")); + assertSame(this.of(), set.subSet("c", "d")); } public void testSingle_first() { @@ -403,8 +403,8 @@ public void testOf_headSet() { assertTrue(set.headSet("e") instanceof ImmutableSortedSet); assertThat(set.headSet("e")).containsExactly("b", "c", "d").inOrder(); assertThat(set.headSet("g")).containsExactly("b", "c", "d", "e", "f").inOrder(); - assertSame(of(), set.headSet("a")); - assertSame(of(), set.headSet("b")); + assertSame(this.of(), set.headSet("a")); + assertSame(this.of(), set.headSet("b")); } public void testOf_tailSet() { @@ -412,7 +412,7 @@ public void testOf_tailSet() { assertTrue(set.tailSet("e") instanceof ImmutableSortedSet); assertThat(set.tailSet("e")).containsExactly("e", "f").inOrder(); assertThat(set.tailSet("a")).containsExactly("b", "c", "d", "e", "f").inOrder(); - assertSame(of(), set.tailSet("g")); + assertSame(this.of(), set.tailSet("g")); } public void testOf_subSet() { @@ -420,9 +420,9 @@ public void testOf_subSet() { assertTrue(set.subSet("c", "e") instanceof ImmutableSortedSet); assertThat(set.subSet("c", "e")).containsExactly("c", "d").inOrder(); assertThat(set.subSet("a", "g")).containsExactly("b", "c", "d", "e", "f").inOrder(); - assertSame(of(), set.subSet("a", "b")); - assertSame(of(), set.subSet("g", "h")); - assertSame(of(), set.subSet("c", "c")); + assertSame(this.of(), set.subSet("a", "b")); + assertSame(this.of(), set.subSet("g", "h")); + assertSame(this.of(), set.subSet("c", "c")); try { set.subSet("e", "c"); fail(); @@ -1191,7 +1191,7 @@ private static ImmutableList sortedNumberNames(int i, int j) { ImmutableList.of("one", "two", "three", "four", "five", "six", "seven"); private static final ImmutableList SORTED_NUMBER_NAMES = - Ordering.natural().immutableSortedCopy(NUMBER_NAMES); + Ordering.natural().immutableSortedCopy(NUMBER_NAMES); private static class SelfComparableExample implements Comparable { @Override diff --git a/guava-tests/test/com/google/common/collect/IterablesTest.java b/guava-tests/test/com/google/common/collect/IterablesTest.java index 2e7d89712808..68158d86c132 100644 --- a/guava-tests/test/com/google/common/collect/IterablesTest.java +++ b/guava-tests/test/com/google/common/collect/IterablesTest.java @@ -179,7 +179,7 @@ public void testGetOnlyElement_withDefault_empty() { public void testGetOnlyElement_withDefault_empty_null() { Iterable iterable = Collections.emptyList(); - assertNull(Iterables.getOnlyElement(iterable, null)); + assertNull(Iterables.<@Nullable String>getOnlyElement(iterable, null)); } public void testGetOnlyElement_withDefault_multiple() { @@ -508,7 +508,7 @@ public void testPaddedPartition_basic() { List list = asList(1, 2, 3, 4, 5); Iterable> partitions = Iterables.paddedPartition(list, 2); assertEquals(3, Iterables.size(partitions)); - assertEquals(asList(5, null), Iterables.getLast(partitions)); + assertEquals(Arrays.<@Nullable Integer>asList(5, null), Iterables.getLast(partitions)); } public void testPaddedPartitionRandomAccessInput() { @@ -566,7 +566,7 @@ public void testElementsEqual() throws Exception { assertFalse(Iterables.elementsEqual(a, b)); // null versus non-null. - a = asList(4, 8, 15, null, 23, 42); + a = Arrays.<@Nullable Integer>asList(4, 8, 15, null, 23, 42); b = asList(4, 8, 15, 16, 23, 42); assertFalse(Iterables.elementsEqual(a, b)); assertFalse(Iterables.elementsEqual(b, a)); @@ -853,7 +853,7 @@ public void testGetFirst_withDefault_empty() { public void testGetFirst_withDefault_empty_null() { Iterable iterable = Collections.emptyList(); - assertNull(Iterables.getFirst(iterable, null)); + assertNull(Iterables.<@Nullable String>getFirst(iterable, null)); } public void testGetFirst_withDefault_multiple() { @@ -892,7 +892,7 @@ public void testGetLast_withDefault_empty() { public void testGetLast_withDefault_empty_null() { Iterable iterable = Collections.emptyList(); - assertNull(Iterables.getLast(iterable, null)); + assertNull(Iterables.<@Nullable String>getLast(iterable, null)); } public void testGetLast_withDefault_multiple() { @@ -1387,7 +1387,7 @@ public void testMergeSorted_pyramid() { list.add(j); allIntegers.add(j); } - iterables.add(Ordering.natural().sortedCopy(list)); + iterables.add(Ordering.natural().sortedCopy(list)); } verifyMergeSorted(iterables, allIntegers); @@ -1404,7 +1404,7 @@ public void testMergeSorted_skipping_pyramid() { list.add(j * i); allIntegers.add(j * i); } - iterables.add(Ordering.natural().sortedCopy(list)); + iterables.add(Ordering.natural().sortedCopy(list)); } verifyMergeSorted(iterables, allIntegers); @@ -1422,7 +1422,7 @@ public void testIterables_nullCheck() throws Exception { private static void verifyMergeSorted( Iterable> iterables, Iterable unsortedExpected) { - Iterable expected = Ordering.natural().sortedCopy(unsortedExpected); + Iterable expected = Ordering.natural().sortedCopy(unsortedExpected); Iterable mergedIterator = Iterables.mergeSorted(iterables, Ordering.natural()); diff --git a/guava-tests/test/com/google/common/collect/IteratorsTest.java b/guava-tests/test/com/google/common/collect/IteratorsTest.java index 6d4b4307f237..7e173ab6a0bd 100644 --- a/guava-tests/test/com/google/common/collect/IteratorsTest.java +++ b/guava-tests/test/com/google/common/collect/IteratorsTest.java @@ -162,7 +162,7 @@ public void testSize_partiallyConsumed() { } public void test_contains_nonnull_yes() { - Iterator set = asList("a", null, "b").iterator(); + Iterator<@Nullable String> set = Arrays.<@Nullable String>asList("a", null, "b").iterator(); assertTrue(Iterators.contains(set, "b")); } @@ -172,7 +172,7 @@ public void test_contains_nonnull_no() { } public void test_contains_null_yes() { - Iterator set = asList("a", null, "b").iterator(); + Iterator<@Nullable String> set = Arrays.<@Nullable String>asList("a", null, "b").iterator(); assertTrue(Iterators.contains(set, null)); } @@ -241,7 +241,7 @@ public void testGetOnlyElement_withDefault_empty() { public void testGetOnlyElement_withDefault_empty_null() { Iterator iterator = Iterators.emptyIterator(); - assertNull(Iterators.getOnlyElement(iterator, null)); + assertNull(Iterators.<@Nullable String>getOnlyElement(iterator, null)); } public void testGetOnlyElement_withDefault_two() { @@ -513,7 +513,7 @@ public Integer apply(String from) { } public void testNullFriendlyTransform() { - Iterator input = asList(1, 2, null, 3).iterator(); + Iterator<@Nullable Integer> input = Arrays.<@Nullable Integer>asList(1, 2, null, 3).iterator(); Iterator result = Iterators.transform( input, @@ -821,7 +821,10 @@ public void testConcatPartiallyAdvancedFirst() { /** Illustrates the somewhat bizarre behavior when a null is passed in. */ public void testConcatContainingNull() { - Iterator> input = asList(iterateOver(1, 2), null, iterateOver(3)).iterator(); + Iterator> input = + (Iterator>) + Arrays.<@Nullable Iterator>asList(iterateOver(1, 2), null, iterateOver(3)) + .iterator(); Iterator result = Iterators.concat(input); assertEquals(1, (int) result.next()); assertEquals(2, (int) result.next()); @@ -939,8 +942,8 @@ public void testElementsEqual() { assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator())); // The same, but with nulls. - a = asList(4, 8, null, 16, 23, 42); - b = asList(4, 8, null, 16, 23, 42); + a = Arrays.<@Nullable Integer>asList(4, 8, null, 16, 23, 42); + b = Arrays.<@Nullable Integer>asList(4, 8, null, 16, 23, 42); assertTrue(Iterators.elementsEqual(a.iterator(), b.iterator())); // Different Iterable types (still equal elements, though). @@ -954,7 +957,7 @@ public void testElementsEqual() { assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator())); // null versus non-null. - a = asList(4, 8, 15, null, 23, 42); + a = Arrays.<@Nullable Integer>asList(4, 8, 15, null, 23, 42); b = asList(4, 8, 15, 16, 23, 42); assertFalse(Iterators.elementsEqual(a.iterator(), b.iterator())); assertFalse(Iterators.elementsEqual(b.iterator(), a.iterator())); @@ -1072,17 +1075,17 @@ public void testPaddedPartition_singleton2() { Iterator> partitions = Iterators.paddedPartition(source, 2); assertTrue(partitions.hasNext()); assertTrue(partitions.hasNext()); - assertEquals(asList(1, null), partitions.next()); + assertEquals(Arrays.<@Nullable Integer>asList(1, null), partitions.next()); assertFalse(partitions.hasNext()); } @GwtIncompatible // fairly slow (~50s) public void testPaddedPartition_general() { + ImmutableList> expectedElements = + ImmutableList.of( + asList(1, 2, 3), asList(4, 5, 6), Arrays.<@Nullable Integer>asList(7, null, null)); new IteratorTester>( - 5, - IteratorFeature.UNMODIFIABLE, - ImmutableList.of(asList(1, 2, 3), asList(4, 5, 6), asList(7, null, null)), - IteratorTester.KnownOrder.KNOWN_ORDER) { + 5, IteratorFeature.UNMODIFIABLE, expectedElements, IteratorTester.KnownOrder.KNOWN_ORDER) { @Override protected Iterator> newTargetIterator() { Iterator source = Iterators.forArray(1, 2, 3, 4, 5, 6, 7); @@ -1287,7 +1290,8 @@ public void testToString() { } public void testToStringWithNull() { - Iterator iterator = Lists.newArrayList("hello", null, "world").iterator(); + Iterator<@Nullable String> iterator = + Lists.<@Nullable String>newArrayList("hello", null, "world").iterator(); assertEquals("[hello, null, world]", Iterators.toString(iterator)); } @@ -1355,7 +1359,7 @@ public void testGetNext_withDefault_empty() { public void testGetNext_withDefault_empty_null() { Iterator iterator = Iterators.emptyIterator(); - assertNull(Iterators.getNext(iterator, null)); + assertNull(Iterators.<@Nullable String>getNext(iterator, null)); } public void testGetNext_withDefault_two() { @@ -1391,7 +1395,7 @@ public void testGetLast_withDefault_empty() { public void testGetLast_withDefault_empty_null() { Iterator iterator = Iterators.emptyIterator(); - assertNull(Iterators.getLast(iterator, null)); + assertNull(Iterators.<@Nullable String>getLast(iterator, null)); } public void testGetLast_withDefault_two() { diff --git a/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java b/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java index 049c1ea7df85..3583c5675848 100644 --- a/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/MapsTransformValuesUnmodifiableIteratorTest.java @@ -358,11 +358,12 @@ public void testTransformEntrySetContains() { Set> entries = map.entrySet(); assertTrue(entries.contains(Maps.immutableEntry("a", true))); - assertTrue(entries.contains(Maps.immutableEntry("b", (Boolean) null))); - assertTrue(entries.contains(Maps.immutableEntry((String) null, (Boolean) null))); + assertTrue(entries.contains(Maps.immutableEntry("b", null))); + assertTrue( + entries.contains(Maps.<@Nullable String, @Nullable Boolean>immutableEntry(null, null))); - assertFalse(entries.contains(Maps.immutableEntry("c", (Boolean) null))); - assertFalse(entries.contains(Maps.immutableEntry((String) null, true))); + assertFalse(entries.contains(Maps.immutableEntry("c", null))); + assertFalse(entries.contains(Maps.<@Nullable String, Boolean>immutableEntry(null, true))); } @Override diff --git a/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java index 83a835609a3a..ca19020ab9fd 100644 --- a/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java +++ b/guava-tests/test/com/google/common/collect/MinMaxPriorityQueueTest.java @@ -59,7 +59,7 @@ @GwtCompatible(emulated = true) @ElementTypesAreNonnullByDefault public class MinMaxPriorityQueueTest extends TestCase { - private static final Ordering SOME_COMPARATOR = Ordering.natural().reverse(); + private static final Ordering SOME_COMPARATOR = Ordering.natural().reverse(); @J2ktIncompatible @GwtIncompatible // suite diff --git a/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java b/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java index f6b327000c92..9244c0c11fb8 100644 --- a/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java +++ b/guava-tests/test/com/google/common/collect/MoreCollectorsTest.java @@ -88,7 +88,8 @@ public void testOnlyElementSingleton() { } public void testOnlyElementNull() { - assertThat(Stream.of((Object) null).collect(MoreCollectors.onlyElement())).isNull(); + assertThat(Stream.<@Nullable Object>of((Object) null).collect(MoreCollectors.onlyElement())) + .isNull(); } public void testOnlyElementMultiple() { diff --git a/guava-tests/test/com/google/common/collect/MultimapsTest.java b/guava-tests/test/com/google/common/collect/MultimapsTest.java index 2555cb5ea63b..dce5cae26730 100644 --- a/guava-tests/test/com/google/common/collect/MultimapsTest.java +++ b/guava-tests/test/com/google/common/collect/MultimapsTest.java @@ -179,7 +179,8 @@ public void testUnmodifiableMultimapShortCircuit() { @GwtIncompatible // slow (~10s) public void testUnmodifiableArrayListMultimap() { - checkUnmodifiableMultimap(ArrayListMultimap.create(), true); + checkUnmodifiableMultimap( + ArrayListMultimap.<@Nullable String, @Nullable Integer>create(), true); } @J2ktIncompatible @@ -210,7 +211,7 @@ public void testUnmodifiableLinkedListMultimapRandomAccess() { @GwtIncompatible // slow (~10s) public void testUnmodifiableHashMultimap() { - checkUnmodifiableMultimap(HashMultimap.create(), false); + checkUnmodifiableMultimap(HashMultimap.<@Nullable String, @Nullable Integer>create(), false); } @J2ktIncompatible @@ -237,7 +238,9 @@ public void testSerializingUnmodifiableTreeMultimap() { @GwtIncompatible // slow (~10s) public void testUnmodifiableSynchronizedArrayListMultimap() { checkUnmodifiableMultimap( - Multimaps.synchronizedListMultimap(ArrayListMultimap.create()), true); + Multimaps.synchronizedListMultimap( + ArrayListMultimap.<@Nullable String, @Nullable Integer>create()), + true); } @J2ktIncompatible @@ -255,7 +258,9 @@ public void testSerializingUnmodifiableSynchronizedArrayListMultimap() { @GwtIncompatible // slow (~10s) public void testUnmodifiableSynchronizedHashMultimap() { checkUnmodifiableMultimap( - Multimaps.synchronizedSetMultimap(HashMultimap.create()), false); + Multimaps.synchronizedSetMultimap( + HashMultimap.<@Nullable String, @Nullable Integer>create()), + false); } @J2ktIncompatible diff --git a/guava-tests/test/com/google/common/collect/ObjectArraysTest.java b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java index 7e6646d354a3..c3ad40278fb2 100644 --- a/guava-tests/test/com/google/common/collect/ObjectArraysTest.java +++ b/guava-tests/test/com/google/common/collect/ObjectArraysTest.java @@ -25,6 +25,7 @@ import java.util.Arrays; import java.util.List; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** * Unit test for {@code ObjectArrays}. @@ -124,7 +125,7 @@ public void testConcatWithMoreGeneralType() { public void testToArrayImpl1() { doTestToArrayImpl1(Lists.newArrayList()); doTestToArrayImpl1(Lists.newArrayList(1)); - doTestToArrayImpl1(Lists.newArrayList(1, null, 3)); + doTestToArrayImpl1(Lists.<@Nullable Integer>newArrayList(1, null, 3)); } private void doTestToArrayImpl1(List list) { @@ -142,9 +143,9 @@ public void testToArrayImpl2() { doTestToArrayImpl2(Lists.newArrayList(1), new Integer[1], true); doTestToArrayImpl2(Lists.newArrayList(1), new Integer[] {2, 3}, true); - doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[0], false); - doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[2], false); - doTestToArrayImpl2(Lists.newArrayList(1, null, 3), new Integer[3], true); + doTestToArrayImpl2(Lists.<@Nullable Integer>newArrayList(1, null, 3), new Integer[0], false); + doTestToArrayImpl2(Lists.<@Nullable Integer>newArrayList(1, null, 3), new Integer[2], false); + doTestToArrayImpl2(Lists.<@Nullable Integer>newArrayList(1, null, 3), new Integer[3], true); } private void doTestToArrayImpl2(List list, Integer[] array1, boolean expectModify) { diff --git a/guava-tests/test/com/google/common/collect/OrderingTest.java b/guava-tests/test/com/google/common/collect/OrderingTest.java index 311552735a1e..3a50b54e648f 100644 --- a/guava-tests/test/com/google/common/collect/OrderingTest.java +++ b/guava-tests/test/com/google/common/collect/OrderingTest.java @@ -97,9 +97,9 @@ public void testComplicatedOrderingExample() { // [[null, null], [null], [1, null, 2], [1, 1], [1, 2], [1], [2], [], null] assertThat(sorted) .containsExactly( - Lists.newArrayList(nullInt, nullInt), - Lists.newArrayList(nullInt), - Lists.newArrayList(1, null, 2), + Lists.<@Nullable Integer>newArrayList(nullInt, nullInt), + Lists.<@Nullable Integer>newArrayList(nullInt), + Lists.<@Nullable Integer>newArrayList(1, null, 2), Lists.newArrayList(1, 1), Lists.newArrayList(1, 2), Lists.newArrayList(1), @@ -291,7 +291,7 @@ public Character apply(String string) { } private static Ordering byCharAt(int index) { - return Ordering.natural().onResultOf(CharAtFunction.values()[index]); + return Ordering.natural().onResultOf(CharAtFunction.values()[index]); } public void testCompound_static() { @@ -385,18 +385,18 @@ public Integer apply(String string) { } } - private static final Ordering DECREASING_INTEGER = Ordering.natural().reverse(); + private static final Ordering DECREASING_INTEGER = Ordering.natural().reverse(); public void testOnResultOf_natural() { Comparator comparator = - Ordering.natural().onResultOf(StringLengthFunction.StringLength); + Ordering.natural().onResultOf(StringLengthFunction.StringLength); assertTrue(comparator.compare("to", "be") == 0); assertTrue(comparator.compare("or", "not") < 0); assertTrue(comparator.compare("that", "to") > 0); new EqualsTester() .addEqualityGroup( - comparator, Ordering.natural().onResultOf(StringLengthFunction.StringLength)) + comparator, Ordering.natural().onResultOf(StringLengthFunction.StringLength)) .addEqualityGroup(DECREASING_INTEGER) .testEquals(); reserializeAndAssert(comparator); @@ -440,8 +440,8 @@ public void testLexicographical() { } public void testNullsFirst() { - Ordering ordering = Ordering.natural().nullsFirst(); - Helpers.testComparator(ordering, null, Integer.MIN_VALUE, 0, 1); + Ordering<@Nullable Integer> ordering = Ordering.natural().nullsFirst(); + Helpers.<@Nullable Integer>testComparator(ordering, null, Integer.MIN_VALUE, 0, 1); new EqualsTester() .addEqualityGroup(ordering, Ordering.natural().nullsFirst()) @@ -451,8 +451,8 @@ public void testNullsFirst() { } public void testNullsLast() { - Ordering ordering = Ordering.natural().nullsLast(); - Helpers.testComparator(ordering, 0, 1, Integer.MAX_VALUE, null); + Ordering<@Nullable Integer> ordering = Ordering.natural().nullsLast(); + Helpers.<@Nullable Integer>testComparator(ordering, 0, 1, Integer.MAX_VALUE, null); new EqualsTester() .addEqualityGroup(ordering, Ordering.natural().nullsLast()) @@ -467,9 +467,10 @@ public void testBinarySearch() { } public void testSortedCopy() { - List unsortedInts = Collections.unmodifiableList(Arrays.asList(5, 0, 3, null, 0, 9)); - List sortedInts = numberOrdering.nullsLast().sortedCopy(unsortedInts); - assertEquals(Arrays.asList(0, 0, 3, 5, 9, null), sortedInts); + List<@Nullable Integer> unsortedInts = + Collections.unmodifiableList(Arrays.<@Nullable Integer>asList(5, 0, 3, null, 0, 9)); + List<@Nullable Integer> sortedInts = numberOrdering.nullsLast().sortedCopy(unsortedInts); + assertEquals(Arrays.<@Nullable Integer>asList(0, 0, 3, 5, 9, null), sortedInts); assertEquals( Collections.emptyList(), numberOrdering.sortedCopy(Collections.emptyList())); @@ -484,9 +485,9 @@ public void testImmutableSortedCopy() { Collections.emptyList(), numberOrdering.immutableSortedCopy(Collections.emptyList())); - List listWithNull = Arrays.asList(5, 3, null, 9); + List<@Nullable Integer> listWithNull = Arrays.asList(5, 3, null, 9); try { - Ordering.natural().nullsFirst().immutableSortedCopy(listWithNull); + Ordering.natural().nullsFirst().immutableSortedCopy((List) listWithNull); fail(); } catch (NullPointerException expected) { } @@ -599,16 +600,17 @@ public void testLeastOfIterator_simple_1() { } public void testLeastOfIterable_simple_nMinusOne_withNullElement() { - List list = Arrays.asList(3, null, 5, -1); - List result = Ordering.natural().nullsLast().leastOf(list, list.size() - 1); + List<@Nullable Integer> list = Arrays.asList(3, null, 5, -1); + List<@Nullable Integer> result = + Ordering.natural().nullsLast().leastOf(list, list.size() - 1); assertTrue(result instanceof RandomAccess); assertListImmutable(result); assertEquals(ImmutableList.of(-1, 3, 5), result); } public void testLeastOfIterator_simple_nMinusOne_withNullElement() { - Iterator itr = Iterators.forArray(3, null, 5, -1); - List result = Ordering.natural().nullsLast().leastOf(itr, 3); + Iterator<@Nullable Integer> itr = Iterators.forArray(3, null, 5, -1); + List<@Nullable Integer> result = Ordering.natural().nullsLast().leastOf(itr, 3); assertTrue(result instanceof RandomAccess); assertListImmutable(result); assertEquals(ImmutableList.of(-1, 3, 5), result); @@ -647,19 +649,21 @@ public void testLeastOfIterator_simple_n() { } public void testLeastOfIterable_simple_n_withNullElement() { - List list = Arrays.asList(3, 4, 5, null, -1); - List result = Ordering.natural().nullsLast().leastOf(list, list.size()); + List<@Nullable Integer> list = Arrays.asList(3, 4, 5, null, -1); + List<@Nullable Integer> result = + Ordering.natural().nullsLast().leastOf(list, list.size()); assertTrue(result instanceof RandomAccess); assertListImmutable(result); - assertEquals(Arrays.asList(-1, 3, 4, 5, null), result); + assertEquals(Arrays.<@Nullable Integer>asList(-1, 3, 4, 5, null), result); } public void testLeastOfIterator_simple_n_withNullElement() { - List list = Arrays.asList(3, 4, 5, null, -1); - List result = Ordering.natural().nullsLast().leastOf(list.iterator(), list.size()); + List<@Nullable Integer> list = Arrays.asList(3, 4, 5, null, -1); + List<@Nullable Integer> result = + Ordering.natural().nullsLast().leastOf(list.iterator(), list.size()); assertTrue(result instanceof RandomAccess); assertListImmutable(result); - assertEquals(Arrays.asList(-1, 3, 4, 5, null), result); + assertEquals(Arrays.<@Nullable Integer>asList(-1, 3, 4, 5, null), result); } public void testLeastOfIterable_simple_nPlusOne() { @@ -730,14 +734,15 @@ private static void runLeastOfComparison(int iterations, int elements, int seeds public void testLeastOfIterableLargeK() { List list = Arrays.asList(4, 2, 3, 5, 1); - assertEquals(Arrays.asList(1, 2, 3, 4, 5), Ordering.natural().leastOf(list, Integer.MAX_VALUE)); + assertEquals( + Arrays.asList(1, 2, 3, 4, 5), Ordering.natural().leastOf(list, Integer.MAX_VALUE)); } public void testLeastOfIteratorLargeK() { List list = Arrays.asList(4, 2, 3, 5, 1); assertEquals( Arrays.asList(1, 2, 3, 4, 5), - Ordering.natural().leastOf(list.iterator(), Integer.MAX_VALUE)); + Ordering.natural().leastOf(list.iterator(), Integer.MAX_VALUE)); } public void testGreatestOfIterable_simple() { @@ -1094,7 +1099,7 @@ public T apply(Integer from) { composites.add(new Composite(t, 2)); } Ordering> ordering = - Ordering.natural() + Ordering.>natural() .compound(scenario.ordering.onResultOf(Composite.getValueFunction())); return new Scenario>( ordering, composites, (Composite[]) new Composite[0]); diff --git a/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java b/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java index d070936c3bac..22686633c6ae 100644 --- a/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java +++ b/guava-tests/test/com/google/common/collect/PeekingIteratorTest.java @@ -106,7 +106,7 @@ public void testPeekingIteratorBehavesLikeIteratorOnThreeElementIterable() { @GwtIncompatible // works but takes 5 minutes to run public void testPeekingIteratorAcceptsNullElements() { - actsLikeIteratorHelper(Lists.newArrayList(null, "A", null)); + actsLikeIteratorHelper(Lists.<@Nullable String>newArrayList(null, "A", null)); } public void testPeekOnEmptyList() { diff --git a/guava-tests/test/com/google/common/collect/SetsTest.java b/guava-tests/test/com/google/common/collect/SetsTest.java index 3e6f01d2b67c..278127a40374 100644 --- a/guava-tests/test/com/google/common/collect/SetsTest.java +++ b/guava-tests/test/com/google/common/collect/SetsTest.java @@ -894,7 +894,7 @@ public void testPowerSetContents() { assertTrue(powerSet.contains(subset)); } assertFalse(powerSet.contains(ImmutableSet.of(1, 2, 4))); - assertFalse(powerSet.contains(singleton(null))); + assertFalse(powerSet.contains(Collections.<@Nullable Integer>singleton(null))); assertFalse(powerSet.contains(null)); assertFalse(powerSet.contains((Object) "notASet")); } diff --git a/guava-tests/test/com/google/common/collect/StreamsTest.java b/guava-tests/test/com/google/common/collect/StreamsTest.java index fc64f84d893a..ca607e1a38db 100644 --- a/guava-tests/test/com/google/common/collect/StreamsTest.java +++ b/guava-tests/test/com/google/common/collect/StreamsTest.java @@ -40,6 +40,7 @@ import java.util.stream.LongStream; import java.util.stream.Stream; import junit.framework.TestCase; +import org.checkerframework.checker.nullness.qual.Nullable; /** Unit test for {@link Streams}. */ @GwtCompatible(emulated = true) @@ -307,7 +308,9 @@ public void testMapWithIndex_linkedHashSetSource() { public void testMapWithIndex_unsizedSource() { testMapWithIndex( - elems -> Stream.of((Object) null).flatMap(unused -> ImmutableList.copyOf(elems).stream())); + elems -> + Stream.<@Nullable Object>of((Object) null) + .flatMap(unused -> ImmutableList.copyOf(elems).stream())); } public void testMapWithIndex_closeIsPropagated_sizedSource() { @@ -316,7 +319,7 @@ public void testMapWithIndex_closeIsPropagated_sizedSource() { public void testMapWithIndex_closeIsPropagated_unsizedSource() { testMapWithIndex_closeIsPropagated( - Stream.of((Object) null).flatMap(unused -> Stream.of("a", "b", "c"))); + Stream.<@Nullable Object>of((Object) null).flatMap(unused -> Stream.of("a", "b", "c"))); } private void testMapWithIndex_closeIsPropagated(Stream source) { diff --git a/guava-tests/test/com/google/common/collect/TablesTest.java b/guava-tests/test/com/google/common/collect/TablesTest.java index b1b1fb2d6357..1eeb3afd6f0f 100644 --- a/guava-tests/test/com/google/common/collect/TablesTest.java +++ b/guava-tests/test/com/google/common/collect/TablesTest.java @@ -55,18 +55,27 @@ public void testEntryEquals() { .addEqualityGroup(Tables.immutableCell("bar", 1, 'a')) .addEqualityGroup(Tables.immutableCell("foo", 2, 'a')) .addEqualityGroup(Tables.immutableCell("foo", 1, 'b')) - .addEqualityGroup(Tables.immutableCell(null, null, null)) + .addEqualityGroup( + Tables.<@Nullable Object, @Nullable Object, @Nullable Object>immutableCell( + null, null, null)) .testEquals(); } public void testEntryEqualsNull() { - Cell entry = Tables.immutableCell(null, null, null); + Cell<@Nullable String, @Nullable Integer, @Nullable Character> entry = + Tables.immutableCell(null, null, null); new EqualsTester() - .addEqualityGroup(entry, Tables.immutableCell(null, null, null)) - .addEqualityGroup(Tables.immutableCell("bar", null, null)) - .addEqualityGroup(Tables.immutableCell(null, 2, null)) - .addEqualityGroup(Tables.immutableCell(null, null, 'b')) + .addEqualityGroup( + entry, + Tables.<@Nullable Object, @Nullable Object, @Nullable Object>immutableCell( + null, null, null)) + .addEqualityGroup( + Tables.immutableCell("bar", null, null)) + .addEqualityGroup( + Tables.<@Nullable Object, Integer, @Nullable Object>immutableCell(null, 2, null)) + .addEqualityGroup( + Tables.<@Nullable Object, @Nullable Object, Character>immutableCell(null, null, 'b')) .addEqualityGroup(Tables.immutableCell("foo", 1, 'a')) .testEquals(); } diff --git a/guava-tests/test/com/google/common/collect/TopKSelectorTest.java b/guava-tests/test/com/google/common/collect/TopKSelectorTest.java index 2cebdc338b08..05ecb2040fe4 100644 --- a/guava-tests/test/com/google/common/collect/TopKSelectorTest.java +++ b/guava-tests/test/com/google/common/collect/TopKSelectorTest.java @@ -37,12 +37,12 @@ public class TopKSelectorTest extends TestCase { public void testNegativeK() { try { - TopKSelector.least(-1); + TopKSelector.least(-1); fail(); } catch (IllegalArgumentException expected) { } try { - TopKSelector.greatest(-1); + TopKSelector.greatest(-1); fail(); } catch (IllegalArgumentException expected) { } diff --git a/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java b/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java index 7f4d8ff822ab..c1a9f0066b9f 100644 --- a/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java +++ b/guava-tests/test/com/google/common/collect/TreeBasedTableTest.java @@ -286,7 +286,7 @@ public void testColumnKeySet_isSortedWithRealComparator() { table = create( String.CASE_INSENSITIVE_ORDER, - Ordering.natural().reverse(), + Ordering.natural().reverse(), "a", 2, 'X', diff --git a/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java b/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java index 601709b105e6..e887c0fadfa4 100644 --- a/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java +++ b/guava-tests/test/com/google/common/collect/TreeMultimapExplicitTest.java @@ -150,10 +150,10 @@ public void testOrderedEntries() { TreeMultimap<@Nullable String, @Nullable Integer> multimap = createPopulate(); assertThat(multimap.entries()) .containsExactly( - Maps.immutableEntry((String) null, 7), - Maps.immutableEntry((String) null, 3), - Maps.immutableEntry((String) null, 1), - Maps.immutableEntry("tree", (Integer) null), + Maps.<@Nullable String, Integer>immutableEntry(null, 7), + Maps.<@Nullable String, Integer>immutableEntry(null, 3), + Maps.<@Nullable String, Integer>immutableEntry(null, 1), + Maps.immutableEntry("tree", null), Maps.immutableEntry("tree", 0), Maps.immutableEntry("google", 6), Maps.immutableEntry("google", 2)) @@ -193,7 +193,7 @@ public void testSortedKeySet() { assertEquals(null, keySet.first()); assertEquals("google", keySet.last()); assertEquals(StringLength.COMPARATOR, keySet.comparator()); - assertEquals(Sets.newHashSet(null, "tree"), keySet.headSet("yahoo")); + assertEquals(Sets.<@Nullable String>newHashSet(null, "tree"), keySet.headSet("yahoo")); assertEquals(Sets.newHashSet("google"), keySet.tailSet("yahoo")); assertEquals(Sets.newHashSet("tree"), keySet.subSet("ask", "yahoo")); } diff --git a/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java b/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java index 012a14c5aab6..f475e87f996c 100644 --- a/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java +++ b/guava-tests/test/com/google/common/collect/TreeMultimapNaturalTest.java @@ -354,7 +354,7 @@ public void testMultimapConstructor() { private static final Comparator KEY_COMPARATOR = Ordering.natural(); private static final Comparator VALUE_COMPARATOR = - Ordering.natural().reverse().nullsFirst(); + Ordering.natural().reverse().nullsFirst(); /** * Test that creating one TreeMultimap from another does not copy the comparators from the source diff --git a/guava-tests/test/com/google/common/collect/TreeMultisetTest.java b/guava-tests/test/com/google/common/collect/TreeMultisetTest.java index 0077b75d168a..6f9651a9df51 100644 --- a/guava-tests/test/com/google/common/collect/TreeMultisetTest.java +++ b/guava-tests/test/com/google/common/collect/TreeMultisetTest.java @@ -287,8 +287,8 @@ public int compare(String o1, String o2) { } public void testNullAcceptingComparator() throws Exception { - Comparator comparator = Ordering.natural().nullsFirst(); - TreeMultiset ms = TreeMultiset.create(comparator); + Comparator<@Nullable String> comparator = Ordering.natural().nullsFirst(); + TreeMultiset<@Nullable String> ms = TreeMultiset.create(comparator); ms.add("b"); ms.add(null); From 52a62b289303511df78b5d6eed0e4f42118c2289 Mon Sep 17 00:00:00 2001 From: cpovirk Date: Fri, 8 Mar 2024 16:18:25 -0800 Subject: [PATCH 206/216] Avoid calling `checkNotNull` on nullable values except during actual precondition checks. It's not that we're not going to make such calls illegal, I promise :) I mean, we certainly aren't going to _in general_, but I am tempted for `com.google.common`, as discussed on cl/372346107 :) (It would have caught the problem of cl/612591080!) I'm testing what would happen if we did do it for `com.google.common` in case it shakes out any more bugs. It does reveal that I didn't complete the cleanup of cl/612591080. And it reveals a few places where we'd normally use `requireNonNull`, since the checks aren't "preconditions" in the sense of "the caller did something wrong" (from cl/15376243 and cl/526930990). I've made those changes. (I would have made some more changes if I had tried to address more of `com.google.common`. But I stuck to the "main" packages, and I didn't even fix enough errors to see full results.) Honestly, the more interesting thing that this exercise revealed was that there are more cases in which I'm especially sympathetic to calling `checkNotNull` on nullable values: - `DummyProxy` is making an `InvocationHandler` perform automatic precondition tests based on annotations on the interface it's implementing. - `EqualsTester` and Truth have permissive signatures because they're test utilities, as documented in cl/578260904 and discussed during the Truth CLs. And the yet more interesting thing that it revealed is that we may want to use `@NonNull` here in the future, similar to what we've discussed in https://github.com/google/guava/issues/6824. RELNOTES=n/a PiperOrigin-RevId: 614074533 --- .../google/common/testing/FreshValueGenerator.java | 3 ++- .../com/google/common/collect/TableCollectors.java | 14 ++++++-------- .../com/google/common/collect/TreeMultimap.java | 5 +++-- .../google/common/testing/FreshValueGenerator.java | 3 ++- .../com/google/common/collect/TableCollectors.java | 14 ++++++-------- .../com/google/common/collect/TreeMultimap.java | 5 +++-- 6 files changed, 22 insertions(+), 22 deletions(-) diff --git a/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java b/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java index 4cc25e1289fb..d1a7819f1977 100644 --- a/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java +++ b/android/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java @@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Throwables.throwIfUnchecked; +import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; @@ -211,7 +212,7 @@ final T newFreshProxy(final Class interfaceType) { return pickInstance(rawType.getEnumConstants(), null); } if (type.isArray()) { - TypeToken componentType = checkNotNull(type.getComponentType()); + TypeToken componentType = requireNonNull(type.getComponentType()); Object array = Array.newInstance(componentType.getRawType(), 1); Array.set(array, 0, generate(componentType)); return array; diff --git a/android/guava/src/com/google/common/collect/TableCollectors.java b/android/guava/src/com/google/common/collect/TableCollectors.java index 0508c4802fc9..f53569627e5e 100644 --- a/android/guava/src/com/google/common/collect/TableCollectors.java +++ b/android/guava/src/com/google/common/collect/TableCollectors.java @@ -199,14 +199,12 @@ void merge(V value, BinaryOperator mergeFunction) { } } - private static < - R extends @Nullable Object, C extends @Nullable Object, V extends @Nullable Object> - void mergeTables( - Table table, - @ParametricNullness R row, - @ParametricNullness C column, - @ParametricNullness V value, - BinaryOperator mergeFunction) { + private static void mergeTables( + Table table, + @ParametricNullness R row, + @ParametricNullness C column, + V value, + BinaryOperator mergeFunction) { checkNotNull(value); V oldValue = table.get(row, column); if (oldValue == null) { diff --git a/android/guava/src/com/google/common/collect/TreeMultimap.java b/android/guava/src/com/google/common/collect/TreeMultimap.java index 8e2afe3594eb..289ea54f67b2 100644 --- a/android/guava/src/com/google/common/collect/TreeMultimap.java +++ b/android/guava/src/com/google/common/collect/TreeMultimap.java @@ -17,6 +17,7 @@ package com.google.common.collect; import static com.google.common.base.Preconditions.checkNotNull; +import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; @@ -217,8 +218,8 @@ private void writeObject(ObjectOutputStream stream) throws IOException { @SuppressWarnings("unchecked") // reading data stored by writeObject private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); - keyComparator = checkNotNull((Comparator) stream.readObject()); - valueComparator = checkNotNull((Comparator) stream.readObject()); + keyComparator = requireNonNull((Comparator) stream.readObject()); + valueComparator = requireNonNull((Comparator) stream.readObject()); setMap(new TreeMap>(keyComparator)); Serialization.populateMultimap(this, stream); } diff --git a/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java b/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java index 65e50df176e6..567b7a76aac7 100644 --- a/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java +++ b/guava-testlib/src/com/google/common/testing/FreshValueGenerator.java @@ -18,6 +18,7 @@ import static com.google.common.base.Preconditions.checkNotNull; import static com.google.common.base.Throwables.throwIfUnchecked; +import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtIncompatible; import com.google.common.annotations.J2ktIncompatible; @@ -215,7 +216,7 @@ final T newFreshProxy(final Class interfaceType) { return pickInstance(rawType.getEnumConstants(), null); } if (type.isArray()) { - TypeToken componentType = checkNotNull(type.getComponentType()); + TypeToken componentType = requireNonNull(type.getComponentType()); Object array = Array.newInstance(componentType.getRawType(), 1); Array.set(array, 0, generate(componentType)); return array; diff --git a/guava/src/com/google/common/collect/TableCollectors.java b/guava/src/com/google/common/collect/TableCollectors.java index 1164e822de53..ca67a693aec4 100644 --- a/guava/src/com/google/common/collect/TableCollectors.java +++ b/guava/src/com/google/common/collect/TableCollectors.java @@ -195,14 +195,12 @@ void merge(V value, BinaryOperator mergeFunction) { } } - private static < - R extends @Nullable Object, C extends @Nullable Object, V extends @Nullable Object> - void mergeTables( - Table table, - @ParametricNullness R row, - @ParametricNullness C column, - @ParametricNullness V value, - BinaryOperator mergeFunction) { + private static void mergeTables( + Table table, + @ParametricNullness R row, + @ParametricNullness C column, + V value, + BinaryOperator mergeFunction) { checkNotNull(value); V oldValue = table.get(row, column); if (oldValue == null) { diff --git a/guava/src/com/google/common/collect/TreeMultimap.java b/guava/src/com/google/common/collect/TreeMultimap.java index 8e2afe3594eb..289ea54f67b2 100644 --- a/guava/src/com/google/common/collect/TreeMultimap.java +++ b/guava/src/com/google/common/collect/TreeMultimap.java @@ -17,6 +17,7 @@ package com.google.common.collect; import static com.google.common.base.Preconditions.checkNotNull; +import static java.util.Objects.requireNonNull; import com.google.common.annotations.GwtCompatible; import com.google.common.annotations.GwtIncompatible; @@ -217,8 +218,8 @@ private void writeObject(ObjectOutputStream stream) throws IOException { @SuppressWarnings("unchecked") // reading data stored by writeObject private void readObject(ObjectInputStream stream) throws IOException, ClassNotFoundException { stream.defaultReadObject(); - keyComparator = checkNotNull((Comparator) stream.readObject()); - valueComparator = checkNotNull((Comparator) stream.readObject()); + keyComparator = requireNonNull((Comparator) stream.readObject()); + valueComparator = requireNonNull((Comparator) stream.readObject()); setMap(new TreeMap>(keyComparator)); Serialization.populateMultimap(this, stream); } From 8b9387e6c77e36a61f12087bfc1e9240732b341d Mon Sep 17 00:00:00 2001 From: cpovirk Date: Sat, 9 Mar 2024 15:32:40 -0800 Subject: [PATCH 207/216] Bump `j2objc-annotations` to 3.0.0. This is another baby step toward https://github.com/google/guava/issues/2970. RELNOTES=n/a PiperOrigin-RevId: 614287410 --- android/pom.xml | 2 +- integration-tests/gradle/build.gradle.kts | 4 ++-- pom.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index d59ce39455b6..52837fa733d4 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -18,7 +18,7 @@ 3.0.2 3.42.0 2.24.1 - 2.8 + 3.0.0 9+181-r4173-1 diff --git a/integration-tests/gradle/build.gradle.kts b/integration-tests/gradle/build.gradle.kts index cafccc49b790..51c733a8cb6e 100644 --- a/integration-tests/gradle/build.gradle.kts +++ b/integration-tests/gradle/build.gradle.kts @@ -23,9 +23,9 @@ val expectedReducedRuntimeClasspathJreVersion = "listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" ) val expectedCompileClasspathAndroidVersion = - expectedReducedRuntimeClasspathAndroidVersion + setOf("j2objc-annotations-2.8.jar") + expectedReducedRuntimeClasspathAndroidVersion + setOf("j2objc-annotations-3.0.0.jar") val expectedCompileClasspathJreVersion = - expectedReducedRuntimeClasspathJreVersion + setOf("j2objc-annotations-2.8.jar") + expectedReducedRuntimeClasspathJreVersion + setOf("j2objc-annotations-3.0.0.jar") val extraLegacyDependencies = setOf("google-collections-1.0.jar") diff --git a/pom.xml b/pom.xml index 83c3fa11ab3b..79ecb39a58dc 100644 --- a/pom.xml +++ b/pom.xml @@ -18,7 +18,7 @@ 3.0.2 3.42.0 2.24.1 - 2.8 + 3.0.0 9+181-r4173-1 From d70366d645e07867305f052831c6745aa32b5db0 Mon Sep 17 00:00:00 2001 From: Sam Gammon Date: Mon, 11 Mar 2024 09:34:39 -0700 Subject: [PATCH 208/216] Stop setting up and trying to inherit Javadoc from the JDK. Drops the JDK source steps involved with Javadoc builds, as suggested in #7089. There will be some build warnings related to Javadoc until subsequent PRs are merged. Signed-off-by: Sam Gammon Gives up on the "inherting" half of https://github.com/google/guava/issues/6790. Fixes #7092 RELNOTES=n/a PiperOrigin-RevId: 614693592 --- android/guava/pom.xml | 74 ------------------------------------------- guava/pom.xml | 74 ------------------------------------------- 2 files changed, 148 deletions(-) diff --git a/android/guava/pom.xml b/android/guava/pom.xml index 7444cd6972ba..501b3967264c 100644 --- a/android/guava/pom.xml +++ b/android/guava/pom.xml @@ -44,8 +44,6 @@ com.google.j2objc j2objc-annotations - - @@ -106,24 +104,6 @@ maven-source-plugin - - - maven-dependency-plugin - - - unpack-jdk-sources - generate-sources - unpack-dependencies - - srczip - ${project.build.directory}/jdk-sources - false - - **/module-info.java,**/java/io/FileDescriptor.java - - - - org.codehaus.mojo animal-sniffer-maven-plugin @@ -131,11 +111,6 @@ maven-javadoc-plugin - - - - ${project.build.sourceDirectory}:${project.build.directory}/jdk-sources - @@ -247,53 +222,4 @@ - - - srczip-parent - - - ${java.home}/../src.zip - - - - - jdk - srczip - 999 - system - ${java.home}/../src.zip - true - - - - - srczip-lib - - - ${java.home}/lib/src.zip - - - - - jdk - srczip - 999 - system - ${java.home}/lib/src.zip - true - - - - - - maven-javadoc-plugin - - - ${project.build.sourceDirectory}:${project.build.directory}/jdk-sources/java.base - - - - - - diff --git a/guava/pom.xml b/guava/pom.xml index 913fc387a619..be0bab174e16 100644 --- a/guava/pom.xml +++ b/guava/pom.xml @@ -44,8 +44,6 @@ com.google.j2objc j2objc-annotations - - @@ -106,24 +104,6 @@ maven-source-plugin - - - maven-dependency-plugin - - - unpack-jdk-sources - generate-sources - unpack-dependencies - - srczip - ${project.build.directory}/jdk-sources - false - - **/module-info.java,**/java/io/FileDescriptor.java - - - - org.codehaus.mojo animal-sniffer-maven-plugin @@ -131,11 +111,6 @@ maven-javadoc-plugin - - - - ${project.build.sourceDirectory}:${project.build.directory}/jdk-sources - @@ -247,53 +222,4 @@ - - - srczip-parent - - - ${java.home}/../src.zip - - - - - jdk - srczip - 999 - system - ${java.home}/../src.zip - true - - - - - srczip-lib - - - ${java.home}/lib/src.zip - - - - - jdk - srczip - 999 - system - ${java.home}/lib/src.zip - true - - - - - - maven-javadoc-plugin - - - ${project.build.sourceDirectory}:${project.build.directory}/jdk-sources/java.base - - - - - - From d48c6dfbb8cc9b8360ef5c14a5f4d00b802f14ee Mon Sep 17 00:00:00 2001 From: Liam Miller-Cushon Date: Mon, 11 Mar 2024 13:34:49 -0700 Subject: [PATCH 209/216] Update to Error Prone 2.26.0 RELNOTES=Update to Error Prone 2.26.0, which includes JPMS support PiperOrigin-RevId: 614777925 --- android/pom.xml | 2 +- integration-tests/gradle/build.gradle.kts | 4 ++-- pom.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index 52837fa733d4..230bc738a53d 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -17,7 +17,7 @@ 1.4.2 3.0.2 3.42.0 - 2.24.1 + 2.26.0 3.0.0 9+181-r4173-1 diff --git a/integration-tests/gradle/build.gradle.kts b/integration-tests/gradle/build.gradle.kts index 51c733a8cb6e..f54ac2f388b8 100644 --- a/integration-tests/gradle/build.gradle.kts +++ b/integration-tests/gradle/build.gradle.kts @@ -10,7 +10,7 @@ val expectedReducedRuntimeClasspathAndroidVersion = "failureaccess-1.0.2.jar", "jsr305-3.0.2.jar", "checker-qual-3.42.0.jar", - "error_prone_annotations-2.24.1.jar", + "error_prone_annotations-2.26.0.jar", "listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" ) val expectedReducedRuntimeClasspathJreVersion = @@ -19,7 +19,7 @@ val expectedReducedRuntimeClasspathJreVersion = "failureaccess-1.0.2.jar", "jsr305-3.0.2.jar", "checker-qual-3.42.0.jar", - "error_prone_annotations-2.24.1.jar", + "error_prone_annotations-2.26.0.jar", "listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" ) val expectedCompileClasspathAndroidVersion = diff --git a/pom.xml b/pom.xml index 79ecb39a58dc..c7cdbb76aa99 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ 1.4.2 3.0.2 3.42.0 - 2.24.1 + 2.26.0 3.0.0 9+181-r4173-1 From 3dc9e73d622b5eed0ff37d556f46b6f45b8e810e Mon Sep 17 00:00:00 2001 From: cpovirk Date: Tue, 12 Mar 2024 08:07:45 -0700 Subject: [PATCH 210/216] Add `@since` tags and other Javadoc for `AbstractNetwork` methods from cl/591404913. RELNOTES=n/a PiperOrigin-RevId: 615044032 --- .../google/common/graph/AbstractNetwork.java | 18 ++++++++++++++++++ .../google/common/graph/AbstractNetwork.java | 18 ++++++++++++++++++ 2 files changed, 36 insertions(+) diff --git a/android/guava/src/com/google/common/graph/AbstractNetwork.java b/android/guava/src/com/google/common/graph/AbstractNetwork.java index 053f35ea4aaa..ec59544e0d82 100644 --- a/android/guava/src/com/google/common/graph/AbstractNetwork.java +++ b/android/guava/src/com/google/common/graph/AbstractNetwork.java @@ -278,16 +278,34 @@ public String toString() { + edgeIncidentNodesMap(this); } + /** + * Returns a {@link Set} whose methods throw {@link IllegalStateException} when the given edge is + * not present in this network. + * + * @since NEXT + */ protected final Set edgeInvalidatableSet(Set set, E edge) { return InvalidatableSet.of( set, () -> edges().contains(edge), () -> String.format(EDGE_REMOVED_FROM_GRAPH, edge)); } + /** + * Returns a {@link Set} whose methods throw {@link IllegalStateException} when the given node is + * not present in this network. + * + * @since NEXT + */ protected final Set nodeInvalidatableSet(Set set, N node) { return InvalidatableSet.of( set, () -> nodes().contains(node), () -> String.format(NODE_REMOVED_FROM_GRAPH, node)); } + /** + * Returns a {@link Set} whose methods throw {@link IllegalStateException} when either of the + * given nodes is not present in this network. + * + * @since NEXT + */ protected final Set nodePairInvalidatableSet(Set set, N nodeU, N nodeV) { return InvalidatableSet.of( set, diff --git a/guava/src/com/google/common/graph/AbstractNetwork.java b/guava/src/com/google/common/graph/AbstractNetwork.java index 08382e7b68b0..8edea4fb2126 100644 --- a/guava/src/com/google/common/graph/AbstractNetwork.java +++ b/guava/src/com/google/common/graph/AbstractNetwork.java @@ -290,16 +290,34 @@ public String toString() { + edgeIncidentNodesMap(this); } + /** + * Returns a {@link Set} whose methods throw {@link IllegalStateException} when the given edge is + * not present in this network. + * + * @since NEXT + */ protected final Set edgeInvalidatableSet(Set set, E edge) { return InvalidatableSet.of( set, () -> edges().contains(edge), () -> String.format(EDGE_REMOVED_FROM_GRAPH, edge)); } + /** + * Returns a {@link Set} whose methods throw {@link IllegalStateException} when the given node is + * not present in this network. + * + * @since NEXT + */ protected final Set nodeInvalidatableSet(Set set, N node) { return InvalidatableSet.of( set, () -> nodes().contains(node), () -> String.format(NODE_REMOVED_FROM_GRAPH, node)); } + /** + * Returns a {@link Set} whose methods throw {@link IllegalStateException} when either of the + * given nodes is not present in this network. + * + * @since NEXT + */ protected final Set nodePairInvalidatableSet(Set set, N nodeU, N nodeV) { return InvalidatableSet.of( set, From f9850325b6be808770fe75da5611a3fab083caf0 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 12 Mar 2024 09:20:46 -0700 Subject: [PATCH 211/216] Bump actions/checkout from 4.1.1 to 4.1.2 Bumps [actions/checkout](https://github.com/actions/checkout) from 4.1.1 to 4.1.2. - [Release notes](https://github.com/actions/checkout/releases) - [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md) - [Commits](https://github.com/actions/checkout/compare/b4ffde65f46336ab88eb53be808477a3936bae11...9bb56186c3b09b4f86b1c65136769dd318469633) Fixes #7099 RELNOTES=n/a PiperOrigin-RevId: 615065947 --- .github/workflows/ci.yml | 6 +++--- .github/workflows/gradle-wrapper-validation.yml | 2 +- .github/workflows/scorecard.yml | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c0cac9d8e013..c5453d3a1df3 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -36,7 +36,7 @@ jobs: with: access_token: ${{ github.token }} - name: 'Check out repository' - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: 'Set up JDK ${{ matrix.java }}' uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 @@ -67,7 +67,7 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Check out repository' - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: 'Set up JDK 11' uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 @@ -93,7 +93,7 @@ jobs: runs-on: ubuntu-latest steps: - name: 'Check out repository' - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: 'Set up JDK 11' uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml index 317c184351f5..d08048c14e64 100644 --- a/.github/workflows/gradle-wrapper-validation.yml +++ b/.github/workflows/gradle-wrapper-validation.yml @@ -9,5 +9,5 @@ jobs: name: "Validation" runs-on: ubuntu-latest steps: - - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + - uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - uses: gradle/wrapper-validation-action@699bb18358f12c5b78b37bb0111d3a0e2276e0e2 # v2.1.1 diff --git a/.github/workflows/scorecard.yml b/.github/workflows/scorecard.yml index b42a78370343..034a76f0ae08 100644 --- a/.github/workflows/scorecard.yml +++ b/.github/workflows/scorecard.yml @@ -32,7 +32,7 @@ jobs: steps: - name: "Checkout code" - uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1 + uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 with: persist-credentials: false From c6e91c498ced26631029d1bdfdb9154d4a217368 Mon Sep 17 00:00:00 2001 From: Liam Miller-Cushon Date: Tue, 12 Mar 2024 12:42:33 -0700 Subject: [PATCH 212/216] Update to Error Prone annotations 2.26.1 RELNOTES=N/A PiperOrigin-RevId: 615137941 --- android/pom.xml | 2 +- integration-tests/gradle/build.gradle.kts | 4 ++-- pom.xml | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/android/pom.xml b/android/pom.xml index 230bc738a53d..9d59d6cca7ad 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -17,7 +17,7 @@ 1.4.2 3.0.2 3.42.0 - 2.26.0 + 2.26.1 3.0.0 9+181-r4173-1 diff --git a/integration-tests/gradle/build.gradle.kts b/integration-tests/gradle/build.gradle.kts index f54ac2f388b8..f205680e49b2 100644 --- a/integration-tests/gradle/build.gradle.kts +++ b/integration-tests/gradle/build.gradle.kts @@ -10,7 +10,7 @@ val expectedReducedRuntimeClasspathAndroidVersion = "failureaccess-1.0.2.jar", "jsr305-3.0.2.jar", "checker-qual-3.42.0.jar", - "error_prone_annotations-2.26.0.jar", + "error_prone_annotations-2.26.1.jar", "listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" ) val expectedReducedRuntimeClasspathJreVersion = @@ -19,7 +19,7 @@ val expectedReducedRuntimeClasspathJreVersion = "failureaccess-1.0.2.jar", "jsr305-3.0.2.jar", "checker-qual-3.42.0.jar", - "error_prone_annotations-2.26.0.jar", + "error_prone_annotations-2.26.1.jar", "listenablefuture-9999.0-empty-to-avoid-conflict-with-guava.jar" ) val expectedCompileClasspathAndroidVersion = diff --git a/pom.xml b/pom.xml index c7cdbb76aa99..dab7face2552 100644 --- a/pom.xml +++ b/pom.xml @@ -17,7 +17,7 @@ 1.4.2 3.0.2 3.42.0 - 2.26.0 + 2.26.1 3.0.0 9+181-r4173-1 From f2b8c4f47f253bb83c7959ffd2b7346e473c2788 Mon Sep 17 00:00:00 2001 From: Sam Gammon Date: Tue, 12 Mar 2024 13:23:28 -0700 Subject: [PATCH 213/216] Make build and tests work with Java 21, and enable CI for them. The main changes is that tests need `-Djava.security.manager=allow`. Fixes and closes https://github.com/google/guava/issues/7065 Helps with https://github.com/google/guava/issues/6790 Fixes https://github.com/google/guava/issues/6245 (at least the remaining parts that we actually care about) Fixes #7087 Signed-off-by: Sam Gammon RELNOTES=n/a PiperOrigin-RevId: 615151162 --- .github/workflows/ci.yml | 14 ++++++-------- android/pom.xml | 23 ++++++++++++++++++++++- pom.xml | 23 ++++++++++++++++++++++- 3 files changed, 50 insertions(+), 10 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index c5453d3a1df3..0fc561fbcd75 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -20,11 +20,11 @@ jobs: strategy: matrix: os: [ ubuntu-latest ] - java: [ 8, 11, 17 ] + java: [ 8, 11, 17, 21 ] root-pom: [ 'pom.xml', 'android/pom.xml' ] include: - os: windows-latest - java: 17 + java: 21 root-pom: pom.xml runs-on: ${{ matrix.os }} env: @@ -68,11 +68,10 @@ jobs: steps: - name: 'Check out repository' uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - - name: 'Set up JDK 11' + - name: 'Set up JDK 21' uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 - with: - java-version: 11 + java-version: 21 distribution: 'zulu' server-id: sonatype-nexus-snapshots server-username: CI_DEPLOY_USERNAME @@ -94,11 +93,10 @@ jobs: steps: - name: 'Check out repository' uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - - name: 'Set up JDK 11' + - name: 'Set up JDK 21' uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 - with: - java-version: 11 + java-version: 21 distribution: 'zulu' cache: 'maven' - name: 'Generate latest docs' diff --git a/android/pom.xml b/android/pom.xml index 9d59d6cca7ad..96ea9fa41df5 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -25,6 +25,7 @@ 2024-01-02T00:00:00Z UTF-8 + integration android android @@ -176,6 +177,13 @@ org.codehaus.mojo animal-sniffer-maven-plugin 1.23 + + + org.ow2.asm + asm + 9.6 + + com.google.common.base.IgnoreJRERequirement,com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement true @@ -253,7 +261,7 @@ alphabetical - -Xmx1536M -Duser.language=hi -Duser.country=IN ${test.add.opens} + -Xmx1536M -Duser.language=hi -Duser.country=IN ${test.add.args} ${test.add.opens} @@ -462,5 +470,18 @@ + + javac-for-jvm18plus + + + [18,] + + + -Djava.security.manager=allow + + diff --git a/pom.xml b/pom.xml index dab7face2552..f92855fb4ef8 100644 --- a/pom.xml +++ b/pom.xml @@ -25,6 +25,7 @@ 2024-01-02T00:00:00Z UTF-8 + integration standard-jvm jre @@ -177,6 +178,13 @@ org.codehaus.mojo animal-sniffer-maven-plugin 1.23 + + + org.ow2.asm + asm + 9.6 + + com.google.common.base.IgnoreJRERequirement,com.google.common.collect.IgnoreJRERequirement,com.google.common.hash.IgnoreJRERequirement,com.google.common.io.IgnoreJRERequirement,com.google.common.reflect.IgnoreJRERequirement,com.google.common.testing.IgnoreJRERequirement true @@ -248,7 +256,7 @@ alphabetical - -Xmx1536M -Duser.language=hi -Duser.country=IN ${test.add.opens} + -Xmx1536M -Duser.language=hi -Duser.country=IN ${test.add.args} ${test.add.opens} @@ -457,5 +465,18 @@ + + javac-for-jvm18plus + + + [18,] + + + -Djava.security.manager=allow + + From fe28211b200092ee68a08a3fcb1229d165b2663a Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 13 Mar 2024 09:45:55 -0700 Subject: [PATCH 214/216] Bump actions/setup-java from 4.1.0 to 4.2.0 Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4.1.0 to 4.2.0. - [Release notes](https://github.com/actions/setup-java/releases) - [Commits](https://github.com/actions/setup-java/compare/9704b39bf258b59bc04b50fa2dd55e9ed76b47a8...5896cecc08fd8a1fbdfaf517e29b571164b031f7) Fixes #7103 RELNOTES=n/a PiperOrigin-RevId: 615451084 --- .github/workflows/ci.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 0fc561fbcd75..ec4c36d157af 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -38,7 +38,7 @@ jobs: - name: 'Check out repository' uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: 'Set up JDK ${{ matrix.java }}' - uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 + uses: actions/setup-java@5896cecc08fd8a1fbdfaf517e29b571164b031f7 # v4.2.0 with: java-version: ${{ matrix.java }} @@ -69,7 +69,7 @@ jobs: - name: 'Check out repository' uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: 'Set up JDK 21' - uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 + uses: actions/setup-java@5896cecc08fd8a1fbdfaf517e29b571164b031f7 # v4.2.0 with: java-version: 21 distribution: 'zulu' @@ -94,7 +94,7 @@ jobs: - name: 'Check out repository' uses: actions/checkout@9bb56186c3b09b4f86b1c65136769dd318469633 # v4.1.2 - name: 'Set up JDK 21' - uses: actions/setup-java@9704b39bf258b59bc04b50fa2dd55e9ed76b47a8 # v4.1.0 + uses: actions/setup-java@5896cecc08fd8a1fbdfaf517e29b571164b031f7 # v4.2.0 with: java-version: 21 distribution: 'zulu' From cc2e372c5f7b958a6c9efa49fdf4069283bed0ff Mon Sep 17 00:00:00 2001 From: cpovirk Date: Wed, 13 Mar 2024 11:14:04 -0700 Subject: [PATCH 215/216] Prepare for release 33.1.0. RELNOTES=n/a PiperOrigin-RevId: 615482195 --- README.md | 16 ++++++++-------- .../com/google/common/testing/FakeTicker.java | 4 ++-- .../src/com/google/common/base/Suppliers.java | 2 +- .../com/google/common/graph/AbstractNetwork.java | 6 +++--- .../src/com/google/common/graph/Graphs.java | 4 ++-- guava-testlib/README.md | 4 ++-- guava/src/com/google/common/base/Suppliers.java | 2 +- .../com/google/common/graph/AbstractNetwork.java | 6 +++--- guava/src/com/google/common/graph/Graphs.java | 4 ++-- 9 files changed, 24 insertions(+), 24 deletions(-) diff --git a/README.md b/README.md index 2d236923cde4..6582d18b6cc5 100644 --- a/README.md +++ b/README.md @@ -28,8 +28,8 @@ Guava comes in two flavors: Guava's Maven group ID is `com.google.guava`, and its artifact ID is `guava`. Guava provides two different "flavors": one for use on a (Java 8+) JRE and one for use on Android or by any library that wants to be compatible with Android. -These flavors are specified in the Maven version field as either `33.0.0-jre` or -`33.0.0-android`. For more about depending on Guava, see +These flavors are specified in the Maven version field as either `33.1.0-jre` or +`33.1.0-android`. For more about depending on Guava, see [using Guava in your build]. To add a dependency on Guava using Maven, use the following: @@ -38,9 +38,9 @@ To add a dependency on Guava using Maven, use the following: com.google.guava guava - 33.0.0-jre + 33.1.0-jre - 33.0.0-android + 33.1.0-android ``` @@ -51,16 +51,16 @@ dependencies { // Pick one: // 1. Use Guava in your implementation only: - implementation("com.google.guava:guava:33.0.0-jre") + implementation("com.google.guava:guava:33.1.0-jre") // 2. Use Guava types in your public API: - api("com.google.guava:guava:33.0.0-jre") + api("com.google.guava:guava:33.1.0-jre") // 3. Android - Use Guava in your implementation only: - implementation("com.google.guava:guava:33.0.0-android") + implementation("com.google.guava:guava:33.1.0-android") // 4. Android - Use Guava types in your public API: - api("com.google.guava:guava:33.0.0-android") + api("com.google.guava:guava:33.1.0-android") } ``` diff --git a/android/guava-testlib/src/com/google/common/testing/FakeTicker.java b/android/guava-testlib/src/com/google/common/testing/FakeTicker.java index 3fe3f96c6ab2..cf56e3f27d7e 100644 --- a/android/guava-testlib/src/com/google/common/testing/FakeTicker.java +++ b/android/guava-testlib/src/com/google/common/testing/FakeTicker.java @@ -64,7 +64,7 @@ public FakeTicker advance(long nanoseconds) { /** * Advances the ticker value by {@code duration}. * - * @since NEXT (but since 28.0 in the JRE flavor) */ @GwtIncompatible @@ -97,7 +97,7 @@ public FakeTicker setAutoIncrementStep(long autoIncrementStep, TimeUnit timeUnit *

    The default behavior is to auto increment by zero. i.e: The ticker is left unchanged when * queried. * - * @since NEXT (but since 28.0 in the JRE flavor) */ @GwtIncompatible diff --git a/android/guava/src/com/google/common/base/Suppliers.java b/android/guava/src/com/google/common/base/Suppliers.java index 5d628bcb3e1a..3989e77105a4 100644 --- a/android/guava/src/com/google/common/base/Suppliers.java +++ b/android/guava/src/com/google/common/base/Suppliers.java @@ -252,7 +252,7 @@ public String toString() { * @param duration the length of time after a value is created that it should stop being returned * by subsequent {@code get()} calls * @throws IllegalArgumentException if {@code duration} is not positive - * @since NEXT + * @since 33.1.0 */ @Beta // only until we're confident that Java 8+ APIs are safe for our Android users @J2ktIncompatible diff --git a/android/guava/src/com/google/common/graph/AbstractNetwork.java b/android/guava/src/com/google/common/graph/AbstractNetwork.java index ec59544e0d82..d25b65908a4c 100644 --- a/android/guava/src/com/google/common/graph/AbstractNetwork.java +++ b/android/guava/src/com/google/common/graph/AbstractNetwork.java @@ -282,7 +282,7 @@ public String toString() { * Returns a {@link Set} whose methods throw {@link IllegalStateException} when the given edge is * not present in this network. * - * @since NEXT + * @since 33.1.0 */ protected final Set edgeInvalidatableSet(Set set, E edge) { return InvalidatableSet.of( @@ -293,7 +293,7 @@ protected final Set edgeInvalidatableSet(Set set, E edge) { * Returns a {@link Set} whose methods throw {@link IllegalStateException} when the given node is * not present in this network. * - * @since NEXT + * @since 33.1.0 */ protected final Set nodeInvalidatableSet(Set set, N node) { return InvalidatableSet.of( @@ -304,7 +304,7 @@ protected final Set nodeInvalidatableSet(Set set, N node) { * Returns a {@link Set} whose methods throw {@link IllegalStateException} when either of the * given nodes is not present in this network. * - * @since NEXT + * @since 33.1.0 */ protected final Set nodePairInvalidatableSet(Set set, N nodeU, N nodeV) { return InvalidatableSet.of( diff --git a/android/guava/src/com/google/common/graph/Graphs.java b/android/guava/src/com/google/common/graph/Graphs.java index 06cc0495e6ba..38498f6f6fab 100644 --- a/android/guava/src/com/google/common/graph/Graphs.java +++ b/android/guava/src/com/google/common/graph/Graphs.java @@ -147,7 +147,7 @@ private static boolean canTraverseWithoutReusingEdge( * of the transitive closure of {@code graph}. In other words, the returned {@link Graph} will not * be updated after modifications to {@code graph}. * - * @since NEXT (present with return type {@code Graph} since 20.0) + * @since 33.1.0 (present with return type {@code Graph} since 20.0) */ // TODO(b/31438252): Consider potential optimizations for this algorithm. public static ImmutableGraph transitiveClosure(Graph graph) { @@ -194,7 +194,7 @@ public static ImmutableGraph transitiveClosure(Graph graph) { * not be updated after modifications to {@code graph}. * * @throws IllegalArgumentException if {@code node} is not present in {@code graph} - * @since NEXT (present with return type {@code Set} since 20.0) + * @since 33.1.0 (present with return type {@code Set} since 20.0) */ public static ImmutableSet reachableNodes(Graph graph, N node) { checkArgument(graph.nodes().contains(node), NODE_NOT_IN_GRAPH, node); diff --git a/guava-testlib/README.md b/guava-testlib/README.md index 636c5be593d3..c901a4bde9af 100644 --- a/guava-testlib/README.md +++ b/guava-testlib/README.md @@ -13,7 +13,7 @@ To add a dependency on Guava testlib using Maven, use the following: com.google.guava guava-testlib - 33.0.0-jre + 33.1.0-jre test ``` @@ -22,7 +22,7 @@ To add a dependency using Gradle: ```gradle dependencies { - test 'com.google.guava:guava-testlib:33.0.0-jre' + test 'com.google.guava:guava-testlib:33.1.0-jre' } ``` diff --git a/guava/src/com/google/common/base/Suppliers.java b/guava/src/com/google/common/base/Suppliers.java index 5d628bcb3e1a..3989e77105a4 100644 --- a/guava/src/com/google/common/base/Suppliers.java +++ b/guava/src/com/google/common/base/Suppliers.java @@ -252,7 +252,7 @@ public String toString() { * @param duration the length of time after a value is created that it should stop being returned * by subsequent {@code get()} calls * @throws IllegalArgumentException if {@code duration} is not positive - * @since NEXT + * @since 33.1.0 */ @Beta // only until we're confident that Java 8+ APIs are safe for our Android users @J2ktIncompatible diff --git a/guava/src/com/google/common/graph/AbstractNetwork.java b/guava/src/com/google/common/graph/AbstractNetwork.java index 8edea4fb2126..5634ea11eee6 100644 --- a/guava/src/com/google/common/graph/AbstractNetwork.java +++ b/guava/src/com/google/common/graph/AbstractNetwork.java @@ -294,7 +294,7 @@ public String toString() { * Returns a {@link Set} whose methods throw {@link IllegalStateException} when the given edge is * not present in this network. * - * @since NEXT + * @since 33.1.0 */ protected final Set edgeInvalidatableSet(Set set, E edge) { return InvalidatableSet.of( @@ -305,7 +305,7 @@ protected final Set edgeInvalidatableSet(Set set, E edge) { * Returns a {@link Set} whose methods throw {@link IllegalStateException} when the given node is * not present in this network. * - * @since NEXT + * @since 33.1.0 */ protected final Set nodeInvalidatableSet(Set set, N node) { return InvalidatableSet.of( @@ -316,7 +316,7 @@ protected final Set nodeInvalidatableSet(Set set, N node) { * Returns a {@link Set} whose methods throw {@link IllegalStateException} when either of the * given nodes is not present in this network. * - * @since NEXT + * @since 33.1.0 */ protected final Set nodePairInvalidatableSet(Set set, N nodeU, N nodeV) { return InvalidatableSet.of( diff --git a/guava/src/com/google/common/graph/Graphs.java b/guava/src/com/google/common/graph/Graphs.java index a754c150f78a..f998869fe74a 100644 --- a/guava/src/com/google/common/graph/Graphs.java +++ b/guava/src/com/google/common/graph/Graphs.java @@ -148,7 +148,7 @@ private static boolean canTraverseWithoutReusingEdge( * of the transitive closure of {@code graph}. In other words, the returned {@link Graph} will not * be updated after modifications to {@code graph}. * - * @since NEXT (present with return type {@code Graph} since 20.0) + * @since 33.1.0 (present with return type {@code Graph} since 20.0) */ // TODO(b/31438252): Consider potential optimizations for this algorithm. public static ImmutableGraph transitiveClosure(Graph graph) { @@ -195,7 +195,7 @@ public static ImmutableGraph transitiveClosure(Graph graph) { * not be updated after modifications to {@code graph}. * * @throws IllegalArgumentException if {@code node} is not present in {@code graph} - * @since NEXT (present with return type {@code Set} since 20.0) + * @since 33.1.0 (present with return type {@code Set} since 20.0) */ public static ImmutableSet reachableNodes(Graph graph, N node) { checkArgument(graph.nodes().contains(node), NODE_NOT_IN_GRAPH, node); From f3e095c3b318f3e6dfeef393146ce5561ec8f859 Mon Sep 17 00:00:00 2001 From: Chris Povirk Date: Wed, 13 Mar 2024 14:21:59 -0400 Subject: [PATCH 216/216] Set version number for guava-parent to 33.1.0. --- android/guava-bom/pom.xml | 2 +- android/guava-testlib/pom.xml | 2 +- android/guava-tests/pom.xml | 2 +- android/guava/pom.xml | 2 +- android/pom.xml | 8 ++++---- guava-bom/pom.xml | 2 +- guava-gwt/pom.xml | 2 +- guava-testlib/pom.xml | 2 +- guava-tests/pom.xml | 2 +- guava/pom.xml | 2 +- pom.xml | 8 ++++---- 11 files changed, 17 insertions(+), 17 deletions(-) diff --git a/android/guava-bom/pom.xml b/android/guava-bom/pom.xml index 8fde93d1a75a..a777f531eaaf 100644 --- a/android/guava-bom/pom.xml +++ b/android/guava-bom/pom.xml @@ -8,7 +8,7 @@ com.google.guava guava-bom - HEAD-android-SNAPSHOT + 33.1.0-android pom diff --git a/android/guava-testlib/pom.xml b/android/guava-testlib/pom.xml index 33dc15799d00..044d5cdd8433 100644 --- a/android/guava-testlib/pom.xml +++ b/android/guava-testlib/pom.xml @@ -5,7 +5,7 @@ com.google.guava guava-parent - HEAD-android-SNAPSHOT + 33.1.0-android guava-testlib Guava Testing Library diff --git a/android/guava-tests/pom.xml b/android/guava-tests/pom.xml index bf9bec45c651..69d9bcc13727 100644 --- a/android/guava-tests/pom.xml +++ b/android/guava-tests/pom.xml @@ -5,7 +5,7 @@ com.google.guava guava-parent - HEAD-android-SNAPSHOT + 33.1.0-android guava-tests Guava Unit Tests diff --git a/android/guava/pom.xml b/android/guava/pom.xml index 501b3967264c..7ba2bb6fa106 100644 --- a/android/guava/pom.xml +++ b/android/guava/pom.xml @@ -6,7 +6,7 @@ com.google.guava guava-parent - HEAD-android-SNAPSHOT + 33.1.0-android guava bundle diff --git a/android/pom.xml b/android/pom.xml index 96ea9fa41df5..4b1ca8175198 100644 --- a/android/pom.xml +++ b/android/pom.xml @@ -6,7 +6,7 @@ 4.0.0 com.google.guava guava-parent - HEAD-android-SNAPSHOT + 33.1.0-android pom Guava Maven Parent Parent for guava artifacts @@ -22,14 +22,14 @@ 9+181-r4173-1 - 2024-01-02T00:00:00Z + 2024-03-13T18:20:32Z UTF-8 - integration + release android android - HEAD-jre-SNAPSHOT + 33.1.0-jre standard-jvm jre diff --git a/guava-bom/pom.xml b/guava-bom/pom.xml index 8c5ea2ec035f..e97ea553bebf 100644 --- a/guava-bom/pom.xml +++ b/guava-bom/pom.xml @@ -8,7 +8,7 @@ com.google.guava guava-bom - HEAD-jre-SNAPSHOT + 33.1.0-jre pom diff --git a/guava-gwt/pom.xml b/guava-gwt/pom.xml index 86fa4b971aa9..37618858cc72 100644 --- a/guava-gwt/pom.xml +++ b/guava-gwt/pom.xml @@ -5,7 +5,7 @@ com.google.guava guava-parent - HEAD-jre-SNAPSHOT + 33.1.0-jre guava-gwt Guava GWT compatible libs diff --git a/guava-testlib/pom.xml b/guava-testlib/pom.xml index f60890e78e7a..51edf876aa0b 100644 --- a/guava-testlib/pom.xml +++ b/guava-testlib/pom.xml @@ -5,7 +5,7 @@ com.google.guava guava-parent - HEAD-jre-SNAPSHOT + 33.1.0-jre guava-testlib Guava Testing Library diff --git a/guava-tests/pom.xml b/guava-tests/pom.xml index 8596221d8316..110ef36560fd 100644 --- a/guava-tests/pom.xml +++ b/guava-tests/pom.xml @@ -5,7 +5,7 @@ com.google.guava guava-parent - HEAD-jre-SNAPSHOT + 33.1.0-jre guava-tests Guava Unit Tests diff --git a/guava/pom.xml b/guava/pom.xml index be0bab174e16..3d363b33c516 100644 --- a/guava/pom.xml +++ b/guava/pom.xml @@ -6,7 +6,7 @@ com.google.guava guava-parent - HEAD-jre-SNAPSHOT + 33.1.0-jre guava bundle diff --git a/pom.xml b/pom.xml index f92855fb4ef8..dd1a5e011373 100644 --- a/pom.xml +++ b/pom.xml @@ -6,7 +6,7 @@ 4.0.0 com.google.guava guava-parent - HEAD-jre-SNAPSHOT + 33.1.0-jre pom Guava Maven Parent Parent for guava artifacts @@ -22,14 +22,14 @@ 9+181-r4173-1 - 2024-01-02T00:00:00Z + 2024-03-13T18:20:56Z UTF-8 - integration + release standard-jvm jre - HEAD-android-SNAPSHOT + 33.1.0-android android android