public void initializeGlobalExtensions() { for (Class<?> clazz : globalExtensionClasses) { verifyGlobalExtension(clazz); IGlobalExtension extension = instantiateGlobalExtension(clazz); configureExtension(extension); globalExtensions.add(extension); } }
private Object getOrCreateConfiguration(Class<?> type, String name, Object extension) { Object config = configurationsByType.get(type); if (config == null) { config = createConfiguration(type, extension); configurationsByType.put(type, config); configurationsByName.put(name, config); } return config; }
@Nullable public <T> T getConfiguration(Class<T> type) { return globalExtensionRegistry.getConfigurationByType(type); }
private void start() { globalExtensionRegistry.initializeGlobalExtensions(); if (configurationScript != null) { ConfigurationBuilder builder = new ConfigurationBuilder(); builder.build(globalExtensionRegistry, configurationScript); } globalExtensionRegistry.startGlobalExtensions(); }
GlobalExtensionRegistry(List<Class<?>> globalExtensionClasses, List<?> initialConfigurations) { this.globalExtensionClasses = globalExtensionClasses; initializeConfigurations(initialConfigurations); }
@Override public void configureExtension(Object extension) { for (Field field : extension.getClass().getDeclaredFields()) { ConfigurationObject annotation = field.getType().getAnnotation(ConfigurationObject.class); if (annotation != null) { injectConfiguration(field, annotation.value(), extension); } } }
private void injectConfiguration(Field field, String name, Object extension) { Object config = getOrCreateConfiguration(field.getType(), name, extension); field.setAccessible(true); try { field.set(extension, config); } catch (IllegalAccessException e) { throw new UnreachableCodeError(); } }
private RunContext(String name, File spockUserHome, @Nullable DelegatingScript configurationScript, List<Class<?>> globalExtensionClasses) { this.name = name; this.spockUserHome = spockUserHome; this.configurationScript = configurationScript; this.globalExtensionClasses = globalExtensionClasses; globalExtensionRegistry = new GlobalExtensionRegistry(globalExtensionClasses, Collections.singletonList(new RunnerConfiguration())); }
private IStackTraceFilter createStackTraceFilter(SpecInfo spec) { RunnerConfiguration runnerConfig = globalExtensionRegistry.getConfigurationByType(RunnerConfiguration.class); return runnerConfig.filterStackTrace ? new StackTraceFilter(spec) : new DummyStackTraceFilter(); }