private void processDependencyManagementBomAnnotation(AnnotationNode annotationNode) { Expression valueExpression = annotationNode.getMember("value"); List<Map<String, String>> bomDependencies = createDependencyMaps(valueExpression); updateDependencyResolutionContext(bomDependencies); }
private void handleMalformedDependency(Expression expression) { Message message = createSyntaxErrorMessage( String.format( "The string must be of the form \"group:module:version\"%n"), expression); getSourceUnit().getErrorCollector().addErrorAndContinue(message); }
private List<ConstantExpression> getConstantExpressions(Expression valueExpression) { if (valueExpression instanceof ListExpression) { return getConstantExpressions((ListExpression) valueExpression); } if (valueExpression instanceof ConstantExpression && ((ConstantExpression) valueExpression).getValue() instanceof String) { return Arrays.asList((ConstantExpression) valueExpression); } reportError("@DependencyManagementBom requires an inline constant that is a " + "string or a string array", valueExpression); return Collections.emptyList(); }
@Override protected void processAnnotationNodes(List<AnnotationNode> annotationNodes) { if (!annotationNodes.isEmpty()) { if (annotationNodes.size() > 1) { for (AnnotationNode annotationNode : annotationNodes) { handleDuplicateDependencyManagementBomAnnotation(annotationNode); } } else { processDependencyManagementBomAnnotation(annotationNodes.get(0)); } } }
private List<Map<String, String>> createDependencyMaps(Expression valueExpression) { Map<String, String> dependency = null; List<ConstantExpression> constantExpressions = getConstantExpressions( valueExpression); List<Map<String, String>> dependencies = new ArrayList<>( constantExpressions.size()); for (ConstantExpression expression : constantExpressions) { Object value = expression.getValue(); if (value instanceof String) { String[] components = ((String) expression.getValue()).split(":"); if (components.length == 3) { dependency = new HashMap<>(); dependency.put("group", components[0]); dependency.put("module", components[1]); dependency.put("version", components[2]); dependency.put("type", "pom"); dependencies.add(dependency); } else { handleMalformedDependency(expression); } } } return dependencies; }
private List<ConstantExpression> getConstantExpressions( ListExpression valueExpression) { List<ConstantExpression> expressions = new ArrayList<>(); for (Expression expression : valueExpression.getExpressions()) { if (expression instanceof ConstantExpression && ((ConstantExpression) expression).getValue() instanceof String) { expressions.add((ConstantExpression) expression); } else { reportError( "Each entry in the array must be an " + "inline string constant", expression); } } return expressions; }
.add(new DependencyManagementBomTransformation(resolutionContext)); this.transformations.add(new DependencyAutoConfigurationTransformation( this.loader, resolutionContext, this.compilerAutoConfigurations));
private Message createSyntaxErrorMessage(String message, ASTNode node) { return new SyntaxErrorMessage( new SyntaxException(message, node.getLineNumber(), node.getColumnNumber(), node.getLastLineNumber(), node.getLastColumnNumber()), getSourceUnit()); }
private void reportError(String message, ASTNode node) { getSourceUnit().getErrorCollector() .addErrorAndContinue(createSyntaxErrorMessage(message, node)); }
private void handleDuplicateDependencyManagementBomAnnotation( AnnotationNode annotationNode) { Message message = createSyntaxErrorMessage( "Duplicate @DependencyManagementBom annotation. It must be declared at most once.", annotationNode); getSourceUnit().getErrorCollector().addErrorAndContinue(message); }