1 package com.sun.org.apache.bcel.internal.generic; 2 3 56 import com.sun.org.apache.bcel.internal.Constants; 57 import com.sun.org.apache.bcel.internal.Repository; 58 import com.sun.org.apache.bcel.internal.classfile.JavaClass; 59 60 66 public final class ObjectType extends ReferenceType { 67 private String class_name; 69 72 public ObjectType(String class_name) { 73 super(Constants.T_REFERENCE, "L" + class_name.replace('.', '/') + ";"); 74 this.class_name = class_name.replace('/', '.'); 75 } 76 77 79 public String getClassName() { return class_name; } 80 81 83 public int hashCode() { return class_name.hashCode(); } 84 85 87 public boolean equals(Object type) { 88 return (type instanceof ObjectType)? 89 ((ObjectType)type).class_name.equals(class_name) : false; 90 } 91 92 96 public boolean referencesClass(){ 97 JavaClass jc = Repository.lookupClass(class_name); 98 if (jc == null) 99 return false; 100 else 101 return jc.isClass(); 102 } 103 104 108 public boolean referencesInterface(){ 109 JavaClass jc = Repository.lookupClass(class_name); 110 if (jc == null) 111 return false; 112 else 113 return !jc.isClass(); 114 } 115 116 public boolean subclassOf(ObjectType superclass){ 117 if (this.referencesInterface() || superclass.referencesInterface()) 118 return false; 119 120 return Repository.instanceOf(this.class_name, superclass.class_name); 121 } 122 123 126 public boolean accessibleTo(ObjectType accessor) { 127 JavaClass jc = Repository.lookupClass(class_name); 128 129 if(jc.isPublic()) { 130 return true; 131 } else { 132 JavaClass acc = Repository.lookupClass(accessor.class_name); 133 return acc.getPackageName().equals(jc.getPackageName()); 134 } 135 } 136 } 137 | Popular Tags |