aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--build.gradle2
-rw-r--r--src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java (renamed from src/main/java/com/android/tools/r8/utils/ArchiveClassFileProvider.java)38
-rw-r--r--src/main/java/com/android/tools/r8/utils/AndroidApp.java1
-rw-r--r--src/main/java/com/android/tools/r8/utils/DescriptorUtils.java24
-rw-r--r--src/main/java/com/android/tools/r8/utils/ProgramFileArchiveReader.java2
-rw-r--r--src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java2
6 files changed, 41 insertions, 28 deletions
diff --git a/build.gradle b/build.gradle
index 7b83fcf4a..e9bfe8e32 100644
--- a/build.gradle
+++ b/build.gradle
@@ -1515,8 +1515,10 @@ def buildArtTest(androidCheckoutDir, artTestBuildDir, dir, dexTool) {
task javadocD8(type: Javadoc) {
classpath = sourceSets.main.compileClasspath
source = sourceSets.main.allJava
+ include '**/com/android/tools/r8/ArchiveClassFileProvider.java'
include '**/com/android/tools/r8/BaseCommand.java'
include '**/com/android/tools/r8/BaseOutput.java'
+ include '**/com/android/tools/r8/ClassFileResourceProvider.java'
include '**/com/android/tools/r8/CompilationException.java'
include '**/com/android/tools/r8/CompilationMode.java'
include '**/com/android/tools/r8/D8.java'
diff --git a/src/main/java/com/android/tools/r8/utils/ArchiveClassFileProvider.java b/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java
index 28286106e..0313cf833 100644
--- a/src/main/java/com/android/tools/r8/utils/ArchiveClassFileProvider.java
+++ b/src/main/java/com/android/tools/r8/ArchiveClassFileProvider.java
@@ -1,18 +1,17 @@
// Copyright (c) 2017, 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 com.android.tools.r8.utils;
+package com.android.tools.r8;
import static com.android.tools.r8.utils.FileUtils.CLASS_EXTENSION;
import static com.android.tools.r8.utils.FileUtils.isArchive;
import static com.android.tools.r8.utils.FileUtils.isClassFile;
-import com.android.tools.r8.ClassFileResourceProvider;
-import com.android.tools.r8.Resource;
import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.shaking.FilteredClassPath;
+import com.android.tools.r8.utils.DescriptorUtils;
import com.google.common.io.ByteStreams;
-import java.io.File;
+import java.io.Closeable;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Path;
@@ -27,7 +26,7 @@ import java.util.zip.ZipFile;
/**
* Lazy Java class file resource provider loading class files form a zip archive.
*/
-public final class ArchiveClassFileProvider implements ClassFileResourceProvider {
+public class ArchiveClassFileProvider implements ClassFileResourceProvider, Closeable {
private final Set<String> descriptors = new HashSet<>();
private final ZipFile zipFile;
@@ -37,24 +36,8 @@ public final class ArchiveClassFileProvider implements ClassFileResourceProvider
return new ArchiveClassFileProvider(archive);
}
- // Guess class descriptor from location of the class file.
- static String guessTypeDescriptor(Path name) {
- return guessTypeDescriptor(name.toString());
- }
-
- // Guess class descriptor from location of the class file.
- private static String guessTypeDescriptor(String name) {
- assert name != null;
- assert name.endsWith(CLASS_EXTENSION) :
- "Name " + name + " must have " + CLASS_EXTENSION + " suffix";
- String fileName =
- File.separatorChar == '/' ? name.toString() :
- name.toString().replace(File.separatorChar, '/');
- String descriptor = fileName.substring(0, fileName.length() - CLASS_EXTENSION.length());
- if (descriptor.contains(".")) {
- throw new CompilationError("Unexpected file name in the archive: " + fileName);
- }
- return 'L' + descriptor + ';';
+ protected ArchiveClassFileProvider(Path archive) throws IOException {
+ this(FilteredClassPath.unfiltered(archive));
}
private ArchiveClassFileProvider(FilteredClassPath archive) throws IOException {
@@ -66,7 +49,7 @@ public final class ArchiveClassFileProvider implements ClassFileResourceProvider
String name = entry.getName();
Path entryPath = Paths.get(name);
if (isClassFile(entryPath) && archive.matchesFile(entryPath)) {
- descriptors.add(guessTypeDescriptor(name));
+ descriptors.add(DescriptorUtils.guessTypeDescriptor(name));
}
}
}
@@ -95,7 +78,7 @@ public final class ArchiveClassFileProvider implements ClassFileResourceProvider
@Override
protected void finalize() throws Throwable {
- zipFile.close();
+ close();
super.finalize();
}
@@ -104,6 +87,11 @@ public final class ArchiveClassFileProvider implements ClassFileResourceProvider
return descriptors.size() + " resources from '" + zipFile.getName() +"'";
}
+ @Override
+ public void close() throws IOException {
+ zipFile.close();
+ }
+
private ZipEntry getZipEntryFromDescriptor(String descriptor) {
return zipFile.getEntry(descriptor.substring(1, descriptor.length() - 1) + CLASS_EXTENSION);
}
diff --git a/src/main/java/com/android/tools/r8/utils/AndroidApp.java b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
index 6064b64b9..80a239301 100644
--- a/src/main/java/com/android/tools/r8/utils/AndroidApp.java
+++ b/src/main/java/com/android/tools/r8/utils/AndroidApp.java
@@ -8,6 +8,7 @@ import static com.android.tools.r8.utils.FileUtils.isClassFile;
import static com.android.tools.r8.utils.FileUtils.isDexFile;
import static com.android.tools.r8.utils.FileUtils.isVDexFile;
+import com.android.tools.r8.ArchiveClassFileProvider;
import com.android.tools.r8.ClassFileResourceProvider;
import com.android.tools.r8.Resource;
import com.android.tools.r8.Resource.Kind;
diff --git a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
index 84beae545..ee3c84559 100644
--- a/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
+++ b/src/main/java/com/android/tools/r8/utils/DescriptorUtils.java
@@ -4,9 +4,14 @@
package com.android.tools.r8.utils;
+import static com.android.tools.r8.utils.FileUtils.CLASS_EXTENSION;
+
+import com.android.tools.r8.errors.CompilationError;
import com.android.tools.r8.errors.Unreachable;
import com.android.tools.r8.naming.ClassNameMapper;
import com.google.common.collect.ImmutableMap;
+import java.io.File;
+import java.nio.file.Path;
import java.util.Map;
public class DescriptorUtils {
@@ -249,4 +254,23 @@ public class DescriptorUtils {
}
}
+ // Guess class descriptor from location of the class file.
+ public static String guessTypeDescriptor(Path name) {
+ return guessTypeDescriptor(name.toString());
+ }
+
+ // Guess class descriptor from location of the class file.
+ public static String guessTypeDescriptor(String name) {
+ assert name != null;
+ assert name.endsWith(CLASS_EXTENSION) :
+ "Name " + name + " must have " + CLASS_EXTENSION + " suffix";
+ String fileName =
+ File.separatorChar == '/' ? name.toString() :
+ name.toString().replace(File.separatorChar, '/');
+ String descriptor = fileName.substring(0, fileName.length() - CLASS_EXTENSION.length());
+ if (descriptor.contains(".")) {
+ throw new CompilationError("Unexpected class file name: " + fileName);
+ }
+ return 'L' + descriptor + ';';
+ }
}
diff --git a/src/main/java/com/android/tools/r8/utils/ProgramFileArchiveReader.java b/src/main/java/com/android/tools/r8/utils/ProgramFileArchiveReader.java
index fa6d5fb91..f33bf7717 100644
--- a/src/main/java/com/android/tools/r8/utils/ProgramFileArchiveReader.java
+++ b/src/main/java/com/android/tools/r8/utils/ProgramFileArchiveReader.java
@@ -55,7 +55,7 @@ public class ProgramFileArchiveReader {
dexResources.add(resource);
}
} else if (isClassFile(name)) {
- String descriptor = ArchiveClassFileProvider.guessTypeDescriptor(name);
+ String descriptor = DescriptorUtils.guessTypeDescriptor(name);
Resource resource = new OneShotByteResource(Resource.Kind.CLASSFILE,
ByteStreams.toByteArray(stream), Collections.singleton(descriptor));
classResources.add(resource);
diff --git a/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java b/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java
index 7de4f7fa3..45939db7c 100644
--- a/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java
+++ b/src/test/java/com/android/tools/r8/D8LazyRunExamplesAndroidOTest.java
@@ -11,11 +11,9 @@ import com.android.tools.r8.D8Command.Builder;
import com.android.tools.r8.shaking.FilteredClassPath;
import com.android.tools.r8.utils.AndroidApiLevel;
import com.android.tools.r8.utils.AndroidApp;
-import com.android.tools.r8.utils.ArchiveClassFileProvider;
import com.android.tools.r8.utils.DirectoryClassFileProvider;
import com.android.tools.r8.utils.FileUtils;
import com.android.tools.r8.utils.OffOrAuto;
-import com.android.tools.r8.utils.PreloadedClassFileProvider;
import com.android.tools.r8.utils.ZipUtils;
import java.io.IOException;
import java.nio.file.Files;