⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractsemanticcompiler.java

📁 drools 一个开放源码的规则引擎
💻 JAVA
字号:
package org.drools.semantics.java;

import java.io.IOException;

import org.apache.commons.jci.compilers.CompilationResult;
import org.apache.commons.jci.compilers.JavaCompiler;
import org.apache.commons.jci.readers.MemoryResourceReader;
import org.apache.commons.jci.readers.ResourceReader;
import org.apache.commons.jci.stores.ResourceStore;
import org.apache.commons.jci.stores.ResourceStoreClassLoader;

/**
 * This is the real Java semantic compiler engine. It uses JCI to compile the
 * generated source.
 */
public abstract class AbstractSemanticCompiler {
    protected JavaCompiler compiler;

    protected void write(StringBuffer buffer,
                         String className,
                         String fileName,
                         ResourceReader src) throws IOException {

        char[] source = new char[buffer.length()];
        buffer.getChars( 0,
                         buffer.length(),
                         source,
                         0 );

        writeFile( src,
                   fileName,
                   source );

    }

    protected void writeFile(ResourceReader src,
                             final String name,
                             final char[] text) throws IOException {
        if ( src instanceof MemoryResourceReader ) {
            MemoryResourceReader memorySrc = (MemoryResourceReader) src;
            memorySrc.addFile( name,
                               text );
        }
    }

    public void compile(String fileName,
                        ResourceReader src,
                        ResourceStore dst,
                        ClassLoader classLoader) {
        compile( new String[]{fileName},
                 src,
                 dst,
                 classLoader );
    }

    public void compile(String[] fileNames,
                        ResourceReader src,
                        ResourceStore dst,
                        ClassLoader classLoader) {

        CompilationResult result = compiler.compile( fileNames,
                                                     src,
                                                     dst,
                                                     classLoader );

        handleAnyErrors( result );

    }

    private void handleAnyErrors(CompilationResult result) {
        if ( result.getErrors().length > 0 ) {
            throw new JavaSemanticCompileError( result.getErrors() );
        }
    }
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -