ClassOptimizationInfo.java revision 2270795fbe0b277bfd49f40950ecaa78583175cc
1/*
2 * ProGuard -- shrinking, optimization, obfuscation, and preverification
3 *             of Java bytecode.
4 *
5 * Copyright (c) 2002-2014 Eric Lafortune (eric@graphics.cornell.edu)
6 *
7 * This program is free software; you can redistribute it and/or modify it
8 * under the terms of the GNU General Public License as published by the Free
9 * Software Foundation; either version 2 of the License, or (at your option)
10 * any later version.
11 *
12 * This program is distributed in the hope that it will be useful, but WITHOUT
13 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
14 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
15 * more details.
16 *
17 * You should have received a copy of the GNU General Public License along
18 * with this program; if not, write to the Free Software Foundation, Inc.,
19 * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
20 */
21package proguard.optimize.info;
22
23import proguard.classfile.Clazz;
24
25/**
26 * This class stores some optimization information that can be attached to
27 * a class.
28 *
29 * @author Eric Lafortune
30 */
31public class ClassOptimizationInfo
32{
33    private boolean isInstantiated                = false;
34    private boolean isInstanceofed                = false;
35    private boolean isDotClassed                  = false;
36    private boolean isCaught                      = false;
37    private boolean isSimpleEnum                  = false;
38    private boolean containsStaticInitializer     = false;
39    private boolean containsPackageVisibleMembers = false;
40    private boolean invokesPackageVisibleMembers  = false;
41    private Clazz   targetClass;
42
43
44    public void setInstantiated()
45    {
46        isInstantiated = true;
47    }
48
49
50    public boolean isInstantiated()
51    {
52        return isInstantiated;
53    }
54
55
56    public void setInstanceofed()
57    {
58        isInstanceofed = true;
59    }
60
61
62    public boolean isInstanceofed()
63    {
64        return isInstanceofed;
65    }
66
67
68    public void setDotClassed()
69    {
70        isDotClassed = true;
71    }
72
73
74    public boolean isDotClassed()
75    {
76        return isDotClassed;
77    }
78
79
80    public void setCaught()
81    {
82        isCaught = true;
83    }
84
85
86    public boolean isCaught()
87    {
88        return isCaught;
89    }
90
91
92    public void setSimpleEnum(boolean simple)
93    {
94        isSimpleEnum = simple;
95    }
96
97
98    public boolean isSimpleEnum()
99    {
100        return isSimpleEnum;
101    }
102
103
104    public void setContainsStaticInitializer()
105    {
106        containsStaticInitializer = true;
107    }
108
109
110    public boolean containsStaticInitializer()
111    {
112        return containsStaticInitializer;
113    }
114
115
116    public void setContainsPackageVisibleMembers()
117    {
118        containsPackageVisibleMembers = true;
119    }
120
121
122    public boolean containsPackageVisibleMembers()
123    {
124        return containsPackageVisibleMembers;
125    }
126
127
128    public void setInvokesPackageVisibleMembers()
129    {
130        invokesPackageVisibleMembers = true;
131    }
132
133
134    public boolean invokesPackageVisibleMembers()
135    {
136        return invokesPackageVisibleMembers;
137    }
138
139
140    public void setTargetClass(Clazz targetClass)
141    {
142        this.targetClass = targetClass;
143    }
144
145
146    public Clazz getTargetClass()
147    {
148        return targetClass;
149    }
150
151
152    public void merge(ClassOptimizationInfo other)
153    {
154        this.isInstantiated                |= other.isInstantiated;
155        this.isInstanceofed                |= other.isInstanceofed;
156        this.isDotClassed                  |= other.isDotClassed;
157        this.isCaught                      |= other.isCaught;
158        this.containsStaticInitializer     |= other.containsStaticInitializer;
159        this.containsPackageVisibleMembers |= other.containsPackageVisibleMembers;
160        this.invokesPackageVisibleMembers  |= other.invokesPackageVisibleMembers;
161    }
162
163
164    public static void setClassOptimizationInfo(Clazz clazz)
165    {
166        clazz.setVisitorInfo(new ClassOptimizationInfo());
167    }
168
169
170    public static ClassOptimizationInfo getClassOptimizationInfo(Clazz clazz)
171    {
172        Object visitorInfo = clazz.getVisitorInfo();
173        return visitorInfo instanceof ClassOptimizationInfo ?
174            (ClassOptimizationInfo)visitorInfo :
175            null;
176    }
177}
178