public IncrementalBuildResults deletePackageResource(final Path resource) { try { IncrementalBuildResults results = new IncrementalBuildResults(); final KieModule module = moduleService.resolveModule(resource); if (module == null) { return results; } final Builder builder = cache.assertBuilder(module); if (!builder.isBuilt()) { throw new IllegalStateException("Incremental Build requires a full build be completed first."); } else { results = builder.deleteResource(Paths.convert(resource)); } return results; } catch (Exception e) { logger.error(e.getMessage(), e); throw ExceptionUtilities.handleException(e); } }
@Test public void testBuilderFixForBrokenKModule() throws Exception { LRUPomModelCache pomModelCache = getReference(LRUPomModelCache.class); SimpleFileSystemProvider provider = new SimpleFileSystemProvider(); org.uberfire.java.nio.file.Path path = provider.getPath(this.getClass().getResource("/BuilderExampleBrokenSyntax").toURI()); final Module module = moduleService.resolveModule(Paths.convert(path)); final Builder builder = new Builder(module, ioService, moduleService, importsService, new ArrayList<>(), dependenciesClassLoaderCache, pomModelCache, mock(PackageNameWhiteListService.class), alwaysTrue); assertNull(builder.getKieContainer()); builder.deleteResource(provider.getPath(this.getClass().getResource(File.separatorChar + "BuilderExampleBrokenSyntax" + File.separatorChar + "src" + File.separatorChar + "main" + File.separatorChar + "resources" + File.separatorChar + "rule1.drl" ).toURI())); assertNotNull(builder.getKieContainer()); }
private List<ValidationMessage> doValidation(final Path resourcePath, final InputStream inputStream) throws NoModuleException { final ValidatorResultBuilder resultBuilder = new ValidatorResultBuilder(); final Module module = module(resourcePath); final org.uberfire.java.nio.file.Path nioResourcePath = Paths.convert(resourcePath); //Incremental Build does not support Java classes if (isIncrementalBuildPossible(resourcePath)) { //Build the Builder from the cache so it's "built" state can be preserved for re-use BuildInfo buildInfo = buildInfoService.getBuildInfo(module); final Builder clone = ((BuildInfoImpl) buildInfo).getBuilder().clone(); //First delete resource otherwise if the resource already had errors following builder.build() //the incremental compilation will not report any additional errors and the resource will be //considered valid. clone.deleteResource(nioResourcePath); final IncrementalBuildResults incrementalBuildResults = clone.updateResource(nioResourcePath, inputStream); resultBuilder.add(incrementalBuildResults.getAddedMessages()); } else { Builder builder = builderCache.assertBuilder(module(resourcePath)); final Builder clone = builder.clone(); resultBuilder.add(clone.build(nioResourcePath, inputStream).getMessages()); } return resultBuilder.results(); }