Revert "Desugared lib: Fix DirectoryStream apis"
This reverts commit 9933290e9b97a6f8c57ce4c480494f597955ea6b.
Reason for revert: I clicked submit by mistake.
Change-Id: I1e2e90b9b4130473d5c763f5fe739ada3814d112
diff --git a/src/library_desugar/java/j$/nio/file/Path.java b/src/library_desugar/java/j$/nio/file/Path.java
index 6030764..781ab5f 100644
--- a/src/library_desugar/java/j$/nio/file/Path.java
+++ b/src/library_desugar/java/j$/nio/file/Path.java
@@ -9,8 +9,4 @@
public static j$.nio.file.Path wrap_convert(java.nio.file.Path path) {
return null;
}
-
- public static java.nio.file.Path wrap_convert(j$.nio.file.Path path) {
- return null;
- }
}
diff --git a/src/library_desugar/java/java/nio/file/PathApiFlips.java b/src/library_desugar/java/java/nio/file/PathApiFlips.java
deleted file mode 100644
index f7009ca..0000000
--- a/src/library_desugar/java/java/nio/file/PathApiFlips.java
+++ /dev/null
@@ -1,136 +0,0 @@
-// Copyright (c) 2022, the R8 project authors. Please see the AUTHORS file
-// for details. All rights reserved. Use of this source code is governed by a
-// BSD-style license that can be found in the LICENSE file.
-
-package java.nio.file;
-
-import java.io.IOException;
-import java.util.Iterator;
-import java.util.function.Consumer;
-
-/** For all wrappers, the spliterator is based on the iterator so no need to wrap it. */
-public class PathApiFlips {
-
- public static Iterator<?> flipIteratorPath(Iterator<?> iterator) {
- return new IteratorPathWrapper<>(iterator);
- }
-
- public static Iterable<?> flipIterablePath(Iterable<?> iterable) {
- return new IterablePathWrapper<>(iterable);
- }
-
- public static java.nio.file.DirectoryStream<?> flipDirectoryStreamPath(
- java.nio.file.DirectoryStream<?> directoryStream) {
- return new DirectoryStreamPathWrapper<>(directoryStream);
- }
-
- public static java.nio.file.DirectoryStream.Filter<?> flipDirectoryStreamFilterPath(
- java.nio.file.DirectoryStream.Filter<?> filter) {
- return new DirectoryStreamFilterWrapper<>(filter);
- }
-
- /**
- * The generic types inherit from java.lang.Object even if in practice it seems they are mainly
- * used with Path. To be conservative, we use
- */
- @SuppressWarnings("unchecked")
- public static <T> T convertPath(T maybePath) {
- if (maybePath == null) {
- return null;
- }
- if (maybePath instanceof java.nio.file.Path) {
- return (T) j$.nio.file.Path.wrap_convert((java.nio.file.Path) maybePath);
- }
- if (maybePath instanceof j$.nio.file.Path) {
- return (T) j$.nio.file.Path.wrap_convert((j$.nio.file.Path) maybePath);
- }
- return maybePath;
- }
-
- public static class DirectoryStreamFilterWrapper<T>
- implements java.nio.file.DirectoryStream.Filter<T> {
-
- private final java.nio.file.DirectoryStream.Filter<T> filter;
-
- public DirectoryStreamFilterWrapper(java.nio.file.DirectoryStream.Filter<T> filter) {
- this.filter = filter;
- }
-
- @Override
- public boolean accept(T t) throws IOException {
- return filter.accept(convertPath(t));
- }
- }
-
- public static class IterablePathWrapper<T> implements Iterable<T> {
-
- private final Iterable<T> iterable;
-
- public IterablePathWrapper(Iterable<T> iterable) {
- this.iterable = iterable;
- }
-
- @Override
- public Iterator<T> iterator() {
- return new IteratorPathWrapper<>(iterable.iterator());
- }
-
- @Override
- public void forEach(Consumer<? super T> action) {
- iterable.forEach(path -> action.accept(convertPath(path)));
- }
- }
-
- public static class IteratorPathWrapper<T> implements Iterator<T> {
-
- private final Iterator<T> iterator;
-
- public IteratorPathWrapper(Iterator<T> iterator) {
- this.iterator = iterator;
- }
-
- @Override
- public boolean hasNext() {
- return iterator.hasNext();
- }
-
- @Override
- public T next() {
- return convertPath(iterator.next());
- }
-
- @Override
- public void remove() {
- iterator.remove();
- }
-
- @Override
- public void forEachRemaining(Consumer<? super T> action) {
- iterator.forEachRemaining(path -> action.accept(convertPath(path)));
- }
- }
-
- public static class DirectoryStreamPathWrapper<T> implements DirectoryStream<T> {
-
- private final DirectoryStream<T> directoryStream;
-
- public DirectoryStreamPathWrapper(DirectoryStream<T> directoryStream) {
- this.directoryStream = directoryStream;
- }
-
- @Override
- public Iterator<T> iterator() {
- return new IteratorPathWrapper<>(directoryStream.iterator());
- }
-
- @Override
- public void forEach(Consumer<? super T> action) {
- directoryStream.forEach(path -> action.accept(convertPath(path)));
- }
-
- @Override
- public void close() throws IOException {
- directoryStream.close();
- }
- }
-}
diff --git a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
index 090d1f2..9bc2704 100644
--- a/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
+++ b/src/library_desugar/jdk11/desugar_jdk_libs_nio.json
@@ -152,7 +152,6 @@
"java.nio.file.ClosedWatchServiceException",
"java.nio.file.DirectoryIteratorException",
"java.nio.file.DirectoryNotEmptyException",
- "java.nio.file.DirectoryStream",
"java.nio.file.FileAlreadyExistsException",
"java.nio.file.FileSystemAlreadyExistsException",
"java.nio.file.FileSystemException",
@@ -174,7 +173,6 @@
"java.nio.file.ClosedWatchServiceException",
"java.nio.file.DirectoryIteratorException",
"java.nio.file.DirectoryNotEmptyException",
- "java.nio.file.DirectoryStream",
"java.nio.file.FileAlreadyExistsException",
"java.nio.file.FileSystemAlreadyExistsException",
"java.nio.file.FileSystemException",
@@ -201,10 +199,7 @@
"java.nio.file.attribute.BasicFileAttributes java.nio.file.spi.FileSystemProvider#readAttributes(java.nio.file.Path, java.lang.Class, java.nio.file.LinkOption[])": [1, "java.lang.Class java.nio.file.FileApiFlips#flipFileAttributes(java.lang.Class)"],
"java.util.Set java.nio.file.attribute.PosixFileAttributes#permissions()": [-1, "java.util.Set java.nio.file.FileApiFlips#flipPosixPermissionSet(java.util.Set)"],
"void java.nio.file.attribute.PosixFileAttributeView#setPermissions(java.util.Set)": [0, "java.util.Set java.nio.file.FileApiFlips#flipPosixPermissionSet(java.util.Set)"],
- "java.util.Map java.nio.file.spi.FileSystemProvider#readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption[])" : [-1, "java.util.Map java.nio.file.FileApiFlips#flipMapWithMaybeFileTimeValues(java.util.Map)"],
- "java.lang.Iterable java.nio.file.FileSystem#getRootDirectories()": [-1, "java.lang.Iterable java.nio.file.PathApiFlips#flipIterablePath(java.lang.Iterable)"],
- "java.util.Iterator java.nio.file.Path#iterator()": [-1, "java.util.Iterator java.nio.file.PathApiFlips#flipIteratorPath(java.util.Iterator)"],
- "java.nio.file.DirectoryStream java.nio.file.spi.FileSystemProvider#newDirectoryStream(java.nio.file.Path, java.nio.file.DirectoryStream$Filter)": [-1, "java.nio.file.DirectoryStream java.nio.file.PathApiFlips#flipDirectoryStreamPath(java.nio.file.DirectoryStream)", 1, "java.nio.file.DirectoryStream$Filter java.nio.file.PathApiFlips#flipDirectoryStreamFilterPath(java.nio.file.DirectoryStream$Filter)"]
+ "java.util.Map java.nio.file.spi.FileSystemProvider#readAttributes(java.nio.file.Path, java.lang.String, java.nio.file.LinkOption[])" : [-1, "java.util.Map java.nio.file.FileApiFlips#flipMapWithMaybeFileTimeValues(java.util.Map)"]
},
"wrapper_conversion": [
"java.nio.channels.CompletionHandler",
@@ -230,6 +225,8 @@
"java.nio.file.attribute.UserPrincipal",
"java.nio.file.FileStore",
"java.nio.file.attribute.FileStoreAttributeView",
+ "java.nio.file.DirectoryStream$Filter",
+ "java.nio.file.DirectoryStream",
"java.nio.file.attribute.PosixFilePermission",
"java.nio.file.attribute.BasicFileAttributes",
"java.nio.file.attribute.PosixFileAttributes",
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java
index a68f3ce..b5ca98b 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/ExtractWrapperTypesTest.java
@@ -123,7 +123,13 @@
// TODO(b/238179854): Investigate how to fix these.
private static final Set<String> MISSING_GENERIC_TYPE_CONVERSION_PATH =
- ImmutableSet.of("java.lang.Iterable java.nio.file.FileSystem.getFileStores()");
+ ImmutableSet.of(
+ "java.lang.Iterable java.nio.file.FileSystem.getFileStores()",
+ "java.lang.Iterable java.nio.file.FileSystem.getRootDirectories()",
+ "java.util.Iterator java.nio.file.Path.iterator()",
+ "java.nio.file.DirectoryStream"
+ + " java.nio.file.spi.FileSystemProvider.newDirectoryStream(java.nio.file.Path,"
+ + " java.nio.file.DirectoryStream$Filter)");
// TODO(b/238179854): Investigate how to fix these.
private static final Set<String> MISSING_GENERIC_TYPE_CONVERSION_FLOW =
@@ -239,18 +245,6 @@
.collect(Collectors.toSet());
Set<String> maintainTypeInSet =
specification.getMaintainType().stream().map(DexType::toString).collect(Collectors.toSet());
- Map<String, boolean[]> genericConversionsInSpec = new HashMap<>();
- specification
- .getApiGenericConversion()
- .forEach(
- (method, generics) -> {
- boolean[] indexes = new boolean[generics.length];
- for (int i = 0; i < generics.length; i++) {
- indexes[i] = generics[i] != null;
- }
- genericConversionsInSpec.put(method.toString(), indexes);
- });
-
assertEquals(
Collections.emptySet(), Sets.intersection(wrappersInSpec, customConversionsInSpec));
@@ -263,7 +257,6 @@
nonDesugaredJar,
customConversionsInSpec,
maintainTypeInSet,
- genericConversionsInSpec,
genericDependencies);
Map<ClassReference, Set<ClassReference>> indirectWrappers =
getIndirectlyReferencedWrapperTypes(
@@ -273,7 +266,6 @@
customConversionsInSpec,
maintainTypeInSet,
specification.getWrappers(),
- genericConversionsInSpec,
genericDependencies);
{
Set<String> missingGenericDependency = new HashSet<>();
@@ -347,7 +339,6 @@
CodeInspector nonDesugaredJar,
Set<String> customConversions,
Set<String> maintainType,
- Map<String, boolean[]> genericConversionsInSpec,
Set<DexEncodedMethod> genericDependencies) {
Map<ClassReference, Set<MethodReference>> directWrappers = new HashMap<>();
nonDesugaredJar.forAllClasses(
@@ -373,7 +364,6 @@
forEachType(
method,
t -> addType(adder, t, preDesugarTypes, customConversions, maintainType),
- genericConversionsInSpec,
genericDependencies);
});
});
@@ -383,20 +373,12 @@
private void forEachType(
FoundMethodSubject subject,
Function<String, Boolean> process,
- Map<String, boolean[]> genericConversionsInSpec,
Set<DexEncodedMethod> generics) {
- boolean[] genericConversions = genericConversionsInSpec.get(subject.toString());
MethodSignature signature = subject.getFinalSignature().asMethodSignature();
- if (genericConversions == null || !genericConversions[genericConversions.length - 1]) {
- process.apply(signature.type);
+ process.apply(signature.type);
+ for (String parameter : signature.parameters) {
+ process.apply(parameter);
}
- for (int i = 0; i < signature.parameters.length; i++) {
- if (genericConversions == null || !genericConversions[i]) {
- process.apply(signature.parameters[i]);
- }
- }
- // Even if the genericConversions are present, we check the generic types since conversions
- // on such types will happen through the hand written custom wrappers.
MethodTypeSignature genericSignature = subject.getMethod().getGenericSignature();
if (genericSignature != null) {
TypeSignature[] typeSignatures = new TypeSignature[signature.parameters.length + 1];
@@ -405,17 +387,15 @@
}
typeSignatures[signature.parameters.length] = genericSignature.returnType().typeSignature();
for (TypeSignature typeSignature : typeSignatures) {
- if (typeSignature != null) {
- if ((typeSignature instanceof ClassTypeSignature)) {
- for (FieldTypeSignature typeArgument :
- ((ClassTypeSignature) typeSignature).typeArguments()) {
- if (typeArgument instanceof ClassTypeSignature) {
- String type = descriptorToJavaType(typeArgument.toString()).split("<")[0];
- if (!GENERIC_NOT_NEEDED.contains(type)) {
- boolean added = process.apply(type);
- if (added) {
- generics.add(subject.getMethod());
- }
+ if ((typeSignature instanceof ClassTypeSignature)) {
+ for (FieldTypeSignature typeArgument :
+ ((ClassTypeSignature) typeSignature).typeArguments()) {
+ if (typeArgument instanceof ClassTypeSignature) {
+ String type = descriptorToJavaType(typeArgument.toString()).split("<")[0];
+ if (!GENERIC_NOT_NEEDED.contains(type)) {
+ boolean added = process.apply(type);
+ if (added) {
+ generics.add(subject.getMethod());
}
}
}
@@ -432,7 +412,6 @@
Set<String> customConversions,
Set<String> maintainType,
Map<DexType, WrapperDescriptor> wrapperDescriptorMap,
- Map<String, boolean[]> genericConversionsInSpec,
Set<DexEncodedMethod> genericDependencies) {
Map<ClassReference, Set<ClassReference>> indirectWrappers = new HashMap<>();
WorkList<ClassReference> worklist = WorkList.newEqualityWorkList(directWrappers.keySet());
@@ -456,7 +435,6 @@
forEachType(
method,
t -> addType(adder, t, existing, customConversions, maintainType),
- genericConversionsInSpec,
genericDependencies);
});
WrapperDescriptor descriptor = wrapperDescriptorMap.get(clazz.getDexProgramClass().getType());
diff --git a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/FilesTest.java b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/FilesTest.java
index cef3785..9508e8c 100644
--- a/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/FilesTest.java
+++ b/src/test/java/com/android/tools/r8/desugar/desugaredlibrary/jdk11/FilesTest.java
@@ -18,7 +18,6 @@
import java.nio.ByteBuffer;
import java.nio.channels.FileChannel;
import java.nio.channels.SeekableByteChannel;
-import java.nio.file.DirectoryStream;
import java.nio.file.Files;
import java.nio.file.LinkOption;
import java.nio.file.OpenOption;
@@ -29,7 +28,6 @@
import java.nio.file.attribute.PosixFileAttributes;
import java.nio.file.attribute.PosixFilePermission;
import java.util.HashSet;
-import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -52,10 +50,7 @@
"null",
"true",
"unsupported",
- "j$.nio.file.attribute",
- "tmp",
- "/",
- "true");
+ "j$.nio.file.attribute");
private static final String EXPECTED_RESULT_DESUGARING_FILE_SYSTEM_PLATFORM_CHANNEL =
StringUtils.lines(
"bytes written: 11",
@@ -67,10 +62,7 @@
"null",
"true",
"unsupported",
- "j$.nio.file.attribute",
- "tmp",
- "/",
- "true");
+ "j$.nio.file.attribute");
private static final String EXPECTED_RESULT_PLATFORM_FILE_SYSTEM_DESUGARING =
StringUtils.lines(
"bytes written: 11",
@@ -82,10 +74,7 @@
"true",
"true",
"true",
- "j$.nio.file.attribute",
- "tmp",
- "/",
- "true");
+ "j$.nio.file.attribute");
private static final String EXPECTED_RESULT_PLATFORM_FILE_SYSTEM =
StringUtils.lines(
"bytes written: 11",
@@ -97,10 +86,7 @@
"true",
"true",
"true",
- "java.nio.file.attribute",
- "tmp",
- "/",
- "true");
+ "java.nio.file.attribute");
private final TestParameters parameters;
private final LibraryDesugaringSpecification libraryDesugaringSpecification;
@@ -158,18 +144,6 @@
readThroughFileChannelAPI(path);
attributeAccess(path);
fspMethodsWithGeneric(path);
- pathGeneric();
- }
-
- private static void pathGeneric() throws IOException {
- Path tmpDict = Files.createTempDirectory("tmpDict");
- Path tmpFile = Files.createFile(tmpDict.resolve("tmpFile"));
- Iterator<Path> iterator = tmpDict.iterator();
- System.out.println(iterator.next());
- Iterable<Path> rootDirectories = tmpFile.getFileSystem().getRootDirectories();
- System.out.println(rootDirectories.iterator().next());
- DirectoryStream<Path> paths = Files.newDirectoryStream(tmpDict);
- System.out.println(paths.iterator().hasNext());
}
private static void fspMethodsWithGeneric(Path path) throws IOException {