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