| // 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; | |
| import com.android.tools.r8.origin.Origin; | |
| import com.android.tools.r8.origin.PathOrigin; | |
| import com.android.tools.r8.utils.FileUtils; | |
| import java.io.IOException; | |
| import java.nio.charset.Charset; | |
| import java.nio.charset.StandardCharsets; | |
| import java.nio.file.Path; | |
| public interface StringResource extends Resource { | |
| /** | |
| * Create a string resource from a string. | |
| * | |
| * <p>The origin of the resource must be supplied upon construction. If no reasonable origin | |
| * exits, use {@link Origin#unknown()}. | |
| * | |
| * @param content String content for the string resource. | |
| * @param origin Origin of the string resource. | |
| */ | |
| static StringResource fromString(String content, Origin origin) { | |
| return new StringContentResource(origin, content); | |
| } | |
| /** | |
| * Create a string resource for the contents of a given UTF-8 encoded text file. | |
| * | |
| * <p>The origin of the resource is the path of the file. | |
| * | |
| * @param file Path of file with UTF-8 encoded text. | |
| */ | |
| static FileResource fromFile(Path file) { | |
| return fromFile(file, StandardCharsets.UTF_8); | |
| } | |
| /** | |
| * Create a string resource for the contents of a given file. | |
| * | |
| * <p>The origin of the resource is the path of the file. | |
| * | |
| * @param file Path of file. | |
| * @param charset Charset coding of file. | |
| */ | |
| static FileResource fromFile(Path file, Charset charset) { | |
| return new FileResource(file, charset); | |
| } | |
| /** | |
| * Get the string content of the string resource. | |
| * | |
| * @return The string content of the resource. | |
| * @throws ResourceException Exception thrown if the resource fails to produce its content. | |
| */ | |
| String getString() throws ResourceException; | |
| class StringContentResource implements StringResource { | |
| private final Origin origin; | |
| private final String content; | |
| private StringContentResource(Origin origin, String content) { | |
| assert origin != null; | |
| assert content != null; | |
| this.origin = origin; | |
| this.content = content; | |
| } | |
| @Override | |
| public Origin getOrigin() { | |
| return origin; | |
| } | |
| @Override | |
| public String getString() { | |
| return content; | |
| } | |
| } | |
| class FileResource implements StringResource { | |
| private final Path file; | |
| private final Charset charset; | |
| private final Origin origin; | |
| private FileResource(Path file, Charset charset) { | |
| assert file != null; | |
| assert charset != null; | |
| this.file = file; | |
| this.charset = charset; | |
| origin = new PathOrigin(file); | |
| } | |
| @Override | |
| public Origin getOrigin() { | |
| return origin; | |
| } | |
| @Override | |
| public String getString() throws ResourceException { | |
| try { | |
| return FileUtils.readTextFile(file, charset); | |
| } catch (IOException e) { | |
| throw new ResourceException(origin, e); | |
| } | |
| } | |
| } | |
| } |