summaryrefslogtreecommitdiff
path: root/src/proguard/classfile/LibraryClass.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/proguard/classfile/LibraryClass.java')
-rw-r--r--src/proguard/classfile/LibraryClass.java553
1 files changed, 0 insertions, 553 deletions
diff --git a/src/proguard/classfile/LibraryClass.java b/src/proguard/classfile/LibraryClass.java
deleted file mode 100644
index 3975677..0000000
--- a/src/proguard/classfile/LibraryClass.java
+++ /dev/null
@@ -1,553 +0,0 @@
-/*
- * ProGuard -- shrinking, optimization, obfuscation, and preverification
- * of Java bytecode.
- *
- * Copyright (c) 2002-2014 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
- * Software Foundation; either version 2 of the License, or (at your option)
- * any later version.
- *
- * This program is distributed in the hope that it will be useful, but WITHOUT
- * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
- * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
- * more details.
- *
- * You should have received a copy of the GNU General Public License along
- * with this program; if not, write to the Free Software Foundation, Inc.,
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
- */
-package proguard.classfile;
-
-import proguard.classfile.attribute.visitor.AttributeVisitor;
-import proguard.classfile.constant.visitor.ConstantVisitor;
-import proguard.classfile.util.*;
-import proguard.classfile.visitor.*;
-
-/**
- * This Clazz is a compact representation of the essential data in a Java class.
- *
- * @author Eric Lafortune
- */
-public class LibraryClass implements Clazz
-{
- public int u2accessFlags;
- public String thisClassName;
- public String superClassName;
- public String[] interfaceNames;
- public LibraryField[] fields;
- public LibraryMethod[] methods;
-
- /**
- * An extra field pointing to the superclass of this class.
- * This field is filled out by the {@link ClassSuperHierarchyInitializer}.
- */
- public Clazz superClass;
-
- /**
- * An extra field pointing to the interfaces of this class.
- * This field is filled out by the {@link ClassSuperHierarchyInitializer}.
- */
- public Clazz[] interfaceClasses;
-
- /**
- * An extra field pointing to the subclasses of this class.
- * This field is filled out by the {@link ClassSubHierarchyInitializer}.
- */
- public Clazz[] subClasses;
-
- /**
- * An extra field in which visitors can store information.
- */
- public Object visitorInfo;
-
-
- /**
- * Creates an empty LibraryClass.
- */
- public LibraryClass() {}
-
-
- /**
- * Returns whether this library class is visible to the outside world.
- */
- boolean isVisible()
- {
- return (u2accessFlags & ClassConstants.ACC_PUBLIC) != 0;
- }
-
-
- // Implementations for Clazz.
-
- public int getAccessFlags()
- {
- return u2accessFlags;
- }
-
- public String getName()
- {
- return thisClassName;
- }
-
- public String getSuperName()
- {
- // This may be java/lang/Object, in which case there is no super.
- return superClassName;
- }
-
- public int getInterfaceCount()
- {
- return interfaceClasses.length;
- }
-
- public String getInterfaceName(int index)
- {
- return interfaceNames[index];
- }
-
- public int getTag(int constantIndex)
- {
- throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");
- }
-
- public String getString(int constantIndex)
- {
- throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");
- }
-
- public String getStringString(int constantIndex)
- {
- throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");
- }
-
- public String getClassName(int constantIndex)
- {
- throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");
- }
-
- public String getName(int constantIndex)
- {
- throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");
- }
-
- public String getType(int constantIndex)
- {
- throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");
- }
-
-
- public String getRefClassName(int constantIndex)
- {
- throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");
- }
-
- public String getRefName(int constantIndex)
- {
- throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");
- }
-
- public String getRefType(int constantIndex)
- {
- throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store constant pool");
- }
-
-
- public void addSubClass(Clazz clazz)
- {
- if (subClasses == null)
- {
- subClasses = new Clazz[1];
- }
- else
- {
- // Copy the old elements into new larger array.
- Clazz[] temp = new Clazz[subClasses.length+1];
- System.arraycopy(subClasses, 0, temp, 0, subClasses.length);
- subClasses = temp;
- }
-
- subClasses[subClasses.length-1] = clazz;
- }
-
-
- public Clazz getSuperClass()
- {
- return superClass;
- }
-
-
- public Clazz getInterface(int index)
- {
- return interfaceClasses[index];
- }
-
-
- public boolean extends_(Clazz clazz)
- {
- if (this.equals(clazz))
- {
- return true;
- }
-
- return superClass != null &&
- superClass.extends_(clazz);
- }
-
-
- public boolean extends_(String className)
- {
- if (getName().equals(className))
- {
- return true;
- }
-
- return superClass != null &&
- superClass.extends_(className);
- }
-
-
- public boolean extendsOrImplements(Clazz clazz)
- {
- if (this.equals(clazz))
- {
- return true;
- }
-
- if (superClass != null &&
- superClass.extendsOrImplements(clazz))
- {
- return true;
- }
-
- if (interfaceClasses != null)
- {
- for (int index = 0; index < interfaceClasses.length; index++)
- {
- Clazz interfaceClass = interfaceClasses[index];
- if (interfaceClass != null &&
- interfaceClass.extendsOrImplements(clazz))
- {
- return true;
- }
- }
- }
-
- return false;
- }
-
-
- public boolean extendsOrImplements(String className)
- {
- if (getName().equals(className))
- {
- return true;
- }
-
- if (superClass != null &&
- superClass.extendsOrImplements(className))
- {
- return true;
- }
-
- if (interfaceClasses != null)
- {
- for (int index = 0; index < interfaceClasses.length; index++)
- {
- Clazz interfaceClass = interfaceClasses[index];
- if (interfaceClass != null &&
- interfaceClass.extendsOrImplements(className))
- {
- return true;
- }
- }
- }
-
- return false;
- }
-
-
- public Field findField(String name, String descriptor)
- {
- for (int index = 0; index < fields.length; index++)
- {
- Field field = fields[index];
- if (field != null &&
- (name == null || field.getName(this).equals(name)) &&
- (descriptor == null || field.getDescriptor(this).equals(descriptor)))
- {
- return field;
- }
- }
-
- return null;
- }
-
-
- public Method findMethod(String name, String descriptor)
- {
- for (int index = 0; index < methods.length; index++)
- {
- Method method = methods[index];
- if (method != null &&
- (name == null || method.getName(this).equals(name)) &&
- (descriptor == null || method.getDescriptor(this).equals(descriptor)))
- {
- return method;
- }
- }
-
- return null;
- }
-
-
- public void accept(ClassVisitor classVisitor)
- {
- classVisitor.visitLibraryClass(this);
- }
-
-
- public void hierarchyAccept(boolean visitThisClass,
- boolean visitSuperClass,
- boolean visitInterfaces,
- boolean visitSubclasses,
- ClassVisitor classVisitor)
- {
- // First visit the current classfile.
- if (visitThisClass)
- {
- accept(classVisitor);
- }
-
- // Then visit its superclass, recursively.
- if (visitSuperClass)
- {
- if (superClass != null)
- {
- superClass.hierarchyAccept(true,
- true,
- visitInterfaces,
- false,
- classVisitor);
- }
- }
-
- // Then visit its interfaces, recursively.
- if (visitInterfaces)
- {
- // Visit the interfaces of the superclasses, if we haven't done so yet.
- if (!visitSuperClass)
- {
- if (superClass != null)
- {
- superClass.hierarchyAccept(false,
- false,
- true,
- false,
- classVisitor);
- }
- }
-
- // Visit the interfaces.
- if (interfaceClasses != null)
- {
- for (int index = 0; index < interfaceClasses.length; index++)
- {
- Clazz interfaceClass = interfaceClasses[index];
- if (interfaceClass != null)
- {
- interfaceClass.hierarchyAccept(true,
- false,
- true,
- false,
- classVisitor);
- }
- }
- }
- }
-
- // Then visit its subclasses, recursively.
- if (visitSubclasses)
- {
- if (subClasses != null)
- {
- for (int index = 0; index < subClasses.length; index++)
- {
- subClasses[index].hierarchyAccept(true,
- false,
- false,
- true,
- classVisitor);
- }
- }
- }
- }
-
-
- /**
- * Lets the given class visitor visit the superclass, if it is known.
- * @param classVisitor the <code>ClassVisitor</code> that will visit the
- * superclass.
- */
- public void superClassAccept(ClassVisitor classVisitor)
- {
- if (superClass != null)
- {
- superClass.accept(classVisitor);
- }
- }
-
-
- /**
- * Lets the given class visitor visit all known direct interfaces.
- * @param classVisitor the <code>ClassVisitor</code> that will visit the
- * interfaces.
- */
- public void interfacesAccept(ClassVisitor classVisitor)
- {
- if (interfaceClasses != null)
- {
- for (int index = 0; index < interfaceClasses.length; index++)
- {
- Clazz interfaceClass = interfaceClasses[index];
- if (interfaceClass != null)
- {
- interfaceClass.accept(classVisitor);
- }
- }
- }
- }
-
-
- public void subclassesAccept(ClassVisitor classVisitor)
- {
- if (subClasses != null)
- {
- for (int index = 0; index < subClasses.length; index++)
- {
- subClasses[index].accept(classVisitor);
- }
- }
- }
-
-
- public void constantPoolEntriesAccept(ConstantVisitor constantVisitor)
- {
- // This class doesn't keep references to its constant pool entries.
- }
-
-
- public void constantPoolEntryAccept(int index, ConstantVisitor constantVisitor)
- {
- // This class doesn't keep references to its constant pool entries.
- }
-
-
- public void thisClassConstantAccept(ConstantVisitor constantVisitor)
- {
- // This class doesn't keep references to its constant pool entries.
- }
-
-
- public void superClassConstantAccept(ConstantVisitor constantVisitor)
- {
- // This class doesn't keep references to its constant pool entries.
- }
-
-
- public void interfaceConstantsAccept(ConstantVisitor constantVisitor)
- {
- // This class doesn't keep references to its constant pool entries.
- }
-
-
- public void fieldsAccept(MemberVisitor memberVisitor)
- {
- for (int index = 0; index < fields.length; index++)
- {
- Field field = fields[index];
- if (field != null)
- {
- field.accept(this, memberVisitor);
- }
- }
- }
-
-
- public void fieldAccept(String name, String descriptor, MemberVisitor memberVisitor)
- {
- Field field = findField(name, descriptor);
- if (field != null)
- {
- field.accept(this, memberVisitor);
- }
- }
-
-
- public void methodsAccept(MemberVisitor memberVisitor)
- {
- for (int index = 0; index < methods.length; index++)
- {
- Method method = methods[index];
- if (method != null)
- {
- method.accept(this, memberVisitor);
- }
- }
- }
-
-
- public void methodAccept(String name, String descriptor, MemberVisitor memberVisitor)
- {
- Method method = findMethod(name, descriptor);
- if (method != null)
- {
- method.accept(this, memberVisitor);
- }
- }
-
-
- public boolean mayHaveImplementations(Method method)
- {
- return
- (u2accessFlags & ClassConstants.ACC_FINAL) == 0 &&
- (method == null ||
- ((method.getAccessFlags() & (ClassConstants.ACC_PRIVATE |
- ClassConstants.ACC_STATIC |
- ClassConstants.ACC_FINAL)) == 0 &&
- !method.getName(this).equals(ClassConstants.METHOD_NAME_INIT)));
- }
-
-
- public void attributesAccept(AttributeVisitor attributeVisitor)
- {
- throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store attributes");
- }
-
-
- public void attributeAccept(String name, AttributeVisitor attributeVisitor)
- {
- throw new UnsupportedOperationException("Library class ["+thisClassName+"] doesn't store attributes");
- }
-
-
- // Implementations for VisitorAccepter.
-
- public Object getVisitorInfo()
- {
- return visitorInfo;
- }
-
- public void setVisitorInfo(Object visitorInfo)
- {
- this.visitorInfo = visitorInfo;
- }
-
-
- // Implementations for Object.
-
- public String toString()
- {
- return "LibraryClass("+getName()+")";
- }
-}