Commit af0d08c9 authored by Phillip Webb's avatar Phillip Webb

Polish

parent b772f7c2
......@@ -35,12 +35,6 @@ import static org.junit.Assert.assertTrue;
*/
public class AopAutoConfigurationTests {
public interface TestInterface {
public abstract void foo();
}
private AnnotationConfigApplicationContext context;
@Test
......@@ -118,4 +112,10 @@ public class AopAutoConfigurationTests {
}
}
public interface TestInterface {
public abstract void foo();
}
}
......@@ -27,9 +27,7 @@ public interface ArtifactCoordinatesResolver {
/**
* Gets the group id of the artifact identified by the given {@code artifactId}.
* Returns {@code null} if the artifact is unknown to the resolver.
*
* @param artifactId The id of the artifact
*
* @return The group id of the artifact
*/
String getGroupId(String artifactId);
......@@ -37,9 +35,7 @@ public interface ArtifactCoordinatesResolver {
/**
* Gets the version of the artifact identified by the given {@code artifactId}.
* Returns {@code null} if the artifact is unknown to the resolver.
*
* @param artifactId The id of the artifact
*
* @return The version of the artifact
*/
String getVersion(String artifactId);
......
......@@ -18,7 +18,6 @@ package org.springframework.boot.cli.compiler;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import org.codehaus.groovy.ast.AnnotatedNode;
......@@ -36,13 +35,29 @@ import org.codehaus.groovy.ast.MethodNode;
*/
public abstract class AstUtils {
/**
* Determine if a {@link ClassNode} has one or more of the specified annotations on
* the class or any of its methods. N.B. the type names are not normally fully
* qualified.
*/
public static boolean hasAtLeastOneAnnotation(ClassNode node, String... annotations) {
if (hasAtLeastOneAnnotation((AnnotatedNode) node, annotations)) {
return true;
}
for (MethodNode method : node.getMethods()) {
if (hasAtLeastOneAnnotation(method, annotations)) {
return true;
}
}
return false;
}
/**
* Determine if an {@link AnnotatedNode} has one or more of the specified annotations.
* N.B. the annotation type names are not normally fully qualified.
*/
public static boolean hasAtLeastOneAnnotation(AnnotatedNode node,
String... annotations) {
for (AnnotationNode annotationNode : node.getAnnotations()) {
for (String annotation : annotations) {
if (annotation.equals(annotationNode.getClassNode().getName())) {
......@@ -50,75 +65,40 @@ public abstract class AstUtils {
}
}
}
return false;
}
/**
* Determine if a {@link ClassNode} has one or more of the specified annotations on the class
* or any of its methods.
* N.B. the type names are not normally fully qualified.
*/
public static boolean hasAtLeastOneAnnotation(ClassNode node, String... annotations) {
for (AnnotationNode annotationNode : node.getAnnotations()) {
for (String annotation : annotations) {
if (annotation.equals(annotationNode.getClassNode().getName())) {
return true;
}
}
}
List<MethodNode> methods = node.getMethods();
for (MethodNode method : methods) {
for (AnnotationNode annotationNode : method.getAnnotations()) {
for (String annotation : annotations) {
if (annotation.equals(annotationNode.getClassNode().getName())) {
return true;
}
}
}
}
return false;
}
/**
* Determine if a {@link ClassNode} has one or more fields of the specified types or
* method returning one or more of the specified types. N.B. the type names are not
* normally fully qualified.
*/
public static boolean hasAtLeastOneFieldOrMethod(ClassNode node, String... types) {
Set<String> set = new HashSet<String>(Arrays.asList(types));
List<FieldNode> fields = node.getFields();
for (FieldNode field : fields) {
if (set.contains(field.getType().getName())) {
Set<String> typesSet = new HashSet<String>(Arrays.asList(types));
for (FieldNode field : node.getFields()) {
if (typesSet.contains(field.getType().getName())) {
return true;
}
}
List<MethodNode> methods = node.getMethods();
for (MethodNode method : methods) {
if (set.contains(method.getReturnType().getName())) {
for (MethodNode method : node.getMethods()) {
if (typesSet.contains(method.getReturnType().getName())) {
return true;
}
}
return false;
}
/**
* Determine if a {@link ClassNode} subclasses any of the specified types
* N.B. the type names are not normally fully qualified.
*/
public static boolean subclasses(ClassNode node, String... types) {
for (String type : types) {
if (node.getSuperClass().getName().equals(type)) {
return true;
}
}
return false;
}
/**
* Determine if a {@link ClassNode} subclasses any of the specified types N.B. the
* type names are not normally fully qualified.
*/
public static boolean subclasses(ClassNode node, String... types) {
for (String type : types) {
if (node.getSuperClass().getName().equals(type)) {
return true;
}
}
return false;
}
}
......@@ -64,6 +64,7 @@ import org.codehaus.groovy.transform.ASTTransformationVisitor;
*
* @author Phillip Webb
* @author Dave Syer
* @author Andy Wilkinson
*/
public class GroovyCompiler {
......@@ -73,6 +74,8 @@ public class GroovyCompiler {
private ArtifactCoordinatesResolver artifactCoordinatesResolver;
private final ASTTransformation dependencyCoordinatesTransformation = new DefaultDependencyCoordinatesAstTransformation();
/**
* Create a new {@link GroovyCompiler} instance.
* @param configuration the compiler configuration
......@@ -168,7 +171,6 @@ public class GroovyCompiler {
try {
Field field = CompilationUnit.class.getDeclaredField("phaseOperations");
field.setAccessible(true);
LinkedList[] phaseOperations = (LinkedList[]) field.get(compilationUnit);
processConversionOperations(phaseOperations[Phases.CONVERSION]);
}
......@@ -186,13 +188,10 @@ public class GroovyCompiler {
if (operation.getClass().getName()
.startsWith(ASTTransformationVisitor.class.getName())) {
conversionOperations.add(i, new CompilationUnit.SourceUnitOperation() {
private final ASTTransformation transformation = new DefaultDependencyCoordinatesAstTransformation();
@Override
public void call(SourceUnit source) throws CompilationFailedException {
this.transformation.visit(new ASTNode[] { source.getAST() },
source);
GroovyCompiler.this.dependencyCoordinatesTransformation.visit(
new ASTNode[] { source.getAST() }, source);
}
});
break;
......@@ -312,6 +311,7 @@ public class GroovyCompiler {
.getGroupId(module));
grabAnnotation.setMember("group", groupIdExpression);
}
if (grabAnnotation.getMember("version") == null) {
ConstantExpression versionExpression = new ConstantExpression(
GroovyCompiler.this.artifactCoordinatesResolver
......
......@@ -24,6 +24,11 @@ import java.net.URL;
import java.util.Collections;
import java.util.Properties;
/**
* {@link ArtifactCoordinatesResolver} backed by a properties file.
*
* @author Andy Wilkinson
*/
final class PropertiesArtifactCoordinatesResolver implements ArtifactCoordinatesResolver {
private final GroovyClassLoader loader;
......@@ -60,7 +65,7 @@ final class PropertiesArtifactCoordinatesResolver implements ArtifactCoordinates
try {
properties.load(inputStream);
}
catch (IOException ioe) {
catch (IOException ex) {
// Swallow and continue
}
finally {
......@@ -68,7 +73,7 @@ final class PropertiesArtifactCoordinatesResolver implements ArtifactCoordinates
}
}
}
catch (IOException e) {
catch (IOException ex) {
// Swallow and continue
}
this.properties = properties;
......
......@@ -25,28 +25,26 @@ import org.springframework.boot.cli.compiler.DependencyCustomizer;
/**
* {@link CompilerAutoConfiguration} for JUnit
*
*
* @author Greg Turnquist
*/
public class JUnitCompilerAutoConfiguration extends CompilerAutoConfiguration {
@Override
public boolean matches(ClassNode classNode) {
return AstUtils.hasAtLeastOneAnnotation(classNode, "Test");
}
@Override
public void applyDependencies(DependencyCustomizer dependencies)
throws CompilationFailedException {
dependencies.add("junit").add("spring-test").add("hamcrest-library");
}
@Override
public boolean matches(ClassNode classNode) {
return AstUtils.hasAtLeastOneAnnotation(classNode, "Test");
}
@Override
public void applyImports(ImportCustomizer imports) throws CompilationFailedException {
imports.addStarImports("org.junit")
.addStaticStars("org.junit.Assert").addImports()
.addStaticStars("org.hamcrest.MatcherAssert")
.addStaticStars("org.hamcrest.Matchers");
}
@Override
public void applyDependencies(DependencyCustomizer dependencies)
throws CompilationFailedException {
dependencies.add("junit").add("spring-test").add("hamcrest-library");
}
@Override
public void applyImports(ImportCustomizer imports) throws CompilationFailedException {
imports.addStarImports("org.junit").addStaticStars("org.junit.Assert")
.addStaticStars("org.hamcrest.MatcherAssert")
.addStaticStars("org.hamcrest.Matchers");
}
}
......@@ -25,25 +25,25 @@ import org.springframework.boot.cli.compiler.DependencyCustomizer;
/**
* {@link CompilerAutoConfiguration} for Spock test framework
*
*
* @author Greg Turnquist
*/
public class SpockCompilerAutoConfiguration extends CompilerAutoConfiguration {
@Override
public boolean matches(ClassNode classNode) {
return AstUtils.subclasses(classNode, "Specification");
}
@Override
public boolean matches(ClassNode classNode) {
return AstUtils.subclasses(classNode, "Specification");
}
@Override
public void applyDependencies(DependencyCustomizer dependencies)
throws CompilationFailedException {
dependencies.add("spock-core");
}
@Override
public void applyDependencies(DependencyCustomizer dependencies)
throws CompilationFailedException {
dependencies.add("spock-core");
}
@Override
public void applyImports(ImportCustomizer imports) throws CompilationFailedException {
imports.addStarImports("spock.lang");
}
@Override
public void applyImports(ImportCustomizer imports) throws CompilationFailedException {
imports.addStarImports("spock.lang");
}
}
......@@ -33,7 +33,7 @@ public class SampleAmqpSimpleApplication {
@Autowired
private AmqpTemplate amqpTemplate;
@Autowired
private ConnectionFactory connectionFactory;
......@@ -49,7 +49,8 @@ public class SampleAmqpSimpleApplication {
@Bean
public SimpleMessageListenerContainer container() {
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(connectionFactory);
SimpleMessageListenerContainer container = new SimpleMessageListenerContainer(
this.connectionFactory);
Object listener = new Object() {
@SuppressWarnings("unused")
public void handleMessage(String foo) {
......@@ -62,7 +63,6 @@ public class SampleAmqpSimpleApplication {
return container;
}
public static void main(String[] args) throws Exception {
SpringApplication.run(SampleAmqpSimpleApplication.class, args);
}
......
/*
* Copyright 2012-2013 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.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.springframework.boot.sample.amqp;
import javax.annotation.PostConstruct;
......@@ -15,15 +31,15 @@ public class Sender {
@Autowired
private AmqpAdmin amqpAdmin;
@PostConstruct
public void setUpQueue() {
amqpAdmin.declareQueue(new Queue("foo"));
this.amqpAdmin.declareQueue(new Queue("foo"));
}
@Scheduled(fixedDelay=1000L)
@Scheduled(fixedDelay = 1000L)
public void send() {
rabbitTemplate.convertAndSend("foo","hello");
this.rabbitTemplate.convertAndSend("foo", "hello");
}
}
......@@ -42,7 +42,7 @@ class HotelServiceImpl implements HotelService {
private final HotelRepository hotelRepository;
private final ReviewRepository reviewRepository;
@Autowired
public HotelServiceImpl(HotelRepository hotelRepository,
ReviewRepository reviewRepository) {
......
......@@ -26,42 +26,43 @@ import org.springframework.boot.gradle.task.RunJar;
/**
* Gradle 'Spring Boot' {@link Plugin}.
*
*
* @author Phillip Webb
*/
public class SpringBootPlugin implements Plugin<Project> {
private static final String REPACKAGE_TASK_NAME = "repackage";
private static final String RUN_JAR_TASK_NAME = "runJar";
private static final String REPACKAGE_TASK_NAME = "repackage";
private static final String RUN_JAR_TASK_NAME = "runJar";
@Override
public void apply(Project project) {
project.getPlugins().apply(BasePlugin.class);
project.getPlugins().apply(JavaPlugin.class);
project.getExtensions().create("springBoot", SpringBootPluginExtension.class);
Repackage packageTask = addRepackageTask(project);
ensureTaskRunsOnAssembly(project, packageTask);
addRunJarTask(project);
}
@Override
public void apply(Project project) {
project.getPlugins().apply(BasePlugin.class);
project.getPlugins().apply(JavaPlugin.class);
project.getExtensions().create("springBoot", SpringBootPluginExtension.class);
Repackage packageTask = addRepackageTask(project);
ensureTaskRunsOnAssembly(project, packageTask);
addRunJarTask(project);
}
private void addRunJarTask(Project project) {
RunJar runJarTask = project.getTasks().create(RUN_JAR_TASK_NAME, RunJar.class);
runJarTask.setDescription("Run the executable JAR/WAR");
runJarTask.setGroup("Execution");
runJarTask.dependsOn(REPACKAGE_TASK_NAME);
}
private void addRunJarTask(Project project) {
RunJar runJarTask = project.getTasks().create(RUN_JAR_TASK_NAME, RunJar.class);
runJarTask.setDescription("Run the executable JAR/WAR");
runJarTask.setGroup("Execution");
runJarTask.dependsOn(REPACKAGE_TASK_NAME);
}
private Repackage addRepackageTask(Project project) {
Repackage packageTask = project.getTasks().create(REPACKAGE_TASK_NAME, Repackage.class);
packageTask.setDescription("Repackage existing JAR and WAR "
+ "archives so that they can be executed from the command " + "line using 'java -jar'");
packageTask.setGroup(BasePlugin.BUILD_GROUP);
packageTask.dependsOn(project.getConfigurations().getByName(Dependency.ARCHIVES_CONFIGURATION)
.getAllArtifacts().getBuildDependencies());
return packageTask;
}
private Repackage addRepackageTask(Project project) {
Repackage packageTask = project.getTasks().create(REPACKAGE_TASK_NAME, Repackage.class);
packageTask.setDescription("Repackage existing JAR and WAR "
+ "archives so that they can be executed from the command " + "line using 'java -jar'");
packageTask.setGroup(BasePlugin.BUILD_GROUP);
packageTask.dependsOn(project.getConfigurations().getByName(Dependency.ARCHIVES_CONFIGURATION)
.getAllArtifacts().getBuildDependencies());
return packageTask;
}
private void ensureTaskRunsOnAssembly(Project project, Repackage task) {
project.getTasks().getByName(BasePlugin.ASSEMBLE_TASK_NAME).dependsOn(task);
}
private void ensureTaskRunsOnAssembly(Project project, Repackage task) {
project.getTasks().getByName(BasePlugin.ASSEMBLE_TASK_NAME).dependsOn(task);
}
}
......@@ -644,6 +644,15 @@ public class SpringApplication {
this.initializers = new ArrayList<ApplicationContextInitializer<?>>(initializers);
}
/**
* Add {@link ApplicationContextInitializer}s to be applied to the Spring
* {@link ApplicationContext} .
* @param initializers the initializers to add
*/
public void addInitializers(ApplicationContextInitializer<?>... initializers) {
this.initializers.addAll(Arrays.asList(initializers));
}
/**
* Returns a mutable list of the {@link ApplicationContextInitializer}s that will be
* applied to the Spring {@link ApplicationContext}.
......
......@@ -56,8 +56,8 @@ public class ContextIdApplicationContextInitializer implements
private int order = Integer.MAX_VALUE - 10;
public ContextIdApplicationContextInitializer() {
this(
"${spring.application.name:${vcap.application.name:${spring.config.name:application}}}");
this("${spring.application.name:${vcap.application.name:"
+ "${spring.config.name:application}}}");
}
/**
......
......@@ -50,7 +50,6 @@ import org.springframework.web.context.support.GenericWebApplicationContext;
* create the application context.
*
* @author Dave Syer
*
*/
public class SpringApplicationContextLoader extends AbstractContextLoader {
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment