aboutsummaryrefslogtreecommitdiffstats
path: root/lint/cli/src/com/android/tools/lint/Reporter.java
diff options
context:
space:
mode:
Diffstat (limited to 'lint/cli/src/com/android/tools/lint/Reporter.java')
-rw-r--r--lint/cli/src/com/android/tools/lint/Reporter.java259
1 files changed, 0 insertions, 259 deletions
diff --git a/lint/cli/src/com/android/tools/lint/Reporter.java b/lint/cli/src/com/android/tools/lint/Reporter.java
deleted file mode 100644
index fc3aaae..0000000
--- a/lint/cli/src/com/android/tools/lint/Reporter.java
+++ /dev/null
@@ -1,259 +0,0 @@
-/*
- * Copyright (C) 2011 The Android Open Source Project
- *
- * 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.android.tools.lint;
-
-import static com.android.SdkConstants.DOT_9PNG;
-import static com.android.SdkConstants.DOT_PNG;
-import static com.android.tools.lint.detector.api.LintUtils.endsWith;
-
-import com.google.common.annotations.Beta;
-import com.google.common.io.ByteStreams;
-import com.google.common.io.Closeables;
-import com.google.common.io.Files;
-
-import java.io.File;
-import java.io.FileOutputStream;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.UnsupportedEncodingException;
-import java.net.URL;
-import java.net.URLEncoder;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
-/** A reporter is an output generator for lint warnings
- * <p>
- * <b>NOTE: This is not a public or final API; if you rely on this be prepared
- * to adjust your code for the next tools release.</b>
- */
-@Beta
-public abstract class Reporter {
- protected final Main mClient;
- protected final File mOutput;
- protected String mTitle = "Lint Report";
- protected boolean mSimpleFormat;
- protected boolean mBundleResources;
- protected Map<String, String> mUrlMap;
- protected File mResources;
- protected Map<File, String> mResourceUrl = new HashMap<File, String>();
- protected Map<String, File> mNameToFile = new HashMap<String, File>();
-
- /**
- * Write the given warnings into the report
- *
- * @param errorCount the number of errors
- * @param warningCount the number of warnings
- * @param issues the issues to be reported
- * @throws IOException if an error occurs
- */
- public abstract void write(int errorCount, int warningCount, List<Warning> issues)
- throws IOException;
-
- protected Reporter(Main client, File output) {
- mClient = client;
- mOutput = output;
- }
-
- /**
- * Sets the report title
- *
- * @param title the title of the report
- */
- public void setTitle(String title) {
- mTitle = title;
- }
-
- /** @return the title of the report */
- public String getTitle() {
- return mTitle;
- }
-
- /**
- * Sets whether the report should bundle up resources along with the HTML report.
- * This implies a non-simple format (see {@link #setSimpleFormat(boolean)}).
- *
- * @param bundleResources if true, copy images into a directory relative to
- * the report
- */
- public void setBundleResources(boolean bundleResources) {
- mBundleResources = bundleResources;
- mSimpleFormat = false;
- }
-
- /**
- * Sets whether the report should use simple formatting (meaning no JavaScript,
- * embedded images, etc).
- *
- * @param simpleFormat whether the formatting should be simple
- */
- public void setSimpleFormat(boolean simpleFormat) {
- mSimpleFormat = simpleFormat;
- }
-
- /**
- * Returns whether the report should use simple formatting (meaning no JavaScript,
- * embedded images, etc).
- *
- * @return whether the report should use simple formatting
- */
- public boolean isSimpleFormat() {
- return mSimpleFormat;
- }
-
-
- String getUrl(File file) {
- if (mBundleResources && !mSimpleFormat) {
- String url = getRelativeResourceUrl(file);
- if (url != null) {
- return url;
- }
- }
-
- if (mUrlMap != null) {
- String path = file.getAbsolutePath();
- try {
- // Perform the comparison using URLs such that we properly escape spaces etc.
- String pathUrl = URLEncoder.encode(path, "UTF-8"); //$NON-NLS-1$
- for (Map.Entry<String, String> entry : mUrlMap.entrySet()) {
- String prefix = entry.getKey();
- String prefixUrl = URLEncoder.encode(prefix, "UTF-8"); //$NON-NLS-1$
- if (pathUrl.startsWith(prefixUrl)) {
- String relative = pathUrl.substring(prefixUrl.length());
- return entry.getValue()
- + relative.replace("%2F", "/"); //$NON-NLS-1$ //$NON-NLS-2$
- }
- }
- } catch (UnsupportedEncodingException e) {
- // This shouldn't happen for UTF-8
- System.err.println("Invalid URL map specification - " + e.getLocalizedMessage());
- }
- }
-
- return null;
- }
-
- /** Encodes the given String as a safe URL substring, escaping spaces etc */
- static String encodeUrl(String url) {
- try {
- return URLEncoder.encode(url, "UTF-8"); //$NON-NLS-1$
- } catch (UnsupportedEncodingException e) {
- // This shouldn't happen for UTF-8
- System.err.println("Invalid string " + e.getLocalizedMessage());
- return url;
- }
- }
-
- /** Set mapping of path prefixes to corresponding URLs in the HTML report */
- void setUrlMap(Map<String, String> urlMap) {
- mUrlMap = urlMap;
- }
-
- /** Gets a pointer to the local resource directory, if any */
- File getResourceDir() {
- if (mResources == null && mBundleResources) {
- mResources = computeResourceDir();
- if (mResources == null) {
- mBundleResources = false;
- }
- }
-
- return mResources;
- }
-
- /** Finds/creates the local resource directory, if possible */
- File computeResourceDir() {
- String fileName = mOutput.getName();
- int dot = fileName.indexOf('.');
- if (dot != -1) {
- fileName = fileName.substring(0, dot);
- }
-
- File resources = new File(mOutput.getParentFile(), fileName + "_files"); //$NON-NLS-1$
- if (!resources.exists() && !resources.mkdir()) {
- resources = null;
- }
-
- return resources;
- }
-
- /** Returns a URL to a local copy of the given file, or null */
- protected String getRelativeResourceUrl(File file) {
- String resource = mResourceUrl.get(file);
- if (resource != null) {
- return resource;
- }
-
- String name = file.getName();
- if (!endsWith(name, DOT_PNG) || endsWith(name, DOT_9PNG)) {
- return null;
- }
-
- // Attempt to make local copy
- File resourceDir = getResourceDir();
- if (resourceDir != null) {
- String base = file.getName();
-
- File path = mNameToFile.get(base);
- if (path != null && !path.equals(file)) {
- // That filename already exists and is associated with a different path:
- // make a new unique version
- for (int i = 0; i < 100; i++) {
- base = '_' + base;
- path = mNameToFile.get(base);
- if (path == null || path.equals(file)) {
- break;
- }
- }
- }
-
- File target = new File(resourceDir, base);
- try {
- Files.copy(file, target);
- } catch (IOException e) {
- return null;
- }
- return resourceDir.getName() + '/' + encodeUrl(base);
- }
- return null;
- }
-
- /** Returns a URL to a local copy of the given resource, or null. There is
- * no filename conflict resolution. */
- protected String addLocalResources(URL url) {
- // Attempt to make local copy
- File resourceDir = computeResourceDir();
- if (resourceDir != null) {
- String base = url.getFile();
- base = base.substring(base.lastIndexOf('/') + 1);
- mNameToFile.put(base, new File(url.toExternalForm()));
-
- File target = new File(resourceDir, base);
- try {
- FileOutputStream output = new FileOutputStream(target);
- InputStream input = url.openStream();
- ByteStreams.copy(input, output);
- Closeables.closeQuietly(output);
- Closeables.closeQuietly(input);
- } catch (IOException e) {
- return null;
- }
- return resourceDir.getName() + '/' + encodeUrl(base);
- }
- return null;
- }
-}