private static Set<String> getSuppressed(List<CustomAnnotation> annos) { Set<String> filters = null; for (CustomAnnotation ca : annos) { String name = ca.getAnnotationType().getSimpleName(); if (!(name.startsWith("Suppress") && name.endsWith("Warning"))) continue; for (AnnotationParameter par : ca.getParameters()) { if (par.getMember().equals("value")) { AnnotationElement ae = par.getValue(); AnnotationElement[] elements = ae instanceof ArrayAnnotationElement ? ((ArrayAnnotationElement) ae) .getElements() : new AnnotationElement[] { ae }; for (AnnotationElement child : elements) { if (child instanceof ConstantAnnotationElement) { Object value = ((ConstantAnnotationElement) child).getConstantValue(); if (value instanceof String) { if (filters == null) filters = new HashSet<>(); filters.add((String) value); } } } } } } return filters == null ? Collections.emptySet() : filters; }
@ClassVisitor public boolean checkClass(TypeDefinition td) { for(CustomAnnotation ca : td.getAnnotations()) { String name = ca.getAnnotationType().getInternalName(); if(name.equals("net/jcip/annotations/Immutable") || name.equals("javax/annotation/concurrent/Immutable")) return true; } return false; }
public static CustomAnnotation read(final IMetadataScope scope, final Buffer input) { final int typeToken = input.readUnsignedShort(); final int parameterCount = input.readUnsignedShort(); final TypeReference annotationType = scope.lookupType(typeToken); final AnnotationParameter[] parameters = new AnnotationParameter[parameterCount]; readParameters(parameters, scope, input, true); return new CustomAnnotation(annotationType, ArrayUtilities.asUnmodifiableList(parameters)); }
public static boolean hasAnnotation(IAnnotationsProvider fd, boolean ignoreDeprecated) { for (CustomAnnotation ca : fd.getAnnotations()) { TypeReference annoType = ca.getAnnotationType(); if (annoType.getPackageName().equals(INTERNAL_ANNOTATION_PACKAGE)) continue; if (ignoreDeprecated && annoType.getInternalName().equals("java/lang/Deprecated")) continue; String simpleName = annoType.getSimpleName(); if (simpleName.startsWith("Suppress") && simpleName.endsWith("Warning")) continue; if (simpleName.equalsIgnoreCase("nonnull") || simpleName.equalsIgnoreCase("notnull") || simpleName .equalsIgnoreCase("nullable") || simpleName.equalsIgnoreCase("checkfornull")) continue; return true; } return false; }
public static CustomAnnotation read(final IMetadataScope scope, final Buffer input) { final int typeToken = input.readUnsignedShort(); final int parameterCount = input.readUnsignedShort(); final TypeReference annotationType = scope.lookupType(typeToken); final AnnotationParameter[] parameters = new AnnotationParameter[parameterCount]; readParameters(parameters, scope, input, true); return new CustomAnnotation(annotationType, ArrayUtilities.asUnmodifiableList(parameters)); }
private static List<AssertionData> analyzeMember(MemberReference md) { List<AssertionData> assertions = new ArrayList<>(); if(md instanceof MethodDefinition && ((MethodDefinition) md).isSynthetic()) return assertions; for(CustomAnnotation anno : md.getAnnotations()) { if(anno.getAnnotationType().getFullName().equals(AssertWarning.class.getName())) { String type = ""; int minScore = 0, maxScore = 100; for(AnnotationParameter param : anno.getParameters()) { if(param.getMember().equals("value")) type = (String) ((ConstantAnnotationElement)param.getValue()).getConstantValue(); else if(param.getMember().equals("minScore")) minScore = (int) ((ConstantAnnotationElement)param.getValue()).getConstantValue(); else if(param.getMember().equals("maxScore")) maxScore = (int) ((ConstantAnnotationElement)param.getValue()).getConstantValue(); } assertions.add(new AssertionData(true, type, minScore, maxScore)); } else if(anno.getAnnotationType().getFullName().equals(AssertNoWarning.class.getName())) { String type = ""; for(AnnotationParameter param : anno.getParameters()) { if(param.getMember().equals("value")) type = (String) ((ConstantAnnotationElement)param.getValue()).getConstantValue(); } assertions.add(new AssertionData(false, type, Warning.MIN_SCORE, Warning.MAX_SCORE)); } } return assertions; }
private static boolean isPolymorphicMethod(final AstNode expression) { if (expression == null) { return false; } MemberReference memberReference = expression.getUserData(Keys.MEMBER_REFERENCE); if (memberReference == null && expression.getParent() instanceof MemberReferenceExpression) { memberReference = expression.getParent().getUserData(Keys.MEMBER_REFERENCE); } if (memberReference != null) { final List<CustomAnnotation> annotations = memberReference.getAnnotations(); for (final CustomAnnotation annotation : annotations) { final String typeName = annotation.getAnnotationType().getInternalName(); if (StringUtilities.equals(typeName, "java.lang.invoke.MethodHandle.PolymorphicSignature")) { return true; } } } return false; }
public static CustomAnnotation read(final IMetadataScope scope, final Buffer input) { final int typeToken = input.readUnsignedShort(); final int parameterCount = input.readUnsignedShort(); final TypeReference annotationType = scope.lookupType(typeToken); final AnnotationParameter[] parameters = new AnnotationParameter[parameterCount]; readParameters(parameters, scope, input, true); return new CustomAnnotation(annotationType, ArrayUtilities.asUnmodifiableList(parameters)); }
@Override protected void visitType(TypeDefinition td) { if (!td.isAnnotation()) return; DeclaredAnnotation da = getOrCreate(td); for (CustomAnnotation ca : td.getAnnotations()) { if (Types.is(ca.getAnnotationType(), Retention.class)) { for (AnnotationParameter ap : ca.getParameters()) { if (ap.getMember().equals("value")) { AnnotationElement value = ap.getValue(); if (value instanceof EnumAnnotationElement) { EnumAnnotationElement enumValue = (EnumAnnotationElement) value; if (Types.is(enumValue.getEnumType(), RetentionPolicy.class)) { da.policy = RetentionPolicy.valueOf(enumValue.getEnumConstantName()); } } } } } } }
private static boolean isPolymorphicMethod(final AstNode expression) { if (expression == null) { return false; } MemberReference memberReference = expression.getUserData(Keys.MEMBER_REFERENCE); if (memberReference == null && expression.getParent() instanceof MemberReferenceExpression) { memberReference = expression.getParent().getUserData(Keys.MEMBER_REFERENCE); } if (memberReference != null) { final List<CustomAnnotation> annotations = memberReference.getAnnotations(); for (final CustomAnnotation annotation : annotations) { final String typeName = annotation.getAnnotationType().getInternalName(); if (StringUtilities.equals(typeName, "java.lang.invoke.MethodHandle.PolymorphicSignature")) { return true; } } } return false; }
public static CustomAnnotation read(final IMetadataScope scope, final Buffer input) { final int typeToken = input.readUnsignedShort(); final int parameterCount = input.readUnsignedShort(); final TypeReference annotationType = scope.lookupType(typeToken); final AnnotationParameter[] parameters = new AnnotationParameter[parameterCount]; readParameters(parameters, scope, input, true); return new CustomAnnotation(annotationType, ArrayUtilities.asUnmodifiableList(parameters)); }
public Annotation createAnnotation(final CustomAnnotation annotation) { final Annotation a = new Annotation(); final AstNodeCollection<Expression> arguments = a.getArguments(); a.setType(convertType(annotation.getAnnotationType())); final List<AnnotationParameter> parameters = annotation.getParameters(); for (final AnnotationParameter p : parameters) { final String member = p.getMember(); final Expression value = createAnnotationElement(p.getValue()); if (StringUtilities.isNullOrEmpty(member) || parameters.size() == 1 && "value".equals(member)) { arguments.add(value); } else { arguments.add(new AssignmentExpression(new IdentifierExpression(value.getOffset(), member), value)); } } return a; }
private static boolean isPolymorphicMethod(final AstNode expression) { if (expression == null) { return false; } MemberReference memberReference = expression.getUserData(Keys.MEMBER_REFERENCE); if (memberReference == null && expression.getParent() instanceof MemberReferenceExpression) { memberReference = expression.getParent().getUserData(Keys.MEMBER_REFERENCE); } if (memberReference != null) { final List<CustomAnnotation> annotations = memberReference.getAnnotations(); for (final CustomAnnotation annotation : annotations) { final String typeName = annotation.getAnnotationType().getInternalName(); if (StringUtilities.equals(typeName, "java.lang.invoke.MethodHandle.PolymorphicSignature")) { return true; } } } return false; }
public static CustomAnnotation read(final IMetadataScope scope, final Buffer input) { final int typeToken = input.readUnsignedShort(); final int parameterCount = input.readUnsignedShort(); final TypeReference annotationType = scope.lookupType(typeToken); final AnnotationParameter[] parameters = new AnnotationParameter[parameterCount]; readParameters(parameters, scope, input, true); return new CustomAnnotation(annotationType, ArrayUtilities.asUnmodifiableList(parameters)); }
public Annotation createAnnotation(final CustomAnnotation annotation) { final Annotation a = new Annotation(); final AstNodeCollection<Expression> arguments = a.getArguments(); a.setType(convertType(annotation.getAnnotationType())); final List<AnnotationParameter> parameters = annotation.getParameters(); for (final AnnotationParameter p : parameters) { final String member = p.getMember(); final Expression value = createAnnotationElement(p.getValue()); if (StringUtilities.isNullOrEmpty(member) || parameters.size() == 1 && "value".equals(member)) { arguments.add(value); } else { arguments.add(new AssignmentExpression(new IdentifierExpression(value.getOffset(), member), value)); } } return a; }
public static CustomAnnotation read(final IMetadataScope scope, final Buffer input) { final int typeToken = input.readUnsignedShort(); final int parameterCount = input.readUnsignedShort(); final TypeReference annotationType = scope.lookupType(typeToken); final AnnotationParameter[] parameters = new AnnotationParameter[parameterCount]; readParameters(parameters, scope, input, true); return new CustomAnnotation(annotationType, ArrayUtilities.asUnmodifiableList(parameters)); }
public Annotation createAnnotation(final CustomAnnotation annotation) { final Annotation a = new Annotation(); final AstNodeCollection<Expression> arguments = a.getArguments(); a.setType(convertType(annotation.getAnnotationType())); final List<AnnotationParameter> parameters = annotation.getParameters(); for (final AnnotationParameter p : parameters) { final String member = p.getMember(); final Expression value = createAnnotationElement(p.getValue()); if (StringUtilities.isNullOrEmpty(member) || parameters.size() == 1 && "value".equals(member)) { arguments.add(value); } else { arguments.add(new AssignmentExpression(new IdentifierExpression(value.getOffset(), member), value)); } } return a; }