diff options
Diffstat (limited to 'src/proguard/optimize/info/FieldOptimizationInfo.java')
-rw-r--r-- | src/proguard/optimize/info/FieldOptimizationInfo.java | 56 |
1 files changed, 7 insertions, 49 deletions
diff --git a/src/proguard/optimize/info/FieldOptimizationInfo.java b/src/proguard/optimize/info/FieldOptimizationInfo.java index 6797a14..7a2d068 100644 --- a/src/proguard/optimize/info/FieldOptimizationInfo.java +++ b/src/proguard/optimize/info/FieldOptimizationInfo.java @@ -2,7 +2,7 @@ * ProGuard -- shrinking, optimization, obfuscation, and preverification * of Java bytecode. * - * Copyright (c) 2002-2011 Eric Lafortune (eric@graphics.cornell.edu) + * Copyright (c) 2002-2009 Eric Lafortune (eric@graphics.cornell.edu) * * This program is free software; you can redistribute it and/or modify it * under the terms of the GNU General Public License as published by the Free @@ -21,11 +21,8 @@ package proguard.optimize.info; import proguard.classfile.*; -import proguard.classfile.attribute.visitor.*; -import proguard.classfile.attribute.*; -import proguard.classfile.util.*; +import proguard.classfile.util.MethodLinker; import proguard.evaluation.value.*; -import proguard.evaluation.ConstantValueFactory; /** * This class stores some optimization information that can be attached to @@ -34,11 +31,8 @@ import proguard.evaluation.ConstantValueFactory; * @author Eric Lafortune */ public class FieldOptimizationInfo -extends SimplifiedVisitor -implements AttributeVisitor { - private static final SpecificValueFactory VALUE_FACTORY = new SpecificValueFactory(); - private static final ConstantValueFactory CONSTANT_VALUE_FACTORY = new ConstantValueFactory(VALUE_FACTORY); + private static final SpecificValueFactory VALUE_FACTORY = new SpecificValueFactory(); private boolean isWritten; private boolean isRead; @@ -49,33 +43,9 @@ implements AttributeVisitor public FieldOptimizationInfo(Clazz clazz, Field field) { - int accessFlags = field.getAccessFlags(); - isWritten = - isRead = (accessFlags & ClassConstants.INTERNAL_ACC_VOLATILE) != 0; - - if ((accessFlags & ClassConstants.INTERNAL_ACC_STATIC) != 0) - { - // See if we can initialize the static field with a constant value. - field.accept(clazz, new AllAttributeVisitor(this)); - } - - if ((accessFlags & ClassConstants.INTERNAL_ACC_FINAL) == 0 && - value == null) - { - // Otherwise initialize the non-final field with the default value. - value = initialValue(field.getDescriptor(clazz)); - } - } - - - public FieldOptimizationInfo(FieldOptimizationInfo FieldOptimizationInfo) - { - this.isWritten = FieldOptimizationInfo.isWritten; - this.isRead = FieldOptimizationInfo.isRead; - this.canBeMadePrivate = FieldOptimizationInfo.canBeMadePrivate; - this.referencedClass = FieldOptimizationInfo.referencedClass; - this.value = FieldOptimizationInfo.value; + isRead = (field.getAccessFlags() & ClassConstants.INTERNAL_ACC_VOLATILE) != 0; + value = initialValue(field.getDescriptor(clazz)); } @@ -143,18 +113,6 @@ implements AttributeVisitor } - // Implementations for AttributeVisitor. - - public void visitAnyAttribute(Clazz clazz, Attribute attribute) {} - - - public void visitConstantValueAttribute(Clazz clazz, Field field, ConstantValueAttribute constantValueAttribute) - { - // Retrieve the initial static field value. - value = CONSTANT_VALUE_FACTORY.constantValue(clazz, constantValueAttribute.u2constantValueIndex); - } - - // Small utility methods. private Value initialValue(String type) @@ -189,13 +147,13 @@ implements AttributeVisitor public static void setFieldOptimizationInfo(Clazz clazz, Field field) { - field.setVisitorInfo(new FieldOptimizationInfo(clazz, field)); + MethodLinker.lastMember(field).setVisitorInfo(new FieldOptimizationInfo(clazz, field)); } public static FieldOptimizationInfo getFieldOptimizationInfo(Field field) { - Object visitorInfo = field.getVisitorInfo(); + Object visitorInfo = MethodLinker.lastMember(field).getVisitorInfo(); return visitorInfo instanceof FieldOptimizationInfo ? (FieldOptimizationInfo)visitorInfo : |