diff --git a/src/tools/android/java/com/google/devtools/build/android/r8/BUILD b/src/tools/android/java/com/google/devtools/build/android/r8/BUILD index eb4ff9e3a936bd..d99e96956f7c2f 100644 --- a/src/tools/android/java/com/google/devtools/build/android/r8/BUILD +++ b/src/tools/android/java/com/google/devtools/build/android/r8/BUILD @@ -47,7 +47,6 @@ java_library( deps = [ "//src/main/java/com/google/devtools/build/lib/worker:work_request_handlers", "//src/main/java/com/google/devtools/common/options", - "//src/tools/android/java/com/google/devtools/build/android:android_builder_lib", "//third_party:asm", "//third_party:auto_value", "//third_party:guava", diff --git a/src/tools/android/java/com/google/devtools/build/android/r8/CoreLibraryDesugar.java b/src/tools/android/java/com/google/devtools/build/android/r8/CoreLibraryDesugar.java index a05a0d72607574..7b62d24c7749f4 100644 --- a/src/tools/android/java/com/google/devtools/build/android/r8/CoreLibraryDesugar.java +++ b/src/tools/android/java/com/google/devtools/build/android/r8/CoreLibraryDesugar.java @@ -26,8 +26,8 @@ import com.android.tools.r8.L8Command; import com.android.tools.r8.errors.InterfaceDesugarMissingTypeDiagnostic; import com.google.common.collect.ImmutableList; -import com.google.devtools.build.android.Converters.ExistingPathConverter; -import com.google.devtools.build.android.Converters.PathConverter; +import com.google.devtools.build.android.r8.OptionsConverters.ExistingPathConverter; +import com.google.devtools.build.android.r8.OptionsConverters.PathConverter; import com.google.devtools.build.android.r8.desugar.OrderedClassFileResourceProvider; import com.google.devtools.build.android.r8.desugar.OutputConsumer; import com.google.devtools.common.options.Option; diff --git a/src/tools/android/java/com/google/devtools/build/android/r8/Desugar.java b/src/tools/android/java/com/google/devtools/build/android/r8/Desugar.java index 3b84046dc75485..3a45d6690efb8e 100644 --- a/src/tools/android/java/com/google/devtools/build/android/r8/Desugar.java +++ b/src/tools/android/java/com/google/devtools/build/android/r8/Desugar.java @@ -29,8 +29,8 @@ import com.android.tools.r8.errors.InterfaceDesugarMissingTypeDiagnostic; import com.android.tools.r8.utils.StringDiagnostic; import com.google.common.collect.ImmutableList; -import com.google.devtools.build.android.Converters.ExistingPathConverter; -import com.google.devtools.build.android.Converters.PathConverter; +import com.google.devtools.build.android.r8.OptionsConverters.ExistingPathConverter; +import com.google.devtools.build.android.r8.OptionsConverters.PathConverter; import com.google.devtools.build.android.r8.desugar.OrderedClassFileResourceProvider; import com.google.devtools.build.android.r8.desugar.OutputConsumer; import com.google.devtools.build.lib.worker.ProtoWorkerMessageProcessor; diff --git a/src/tools/android/java/com/google/devtools/build/android/r8/DexFileMerger.java b/src/tools/android/java/com/google/devtools/build/android/r8/DexFileMerger.java index 2877c26d50380f..82f4ba2fe7344e 100644 --- a/src/tools/android/java/com/google/devtools/build/android/r8/DexFileMerger.java +++ b/src/tools/android/java/com/google/devtools/build/android/r8/DexFileMerger.java @@ -24,8 +24,8 @@ import com.android.tools.r8.utils.ExceptionDiagnostic; import com.android.tools.r8.utils.StringDiagnostic; import com.google.common.collect.Maps; -import com.google.devtools.build.android.Converters.ExistingPathConverter; -import com.google.devtools.build.android.Converters.PathConverter; +import com.google.devtools.build.android.r8.OptionsConverters.ExistingPathConverter; +import com.google.devtools.build.android.r8.OptionsConverters.PathConverter; import com.google.devtools.common.options.EnumConverter; import com.google.devtools.common.options.Option; import com.google.devtools.common.options.OptionDocumentationCategory; diff --git a/src/tools/android/java/com/google/devtools/build/android/r8/OptionsConverters.java b/src/tools/android/java/com/google/devtools/build/android/r8/OptionsConverters.java new file mode 100644 index 00000000000000..7da71cab8deab6 --- /dev/null +++ b/src/tools/android/java/com/google/devtools/build/android/r8/OptionsConverters.java @@ -0,0 +1,70 @@ +// Copyright 2023 The Bazel Authors. All rights reserved. +// +// 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.devtools.build.android.r8; + +import com.google.devtools.common.options.Converter; +import com.google.devtools.common.options.OptionsParsingException; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.InvalidPathException; +import java.nio.file.Path; + +/** Options converters used by R8. */ +public class OptionsConverters { + + /** Validating converter for Paths. A Path is considered valid if it resolves to a file. */ + public static class PathConverter extends Converter.Contextless { + + private final boolean mustExist; + + public PathConverter() { + this.mustExist = false; + } + + protected PathConverter(boolean mustExist) { + this.mustExist = mustExist; + } + + @Override + public Path convert(String input) throws OptionsParsingException { + try { + Path path = FileSystems.getDefault().getPath(input); + if (mustExist && !Files.exists(path)) { + throw new OptionsParsingException( + String.format("%s is not a valid path: it does not exist.", input)); + } + return path; + } catch (InvalidPathException e) { + throw new OptionsParsingException( + String.format("%s is not a valid path: %s.", input, e.getMessage()), e); + } + } + + @Override + public String getTypeDescription() { + return "a valid filesystem path"; + } + } + + /** + * Validating converter for Paths. A Path is considered valid if it resolves to a file and exists. + */ + public static class ExistingPathConverter extends PathConverter { + public ExistingPathConverter() { + super(true); + } + } + + private OptionsConverters() {} +}