diff options
author | Googler <noreply@google.com> | 2016-06-22 13:33:40 +0000 |
---|---|---|
committer | Lukacs Berki <lberki@google.com> | 2016-06-23 11:01:40 +0000 |
commit | 52d15620851a652efa5c5cae6399bcb3c33105c6 (patch) | |
tree | 0c5c8308d4fdd07cbdbefb1d4fd9acf4eeceeae7 /src/tools/android/java/com/google/devtools/build/android/DependencySymbolFileProvider.java | |
parent | 59c5c8668bd96d5d4c0f1326c23faa526df6e676 (diff) |
Roll forward of commit 1f1f207573c7b9c3e2d3ca1ffb0780a8fd592214: action to write R classes directly
NEW: add check that primary R.txt exists before
trying to load its symbols.
Rollback of commit 32c6c15c8b9bc4e203529f60bedbc5cd8a496a36.
*** Reason for rollback ***
Rollforward with check that primary R.txt exists
*** Original change description ***
Automated [] rollback of commit 1f1f207573c7b9c3e2d3ca1ffb0780a8fd592214.
*** Reason for rollback ***
Doesn't handle aapt that doesn't generate R.txt properly.
--
MOS_MIGRATED_REVID=125559472
Diffstat (limited to 'src/tools/android/java/com/google/devtools/build/android/DependencySymbolFileProvider.java')
-rw-r--r-- | src/tools/android/java/com/google/devtools/build/android/DependencySymbolFileProvider.java | 86 |
1 files changed, 86 insertions, 0 deletions
diff --git a/src/tools/android/java/com/google/devtools/build/android/DependencySymbolFileProvider.java b/src/tools/android/java/com/google/devtools/build/android/DependencySymbolFileProvider.java new file mode 100644 index 0000000000..2676001b11 --- /dev/null +++ b/src/tools/android/java/com/google/devtools/build/android/DependencySymbolFileProvider.java @@ -0,0 +1,86 @@ +// Copyright 2016 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; + +import com.google.common.base.Preconditions; + +import com.android.builder.dependency.SymbolFileProvider; + +import java.io.File; +import java.nio.file.FileSystem; +import java.nio.file.FileSystems; +import java.nio.file.Files; +import java.nio.file.Path; +import java.util.regex.Pattern; + +/** + * Represents the R.txt symbol file and AndroidManifest (provides Java package) of libraries. + */ +class DependencySymbolFileProvider implements SymbolFileProvider { + + private static final Pattern VALID_REGEX = Pattern.compile(".*:.*"); + + private final File symbolFile; + private final File manifest; + + public DependencySymbolFileProvider(File symbolFile, File manifest) { + this.symbolFile = symbolFile; + this.manifest = manifest; + } + + public static DependencySymbolFileProvider valueOf(String text) { + return valueOf(text, FileSystems.getDefault()); + } + + @Override + public File getSymbolFile() { + return symbolFile; + } + + @Override + public File getManifest() { + return manifest; + } + + private static DependencySymbolFileProvider valueOf(String text, FileSystem fileSystem) { + if (!VALID_REGEX.matcher(text).find()) { + throw new IllegalArgumentException(text + " is not in the format " + commandlineFormat("")); + } + String[] parts = text.split(":"); + return new DependencySymbolFileProvider(getFile(parts[0], fileSystem), + getFile(parts[1], fileSystem)); + } + + private static File getFile(String pathString, FileSystem fileSystem) { + Preconditions.checkArgument(!pathString.trim().isEmpty()); + return exists(fileSystem.getPath(pathString)).toFile(); + } + + private static Path exists(Path path) { + if (!Files.exists(path)) { + throw new IllegalArgumentException(path + " does not exist"); + } + return path; + } + + public static String commandlineFormat(String libNum) { + return String.format("lib%s/R.txt:lib%s/AndroidManifest.xml", libNum, libNum); + } + + @Override + public String toString() { + return String.format("%s, %s", symbolFile, manifest); + } + +} |