public CompilationResult compile()

in compilers/janino/src/main/java/org/apache/commons/jci2/compiler/janino/JaninoJavaCompiler.java [108:200]


    public CompilationResult compile( final String[] pSourceNames, final ResourceReader pResourceReader, final ResourceStore pStore, final ClassLoader pClassLoader, final JavaCompilerSettings pSettings ) {

    	final Collection<CompilationProblem> problems = new ArrayList<>();

    	final StringPattern[] pattern = StringPattern.PATTERNS_NONE;

    	final Compiler compiler = new Compiler(
    			new ResourceFinder() {
					@Override
                    public Resource findResource( final String pSourceName ) {
						final byte[] bytes = pResourceReader.getBytes(pSourceName);

						if (bytes == null) {
							log.debug("failed to find source " + pSourceName);
							return null;
						}

						log.debug("reading " + pSourceName + " (" + bytes.length + ")");

						return new JciResource(pSourceName, bytes);
					}
    			},
    			new ClassLoaderIClassLoader(pClassLoader),
    			new ResourceFinder() {
					@Override
                    public Resource findResource( final String pResourceName ) {
						final byte[] bytes = pStore.read(pResourceName);

						if (bytes == null) {
							log.debug("failed to find " + pResourceName);
							return null;
						}

						log.debug("reading " + pResourceName + " (" + bytes.length + ")");

						return new JciResource(pResourceName, bytes);
					}
    			},
    			new ResourceCreator() {
					@Override
                    public OutputStream createResource( final String pResourceName ) throws IOException {
						return new JciOutputStream(pResourceName, pStore);
					}

					@Override
                    public boolean deleteResource( final String pResourceName ) {
						log.debug("removing " + pResourceName);

						pStore.remove(pResourceName);
						return true;
					}
    			},
    			pSettings.getSourceEncoding(),
    			false,
    			pSettings.isDebug(),
                pSettings.isDebug(),
                pSettings.isDebug(),
    			new FilterWarningHandler(pattern, (pHandle, pMessage, pLocation) -> {
                	final CompilationProblem problem = new JaninoCompilationProblem(pLocation.getFileName(), pLocation, pMessage, false);
                	if (problemHandler != null) {
                		problemHandler.handle(problem);
                	}
                	problems.add(problem);
                })
    			);

    	compiler.setCompileErrorHandler((pMessage, pLocation) -> {
        	final CompilationProblem problem = new JaninoCompilationProblem(pLocation.getFileName(), pLocation, pMessage, true);
        	if (problemHandler != null) {
        		problemHandler.handle(problem);
        	}
        	problems.add(problem);
        });

    	final Resource[] resources = new Resource[pSourceNames.length];
        for (int i = 0; i < pSourceNames.length; i++) {
            log.debug("compiling " + pSourceNames[i]);
            final byte[] source = pResourceReader.getBytes(pSourceNames[i]);
            resources[i] = new JciResource(pSourceNames[i], source);
        }

        try {
            compiler.compile(resources);
        } catch ( final LocatedException e ) {
            problems.add(new JaninoCompilationProblem(e));
        } catch ( final IOException e ) {
            // low level problems reading or writing bytes
        	log.error("this error should have been cought before", e);
        }
        final CompilationProblem[] result = new CompilationProblem[problems.size()];
        problems.toArray(result);
        return new CompilationResult(result);
    }