aboutsummaryrefslogtreecommitdiffstats
path: root/src/proguard/optimize/info/FieldOptimizationInfo.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/proguard/optimize/info/FieldOptimizationInfo.java')
-rw-r--r--src/proguard/optimize/info/FieldOptimizationInfo.java56
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 :