pull/4120/head
Phillip Webb 9 years ago
parent aae38db9af
commit c525689b0f

@ -1,5 +1,5 @@
/*
* Copyright 2014-2015 the original author or authors.
* Copyright 2012-2015 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@ -39,15 +39,15 @@ import org.springframework.core.Ordered;
/**
* A base class that lets plugin authors easily add additional BOMs to all apps. All the
* dependencies in the bom (and it's transitives) will be added to the dependency
* dependencies in the BOM (and it's transitives) will be added to the dependency
* management lookup, so an app can use just the artifact id (e.g. "spring-jdbc") in a
* <code>@Grab</code>. To install, implement the missing methods and list the class in
* <code>META-INF/services/org.springframework.boot.cli.compiler.SpringBootAstTransformation</code>
* {@code @Grab}. To install, implement the missing methods and list the class in
* {@code META-INF/services/org.springframework.boot.cli.compiler.SpringBootAstTransformation}
* . The {@link #getOrder()} value needs to be before
* {@link DependencyManagementBomTransformation#ORDER}.
*
* @author Dave Syer
*
* @since 1.3.0
*/
@GroovyASTTransformation(phase = CompilePhase.CONVERSION)
public abstract class GenericBomAstTransformation
@ -67,11 +67,10 @@ public abstract class GenericBomAstTransformation
/**
* The bom to be added to dependency management in compact form:
* <code>"&lt;groupId&gt;:&lt;artifactId&gt;:&lt;version&gt;"</code> (like in a
* <code>@Grab</code>).
*
* @return the maven co-ordinates of the bom to add
* {@code @Grab}).
* @return the maven co-ordinates of the BOM to add
*/
abstract protected String getBomModule();
protected abstract String getBomModule();
private void visitModule(ModuleNode node, String module) {
addDependencyManagementBom(node, module);
@ -89,30 +88,24 @@ public abstract class GenericBomAstTransformation
}
private AnnotationNode getAnnotation(AnnotatedNode annotated) {
AnnotationNode annotation;
List<AnnotationNode> annotations = annotated.getAnnotations(BOM);
if (annotations.isEmpty()) {
annotation = new AnnotationNode(BOM);
annotated.addAnnotation(annotation);
}
else {
annotation = annotations.get(0);
if (!annotations.isEmpty()) {
return annotations.get(0);
}
AnnotationNode annotation = new AnnotationNode(BOM);
annotated.addAnnotation(annotation);
return annotation;
}
private AnnotatedNode getAnnotatedNode(ModuleNode node) {
PackageNode pkg = node.getPackage();
if (pkg != null) {
if (!pkg.getAnnotations(BOM).isEmpty()) {
return pkg;
}
PackageNode packageNode = node.getPackage();
if (packageNode != null && !packageNode.getAnnotations(BOM).isEmpty()) {
return packageNode;
}
if (!node.getClasses().isEmpty()) {
ClassNode cls = node.getClasses().get(0);
return cls;
return node.getClasses().get(0);
}
return pkg;
return packageNode;
}
private List<ConstantExpression> getConstantExpressions(Expression valueExpression) {

@ -40,6 +40,7 @@ import static org.junit.Assert.assertEquals;
* Tests for {@link ResolveDependencyCoordinatesTransformation}
*
* @author Andy Wilkinson
* @author Dave Syer
*/
public final class GenericBomAstTransformationTests {
@ -59,6 +60,7 @@ public final class GenericBomAstTransformationTests {
protected String getBomModule() {
return "test:child:1.0.0";
}
};
@Test
@ -106,16 +108,15 @@ public final class GenericBomAstTransformationTests {
}
private AnnotationNode findAnnotation() {
PackageNode pkg = this.moduleNode.getPackage();
PackageNode packageNode = this.moduleNode.getPackage();
ClassNode bom = ClassHelper.make(DependencyManagementBom.class);
if (pkg != null) {
if (!pkg.getAnnotations(bom).isEmpty()) {
return pkg.getAnnotations(bom).get(0);
if (packageNode != null) {
if (!packageNode.getAnnotations(bom).isEmpty()) {
return packageNode.getAnnotations(bom).get(0);
}
}
if (!this.moduleNode.getClasses().isEmpty()) {
ClassNode cls = this.moduleNode.getClasses().get(0);
return cls.getAnnotations(bom).get(0);
return this.moduleNode.getClasses().get(0).getAnnotations(bom).get(0);
}
throw new IllegalStateException("No package or class node found");
}

Loading…
Cancel
Save