summaryrefslogtreecommitdiff
path: root/src/proguard/ClassPathEntry.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/proguard/ClassPathEntry.java')
-rw-r--r--src/proguard/ClassPathEntry.java114
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) : "") +