package jdepend.metadata; import jdepend.metadata.util.JavaClassCollection; import jdepend.metadata.util.ParseUtil; public final class RMIInvokeItem extends RemoteInvokeItem { private static final long serialVersionUID = 8888171995972886018L; private String invokeClassPlace; private String invokeClassName; private String invokeMethodName; private String invokeMethodSignature; public RMIInvokeItem(LocalInvokeItem item) { super(); this.invokeClassPlace = item.getInvokeClassPlace(); this.invokeClassName = item.getInvokeClassName(); this.invokeMethodName = item.getInvokeMethodName(); this.invokeMethodSignature = item.getInvokeMethodSignature(); this.caller = item.caller; this.callee = item.callee; } /** * 补充method信息 * * @param javaClasses * @return */ @Override public boolean supplyCallee(JavaClassCollection javaClasses) { JavaClass invokeClass = javaClasses.getTheClass(invokeClassPlace, invokeClassName); if (invokeClass != null) { for (Method invokeMethod : invokeClass.getMethods()) { if (this.math2(invokeMethod)) { this.setCallee(invokeMethod); return true; } } } return false; } /** * 调用的method是否是传入的method * * @param method * @return */ public boolean math2(Method method) { if (!this.invokeMethodName.equals(method.getName())) { return false; } if (this.invokeMethodSignature.equals(method.getSignature())) { return true; } else { String signature = method.getSignature(); int start = signature.indexOf('<'); if (start == -1) { return false; } else { String callSignature = ParseUtil.filterGenerics(signature); if (this.invokeMethodSignature.equals(callSignature)) { return true; } else { return false; } } } } @Override public String getName() { return "RMI"; } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((invokeClassName == null) ? 0 : invokeClassName.hashCode()); result = prime * result + ((invokeClassPlace == null) ? 0 : invokeClassPlace.hashCode()); result = prime * result + ((invokeMethodName == null) ? 0 : invokeMethodName.hashCode()); result = prime * result + ((invokeMethodSignature == null) ? 0 : invokeMethodSignature.hashCode()); return result; } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; RMIInvokeItem other = (RMIInvokeItem) obj; if (invokeClassName == null) { if (other.invokeClassName != null) return false; } else if (!invokeClassName.equals(other.invokeClassName)) return false; if (invokeClassPlace == null) { if (other.invokeClassPlace != null) return false; } else if (!invokeClassPlace.equals(other.invokeClassPlace)) return false; if (invokeMethodName == null) { if (other.invokeMethodName != null) return false; } else if (!invokeMethodName.equals(other.invokeMethodName)) return false; if (invokeMethodSignature == null) { if (other.invokeMethodSignature != null) return false; } else if (!invokeMethodSignature.equals(other.invokeMethodSignature)) return false; return true; } @Override public String toString() { if (this.getCallee() != null) { return "InvokeItem [type=RMIInvokeItem, invokeClassName=" + getCallee().getJavaClass().getName() + ", invokeMethodName=" + getCallee().getName() + ", invokeMethodSignature=" + getCallee().getSignature() + "]"; } else { return "InvokeItem [type=RMIInvokeItem, invokeClassName=" + invokeClassName + ", invokeMethodName=" + invokeMethodName + ", invokeMethodSignature=" + invokeMethodSignature + "]"; } } }