Source:
<code>public void execute() throws MojoExecutionException, MojoFailureException { propagateBuildInfo(); final URI nodeDownloadRootURI; try { nodeDownloadRootURI = new URI(nodeDownloadRoot); } catch (URISyntaxException e) { throw new MojoExecutionException("Failed to parse " + nodeDownloadRoot, e); } try { FrontendTools tools = new FrontendTools(npmFolder.getAbsolutePath(), () -> FrontendUtils.getVaadinHomeDirectory().getAbsolutePath(), nodeVersion, nodeDownloadRootURI); tools.validateNodeAndNpmVersion(); } catch (IllegalStateException exception) { throw new MojoExecutionException(exception.getMessage(), exception); } try { FileUtils.forceMkdir(generatedFolder); } catch (IOException e) { throw new MojoFailureException("Failed to create folder '" + generatedFolder + "'. Verify that you may write to path.", e); } try { File flowResourcesFolder = new File(npmFolder, DEFAULT_FLOW_RESOURCES_FOLDER); ClassFinder classFinder = getClassFinder(project); <START> Lookup lookup= new LookupImpl(classFinder); <END> NodeTasks.Builder builder = new NodeTasks.Builder( classFinder, npmFolder, lookup, generatedFolder, frontendDirectory) .withWebpack(webpackOutputDirectory, webpackTemplate, webpackGeneratedTemplate) .useV14Bootstrap(useDeprecatedV14Bootstrapping()) .withFlowResourcesFolder(flowResourcesFolder) .createMissingPackageJson(true) .enableImportsUpdate(false) .enablePackagesUpdate(false) .runNpmInstall(false) .withNodeVersion(nodeVersion) .withNodeDownloadRoot(nodeDownloadRootURI) .withHomeNodeExecRequired(requireHomeNodeExec); if ("jar".equals(project.getPackaging())) { Set<File> jarFiles = project.getArtifacts().stream() .filter(artifact -> "jar".equals(artifact.getType())) .map(Artifact::getFile).collect(Collectors.toSet()); builder.copyResources(jarFiles); } builder.build().execute(); } catch (ExecutionFailedException exception) { throw new MojoFailureException( "Could not execute prepare-frontend goal.", exception); } }</code><technical_language>Is extract lookup creation a method in a superclass ? I no-args</technical_language>

Target:
public void execute() throws MojoExecutionException, MojoFailureException { propagateBuildInfo(); final URI nodeDownloadRootURI; try { nodeDownloadRootURI = new URI(nodeDownloadRoot); } catch (URISyntaxException e) { throw new MojoExecutionException("Failed to parse " + nodeDownloadRoot, e); } try { FrontendTools tools = new FrontendTools(npmFolder.getAbsolutePath(), () -> FrontendUtils.getVaadinHomeDirectory().getAbsolutePath(), nodeVersion, nodeDownloadRootURI); tools.validateNodeAndNpmVersion(); } catch (IllegalStateException exception) { throw new MojoExecutionException(exception.getMessage(), exception); } try { FileUtils.forceMkdir(generatedFolder); } catch (IOException e) { throw new MojoFailureException("Failed to create folder '" + generatedFolder + "'. Verify that you may write to path.", e); } try { File flowResourcesFolder = new File(npmFolder, DEFAULT_FLOW_RESOURCES_FOLDER); ClassFinder classFinder = getClassFinder(project); Lookup lookup= createLookup(classFinder); NodeTasks.Builder builder = new NodeTasks.Builder( lookup, npmFolder, generatedFolder, frontendDirectory) .withWebpack(webpackOutputDirectory, webpackTemplate, webpackGeneratedTemplate) .useV14Bootstrap(useDeprecatedV14Bootstrapping()) .withFlowResourcesFolder(flowResourcesFolder) .createMissingPackageJson(true) .enableImportsUpdate(false) .enablePackagesUpdate(false) .runNpmInstall(false) .withNodeVersion(nodeVersion) .withNodeDownloadRoot(nodeDownloadRootURI) .withHomeNodeExecRequired(requireHomeNodeExec); if ("jar".equals(project.getPackaging())) { Set<File> jarFiles = project.getArtifacts().stream() .filter(artifact -> "jar".equals(artifact.getType())) .map(Artifact::getFile).collect(Collectors.toSet()); builder.copyResources(jarFiles); } builder.build().execute(); } catch (ExecutionFailedException exception) { throw new MojoFailureException( "Could not execute prepare-frontend goal.", exception); } }