From 0e8829443f5efc843bce8c7295603b4b6b7792e0 Mon Sep 17 00:00:00 2001 From: jochen Date: Sat, 6 Mar 1999 21:42:22 +0000 Subject: [PATCH] preserveRule git-svn-id: https://svn.code.sf.net/p/jode/code/trunk@322 379699f6-c40d-0410-875b-85095c16579e --- jode/jode/obfuscator/FieldIdentifier.java | 8 ++++++++ jode/jode/obfuscator/Identifier.java | 1 + jode/jode/obfuscator/MethodIdentifier.java | 8 ++++++++ jode/jode/obfuscator/PackageIdentifier.java | 13 +++++++++++-- 4 files changed, 28 insertions(+), 2 deletions(-) diff --git a/jode/jode/obfuscator/FieldIdentifier.java b/jode/jode/obfuscator/FieldIdentifier.java index d65a4df..632503d 100644 --- a/jode/jode/obfuscator/FieldIdentifier.java +++ b/jode/jode/obfuscator/FieldIdentifier.java @@ -17,6 +17,7 @@ * $Id$ */ package jode.obfuscator; +import java.lang.reflect.Modifier; import jode.bytecode.*; import java.io.*; @@ -30,6 +31,13 @@ public class FieldIdentifier extends Identifier{ this.clazz = clazz; } + public void applyPreserveRule(int preserveRule) { + if ((preserveRule & (info.getModifiers() ^ Modifier.PRIVATE)) != 0) { + setReachable(); + setPreserved(); + } + } + public void setSingleReachable() { super.setSingleReachable(); String type = getType(); diff --git a/jode/jode/obfuscator/Identifier.java b/jode/jode/obfuscator/Identifier.java index 35d4417..33fa47b 100644 --- a/jode/jode/obfuscator/Identifier.java +++ b/jode/jode/obfuscator/Identifier.java @@ -218,6 +218,7 @@ public abstract class Identifier { setAlias((String) table.get(getFullName())); } + public abstract void applyPreserveRule(int preserveRule); public abstract Identifier getParent(); public abstract String getName(); public abstract String getType(); diff --git a/jode/jode/obfuscator/MethodIdentifier.java b/jode/jode/obfuscator/MethodIdentifier.java index 3d2caaf..73a4a2f 100644 --- a/jode/jode/obfuscator/MethodIdentifier.java +++ b/jode/jode/obfuscator/MethodIdentifier.java @@ -17,6 +17,7 @@ * $Id$ */ package jode.obfuscator; +import java.lang.reflect.Modifier; import jode.Obfuscator; import jode.bytecode.*; import java.io.*; @@ -55,6 +56,13 @@ public class MethodIdentifier extends Identifier implements Opcodes { } } + public void applyPreserveRule(int preserveRule) { + if ((preserveRule & (info.getModifiers() ^ Modifier.PRIVATE)) != 0) { + setReachable(); + setPreserved(); + } + } + /** * Reads the opcodes out of the code info and determine its * references diff --git a/jode/jode/obfuscator/PackageIdentifier.java b/jode/jode/obfuscator/PackageIdentifier.java index b96cdff..5c0f1b7 100644 --- a/jode/jode/obfuscator/PackageIdentifier.java +++ b/jode/jode/obfuscator/PackageIdentifier.java @@ -46,8 +46,11 @@ public class PackageIdentifier extends Identifier { } public Identifier getIdentifier(String name) { - if (loadOnDemand) - return loadClass(name); + if (loadOnDemand) { + Identifier ident = loadClass(name); + if (bundle.preserveRule != -1) + ident.applyPreserveRule(bundle.preserveRule); + } int index = name.indexOf('.'); if (index == -1) @@ -116,6 +119,12 @@ public class PackageIdentifier extends Identifier { } } + public void applyPreserveRule(int preserveRule) { + Enumeration enum = loadedClasses.elements(); + while(enum.hasMoreElements()) + ((Identifier) enum.nextElement()).applyPreserveRule(preserveRule); + } + public void reachableIdentifier(String fqn, boolean isVirtual) { int index = fqn.indexOf('.'); String component = index == -1 ? fqn : fqn.substring(0, index);