|
|
@ -20,8 +20,20 @@ |
|
|
|
package jode.obfuscator; |
|
|
|
package jode.obfuscator; |
|
|
|
import java.lang.reflect.Modifier; |
|
|
|
import java.lang.reflect.Modifier; |
|
|
|
import jode.bytecode.*; |
|
|
|
import jode.bytecode.*; |
|
|
|
import java.io.*; |
|
|
|
///#ifdef JDK12
|
|
|
|
import java.util.*; |
|
|
|
///import java.util.Collection;
|
|
|
|
|
|
|
|
///import java.util.Collections;
|
|
|
|
|
|
|
|
///import java.util.Iterator;
|
|
|
|
|
|
|
|
///import java.util.HashSet;
|
|
|
|
|
|
|
|
///import java.util.Map;
|
|
|
|
|
|
|
|
///#else
|
|
|
|
|
|
|
|
import jode.util.Collection; |
|
|
|
|
|
|
|
import jode.util.Collections; |
|
|
|
|
|
|
|
import jode.util.Iterator; |
|
|
|
|
|
|
|
import jode.util.HashSet; |
|
|
|
|
|
|
|
import jode.util.Map; |
|
|
|
|
|
|
|
///#endif
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public class FieldIdentifier extends Identifier{ |
|
|
|
public class FieldIdentifier extends Identifier{ |
|
|
|
FieldInfo info; |
|
|
|
FieldInfo info; |
|
|
@ -40,7 +52,7 @@ public class FieldIdentifier extends Identifier{ |
|
|
|
* The FieldChangeListener that should be notified if a |
|
|
|
* The FieldChangeListener that should be notified if a |
|
|
|
* write to this field is found. |
|
|
|
* write to this field is found. |
|
|
|
*/ |
|
|
|
*/ |
|
|
|
private Vector fieldListeners = new Vector(); |
|
|
|
private Collection fieldListeners = new HashSet(); |
|
|
|
|
|
|
|
|
|
|
|
public FieldIdentifier(ClassIdentifier clazz, FieldInfo info) { |
|
|
|
public FieldIdentifier(ClassIdentifier clazz, FieldInfo info) { |
|
|
|
super(info.getName()); |
|
|
|
super(info.getName()); |
|
|
@ -60,7 +72,7 @@ public class FieldIdentifier extends Identifier{ |
|
|
|
|
|
|
|
|
|
|
|
public void setSingleReachable() { |
|
|
|
public void setSingleReachable() { |
|
|
|
super.setSingleReachable(); |
|
|
|
super.setSingleReachable(); |
|
|
|
clazz.bundle.analyzeIdentifier(this); |
|
|
|
Main.getClassBundle().analyzeIdentifier(this); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void analyze() { |
|
|
|
public void analyze() { |
|
|
@ -68,8 +80,8 @@ public class FieldIdentifier extends Identifier{ |
|
|
|
int index = type.indexOf('L'); |
|
|
|
int index = type.indexOf('L'); |
|
|
|
if (index != -1) { |
|
|
|
if (index != -1) { |
|
|
|
int end = type.indexOf(';', index); |
|
|
|
int end = type.indexOf(';', index); |
|
|
|
clazz.bundle.reachableIdentifier(type.substring(index+1, end), |
|
|
|
Main.getClassBundle().reachableIdentifier |
|
|
|
false); |
|
|
|
(type.substring(index+1, end), false); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -92,6 +104,10 @@ public class FieldIdentifier extends Identifier{ |
|
|
|
public String getType() { |
|
|
|
public String getType() { |
|
|
|
return type; |
|
|
|
return type; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
public Iterator getChilds() { |
|
|
|
|
|
|
|
return Collections.EMPTY_LIST.iterator(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public boolean isNotConstant() { |
|
|
|
public boolean isNotConstant() { |
|
|
|
return notConstant; |
|
|
|
return notConstant; |
|
|
@ -103,7 +119,7 @@ public class FieldIdentifier extends Identifier{ |
|
|
|
|
|
|
|
|
|
|
|
public void addFieldListener(Identifier ident) { |
|
|
|
public void addFieldListener(Identifier ident) { |
|
|
|
if (!fieldListeners.contains(ident)) |
|
|
|
if (!fieldListeners.contains(ident)) |
|
|
|
fieldListeners.addElement(ident); |
|
|
|
fieldListeners.add(ident); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void setNotConstant() { |
|
|
|
public void setNotConstant() { |
|
|
@ -111,9 +127,8 @@ public class FieldIdentifier extends Identifier{ |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
notConstant = true; |
|
|
|
notConstant = true; |
|
|
|
Enumeration enum = fieldListeners.elements(); |
|
|
|
for (Iterator i = fieldListeners.iterator(); i.hasNext(); ) |
|
|
|
while (enum.hasMoreElements()) |
|
|
|
Main.getClassBundle().analyzeIdentifier((Identifier) i.next()); |
|
|
|
clazz.bundle.analyzeIdentifier((Identifier) enum.nextElement()); |
|
|
|
|
|
|
|
fieldListeners = null; |
|
|
|
fieldListeners = null; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -121,7 +136,7 @@ public class FieldIdentifier extends Identifier{ |
|
|
|
return "FieldIdentifier "+getFullName()+"."+getType(); |
|
|
|
return "FieldIdentifier "+getFullName()+"."+getType(); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void readTable(Hashtable table) { |
|
|
|
public void readTable(Map table) { |
|
|
|
String alias = (String) table.get(getFullName() + "." + getType()); |
|
|
|
String alias = (String) table.get(getFullName() + "." + getType()); |
|
|
|
if (alias == null) |
|
|
|
if (alias == null) |
|
|
|
alias = (String) table.get(getFullName()); |
|
|
|
alias = (String) table.get(getFullName()); |
|
|
@ -129,27 +144,17 @@ public class FieldIdentifier extends Identifier{ |
|
|
|
setAlias(alias); |
|
|
|
setAlias(alias); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void writeTable(Hashtable table) { |
|
|
|
public void writeTable(Map table) { |
|
|
|
table.put(getFullAlias() |
|
|
|
table.put(getFullAlias() + "." |
|
|
|
+ "." + clazz.bundle.getTypeAlias(getType()), getName()); |
|
|
|
+ Main.getClassBundle().getTypeAlias(getType()), getName()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public boolean conflicting(String newAlias, boolean strong) { |
|
|
|
public boolean conflicting(String newAlias) { |
|
|
|
String typeSig = strong ? getType() : ""; |
|
|
|
return clazz.fieldConflicts(this, newAlias); |
|
|
|
if (clazz.containFieldAlias(newAlias, typeSig)) |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Enumeration enum = clazz.knownSubClasses.elements(); |
|
|
|
|
|
|
|
while (enum.hasMoreElements()) { |
|
|
|
|
|
|
|
ClassIdentifier ci = (ClassIdentifier) enum.nextElement(); |
|
|
|
|
|
|
|
if (ci.containsFieldAliasDirectly(newAlias, typeSig)) |
|
|
|
|
|
|
|
return true; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
return false; |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
public void doTransformations() { |
|
|
|
public void doTransformations() { |
|
|
|
info.setName(getAlias()); |
|
|
|
info.setName(getAlias()); |
|
|
|
info.setType(clazz.bundle.getTypeAlias(type)); |
|
|
|
info.setType(Main.getClassBundle().getTypeAlias(type)); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|