1 21 22 package org.armedbear.j; 23 24 27 public final class JavaExpression extends Expression implements Constants 28 { 29 private final int type; 31 public JavaExpression(String name, int arity) 32 { 33 super(name, arity); 34 type = TAG_METHOD; 35 } 36 37 public JavaExpression(String name, int arity, int type) 38 { 39 super(name, arity); 40 this.type = type; 41 } 42 43 public final int getType() 44 { 45 return type; 46 } 47 48 public boolean matches(LocalTag tag) 49 { 50 if (!name.equals(tag.getMethodName())) 51 return false; 52 if (type == TAG_METHOD && tag.getType() != TAG_METHOD) 53 return false; 54 if (type == TAG_UNKNOWN && tag.getType() == TAG_METHOD) 55 return false; 56 if (arity >= 0) { 57 int n = getArity(tag.getCanonicalSignature()); 58 if (n < 0 || n == arity) 59 return true; 60 else 61 return false; 62 } 63 return true; 64 } 65 66 public boolean equals(Object obj) 67 { 68 if (this == obj) 69 return true; 70 if (obj instanceof JavaExpression) { 71 JavaExpression expr = (JavaExpression) obj; 72 if (arity != expr.arity) 73 return false; 74 if (type != expr.type) 75 return false; 76 if (name == expr.name || (name != null && name.equals(expr.name))) 77 return true; 78 } 79 return false; 80 } 81 82 public String toString() 83 { 84 FastStringBuffer sb = new FastStringBuffer(); 85 switch (type) { 86 case TAG_UNKNOWN: 87 sb.append("TAG_UNKNOWN "); 88 break; 89 case TAG_CLASS: 90 sb.append("TAG_CLASS "); 91 break; 92 case TAG_METHOD: 93 sb.append("TAG_METHOD "); 94 break; 95 default: 96 sb.append(type); 97 sb.append(' '); 98 break; 99 } 100 sb.append(name); 101 if (type == TAG_METHOD) { 102 sb.append(' '); 103 sb.append(arity); 104 } 105 return sb.toString(); 106 } 107 } 108 | Popular Tags |