From 58d080484c6f83f4e17a79268275a7219d3321d0 Mon Sep 17 00:00:00 2001 From: Guillaume Nodet Date: Wed, 13 Jan 2021 23:30:21 +0100 Subject: [PATCH] Reformat --- .../plugin/DefaultMavenPluginManager.java | 831 ++++++++---------- .../ValidatingConfigurationListener.java | 99 +-- 2 files changed, 400 insertions(+), 530 deletions(-) diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/plugin/DefaultMavenPluginManager.java b/daemon/src/main/java/org/mvndaemon/mvnd/plugin/DefaultMavenPluginManager.java index 2e63aa72..cb248e77 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/plugin/DefaultMavenPluginManager.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/plugin/DefaultMavenPluginManager.java @@ -1,24 +1,38 @@ +/* + * Copyright 2019 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.mvndaemon.mvnd.plugin; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. */ - import java.io.BufferedInputStream; import java.io.ByteArrayOutputStream; import java.io.File; @@ -37,7 +51,6 @@ import java.util.Map; import java.util.Objects; import java.util.jar.JarFile; import java.util.zip.ZipEntry; - import org.apache.maven.RepositoryUtils; import org.apache.maven.artifact.Artifact; import org.apache.maven.classrealm.ClassRealmManager; @@ -114,12 +127,11 @@ import org.eclipse.aether.util.graph.visitor.PreorderNodeListGenerator; * plugins as well as special purpose plugins like reports. * * @author Benjamin Bentmann - * @since 3.0 + * @since 3.0 */ -@Component( role = MavenPluginManager.class ) +@Component(role = MavenPluginManager.class) public class DefaultMavenPluginManager - implements MavenPluginManager -{ + implements MavenPluginManager { /** *

@@ -169,228 +181,184 @@ public class DefaultMavenPluginManager private PluginDescriptorBuilder builder = new PluginDescriptorBuilder(); - public synchronized PluginDescriptor getPluginDescriptor( Plugin plugin, List repositories, - RepositorySystemSession session ) - throws PluginResolutionException, PluginDescriptorParsingException, InvalidPluginDescriptorException - { - PluginDescriptorCache.Key cacheKey = pluginDescriptorCache.createKey( plugin, repositories, session ); + public synchronized PluginDescriptor getPluginDescriptor(Plugin plugin, List repositories, + RepositorySystemSession session) + throws PluginResolutionException, PluginDescriptorParsingException, InvalidPluginDescriptorException { + PluginDescriptorCache.Key cacheKey = pluginDescriptorCache.createKey(plugin, repositories, session); - PluginDescriptor pluginDescriptor = pluginDescriptorCache.get( cacheKey ); + PluginDescriptor pluginDescriptor = pluginDescriptorCache.get(cacheKey); - if ( pluginDescriptor == null ) - { - org.eclipse.aether.artifact.Artifact artifact = - pluginDependenciesResolver.resolve( plugin, repositories, session ); + if (pluginDescriptor == null) { + org.eclipse.aether.artifact.Artifact artifact = pluginDependenciesResolver.resolve(plugin, repositories, session); - Artifact pluginArtifact = RepositoryUtils.toArtifact( artifact ); + Artifact pluginArtifact = RepositoryUtils.toArtifact(artifact); - pluginDescriptor = extractPluginDescriptor( pluginArtifact, plugin ); + pluginDescriptor = extractPluginDescriptor(pluginArtifact, plugin); - pluginDescriptor.setRequiredMavenVersion( artifact.getProperty( "requiredMavenVersion", null ) ); + pluginDescriptor.setRequiredMavenVersion(artifact.getProperty("requiredMavenVersion", null)); - pluginDescriptorCache.put( cacheKey, pluginDescriptor ); + pluginDescriptorCache.put(cacheKey, pluginDescriptor); } - pluginDescriptor.setPlugin( plugin ); + pluginDescriptor.setPlugin(plugin); return pluginDescriptor; } - private PluginDescriptor extractPluginDescriptor( Artifact pluginArtifact, Plugin plugin ) - throws PluginDescriptorParsingException, InvalidPluginDescriptorException - { + private PluginDescriptor extractPluginDescriptor(Artifact pluginArtifact, Plugin plugin) + throws PluginDescriptorParsingException, InvalidPluginDescriptorException { PluginDescriptor pluginDescriptor = null; File pluginFile = pluginArtifact.getFile(); - try - { - if ( pluginFile.isFile() ) - { - try ( JarFile pluginJar = new JarFile( pluginFile, false ) ) - { - ZipEntry pluginDescriptorEntry = pluginJar.getEntry( getPluginDescriptorLocation() ); + try { + if (pluginFile.isFile()) { + try (JarFile pluginJar = new JarFile(pluginFile, false)) { + ZipEntry pluginDescriptorEntry = pluginJar.getEntry(getPluginDescriptorLocation()); - if ( pluginDescriptorEntry != null ) - { - InputStream is = pluginJar.getInputStream( pluginDescriptorEntry ); + if (pluginDescriptorEntry != null) { + InputStream is = pluginJar.getInputStream(pluginDescriptorEntry); - pluginDescriptor = parsePluginDescriptor( is, plugin, pluginFile.getAbsolutePath() ); + pluginDescriptor = parsePluginDescriptor(is, plugin, pluginFile.getAbsolutePath()); } } - } - else - { - File pluginXml = new File( pluginFile, getPluginDescriptorLocation() ); + } else { + File pluginXml = new File(pluginFile, getPluginDescriptorLocation()); - if ( pluginXml.isFile() ) - { - try ( InputStream is = new BufferedInputStream( new FileInputStream( pluginXml ) ) ) - { - pluginDescriptor = parsePluginDescriptor( is, plugin, pluginXml.getAbsolutePath() ); + if (pluginXml.isFile()) { + try (InputStream is = new BufferedInputStream(new FileInputStream(pluginXml))) { + pluginDescriptor = parsePluginDescriptor(is, plugin, pluginXml.getAbsolutePath()); } } } - if ( pluginDescriptor == null ) - { - throw new IOException( "No plugin descriptor found at " + getPluginDescriptorLocation() ); + if (pluginDescriptor == null) { + throw new IOException("No plugin descriptor found at " + getPluginDescriptorLocation()); } - } - catch ( IOException e ) - { - throw new PluginDescriptorParsingException( plugin, pluginFile.getAbsolutePath(), e ); + } catch (IOException e) { + throw new PluginDescriptorParsingException(plugin, pluginFile.getAbsolutePath(), e); } - MavenPluginValidator validator = new MavenPluginValidator( pluginArtifact ); + MavenPluginValidator validator = new MavenPluginValidator(pluginArtifact); - validator.validate( pluginDescriptor ); + validator.validate(pluginDescriptor); - if ( validator.hasErrors() ) - { + if (validator.hasErrors()) { throw new InvalidPluginDescriptorException( - "Invalid plugin descriptor for " + plugin.getId() + " (" + pluginFile + ")", validator.getErrors() ); + "Invalid plugin descriptor for " + plugin.getId() + " (" + pluginFile + ")", validator.getErrors()); } - pluginDescriptor.setPluginArtifact( pluginArtifact ); + pluginDescriptor.setPluginArtifact(pluginArtifact); return pluginDescriptor; } - private String getPluginDescriptorLocation() - { + private String getPluginDescriptorLocation() { return "META-INF/maven/plugin.xml"; } - private PluginDescriptor parsePluginDescriptor( InputStream is, Plugin plugin, String descriptorLocation ) - throws PluginDescriptorParsingException - { - try - { - Reader reader = ReaderFactory.newXmlReader( is ); + private PluginDescriptor parsePluginDescriptor(InputStream is, Plugin plugin, String descriptorLocation) + throws PluginDescriptorParsingException { + try { + Reader reader = ReaderFactory.newXmlReader(is); - PluginDescriptor pluginDescriptor = builder.build( reader, descriptorLocation ); + PluginDescriptor pluginDescriptor = builder.build(reader, descriptorLocation); return pluginDescriptor; - } - catch ( IOException | PlexusConfigurationException e ) - { - throw new PluginDescriptorParsingException( plugin, descriptorLocation, e ); + } catch (IOException | PlexusConfigurationException e) { + throw new PluginDescriptorParsingException(plugin, descriptorLocation, e); } } - public MojoDescriptor getMojoDescriptor( Plugin plugin, String goal, List repositories, - RepositorySystemSession session ) - throws MojoNotFoundException, PluginResolutionException, PluginDescriptorParsingException, - InvalidPluginDescriptorException - { - PluginDescriptor pluginDescriptor = getPluginDescriptor( plugin, repositories, session ); + public MojoDescriptor getMojoDescriptor(Plugin plugin, String goal, List repositories, + RepositorySystemSession session) + throws MojoNotFoundException, PluginResolutionException, PluginDescriptorParsingException, + InvalidPluginDescriptorException { + PluginDescriptor pluginDescriptor = getPluginDescriptor(plugin, repositories, session); - MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo( goal ); + MojoDescriptor mojoDescriptor = pluginDescriptor.getMojo(goal); - if ( mojoDescriptor == null ) - { - throw new MojoNotFoundException( goal, pluginDescriptor ); + if (mojoDescriptor == null) { + throw new MojoNotFoundException(goal, pluginDescriptor); } return mojoDescriptor; } - public void checkRequiredMavenVersion( PluginDescriptor pluginDescriptor ) - throws PluginIncompatibleException - { + public void checkRequiredMavenVersion(PluginDescriptor pluginDescriptor) + throws PluginIncompatibleException { String requiredMavenVersion = pluginDescriptor.getRequiredMavenVersion(); - if ( StringUtils.isNotBlank( requiredMavenVersion ) ) - { - try - { - if ( !runtimeInformation.isMavenVersion( requiredMavenVersion ) ) - { - throw new PluginIncompatibleException( pluginDescriptor.getPlugin(), - "The plugin " + pluginDescriptor.getId() - + " requires Maven version " + requiredMavenVersion ); + if (StringUtils.isNotBlank(requiredMavenVersion)) { + try { + if (!runtimeInformation.isMavenVersion(requiredMavenVersion)) { + throw new PluginIncompatibleException(pluginDescriptor.getPlugin(), + "The plugin " + pluginDescriptor.getId() + + " requires Maven version " + requiredMavenVersion); } - } - catch ( RuntimeException e ) - { - logger.warn( "Could not verify plugin's Maven prerequisite: " + e.getMessage() ); + } catch (RuntimeException e) { + logger.warn("Could not verify plugin's Maven prerequisite: " + e.getMessage()); } } } - public synchronized void setupPluginRealm( PluginDescriptor pluginDescriptor, MavenSession session, - ClassLoader parent, List imports, DependencyFilter filter ) - throws PluginResolutionException, PluginContainerException - { + public synchronized void setupPluginRealm(PluginDescriptor pluginDescriptor, MavenSession session, + ClassLoader parent, List imports, DependencyFilter filter) + throws PluginResolutionException, PluginContainerException { Plugin plugin = pluginDescriptor.getPlugin(); MavenProject project = session.getCurrentProject(); - if ( plugin.isExtensions() ) - { + if (plugin.isExtensions()) { ExtensionRealmCache.CacheRecord extensionRecord; - try - { + try { RepositorySystemSession repositorySession = session.getRepositorySession(); - extensionRecord = setupExtensionsRealm( project, plugin, repositorySession ); - } - catch ( PluginManagerException e ) - { + extensionRecord = setupExtensionsRealm(project, plugin, repositorySession); + } catch (PluginManagerException e) { // extensions realm is expected to be fully setup at this point // any exception means a problem in maven code, not a user error - throw new IllegalStateException( e ); + throw new IllegalStateException(e); } ClassRealm pluginRealm = extensionRecord.getRealm(); List pluginArtifacts = extensionRecord.getArtifacts(); - for ( ComponentDescriptor componentDescriptor : pluginDescriptor.getComponents() ) - { - componentDescriptor.setRealm( pluginRealm ); + for (ComponentDescriptor componentDescriptor : pluginDescriptor.getComponents()) { + componentDescriptor.setRealm(pluginRealm); } - pluginDescriptor.setClassRealm( pluginRealm ); - pluginDescriptor.setArtifacts( pluginArtifacts ); - } - else - { - Map foreignImports = calcImports( project, parent, imports ); + pluginDescriptor.setClassRealm(pluginRealm); + pluginDescriptor.setArtifacts(pluginArtifacts); + } else { + Map foreignImports = calcImports(project, parent, imports); - PluginRealmCache.Key cacheKey = pluginRealmCache.createKey( plugin, parent, foreignImports, filter, - project.getRemotePluginRepositories(), - session.getRepositorySession() ); + PluginRealmCache.Key cacheKey = pluginRealmCache.createKey(plugin, parent, foreignImports, filter, + project.getRemotePluginRepositories(), + session.getRepositorySession()); - PluginRealmCache.CacheRecord cacheRecord = pluginRealmCache.get( cacheKey ); + PluginRealmCache.CacheRecord cacheRecord = pluginRealmCache.get(cacheKey); - if ( cacheRecord != null ) - { - pluginDescriptor.setClassRealm( cacheRecord.getRealm() ); - pluginDescriptor.setArtifacts( new ArrayList<>( cacheRecord.getArtifacts() ) ); - for ( ComponentDescriptor componentDescriptor : pluginDescriptor.getComponents() ) - { - componentDescriptor.setRealm( cacheRecord.getRealm() ); + if (cacheRecord != null) { + pluginDescriptor.setClassRealm(cacheRecord.getRealm()); + pluginDescriptor.setArtifacts(new ArrayList<>(cacheRecord.getArtifacts())); + for (ComponentDescriptor componentDescriptor : pluginDescriptor.getComponents()) { + componentDescriptor.setRealm(cacheRecord.getRealm()); } - } - else - { - createPluginRealm( pluginDescriptor, session, parent, foreignImports, filter ); + } else { + createPluginRealm(pluginDescriptor, session, parent, foreignImports, filter); - cacheRecord = - pluginRealmCache.put( cacheKey, pluginDescriptor.getClassRealm(), pluginDescriptor.getArtifacts() ); + cacheRecord = pluginRealmCache.put(cacheKey, pluginDescriptor.getClassRealm(), pluginDescriptor.getArtifacts()); } - pluginRealmCache.register( project, cacheKey, cacheRecord ); + pluginRealmCache.register(project, cacheKey, cacheRecord); } } - private void createPluginRealm( PluginDescriptor pluginDescriptor, MavenSession session, ClassLoader parent, - Map foreignImports, DependencyFilter filter ) - throws PluginResolutionException, PluginContainerException - { - Plugin plugin = - Objects.requireNonNull( pluginDescriptor.getPlugin(), "pluginDescriptor.plugin cannot be null" ); + private void createPluginRealm(PluginDescriptor pluginDescriptor, MavenSession session, ClassLoader parent, + Map foreignImports, DependencyFilter filter) + throws PluginResolutionException, PluginContainerException { + Plugin plugin = Objects.requireNonNull(pluginDescriptor.getPlugin(), "pluginDescriptor.plugin cannot be null"); - Artifact pluginArtifact = Objects.requireNonNull( pluginDescriptor.getPluginArtifact(), - "pluginDescriptor.pluginArtifact cannot be null" ); + Artifact pluginArtifact = Objects.requireNonNull(pluginDescriptor.getPluginArtifact(), + "pluginDescriptor.pluginArtifact cannot be null"); MavenProject project = session.getCurrentProject(); @@ -399,520 +367,421 @@ public class DefaultMavenPluginManager RepositorySystemSession repositorySession = session.getRepositorySession(); DependencyFilter dependencyFilter = project.getExtensionDependencyFilter(); - dependencyFilter = AndDependencyFilter.newInstance( dependencyFilter, filter ); + dependencyFilter = AndDependencyFilter.newInstance(dependencyFilter, filter); - DependencyNode root = - pluginDependenciesResolver.resolve( plugin, RepositoryUtils.toArtifact( pluginArtifact ), dependencyFilter, - project.getRemotePluginRepositories(), repositorySession ); + DependencyNode root = pluginDependenciesResolver.resolve(plugin, RepositoryUtils.toArtifact(pluginArtifact), + dependencyFilter, + project.getRemotePluginRepositories(), repositorySession); PreorderNodeListGenerator nlg = new PreorderNodeListGenerator(); - root.accept( nlg ); + root.accept(nlg); - pluginArtifacts = toMavenArtifacts( root, nlg ); + pluginArtifacts = toMavenArtifacts(root, nlg); - pluginRealm = classRealmManager.createPluginRealm( plugin, parent, null, foreignImports, - toAetherArtifacts( pluginArtifacts ) ); + pluginRealm = classRealmManager.createPluginRealm(plugin, parent, null, foreignImports, + toAetherArtifacts(pluginArtifacts)); - discoverPluginComponents( pluginRealm, plugin, pluginDescriptor ); + discoverPluginComponents(pluginRealm, plugin, pluginDescriptor); - pluginDescriptor.setClassRealm( pluginRealm ); - pluginDescriptor.setArtifacts( pluginArtifacts ); + pluginDescriptor.setClassRealm(pluginRealm); + pluginDescriptor.setArtifacts(pluginArtifacts); } - private void discoverPluginComponents( final ClassRealm pluginRealm, Plugin plugin, - PluginDescriptor pluginDescriptor ) - throws PluginContainerException - { - try - { - if ( pluginDescriptor != null ) - { - for ( ComponentDescriptor componentDescriptor : pluginDescriptor.getComponents() ) - { - componentDescriptor.setRealm( pluginRealm ); - container.addComponentDescriptor( componentDescriptor ); + private void discoverPluginComponents(final ClassRealm pluginRealm, Plugin plugin, + PluginDescriptor pluginDescriptor) + throws PluginContainerException { + try { + if (pluginDescriptor != null) { + for (ComponentDescriptor componentDescriptor : pluginDescriptor.getComponents()) { + componentDescriptor.setRealm(pluginRealm); + container.addComponentDescriptor(componentDescriptor); } } - ( (DefaultPlexusContainer) container ).discoverComponents( pluginRealm, new SessionScopeModule( container ), - new MojoExecutionScopeModule( container ) ); - } - catch ( ComponentLookupException | CycleDetectedInComponentGraphException e ) - { - throw new PluginContainerException( plugin, pluginRealm, - "Error in component graph of plugin " + plugin.getId() + ": " - + e.getMessage(), e ); + ((DefaultPlexusContainer) container).discoverComponents(pluginRealm, new SessionScopeModule(container), + new MojoExecutionScopeModule(container)); + } catch (ComponentLookupException | CycleDetectedInComponentGraphException e) { + throw new PluginContainerException(plugin, pluginRealm, + "Error in component graph of plugin " + plugin.getId() + ": " + + e.getMessage(), + e); } } - private List toAetherArtifacts( final List pluginArtifacts ) - { - return new ArrayList<>( RepositoryUtils.toArtifacts( pluginArtifacts ) ); + private List toAetherArtifacts(final List pluginArtifacts) { + return new ArrayList<>(RepositoryUtils.toArtifacts(pluginArtifacts)); } - private List toMavenArtifacts( DependencyNode root, PreorderNodeListGenerator nlg ) - { - List artifacts = new ArrayList<>( nlg.getNodes().size() ); - RepositoryUtils.toArtifacts( artifacts, Collections.singleton( root ), Collections.emptyList(), null ); - for ( Iterator it = artifacts.iterator(); it.hasNext(); ) - { + private List toMavenArtifacts(DependencyNode root, PreorderNodeListGenerator nlg) { + List artifacts = new ArrayList<>(nlg.getNodes().size()); + RepositoryUtils.toArtifacts(artifacts, Collections.singleton(root), Collections. emptyList(), null); + for (Iterator it = artifacts.iterator(); it.hasNext();) { Artifact artifact = it.next(); - if ( artifact.getFile() == null ) - { + if (artifact.getFile() == null) { it.remove(); } } - return Collections.unmodifiableList( artifacts ); + return Collections.unmodifiableList(artifacts); } - private Map calcImports( MavenProject project, ClassLoader parent, List imports ) - { + private Map calcImports(MavenProject project, ClassLoader parent, List imports) { Map foreignImports = new HashMap<>(); ClassLoader projectRealm = project.getClassRealm(); - if ( projectRealm != null ) - { - foreignImports.put( "", projectRealm ); - } - else - { - foreignImports.put( "", classRealmManager.getMavenApiRealm() ); + if (projectRealm != null) { + foreignImports.put("", projectRealm); + } else { + foreignImports.put("", classRealmManager.getMavenApiRealm()); } - if ( parent != null && imports != null ) - { - for ( String parentImport : imports ) - { - foreignImports.put( parentImport, parent ); + if (parent != null && imports != null) { + for (String parentImport : imports) { + foreignImports.put(parentImport, parent); } } return foreignImports; } - public T getConfiguredMojo( Class mojoInterface, MavenSession session, MojoExecution mojoExecution ) - throws PluginConfigurationException, PluginContainerException - { + public T getConfiguredMojo(Class mojoInterface, MavenSession session, MojoExecution mojoExecution) + throws PluginConfigurationException, PluginContainerException { MojoDescriptor mojoDescriptor = mojoExecution.getMojoDescriptor(); PluginDescriptor pluginDescriptor = mojoDescriptor.getPluginDescriptor(); ClassRealm pluginRealm = pluginDescriptor.getClassRealm(); - if ( logger.isDebugEnabled() ) - { - logger.debug( "Configuring mojo " + mojoDescriptor.getId() + " from plugin realm " + pluginRealm ); + if (logger.isDebugEnabled()) { + logger.debug("Configuring mojo " + mojoDescriptor.getId() + " from plugin realm " + pluginRealm); } // We are forcing the use of the plugin realm for all lookups that might occur during // the lifecycle that is part of the lookup. Here we are specifically trying to keep // lookups that occur in contextualize calls in line with the right realm. - ClassRealm oldLookupRealm = container.setLookupRealm( pluginRealm ); + ClassRealm oldLookupRealm = container.setLookupRealm(pluginRealm); ClassLoader oldClassLoader = Thread.currentThread().getContextClassLoader(); - Thread.currentThread().setContextClassLoader( pluginRealm ); + Thread.currentThread().setContextClassLoader(pluginRealm); - try - { + try { T mojo; - try - { - mojo = container.lookup( mojoInterface, mojoDescriptor.getRoleHint() ); - } - catch ( ComponentLookupException e ) - { + try { + mojo = container.lookup(mojoInterface, mojoDescriptor.getRoleHint()); + } catch (ComponentLookupException e) { Throwable cause = e.getCause(); - while ( cause != null && !( cause instanceof LinkageError ) - && !( cause instanceof ClassNotFoundException ) ) - { + while (cause != null && !(cause instanceof LinkageError) + && !(cause instanceof ClassNotFoundException)) { cause = cause.getCause(); } - if ( ( cause instanceof NoClassDefFoundError ) || ( cause instanceof ClassNotFoundException ) ) - { - ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 ); - PrintStream ps = new PrintStream( os ); - ps.println( "Unable to load the mojo '" + mojoDescriptor.getGoal() + "' in the plugin '" - + pluginDescriptor.getId() + "'. A required class is missing: " - + cause.getMessage() ); - pluginRealm.display( ps ); + if ((cause instanceof NoClassDefFoundError) || (cause instanceof ClassNotFoundException)) { + ByteArrayOutputStream os = new ByteArrayOutputStream(1024); + PrintStream ps = new PrintStream(os); + ps.println("Unable to load the mojo '" + mojoDescriptor.getGoal() + "' in the plugin '" + + pluginDescriptor.getId() + "'. A required class is missing: " + + cause.getMessage()); + pluginRealm.display(ps); - throw new PluginContainerException( mojoDescriptor, pluginRealm, os.toString(), cause ); - } - else if ( cause instanceof LinkageError ) - { - ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 ); - PrintStream ps = new PrintStream( os ); - ps.println( "Unable to load the mojo '" + mojoDescriptor.getGoal() + "' in the plugin '" - + pluginDescriptor.getId() + "' due to an API incompatibility: " - + e.getClass().getName() + ": " + cause.getMessage() ); - pluginRealm.display( ps ); + throw new PluginContainerException(mojoDescriptor, pluginRealm, os.toString(), cause); + } else if (cause instanceof LinkageError) { + ByteArrayOutputStream os = new ByteArrayOutputStream(1024); + PrintStream ps = new PrintStream(os); + ps.println("Unable to load the mojo '" + mojoDescriptor.getGoal() + "' in the plugin '" + + pluginDescriptor.getId() + "' due to an API incompatibility: " + + e.getClass().getName() + ": " + cause.getMessage()); + pluginRealm.display(ps); - throw new PluginContainerException( mojoDescriptor, pluginRealm, os.toString(), cause ); + throw new PluginContainerException(mojoDescriptor, pluginRealm, os.toString(), cause); } - throw new PluginContainerException( mojoDescriptor, pluginRealm, - "Unable to load the mojo '" + mojoDescriptor.getGoal() - + "' (or one of its required components) from the plugin '" - + pluginDescriptor.getId() + "'", e ); + throw new PluginContainerException(mojoDescriptor, pluginRealm, + "Unable to load the mojo '" + mojoDescriptor.getGoal() + + "' (or one of its required components) from the plugin '" + + pluginDescriptor.getId() + "'", + e); } - if ( mojo instanceof ContextEnabled ) - { + if (mojo instanceof ContextEnabled) { MavenProject project = session.getCurrentProject(); - Map pluginContext = session.getPluginContext( pluginDescriptor, project ); + Map pluginContext = session.getPluginContext(pluginDescriptor, project); - if ( pluginContext != null ) - { - pluginContext.put( "project", project ); + if (pluginContext != null) { + pluginContext.put("project", project); - pluginContext.put( "pluginDescriptor", pluginDescriptor ); + pluginContext.put("pluginDescriptor", pluginDescriptor); - ( (ContextEnabled) mojo ).setPluginContext( pluginContext ); + ((ContextEnabled) mojo).setPluginContext(pluginContext); } } - if ( mojo instanceof Mojo ) - { - Logger mojoLogger = loggerManager.getLoggerForComponent( mojoDescriptor.getImplementation() ); - ( (Mojo) mojo ).setLog( new DefaultLog( mojoLogger ) ); + if (mojo instanceof Mojo) { + Logger mojoLogger = loggerManager.getLoggerForComponent(mojoDescriptor.getImplementation()); + ((Mojo) mojo).setLog(new DefaultLog(mojoLogger)); } Xpp3Dom dom = mojoExecution.getConfiguration(); PlexusConfiguration pomConfiguration; - if ( dom == null ) - { - pomConfiguration = new XmlPlexusConfiguration( "configuration" ); - } - else - { - pomConfiguration = new XmlPlexusConfiguration( dom ); + if (dom == null) { + pomConfiguration = new XmlPlexusConfiguration("configuration"); + } else { + pomConfiguration = new XmlPlexusConfiguration(dom); } - ExpressionEvaluator expressionEvaluator = new PluginParameterExpressionEvaluator( session, mojoExecution ); + ExpressionEvaluator expressionEvaluator = new PluginParameterExpressionEvaluator(session, mojoExecution); - populatePluginFields( mojo, mojoDescriptor, pluginRealm, pomConfiguration, expressionEvaluator ); + populatePluginFields(mojo, mojoDescriptor, pluginRealm, pomConfiguration, expressionEvaluator); return mojo; - } - finally - { - Thread.currentThread().setContextClassLoader( oldClassLoader ); - container.setLookupRealm( oldLookupRealm ); + } finally { + Thread.currentThread().setContextClassLoader(oldClassLoader); + container.setLookupRealm(oldLookupRealm); } } - private void populatePluginFields( Object mojo, MojoDescriptor mojoDescriptor, ClassRealm pluginRealm, - PlexusConfiguration configuration, ExpressionEvaluator expressionEvaluator ) - throws PluginConfigurationException - { + private void populatePluginFields(Object mojo, MojoDescriptor mojoDescriptor, ClassRealm pluginRealm, + PlexusConfiguration configuration, ExpressionEvaluator expressionEvaluator) + throws PluginConfigurationException { ComponentConfigurator configurator = null; String configuratorId = mojoDescriptor.getComponentConfigurator(); - if ( StringUtils.isEmpty( configuratorId ) ) - { + if (StringUtils.isEmpty(configuratorId)) { configuratorId = "basic"; } - try - { + try { // TODO could the configuration be passed to lookup and the configurator known to plexus via the descriptor // so that this method could entirely be handled by a plexus lookup? - configurator = container.lookup( ComponentConfigurator.class, configuratorId ); + configurator = container.lookup(ComponentConfigurator.class, configuratorId); - ConfigurationListener listener = new DebugConfigurationListener( logger ); + ConfigurationListener listener = new DebugConfigurationListener(logger); - ValidatingConfigurationListener validator = - new ValidatingConfigurationListener( mojo, mojoDescriptor, listener ); + ValidatingConfigurationListener validator = new ValidatingConfigurationListener(mojo, mojoDescriptor, listener); logger.debug( - "Configuring mojo '" + mojoDescriptor.getId() + "' with " + configuratorId + " configurator -->" ); + "Configuring mojo '" + mojoDescriptor.getId() + "' with " + configuratorId + " configurator -->"); - configurator.configureComponent( mojo, configuration, expressionEvaluator, pluginRealm, validator ); + configurator.configureComponent(mojo, configuration, expressionEvaluator, pluginRealm, validator); - logger.debug( "-- end configuration --" ); + logger.debug("-- end configuration --"); Collection missingParameters = validator.getMissingParameters(); - if ( !missingParameters.isEmpty() ) - { - if ( "basic".equals( configuratorId ) ) - { - throw new PluginParameterException( mojoDescriptor, new ArrayList<>( missingParameters ) ); - } - else - { + if (!missingParameters.isEmpty()) { + if ("basic".equals(configuratorId)) { + throw new PluginParameterException(mojoDescriptor, new ArrayList<>(missingParameters)); + } else { /* * NOTE: Other configurators like the map-oriented one don't call into the listener, so do it the * hard way. */ - validateParameters( mojoDescriptor, configuration, expressionEvaluator ); + validateParameters(mojoDescriptor, configuration, expressionEvaluator); } } - } - catch ( ComponentConfigurationException e ) - { + } catch (ComponentConfigurationException e) { String message = "Unable to parse configuration of mojo " + mojoDescriptor.getId(); - if ( e.getFailedConfiguration() != null ) - { + if (e.getFailedConfiguration() != null) { message += " for parameter " + e.getFailedConfiguration().getName(); } message += ": " + e.getMessage(); - throw new PluginConfigurationException( mojoDescriptor.getPluginDescriptor(), message, e ); - } - catch ( ComponentLookupException e ) - { - throw new PluginConfigurationException( mojoDescriptor.getPluginDescriptor(), - "Unable to retrieve component configurator " + configuratorId - + " for configuration of mojo " + mojoDescriptor.getId(), e ); - } - catch ( NoClassDefFoundError e ) - { - ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 ); - PrintStream ps = new PrintStream( os ); - ps.println( "A required class was missing during configuration of mojo " + mojoDescriptor.getId() + ": " - + e.getMessage() ); - pluginRealm.display( ps ); + throw new PluginConfigurationException(mojoDescriptor.getPluginDescriptor(), message, e); + } catch (ComponentLookupException e) { + throw new PluginConfigurationException(mojoDescriptor.getPluginDescriptor(), + "Unable to retrieve component configurator " + configuratorId + + " for configuration of mojo " + mojoDescriptor.getId(), + e); + } catch (NoClassDefFoundError e) { + ByteArrayOutputStream os = new ByteArrayOutputStream(1024); + PrintStream ps = new PrintStream(os); + ps.println("A required class was missing during configuration of mojo " + mojoDescriptor.getId() + ": " + + e.getMessage()); + pluginRealm.display(ps); - throw new PluginConfigurationException( mojoDescriptor.getPluginDescriptor(), os.toString(), e ); - } - catch ( LinkageError e ) - { - ByteArrayOutputStream os = new ByteArrayOutputStream( 1024 ); - PrintStream ps = new PrintStream( os ); + throw new PluginConfigurationException(mojoDescriptor.getPluginDescriptor(), os.toString(), e); + } catch (LinkageError e) { + ByteArrayOutputStream os = new ByteArrayOutputStream(1024); + PrintStream ps = new PrintStream(os); ps.println( - "An API incompatibility was encountered during configuration of mojo " + mojoDescriptor.getId() + ": " - + e.getClass().getName() + ": " + e.getMessage() ); - pluginRealm.display( ps ); + "An API incompatibility was encountered during configuration of mojo " + mojoDescriptor.getId() + ": " + + e.getClass().getName() + ": " + e.getMessage()); + pluginRealm.display(ps); - throw new PluginConfigurationException( mojoDescriptor.getPluginDescriptor(), os.toString(), e ); - } - finally - { - if ( configurator != null ) - { - try - { - container.release( configurator ); - } - catch ( ComponentLifecycleException e ) - { - logger.debug( "Failed to release mojo configurator - ignoring." ); + throw new PluginConfigurationException(mojoDescriptor.getPluginDescriptor(), os.toString(), e); + } finally { + if (configurator != null) { + try { + container.release(configurator); + } catch (ComponentLifecycleException e) { + logger.debug("Failed to release mojo configurator - ignoring."); } } } } - private void validateParameters( MojoDescriptor mojoDescriptor, PlexusConfiguration configuration, - ExpressionEvaluator expressionEvaluator ) - throws ComponentConfigurationException, PluginParameterException - { - if ( mojoDescriptor.getParameters() == null ) - { + private void validateParameters(MojoDescriptor mojoDescriptor, PlexusConfiguration configuration, + ExpressionEvaluator expressionEvaluator) + throws ComponentConfigurationException, PluginParameterException { + if (mojoDescriptor.getParameters() == null) { return; } List invalidParameters = new ArrayList<>(); - for ( Parameter parameter : mojoDescriptor.getParameters() ) - { - if ( !parameter.isRequired() ) - { + for (Parameter parameter : mojoDescriptor.getParameters()) { + if (!parameter.isRequired()) { continue; } Object value = null; - PlexusConfiguration config = configuration.getChild( parameter.getName(), false ); - if ( config != null ) - { - String expression = config.getValue( null ); + PlexusConfiguration config = configuration.getChild(parameter.getName(), false); + if (config != null) { + String expression = config.getValue(null); - try - { - value = expressionEvaluator.evaluate( expression ); + try { + value = expressionEvaluator.evaluate(expression); - if ( value == null ) - { - value = config.getAttribute( "default-value", null ); + if (value == null) { + value = config.getAttribute("default-value", null); } - } - catch ( ExpressionEvaluationException e ) - { + } catch (ExpressionEvaluationException e) { String msg = "Error evaluating the expression '" + expression + "' for configuration value '" - + configuration.getName() + "'"; - throw new ComponentConfigurationException( configuration, msg, e ); + + configuration.getName() + "'"; + throw new ComponentConfigurationException(configuration, msg, e); } } - if ( value == null && ( config == null || config.getChildCount() <= 0 ) ) - { - invalidParameters.add( parameter ); + if (value == null && (config == null || config.getChildCount() <= 0)) { + invalidParameters.add(parameter); } } - if ( !invalidParameters.isEmpty() ) - { - throw new PluginParameterException( mojoDescriptor, invalidParameters ); + if (!invalidParameters.isEmpty()) { + throw new PluginParameterException(mojoDescriptor, invalidParameters); } } - public void releaseMojo( Object mojo, MojoExecution mojoExecution ) - { - if ( mojo != null ) - { - try - { - container.release( mojo ); - } - catch ( ComponentLifecycleException e ) - { + public void releaseMojo(Object mojo, MojoExecution mojoExecution) { + if (mojo != null) { + try { + container.release(mojo); + } catch (ComponentLifecycleException e) { String goalExecId = mojoExecution.getGoal(); - if ( mojoExecution.getExecutionId() != null ) - { + if (mojoExecution.getExecutionId() != null) { goalExecId += " {execution: " + mojoExecution.getExecutionId() + "}"; } - logger.debug( "Error releasing mojo for " + goalExecId, e ); + logger.debug("Error releasing mojo for " + goalExecId, e); } } } - public ExtensionRealmCache.CacheRecord setupExtensionsRealm( MavenProject project, Plugin plugin, - RepositorySystemSession session ) - throws PluginManagerException - { - @SuppressWarnings( "unchecked" ) Map pluginRealms = - (Map) project.getContextValue( KEY_EXTENSIONS_REALMS ); - if ( pluginRealms == null ) - { + public ExtensionRealmCache.CacheRecord setupExtensionsRealm(MavenProject project, Plugin plugin, + RepositorySystemSession session) + throws PluginManagerException { + @SuppressWarnings("unchecked") + Map pluginRealms = (Map) project + .getContextValue(KEY_EXTENSIONS_REALMS); + if (pluginRealms == null) { pluginRealms = new HashMap<>(); - project.setContextValue( KEY_EXTENSIONS_REALMS, pluginRealms ); + project.setContextValue(KEY_EXTENSIONS_REALMS, pluginRealms); } final String pluginKey = plugin.getId(); - ExtensionRealmCache.CacheRecord extensionRecord = pluginRealms.get( pluginKey ); - if ( extensionRecord != null ) - { + ExtensionRealmCache.CacheRecord extensionRecord = pluginRealms.get(pluginKey); + if (extensionRecord != null) { return extensionRecord; } final List repositories = project.getRemotePluginRepositories(); // resolve plugin version as necessary - if ( plugin.getVersion() == null ) - { - PluginVersionRequest versionRequest = new DefaultPluginVersionRequest( plugin, session, repositories ); - try - { - plugin.setVersion( pluginVersionResolver.resolve( versionRequest ).getVersion() ); - } - catch ( PluginVersionResolutionException e ) - { - throw new PluginManagerException( plugin, e.getMessage(), e ); + if (plugin.getVersion() == null) { + PluginVersionRequest versionRequest = new DefaultPluginVersionRequest(plugin, session, repositories); + try { + plugin.setVersion(pluginVersionResolver.resolve(versionRequest).getVersion()); + } catch (PluginVersionResolutionException e) { + throw new PluginManagerException(plugin, e.getMessage(), e); } } // resolve plugin artifacts List artifacts; - PluginArtifactsCache.Key cacheKey = pluginArtifactsCache.createKey( plugin, null, repositories, session ); + PluginArtifactsCache.Key cacheKey = pluginArtifactsCache.createKey(plugin, null, repositories, session); PluginArtifactsCache.CacheRecord recordArtifacts; - try - { - recordArtifacts = pluginArtifactsCache.get( cacheKey ); + try { + recordArtifacts = pluginArtifactsCache.get(cacheKey); + } catch (PluginResolutionException e) { + throw new PluginManagerException(plugin, e.getMessage(), e); } - catch ( PluginResolutionException e ) - { - throw new PluginManagerException( plugin, e.getMessage(), e ); - } - if ( recordArtifacts != null ) - { + if (recordArtifacts != null) { artifacts = recordArtifacts.getArtifacts(); - } - else - { - try - { - artifacts = resolveExtensionArtifacts( plugin, repositories, session ); - recordArtifacts = pluginArtifactsCache.put( cacheKey, artifacts ); - } - catch ( PluginResolutionException e ) - { - pluginArtifactsCache.put( cacheKey, e ); - pluginArtifactsCache.register( project, cacheKey, recordArtifacts ); - throw new PluginManagerException( plugin, e.getMessage(), e ); + } else { + try { + artifacts = resolveExtensionArtifacts(plugin, repositories, session); + recordArtifacts = pluginArtifactsCache.put(cacheKey, artifacts); + } catch (PluginResolutionException e) { + pluginArtifactsCache.put(cacheKey, e); + pluginArtifactsCache.register(project, cacheKey, recordArtifacts); + throw new PluginManagerException(plugin, e.getMessage(), e); } } - pluginArtifactsCache.register( project, cacheKey, recordArtifacts ); + pluginArtifactsCache.register(project, cacheKey, recordArtifacts); // create and cache extensions realms - final ExtensionRealmCache.Key extensionKey = extensionRealmCache.createKey( artifacts ); - extensionRecord = extensionRealmCache.get( extensionKey ); - if ( extensionRecord == null ) - { - ClassRealm extensionRealm = - classRealmManager.createExtensionRealm( plugin, toAetherArtifacts( artifacts ) ); + final ExtensionRealmCache.Key extensionKey = extensionRealmCache.createKey(artifacts); + extensionRecord = extensionRealmCache.get(extensionKey); + if (extensionRecord == null) { + ClassRealm extensionRealm = classRealmManager.createExtensionRealm(plugin, toAetherArtifacts(artifacts)); // TODO figure out how to use the same PluginDescriptor when running mojos PluginDescriptor pluginDescriptor = null; - if ( plugin.isExtensions() && !artifacts.isEmpty() ) - { + if (plugin.isExtensions() && !artifacts.isEmpty()) { // ignore plugin descriptor parsing errors at this point // these errors will reported during calculation of project build execution plan - try - { - pluginDescriptor = extractPluginDescriptor( artifacts.get( 0 ), plugin ); - } - catch ( PluginDescriptorParsingException | InvalidPluginDescriptorException e ) - { + try { + pluginDescriptor = extractPluginDescriptor(artifacts.get(0), plugin); + } catch (PluginDescriptorParsingException | InvalidPluginDescriptorException e) { // ignore, see above } } - discoverPluginComponents( extensionRealm, plugin, pluginDescriptor ); + discoverPluginComponents(extensionRealm, plugin, pluginDescriptor); ExtensionDescriptor extensionDescriptor = null; - Artifact extensionArtifact = artifacts.get( 0 ); - try - { - extensionDescriptor = extensionDescriptorBuilder.build( extensionArtifact.getFile() ); - } - catch ( IOException e ) - { + Artifact extensionArtifact = artifacts.get(0); + try { + extensionDescriptor = extensionDescriptorBuilder.build(extensionArtifact.getFile()); + } catch (IOException e) { String message = "Invalid extension descriptor for " + plugin.getId() + ": " + e.getMessage(); - if ( logger.isDebugEnabled() ) - { - logger.error( message, e ); - } - else - { - logger.error( message ); + if (logger.isDebugEnabled()) { + logger.error(message, e); + } else { + logger.error(message); } } - extensionRecord = extensionRealmCache.put( extensionKey, extensionRealm, extensionDescriptor, artifacts ); + extensionRecord = extensionRealmCache.put(extensionKey, extensionRealm, extensionDescriptor, artifacts); } - extensionRealmCache.register( project, extensionKey, extensionRecord ); - pluginRealms.put( pluginKey, extensionRecord ); + extensionRealmCache.register(project, extensionKey, extensionRecord); + pluginRealms.put(pluginKey, extensionRecord); return extensionRecord; } - private List resolveExtensionArtifacts( Plugin extensionPlugin, List repositories, - RepositorySystemSession session ) - throws PluginResolutionException - { - DependencyNode root = pluginDependenciesResolver.resolve( extensionPlugin, null, null, repositories, session ); + private List resolveExtensionArtifacts(Plugin extensionPlugin, List repositories, + RepositorySystemSession session) + throws PluginResolutionException { + DependencyNode root = pluginDependenciesResolver.resolve(extensionPlugin, null, null, repositories, session); PreorderNodeListGenerator nlg = new PreorderNodeListGenerator(); - root.accept( nlg ); - return toMavenArtifacts( root, nlg ); + root.accept(nlg); + return toMavenArtifacts(root, nlg); } } diff --git a/daemon/src/main/java/org/mvndaemon/mvnd/plugin/ValidatingConfigurationListener.java b/daemon/src/main/java/org/mvndaemon/mvnd/plugin/ValidatingConfigurationListener.java index bc386da9..4aa7d5b0 100644 --- a/daemon/src/main/java/org/mvndaemon/mvnd/plugin/ValidatingConfigurationListener.java +++ b/daemon/src/main/java/org/mvndaemon/mvnd/plugin/ValidatingConfigurationListener.java @@ -1,28 +1,41 @@ +/* + * Copyright 2021 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.mvndaemon.mvnd.plugin; -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you 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. +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you 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. */ - import java.util.Collection; import java.util.HashMap; import java.util.Map; - import org.apache.maven.plugin.descriptor.MojoDescriptor; import org.apache.maven.plugin.descriptor.Parameter; import org.codehaus.plexus.component.configurator.ConfigurationListener; @@ -34,8 +47,7 @@ import org.codehaus.plexus.component.configurator.ConfigurationListener; * @author Benjamin Bentmann */ class ValidatingConfigurationListener - implements ConfigurationListener -{ + implements ConfigurationListener { private final Object mojo; @@ -43,54 +55,43 @@ class ValidatingConfigurationListener private final Map missingParameters; - ValidatingConfigurationListener(Object mojo, MojoDescriptor mojoDescriptor, ConfigurationListener delegate ) - { + ValidatingConfigurationListener(Object mojo, MojoDescriptor mojoDescriptor, ConfigurationListener delegate) { this.mojo = mojo; this.delegate = delegate; this.missingParameters = new HashMap<>(); - if ( mojoDescriptor.getParameters() != null ) - { - for ( Parameter param : mojoDescriptor.getParameters() ) - { - if ( param.isRequired() ) - { - missingParameters.put( param.getName(), param ); + if (mojoDescriptor.getParameters() != null) { + for (Parameter param : mojoDescriptor.getParameters()) { + if (param.isRequired()) { + missingParameters.put(param.getName(), param); } } } } - public Collection getMissingParameters() - { + public Collection getMissingParameters() { return missingParameters.values(); } - public void notifyFieldChangeUsingSetter( String fieldName, Object value, Object target ) - { - delegate.notifyFieldChangeUsingSetter( fieldName, value, target ); + public void notifyFieldChangeUsingSetter(String fieldName, Object value, Object target) { + delegate.notifyFieldChangeUsingSetter(fieldName, value, target); - if ( mojo == target ) - { - notify( fieldName, value ); + if (mojo == target) { + notify(fieldName, value); } } - public void notifyFieldChangeUsingReflection( String fieldName, Object value, Object target ) - { - delegate.notifyFieldChangeUsingReflection( fieldName, value, target ); + public void notifyFieldChangeUsingReflection(String fieldName, Object value, Object target) { + delegate.notifyFieldChangeUsingReflection(fieldName, value, target); - if ( mojo == target ) - { - notify( fieldName, value ); + if (mojo == target) { + notify(fieldName, value); } } - private void notify( String fieldName, Object value ) - { - if ( value != null ) - { - missingParameters.remove( fieldName ); + private void notify(String fieldName, Object value) { + if (value != null) { + missingParameters.remove(fieldName); } }