public TypeMatcher(String descriptor, String role, String typeParameters) { this.descriptor = new NameMatch(descriptor); this.role = role; this.typeParameters = typeParameters; }
@Override public boolean match(BugInstance bugInstance) { ClassAnnotation primaryClassAnnotation = bugInstance.getPrimaryClass(); if(primaryClassAnnotation == null){ return false; } String bugFileName = primaryClassAnnotation.getSourceFileName(); if(bugFileName == null || bugFileName.isEmpty()){ return false; } boolean result = fileName.match(bugFileName); if (DEBUG) { System.out.println("Matching " + bugFileName + " with " + fileName + ", result = " + result); } return result; }
@Override public boolean equals(Object o) { if (o == null || this.getClass() != o.getClass()) { return false; } MemberMatcher other = (MemberMatcher) o; return name.equals(other.name) && Objects.equals(signature, other.signature); }
@Override public String toString() { StringBuilder buf = new StringBuilder(); if (!name.isUniversal()) { buf.append("name=\""); buf.append(name.getSpec()); buf.append("\""); } if (signature != null) { if (buf.length() > 0) { buf.append(" "); } buf.append("signature=\""); buf.append(signature); buf.append("\""); } return buf.toString(); }
@Test public void testReturnValuePatternMatch() { NameMatch anyParamReturnVoid = new NameMatch(SignatureUtil.createMethodSignature("", null)); assertTrue(anyParamReturnVoid.match("()V")); assertTrue(anyParamReturnVoid.match("()I")); assertTrue(anyParamReturnVoid.match("()Ljava/lang/String;")); assertFalse(anyParamReturnVoid.match("(B)J")); } }
@Override public void writeXML(XMLOutput xmlOutput, boolean disabled) throws IOException { XMLAttributeList attributes = new XMLAttributeList().addAttribute("name", name.getSpec()); if (signature != null) { attributes.addOptionalAttribute("signature", signature.getSpec()); } attributes.addOptionalAttribute("role", role); if (disabled) { attributes.addAttribute("disabled", "true"); } xmlOutput.openCloseTag("Field", attributes); } }
@Override public String toString() { return "Class(class=\"" + className.getValue() + "\")"; }
@Override public int hashCode() { return name.hashCode() + Objects.hashCode(signature); }
@Test public void testParameterPatternMatch() { NameMatch anyParamReturnVoid = new NameMatch(SignatureUtil.createMethodSignature(null, "void")); assertTrue(anyParamReturnVoid.match("()V")); assertTrue(anyParamReturnVoid.match("(I)V")); assertTrue(anyParamReturnVoid.match("(Ljava/lang/String;)V")); assertFalse(anyParamReturnVoid.match("()J")); }
@Override public void writeXML(XMLOutput xmlOutput, boolean disabled) throws IOException { XMLAttributeList attributes = new XMLAttributeList().addAttribute("name", fileName.getSpec()); if (disabled) { attributes.addAttribute("disabled", "true"); } xmlOutput.openCloseTag("Source", attributes); } }
@Override public String toString() { StringBuilder buf = new StringBuilder(); if (!name.isUniversal()) { buf.append("name=\""); buf.append(name.getSpec()); buf.append("\""); } if (signature != null) { if (buf.length() > 0) { buf.append(" "); } buf.append("signature=\""); buf.append(signature); buf.append("\""); } return buf.toString(); }
@Override public String toString() { return "Type(descriptor=\"" + descriptor.getValue() + "\")"; }
@Override public int hashCode() { return name.hashCode() + Util.nullSafeHashcode(signature); }
public ClassMatcher(String className, String role) { this.className = new NameMatch(className); this.role = role; }
@Override public boolean match(BugInstance bugInstance) { LocalVariableAnnotation localAnnotation = bugInstance.getPrimaryLocalVariableAnnotation(); if (localAnnotation == null) { return false; } if (!name.match(localAnnotation.getName())) { return false; } return true; }
@Override public void writeXML(XMLOutput xmlOutput, boolean disabled) throws IOException { XMLAttributeList attributes = new XMLAttributeList().addAttribute("name", name.getSpec()); if (signature != null && signature.getSpec() != null) { StringBuilder paramsBuilder = new StringBuilder(); SignatureConverter converter = new SignatureConverter(signature.getSpec()); converter.skip(); while (converter.getFirst() != ')') { if (paramsBuilder.length() > 1) { paramsBuilder.append(", "); } paramsBuilder.append(converter.parseNext()); } converter.skip(); String params = paramsBuilder.toString(); String returns = converter.parseNext(); attributes.addAttribute("params", params); attributes.addAttribute("returns", returns); } attributes.addOptionalAttribute("role", role); if (disabled) { attributes.addAttribute("disabled", "true"); } xmlOutput.openCloseTag("Method", attributes); } }
@Override public String toString() { return "Source(file=\"" + fileName.getValue() + "\")"; }
@Override public boolean equals(Object o) { if (o == null || this.getClass() != o.getClass()) { return false; } MemberMatcher other = (MemberMatcher) o; return name.equals(other.name) && Util.nullSafeEquals(signature, other.signature); }
public LocalMatcher(String name, String type) { this.name = new NameMatch(name); }