1b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/*
2b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * ProGuard -- shrinking, optimization, obfuscation, and preverification
3b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *             of Java bytecode.
4b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
5b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang * Copyright (c) 2002-2013 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;
22b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
23b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.io.File;
24b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratoimport java.util.List;
25b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
26b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato/**
27b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * The ProGuard configuration.
28b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
29b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @see ProGuard
30b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato *
31b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato * @author Eric Lafortune
32b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato */
33b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onoratopublic class Configuration
34b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato{
35b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    public static final File STD_OUT = new File("");
36b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang
37b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang
38b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
39b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Input and output options.
40b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
41b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
42b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
43b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of input and output entries (jars, wars, ears, zips, and directories).
44b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
45b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public ClassPath programJars;
46b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
47b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
48b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of library entries (jars, wars, ears, zips, and directories).
49b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
50b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public ClassPath libraryJars;
51b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
52b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
53b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether to skip non-public library classes while reading
54b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * library jars.
55b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
56b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    public boolean   skipNonPublicLibraryClasses      = false;
57b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
58b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
59b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether to skip non-public library class members while reading
60b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * library classes.
61b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
62b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   skipNonPublicLibraryClassMembers = true;
63b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
64b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
65b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of <code>String</code>s specifying directories to be kept in
66b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * the output directories or the output jars. A <code>null</code> list
67b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * means no directories. An empty list means all directories. The directory
68b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * names may contain "**", "*", or "?" wildcards, and they may be preceded
69b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * by the "!" negator.
70b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
71b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      keepDirectories;
72b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
73b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
74b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies the version number of the output classes, or 0 if the version
75b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * number can be left unchanged.
76b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
77b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public int       targetClassVersion;
78b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
79b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
80b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies the last modification time of this configuration. This time
81b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * is necessary to check whether the input has to be processed. Setting it
82b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * to Long.MAX_VALUE forces processing, even if the modification times
83b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * of the output appear more recent than the modification times of the
84b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * input.
85b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
86b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public long      lastModified                     = 0L;
87b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
88b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
89b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Keep options.
90b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
91b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
92b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
93b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of {@link KeepClassSpecification} instances, whose class names and
94b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * class member names are to be kept from shrinking, optimization, and/or
95b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * obfuscation.
96b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
97b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      keep;
98b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
99b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
100b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional output file for listing the kept seeds.
101b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An empty file name means the standard output.
102b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
103b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public File      printSeeds;
104b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
105b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
106b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Shrinking options.
107b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
108b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
109b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
110b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether the code should be shrunk.
111b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
112b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   shrink                           = true;
113b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
114b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
115b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional output file for listing the unused classes and class
116b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * members. An empty file name means the standard output.
117b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
118b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public File      printUsage;
119b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
120b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
121b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of {@link ClassSpecification} instances, for which an explanation
122b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * is to be printed, why they are kept in the shrinking step.
123b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
124b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      whyAreYouKeeping;
125b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
126b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
127b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Optimization options.
128b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
129b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
130b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
131b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether the code should be optimized.
132b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
133b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   optimize                         = true;
134b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
135b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
136b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of <code>String</code>s specifying the optimizations to be
137b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * performed. A <code>null</code> list means all optimizations. The
138b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * optimization names may contain "*" or "?" wildcards, and they may
139b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * be preceded by the "!" negator.
140b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
141b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      optimizations;
142b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
143b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
144b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies the number of optimization passes.
145b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
146b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public int       optimizationPasses               = 1;
147b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
148b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
149b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of {@link ClassSpecification} instances, whose methods are
150b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * assumed to have no side effects.
151b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
152b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      assumeNoSideEffects;
153b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
154b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
155b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether the access of class members can be modified.
156b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
157b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   allowAccessModification          = false;
158b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
159b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
160b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether interfaces may be merged aggressively.
161b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
162b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   mergeInterfacesAggressively      = false;
163b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
164b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
165b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Obfuscation options.
166b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
167b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
168b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
169b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether the code should be obfuscated.
170b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
171b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   obfuscate                        = true;
172b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
173b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
174b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional output file for listing the obfuscation mapping.
175b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An empty file name means the standard output.
176b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
177b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public File      printMapping;
178b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
179b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
180b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional input file for reading an obfuscation mapping.
181b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
182b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public File      applyMapping;
183b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
184b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
185b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional name of a file containing obfuscated class member names.
186b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
187b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public File      obfuscationDictionary;
188b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
189b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
190b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional name of a file containing obfuscated class names.
191b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
192b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public File      classObfuscationDictionary;
193b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
194b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
195b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional name of a file containing obfuscated package names.
196b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
197b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public File      packageObfuscationDictionary;
198b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
199b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
200b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether to apply aggressive name overloading on class members.
201b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
202b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   overloadAggressively             = false;
203b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
204b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
205b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether to generate globally unique class member names.
206b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
207b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   useUniqueClassMemberNames        = false;
208b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
209b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
210b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether obfuscated packages and classes can get mixed-case names.
211b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
212b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   useMixedCaseClassNames           = true;
213b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
214b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
215b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of <code>String</code>s specifying package names to be kept.
216b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A <code>null</code> list means no names. An empty list means all
217b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * names. The package names may contain "**", "*", or "?" wildcards, and
218b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * they may be preceded by the "!" negator.
219b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
220b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      keepPackageNames;
221b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
222b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
223b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional base package if the obfuscated package hierarchy is to be
224b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * flattened, <code>null</code> otherwise.
225b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
226b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public String    flattenPackageHierarchy;
227b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
228b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
229b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional base package if the obfuscated classes are to be repackaged
230b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * into a single package, <code>null</code> otherwise.
231b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
232b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public String    repackageClasses;
233b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
234b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
235b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of <code>String</code>s specifying optional attributes to be kept.
236b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A <code>null</code> list means no attributes. An empty list means all
237b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * attributes. The attribute names may contain "*" or "?" wildcards, and
238b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * they may be preceded by the "!" negator.
239b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
240b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      keepAttributes;
241b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
242b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
243b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * Specifies whether method parameter names and types should be kept for
244b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * methods that are not obfuscated. This is achieved by keeping partial
245b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * "LocalVariableTable" and "LocalVariableTypeTable" attributes.
246b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     */
247b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    public boolean   keepParameterNames               = false;
248b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang
249b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang    /**
250b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional replacement for all SourceFile attributes.
251b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
252b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public String    newSourceFileAttribute;
253b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
254b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
255b9cc48a43ed984587c939d02fba5316bf5c0df6eYing Wang     * A list of <code>String</code>s specifying a filter for classes whose
256b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * string constants are to be adapted, based on corresponding obfuscated
257b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * class names.
258b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
259b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      adaptClassStrings;
260b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
261b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
262b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of <code>String</code>s specifying a filter for files whose
263b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * names are to be adapted, based on corresponding obfuscated class names.
264b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
265b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      adaptResourceFileNames;
266b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
267b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
268b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of <code>String</code>s specifying a filter for files whose
269b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * contents are to be adapted, based on obfuscated class names.
270b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
271b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      adaptResourceFileContents;
272b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
273b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
274b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // Preverification options.
275b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
276b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
277b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
278b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether the code should be preverified.
279b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
280b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   preverify                        = true;
281b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
282b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
283b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether the code should be preverified for Java Micro Edition
284b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * (creating StackMap attributes) instead of for Java Standard Edition
285b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * (creating StackMapTable attributes).
286b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
287b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   microEdition                     = false;
288b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
289b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
290b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    // General options.
291b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    ///////////////////////////////////////////////////////////////////////////
292b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
293b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
294b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether to print verbose messages.
295b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
296b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   verbose                          = false;
297b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
298b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
299b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of <code>String</code>s specifying a filter for the classes for
300b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * which not to print notes, if there are noteworthy potential problems.
301b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A <code>null</code> list means all classes. The class names may contain
302b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * "**", "*", or "?" wildcards, and they may be preceded by the "!" negator.
303b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
304b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      note                             = null;
305b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
306b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
307b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A list of <code>String</code>s specifying a filter for the classes for
308b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * which not to print warnings, if there are any problems.
309b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * A <code>null</code> list means all classes. The class names may contain
310b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * "**", "*", or "?" wildcards, and they may be preceded by the "!" negator.
311b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
312b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public List      warn                             = null;
313b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
314b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
315b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * Specifies whether to ignore any warnings.
316b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
317b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public boolean   ignoreWarnings                   = false;
318b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
319b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
320b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional output file for printing out the configuration that ProGuard
321b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * is using (with included files and replaced variables).
322b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An empty file name means the standard output.
323b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
324b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public File      printConfiguration;
325b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato
326b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    /**
327b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * An optional output file for printing out the processed code in a more
328b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     * or less readable form. An empty file name means the standard output.
329b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato     */
330b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato    public File      dump;
331b72c5c2e5482cf10117b2b25f642f7616b2326c3Joe Onorato}
332