< prev index next >
src/java.xml/share/classes/com/sun/org/apache/bcel/internal/generic/ObjectType.java
Print this page
*** 19,103 ****
* limitations under the License.
*/
package com.sun.org.apache.bcel.internal.generic;
! import com.sun.org.apache.bcel.internal.Constants;
import com.sun.org.apache.bcel.internal.Repository;
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
/**
* Denotes reference such as java.lang.String.
*
! * @author <A HREF="mailto:markus.dahm@berlin.de">M. Dahm</A>
*/
! public final class ObjectType extends ReferenceType {
! private String class_name; // Class name of type
/**
* @param class_name fully qualified class name, e.g. java.lang.String
*/
! public ObjectType(String class_name) {
! super(Constants.T_REFERENCE, "L" + class_name.replace('.', '/') + ";");
this.class_name = class_name.replace('/', '.');
}
/** @return name of referenced class
*/
! public String getClassName() { return class_name; }
/** @return a hash code value for the object.
*/
! public int hashCode() { return class_name.hashCode(); }
/** @return true if both type objects refer to the same class.
*/
! public boolean equals(Object type) {
! return (type instanceof ObjectType)?
! ((ObjectType)type).class_name.equals(class_name) : false;
}
/**
* If "this" doesn't reference a class, it references an interface
* or a non-existant entity.
! */
! public boolean referencesClass(){
! JavaClass jc = Repository.lookupClass(class_name);
! if (jc == null)
! return false;
! else
return jc.isClass();
}
/**
* If "this" doesn't reference an interface, it references a class
* or a non-existant entity.
! */
! public boolean referencesInterface(){
! JavaClass jc = Repository.lookupClass(class_name);
! if (jc == null)
return false;
! else
return !jc.isClass();
}
- public boolean subclassOf(ObjectType superclass){
- if (this.referencesInterface() || superclass.referencesInterface())
- return false;
return Repository.instanceOf(this.class_name, superclass.class_name);
}
/**
* Java Virtual Machine Specification edition 2, 5.4.4 Access Control
*/
! public boolean accessibleTo(ObjectType accessor) {
! JavaClass jc = Repository.lookupClass(class_name);
!
! if(jc.isPublic()) {
return true;
- } else {
- JavaClass acc = Repository.lookupClass(accessor.class_name);
- return acc.getPackageName().equals(jc.getPackageName());
}
}
}
--- 19,168 ----
* limitations under the License.
*/
package com.sun.org.apache.bcel.internal.generic;
! import com.sun.org.apache.bcel.internal.Const;
import com.sun.org.apache.bcel.internal.Repository;
import com.sun.org.apache.bcel.internal.classfile.JavaClass;
/**
* Denotes reference such as java.lang.String.
*
! * @version $Id: ObjectType.java 1749603 2016-06-21 20:50:19Z ggregory $
*/
! public class ObjectType extends ReferenceType {
!
! private final String class_name; // Class name of type
!
! /**
! * @since 6.0
! */
! public static ObjectType getInstance(final String class_name) {
! return new ObjectType(class_name);
! }
/**
* @param class_name fully qualified class name, e.g. java.lang.String
*/
! public ObjectType(final String class_name) {
! super(Const.T_REFERENCE, "L" + class_name.replace('.', '/') + ";");
this.class_name = class_name.replace('/', '.');
}
+
/** @return name of referenced class
*/
! public String getClassName() {
! return class_name;
! }
!
/** @return a hash code value for the object.
*/
! @Override
! public int hashCode() {
! return class_name.hashCode();
! }
!
/** @return true if both type objects refer to the same class.
*/
! @Override
! public boolean equals( final Object type ) {
! return (type instanceof ObjectType)
! ? ((ObjectType) type).class_name.equals(class_name)
! : false;
}
+
/**
* If "this" doesn't reference a class, it references an interface
* or a non-existant entity.
! * @deprecated (since 6.0) this method returns an inaccurate result
! * if the class or interface referenced cannot
! * be found: use referencesClassExact() instead
! */
! @Deprecated
! public boolean referencesClass() {
! try {
! final JavaClass jc = Repository.lookupClass(class_name);
return jc.isClass();
+ } catch (final ClassNotFoundException e) {
+ return false;
+ }
}
+
/**
* If "this" doesn't reference an interface, it references a class
* or a non-existant entity.
! * @deprecated (since 6.0) this method returns an inaccurate result
! * if the class or interface referenced cannot
! * be found: use referencesInterfaceExact() instead
! */
! @Deprecated
! public boolean referencesInterface() {
! try {
! final JavaClass jc = Repository.lookupClass(class_name);
! return !jc.isClass();
! } catch (final ClassNotFoundException e) {
return false;
! }
! }
!
!
! /**
! * Return true if this type references a class,
! * false if it references an interface.
! * @return true if the type references a class, false if
! * it references an interface
! * @throws ClassNotFoundException if the class or interface
! * referenced by this type can't be found
! */
! public boolean referencesClassExact() throws ClassNotFoundException {
! final JavaClass jc = Repository.lookupClass(class_name);
! return jc.isClass();
! }
!
!
! /**
! * Return true if this type references an interface,
! * false if it references a class.
! * @return true if the type references an interface, false if
! * it references a class
! * @throws ClassNotFoundException if the class or interface
! * referenced by this type can't be found
! */
! public boolean referencesInterfaceExact() throws ClassNotFoundException {
! final JavaClass jc = Repository.lookupClass(class_name);
return !jc.isClass();
}
+ /**
+ * Return true if this type is a subclass of given ObjectType.
+ * @throws ClassNotFoundException if any of this class's superclasses
+ * can't be found
+ */
+ public boolean subclassOf( final ObjectType superclass ) throws ClassNotFoundException {
+ if (this.referencesInterfaceExact() || superclass.referencesInterfaceExact()) {
+ return false;
+ }
return Repository.instanceOf(this.class_name, superclass.class_name);
}
+
/**
* Java Virtual Machine Specification edition 2, 5.4.4 Access Control
+ * @throws ClassNotFoundException if the class referenced by this type
+ * can't be found
*/
! public boolean accessibleTo( final ObjectType accessor ) throws ClassNotFoundException {
! final JavaClass jc = Repository.lookupClass(class_name);
! if (jc.isPublic()) {
return true;
}
+ final JavaClass acc = Repository.lookupClass(accessor.class_name);
+ return acc.getPackageName().equals(jc.getPackageName());
}
}
< prev index next >