1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/* 2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ProGuard -- shrinking, optimization, obfuscation, and preverification 3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * of Java bytecode. 4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 5b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu) 6b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 7b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is free software; you can redistribute it and/or modify it 8b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * under the terms of the GNU General Public License as published by the Free 9b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Software Foundation; either version 2 of the License, or (at your option) 10b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * any later version. 11b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 12b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This program is distributed in the hope that it will be useful, but WITHOUT 13b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 14b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for 15b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * more details. 16b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 17b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * You should have received a copy of the GNU General Public License along 18b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * with this program; if not, write to the Free Software Foundation, Inc., 19b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 21b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopackage proguard.ant; 22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport org.apache.tools.ant.*; 24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport proguard.*; 25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.io.IOException; 27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.util.*; 28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/** 30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * This Task allows to define a ProGuard configuration from Ant. 31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * 32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Eric Lafortune 33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopublic class ConfigurationTask extends Task 35b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{ 36b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato protected final Configuration configuration = new Configuration(); 37b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato /** 40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * Adds the contents of this configuration task to the given configuration. 41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @param configuration the configuration to be extended. 42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */ 43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void appendTo(Configuration configuration) 44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Append all of these configuration entries to the given configuration. 46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.programJars = extendClassPath(configuration.programJars, 47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.programJars); 48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.libraryJars = extendClassPath(configuration.libraryJars, 50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.libraryJars); 51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keep = extendClassSpecifications(configuration.keep, 53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.keep); 54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keepDirectories = extendList(configuration.keepDirectories, 56b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.keepDirectories); 57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.whyAreYouKeeping = extendClassSpecifications(configuration.whyAreYouKeeping, 59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.whyAreYouKeeping); 60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.optimizations = extendClassSpecifications(configuration.optimizations, 62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.optimizations); 63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.assumeNoSideEffects = extendClassSpecifications(configuration.assumeNoSideEffects, 65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.assumeNoSideEffects); 66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keepPackageNames = extendList(configuration.keepPackageNames, 68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.keepPackageNames); 69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keepAttributes = extendList(configuration.keepAttributes, 71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.keepAttributes); 72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.adaptClassStrings = extendList(configuration.adaptClassStrings, 74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.adaptClassStrings); 75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.adaptResourceFileNames = extendList(configuration.adaptResourceFileNames, 77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.adaptResourceFileNames); 78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 79b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.adaptResourceFileContents = extendList(configuration.adaptResourceFileContents, 80b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.adaptResourceFileContents); 81b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 82b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.note = extendList(configuration.note, 83b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.note); 84b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 85b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.warn = extendList(configuration.warn, 86b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato this.configuration.warn); 87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Ant task nested elements. 91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredInjar(ClassPathElement classPathElement) 93b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 94b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.programJars = extendClassPath(configuration.programJars, 95b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classPathElement, 96b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato false); 97b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 98b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 99b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 100b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredOutjar(ClassPathElement classPathElement) 101b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 102b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.programJars = extendClassPath(configuration.programJars, 103b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classPathElement, 104b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato true); 105b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 106b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 107b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 108b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredLibraryjar(ClassPathElement classPathElement) 109b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 110b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.libraryJars = extendClassPath(configuration.libraryJars, 111b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classPathElement, 112b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato false); 113b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 114b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 115b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 116b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeepdirectory(FilterElement filterElement) 117b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 118b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keepDirectories = extendFilter(configuration.keepDirectories, 119b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato filterElement); 120b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 121b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 122b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 123b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeepdirectories(FilterElement filterElement) 124b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 125b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keepDirectories = extendFilter(configuration.keepDirectories, 126b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato filterElement); 127b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 128b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 129b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 130b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeep(KeepSpecificationElement keepSpecificationElement) 131b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 132b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keep = extendKeepSpecifications(configuration.keep, 133b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato keepSpecificationElement, 134b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato true, 135b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato false); 136b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 137b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 138b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 139b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeepclassmembers(KeepSpecificationElement keepSpecificationElement) 140b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 141b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keep = extendKeepSpecifications(configuration.keep, 142b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato keepSpecificationElement, 143b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato false, 144b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato false); 145b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 146b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 147b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 148b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeepclasseswithmembers(KeepSpecificationElement keepSpecificationElement) 149b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 150b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keep = extendKeepSpecifications(configuration.keep, 151b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato keepSpecificationElement, 152b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato true, 153b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato true); 154b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 155b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 156b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 157b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeepnames(KeepSpecificationElement keepSpecificationElement) 158b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 159b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Set the shrinking flag, based on the name (backward compatibility). 160b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato keepSpecificationElement.setAllowshrinking(true); 161b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 162b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keep = extendKeepSpecifications(configuration.keep, 163b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato keepSpecificationElement, 164b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato true, 165b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato false); 166b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 167b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 168b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 169b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeepclassmembernames(KeepSpecificationElement keepSpecificationElement) 170b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 171b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Set the shrinking flag, based on the name (backward compatibility). 172b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato keepSpecificationElement.setAllowshrinking(true); 173b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 174b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keep = extendKeepSpecifications(configuration.keep, 175b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato keepSpecificationElement, 176b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato false, 177b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato false); 178b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 179b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 180b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 181b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeepclasseswithmembernames(KeepSpecificationElement keepSpecificationElement) 182b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 183b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Set the shrinking flag, based on the name (backward compatibility). 184b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato keepSpecificationElement.setAllowshrinking(true); 185b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 186b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keep = extendKeepSpecifications(configuration.keep, 187b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato keepSpecificationElement, 188b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato true, 189b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato true); 190b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 191b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 192b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 193b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredWhyareyoukeeping(ClassSpecificationElement classSpecificationElement) 194b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 195b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.whyAreYouKeeping = extendClassSpecifications(configuration.whyAreYouKeeping, 196b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classSpecificationElement); 197b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 198b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 199b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 200b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredAssumenosideeffects(ClassSpecificationElement classSpecificationElement) 201b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 202b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.assumeNoSideEffects = extendClassSpecifications(configuration.assumeNoSideEffects, 203b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classSpecificationElement); 204b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 205b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 206b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 207b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredOptimizations(FilterElement filterElement) 208b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 209b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addConfiguredOptimization(filterElement); 210b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 211b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 212b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 213b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredOptimization(FilterElement filterElement) 214b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 215b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.optimizations = extendFilter(configuration.optimizations, 216b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato filterElement); 217b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 218b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 219b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 220b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeeppackagename(FilterElement filterElement) 221b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 222b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keepPackageNames = extendFilter(configuration.keepPackageNames, 223b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato filterElement, 224b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato true); 225b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 226b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 227b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 228b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeeppackagenames(FilterElement filterElement) 229b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 230b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keepPackageNames = extendFilter(configuration.keepPackageNames, 231b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato filterElement, 232b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato true); 233b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 234b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 235b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 236b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeepattributes(FilterElement filterElement) 237b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 238b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato addConfiguredKeepattribute(filterElement); 239b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 240b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 241b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 242b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredKeepattribute(FilterElement filterElement) 243b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 244b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.keepAttributes = extendFilter(configuration.keepAttributes, 245b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato filterElement); 246b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 247b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 248b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 249b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredAdaptclassstrings(FilterElement filterElement) 250b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 251b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.adaptClassStrings = extendFilter(configuration.adaptClassStrings, 252b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato filterElement, true); 253b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 254b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 255b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 256b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredAdaptresourcefilenames(FilterElement filterElement) 257b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 258b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.adaptResourceFileNames = extendFilter(configuration.adaptResourceFileNames, 259b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato filterElement); 260b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 261b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 262b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 263b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredAdaptresourcefilecontents(FilterElement filterElement) 264b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 265b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.adaptResourceFileContents = extendFilter(configuration.adaptResourceFileContents, 266b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato filterElement); 267b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 268b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 269b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 270b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredDontnote(FilterElement filterElement) 271b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 272b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.note = extendFilter(configuration.note, filterElement, true); 273b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 274b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 275b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 276b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredDontwarn(FilterElement filterElement) 277b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 278b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configuration.warn = extendFilter(configuration.warn, filterElement, true); 279b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 280b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 281b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 282b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addConfiguredConfiguration(ConfigurationElement configurationElement) 283b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 284b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato configurationElement.appendTo(configuration); 285b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 286b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 287b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 288b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Implementations for Task. 289b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 290b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato public void addText(String text) throws BuildException 291b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 292b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato try 293b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 294b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato String arg = getProject().replaceProperties(text); 295b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 296b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato ConfigurationParser parser = new ConfigurationParser(new String[] { arg }, 297b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato getProject().getBaseDir()); 298b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 299b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato try 300b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 301b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato parser.parse(configuration); 302b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 303b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato catch (ParseException ex) 304b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 305b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato throw new BuildException(ex.getMessage()); 306b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 307b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato finally 308b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 309b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato parser.close(); 310b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 311b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 312b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato catch (IOException ex) 313b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 314b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato throw new BuildException(ex.getMessage()); 315b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 316b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 317b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 318b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 319b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato // Small utility methods. 320b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 321b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private ClassPath extendClassPath(ClassPath classPath, 322b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato ClassPathElement classPathElement, 323b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato boolean output) 324b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 325b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (classPath == null) 326b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 327b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classPath = new ClassPath(); 328b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 329b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 330b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classPathElement.appendClassPathEntriesTo(classPath, 331b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato output); 332b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 333b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return classPath; 334b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 335b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 336b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 337b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private ClassPath extendClassPath(ClassPath classPath, 338b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato ClassPath additionalClassPath) 339b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 340b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (additionalClassPath != null) 341b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 342b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (classPath == null) 343b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 344b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classPath = new ClassPath(); 345b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 346b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 347b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classPath.addAll(additionalClassPath); 348b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 349b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 350b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return classPath; 351b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 352b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 353b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 354b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private List extendKeepSpecifications(List keepSpecifications, 355b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato KeepSpecificationElement keepSpecificationElement, 356b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato boolean markClasses, 357b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato boolean markClassesConditionally) 358b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 359b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (keepSpecifications == null) 360b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 361b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato keepSpecifications = new ArrayList(); 362b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 363b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 364b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato keepSpecificationElement.appendTo(keepSpecifications, 365b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato markClasses, 366b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato markClassesConditionally); 367b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 368b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return keepSpecifications; 369b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 370b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 371b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 372b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private List extendClassSpecifications(List classSpecifications, 373b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato ClassSpecificationElement classSpecificationElement) 374b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 375b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (classSpecifications == null) 376b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 377b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classSpecifications = new ArrayList(); 378b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 379b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 380b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classSpecificationElement.appendTo(classSpecifications); 381b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 382b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return classSpecifications; 383b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 384b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 385b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 386b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private List extendClassSpecifications(List classSpecifications, 387b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato List additionalClassSpecifications) 388b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 389b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (additionalClassSpecifications != null) 390b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 391b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (classSpecifications == null) 392b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 393b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classSpecifications = new ArrayList(); 394b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 395b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 396b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato classSpecifications.addAll(additionalClassSpecifications); 397b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 398b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 399b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return classSpecifications; 400b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 401b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 402b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 403b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private List extendFilter(List filter, 404b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato FilterElement filterElement) 405b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 406b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return extendFilter(filter, filterElement, false); 407b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 408b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 409b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 410b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private List extendFilter(List filter, 411b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato FilterElement filterElement, 412b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato boolean internal) 413b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 414b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (filter == null) 415b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 416b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato filter = new ArrayList(); 417b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 418b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 419b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato filterElement.appendTo(filter, internal); 420b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 421b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return filter; 422b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 423b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 424b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 425b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato private List extendList(List list, 426b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato List additionalList) 427b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 428b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (additionalList != null) 429b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 430b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato if (list == null) 431b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato { 432b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato list = new ArrayList(); 433b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 434b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 435b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato list.addAll(additionalList); 436b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 437b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato 438b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato return list; 439b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato } 440b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato} 441