@Override public void visitLiteral(LiteralTree tree) { JavaType type = typesOfLiterals.get(tree.kind()); registerType(tree, type); }
@Override public void scanFile(JavaFileScannerContext context) { occurrences.clear(); constants.clear(); scan(context.getTree()); for (String entry : occurrences.keySet()) { Collection<LiteralTree> literalTrees = occurrences.get(entry); int literalOccurrence = literalTrees.size(); if (constants.containsKey(entry)) { VariableTree constant = constants.get(entry); List<LiteralTree> duplications = literalTrees.stream().filter(literal -> literal.parent() != constant).collect(Collectors.toList()); context.reportIssue(this, duplications.iterator().next(), "Use already-defined constant '" + constant.simpleName() + "' instead of duplicating its value here.", secondaryLocations(duplications.subList(1, duplications.size())), literalOccurrence); } else if (literalOccurrence >= threshold) { context.reportIssue( this, literalTrees.iterator().next(), "Define a constant instead of duplicating this literal " + entry + " " + literalOccurrence + " times.", secondaryLocations(literalTrees), literalOccurrence); } } }
@Override public void visitNode(Tree tree) { if (tree.is(Tree.Kind.ANNOTATION)) { AnnotationTree annotationTree = (AnnotationTree) tree; highlighting.highlight(start(annotationTree), end(annotationTree), typesByKind.get(Tree.Kind.ANNOTATION)); } else { Tree.Kind kind = tree.kind(); if (typesByKind.containsKey(kind)) { SyntaxToken token = ((LiteralTree) tree).token(); highlighting.highlight(start(token), end(token), typesByKind.get(kind)); } } }
private static boolean isNumberLiteral(LiteralTree tree) { return tree.is(Tree.Kind.DOUBLE_LITERAL, Tree.Kind.FLOAT_LITERAL, Tree.Kind.LONG_LITERAL, Tree.Kind.INT_LITERAL); }
@Override public void scanFile(JavaFileScannerContext context) { occurrences.clear(); constants.clear(); scan(context.getTree()); for (String entry : occurrences.keySet()) { Collection<LiteralTree> literalTrees = occurrences.get(entry); int literalOccurrence = literalTrees.size(); if (constants.containsKey(entry)) { VariableTree constant = constants.get(entry); List<LiteralTree> duplications = literalTrees.stream().filter(literal -> literal.parent() != constant).collect(Collectors.toList()); context.reportIssue(this, duplications.iterator().next(), "Use already-defined constant '" + constant.simpleName() + "' instead of duplicating its value here.", secondaryLocations(duplications.subList(1, duplications.size())), literalOccurrence); } else if (literalOccurrence >= threshold) { context.reportIssue( this, literalTrees.iterator().next(), "Define a constant instead of duplicating this literal " + entry + " " + literalOccurrence + " times.", secondaryLocations(literalTrees), literalOccurrence); } } }
private static boolean isNumberLiteral(LiteralTree tree) { return tree.is(Tree.Kind.DOUBLE_LITERAL, Tree.Kind.FLOAT_LITERAL, Tree.Kind.LONG_LITERAL, Tree.Kind.INT_LITERAL); }
@Override public void visitLiteral(LiteralTree tree) { JavaType type = typesOfLiterals.get(tree.kind()); registerType(tree, type); }
@CheckForNull private static Integer intLiteralValue(LiteralTree literal) { String literalValue = literal.value().replaceAll("_", ""); if (literalValue.startsWith("0x") || literalValue.startsWith("0b")) { return null; } return Integer.valueOf(literalValue); }
public SymbolicValue evalLiteral(LiteralTree syntaxNode) { if (syntaxNode.is(Tree.Kind.NULL_LITERAL)) { return SymbolicValue.NULL_LITERAL; } else if (syntaxNode.is(Tree.Kind.BOOLEAN_LITERAL)) { boolean value = Boolean.parseBoolean(syntaxNode.value()); if (value) { return SymbolicValue.TRUE_LITERAL; } return SymbolicValue.FALSE_LITERAL; } return createSymbolicValue(syntaxNode); }
@Override public void visitLiteral(LiteralTree tree) { JavaType type = typesOfLiterals.get(tree.kind()); registerType(tree, type); }
@CheckForNull private static Integer intLiteralValue(LiteralTree literal) { String literalValue = literal.value(); if (literalValue.startsWith("0x") || literalValue.startsWith("0b")) { return null; } return Integer.valueOf(literalValue); }
@CheckForNull private static Integer intLiteralValue(LiteralTree literal) { String literalValue = literal.value().replaceAll("_", ""); if (literalValue.startsWith("0b") || literalValue.startsWith("0B")) { return Integer.valueOf(literalValue.substring(2), 2); } return Long.decode(literalValue).intValue(); }
@CheckForNull private static Integer intLiteralValue(LiteralTree literal) { String literalValue = literal.value().replaceAll("_", ""); if (literalValue.startsWith("0b") || literalValue.startsWith("0B")) { return Integer.valueOf(literalValue.substring(2), 2); } return Long.decode(literalValue).intValue(); }