diff options
Diffstat (limited to 'src/proguard/ClassPathEntry.java')
-rw-r--r-- | src/proguard/ClassPathEntry.java | 114 |
1 files changed, 108 insertions, 6 deletions
diff --git a/src/proguard/ClassPathEntry.java b/src/proguard/ClassPathEntry.java index 7051955..faceb1f 100644 --- a/src/proguard/ClassPathEntry.java +++ b/src/proguard/ClassPathEntry.java @@ -2,7 +2,7 @@ * ProGuard -- shrinking, optimization, obfuscation, and preverification * of Java bytecode. * - * Copyright (c) 2002-2013 Eric Lafortune (eric@graphics.cornell.edu) + * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free @@ -27,10 +27,11 @@ import java.util.List; /** - * This class represents an entry from a class path: a jar, a war, a zip, an - * ear, or a directory, with a name and a flag to indicates whether the entry is - * an input entry or an output entry. Optional filters can be specified for the - * names of the contained resource/classes, jars, wars, ears, and zips. + * This class represents an entry from a class path: an apk, a jar, an aar, a + * war, a zip, an ear, or a directory, with a name and a flag to indicates + * whether the entry is an input entry or an output entry. Optional filters can + * be specified for the names of the contained resource/classes, apks, jars, + * aars, wars, ears, and zips. * * @author Eric Lafortune */ @@ -39,11 +40,15 @@ public class ClassPathEntry private File file; private boolean output; private List filter; + private List apkFilter; private List jarFilter; + private List aarFilter; private List warFilter; private List earFilter; private List zipFilter; + private String cachedName; + /** * Creates a new ClassPathEntry with the given file and output flag. @@ -60,6 +65,20 @@ public class ClassPathEntry */ public String getName() { + if (cachedName == null) + { + cachedName = getUncachedName(); + } + + return cachedName; + } + + + /** + * Returns the uncached path name of the entry. + */ + private String getUncachedName() + { try { return file.getCanonicalPath(); @@ -85,7 +104,8 @@ public class ClassPathEntry */ public void setFile(File file) { - this.file = file; + this.file = file; + this.cachedName = null; } @@ -108,6 +128,25 @@ public class ClassPathEntry /** + * Returns whether this data entry is a dex file. + */ + public boolean isDex() + { + return hasExtension(".dex"); + } + + + /** + * Returns whether this data entry is an apk file. + */ + public boolean isApk() + { + return hasExtension(".apk") || + hasExtension(".ap_"); + } + + + /** * Returns whether this data entry is a jar file. */ public boolean isJar() @@ -117,6 +156,15 @@ public class ClassPathEntry /** + * Returns whether this data entry is an aar file. + */ + public boolean isAar() + { + return hasExtension(".aar"); + } + + + /** * Returns whether this data entry is a war file. */ public boolean isWar() @@ -167,6 +215,21 @@ public class ClassPathEntry /** + * Returns whether this data entry has any kind of filter. + */ + public boolean isFiltered() + { + return filter != null || + apkFilter != null || + jarFilter != null || + aarFilter != null || + warFilter != null || + earFilter != null || + zipFilter != null; + } + + + /** * Returns the name filter that is applied to bottom-level files in this entry. */ public List getFilter() @@ -184,6 +247,23 @@ public class ClassPathEntry /** + * Returns the name filter that is applied to apk files in this entry, if any. + */ + public List getApkFilter() + { + return apkFilter; + } + + /** + * Sets the name filter that is applied to apk files in this entry, if any. + */ + public void setApkFilter(List filter) + { + this.apkFilter = filter == null || filter.size() == 0 ? null : filter; + } + + + /** * Returns the name filter that is applied to jar files in this entry, if any. */ public List getJarFilter() @@ -201,6 +281,23 @@ public class ClassPathEntry /** + * Returns the name filter that is applied to aar files in this entry, if any. + */ + public List getAarFilter() + { + return aarFilter; + } + + /** + * Sets the name filter that is applied to aar files in this entry, if any. + */ + public void setAarFilter(List filter) + { + this.aarFilter = filter == null || filter.size() == 0 ? null : filter; + } + + + /** * Returns the name filter that is applied to war files in this entry, if any. */ public List getWarFilter() @@ -259,12 +356,17 @@ public class ClassPathEntry if (filter != null || jarFilter != null || + aarFilter != null || warFilter != null || earFilter != null || zipFilter != null) { string += ConfigurationConstants.OPEN_ARGUMENTS_KEYWORD + + (aarFilter != null ? ListUtil.commaSeparatedString(aarFilter, true) : "") + + ConfigurationConstants.SEPARATOR_KEYWORD + + (apkFilter != null ? ListUtil.commaSeparatedString(apkFilter, true) : "") + + ConfigurationConstants.SEPARATOR_KEYWORD + (zipFilter != null ? ListUtil.commaSeparatedString(zipFilter, true) : "") + ConfigurationConstants.SEPARATOR_KEYWORD + (earFilter != null ? ListUtil.commaSeparatedString(earFilter, true) : "") + |