Search in sources :

Example 31 with Source

use of org.wso2.siddhi.core.stream.input.source.Source in project ballerina by ballerina-lang.

the class BCompileUtil method compile.

/**
 * Compile and return the semantic errors.
 *
 * @param sourceRoot    root path of the source packages
 * @param packageName   name of the package to compile
 * @param compilerPhase Compiler phase
 * @return Semantic errors
 */
public static CompileResult compile(String sourceRoot, String packageName, CompilerPhase compilerPhase) {
    CompilerContext context = new CompilerContext();
    CompilerOptions options = CompilerOptions.getInstance(context);
    options.put(PROJECT_DIR, sourceRoot);
    options.put(COMPILER_PHASE, compilerPhase.toString());
    options.put(PRESERVE_WHITESPACE, "false");
    CompileResult comResult = new CompileResult();
    // catch errors
    DiagnosticListener listener = comResult::addDiagnostic;
    context.put(DiagnosticListener.class, listener);
    // compile
    Compiler compiler = Compiler.getInstance(context);
    BLangPackage packageNode = compiler.compile(packageName);
    comResult.setAST(packageNode);
    if (comResult.getErrorCount() > 0 || CompilerPhase.CODE_GEN.compareTo(compilerPhase) > 0) {
        return comResult;
    }
    CompiledBinaryFile.ProgramFile programFile = compiler.getExecutableProgram(packageNode);
    if (programFile != null) {
        ProgramFile pFile = LauncherUtils.getExecutableProgram(programFile);
        comResult.setProgFile(pFile);
        if (pFile != null) {
            boolean distributedTxEnabled = CompilerUtils.isDistributedTransactionsEnabled();
            pFile.setDistributedTransactionEnabled(distributedTxEnabled);
        }
    }
    return comResult;
}
Also used : Compiler(org.wso2.ballerinalang.compiler.Compiler) BLangPackage(org.wso2.ballerinalang.compiler.tree.BLangPackage) CompiledBinaryFile(org.wso2.ballerinalang.programfile.CompiledBinaryFile) CompilerContext(org.wso2.ballerinalang.compiler.util.CompilerContext) CompilerOptions(org.wso2.ballerinalang.compiler.util.CompilerOptions) DiagnosticListener(org.ballerinalang.util.diagnostic.DiagnosticListener) ProgramFile(org.ballerinalang.util.codegen.ProgramFile)

Example 32 with Source

use of org.wso2.siddhi.core.stream.input.source.Source in project ballerina by ballerina-lang.

the class BCompileUtil method getDiagnostics.

/**
 * Used by IntelliJ IDEA plugin to provide semantic analyzing capability.
 *
 * @param classLoader a {@link ClassLoader} to be set as thread context class loader. This is used by {@link
 *                    java.util.ServiceLoader}. Otherwise semantic analyzing capability providing wont work since it
 *                    cant find core package.
 * @param sourceRoot  source root of a project
 * @param fileName    either the file name (if in project root) or the package name
 * @return list of diagnostics
 */
public static List<Diagnostic> getDiagnostics(ClassLoader classLoader, String sourceRoot, String fileName) {
    Thread.currentThread().setContextClassLoader(classLoader);
    CompilerContext context = new CompilerContext();
    CompilerOptions options = CompilerOptions.getInstance(context);
    options.put(PROJECT_DIR, sourceRoot);
    options.put(COMPILER_PHASE, CompilerPhase.CODE_GEN.toString());
    options.put(PRESERVE_WHITESPACE, "false");
    CompileResult comResult = new CompileResult();
    // catch errors
    DiagnosticListener listener = comResult::addDiagnostic;
    context.put(DiagnosticListener.class, listener);
    // compile
    Compiler compiler = Compiler.getInstance(context);
    BLangPackage entryPackageNode = compiler.compile(fileName);
    CompiledBinaryFile.ProgramFile programFile = compiler.getExecutableProgram(entryPackageNode);
    if (programFile != null) {
        comResult.setProgFile(LauncherUtils.getExecutableProgram(programFile));
    }
    Diagnostic[] diagnostics = comResult.getDiagnostics();
    return Arrays.stream(diagnostics).collect(Collectors.toList());
}
Also used : Compiler(org.wso2.ballerinalang.compiler.Compiler) BLangPackage(org.wso2.ballerinalang.compiler.tree.BLangPackage) CompiledBinaryFile(org.wso2.ballerinalang.programfile.CompiledBinaryFile) CompilerContext(org.wso2.ballerinalang.compiler.util.CompilerContext) CompilerOptions(org.wso2.ballerinalang.compiler.util.CompilerOptions) Diagnostic(org.ballerinalang.util.diagnostic.Diagnostic) DiagnosticListener(org.ballerinalang.util.diagnostic.DiagnosticListener)

Example 33 with Source

use of org.wso2.siddhi.core.stream.input.source.Source in project ballerina by ballerina-lang.

the class BCompileUtil method compile.

/**
 * Compile and return the semantic errors.
 *
 * @param obj this is to find the original callers location.
 * @param sourceRoot  root path of the source packages
 * @param packageName name of the package to compile
 * @return Semantic errors
 */
public static CompileResult compile(Object obj, String sourceRoot, String packageName) {
    try {
        String effectiveSource;
        CodeSource codeSource = obj.getClass().getProtectionDomain().getCodeSource();
        URL location = codeSource.getLocation();
        URI locationUri = location.toURI();
        Path pathLocation = Paths.get(locationUri);
        String filePath = concatFileName(sourceRoot, pathLocation);
        Path rootPath = Paths.get(filePath);
        Path packagePath = Paths.get(packageName);
        if (Files.isDirectory(packagePath)) {
            String[] pkgParts = packageName.split("\\/");
            List<Name> pkgNameComps = Arrays.stream(pkgParts).map(part -> {
                if (part.equals("")) {
                    return Names.EMPTY;
                } else if (part.equals("_")) {
                    return Names.EMPTY;
                }
                return new Name(part);
            }).collect(Collectors.toList());
            // TODO: orgName is anon, fix it.
            PackageID pkgId = new PackageID(Names.ANON_ORG, pkgNameComps, Names.DEFAULT_VERSION);
            effectiveSource = pkgId.getName().getValue();
            return compile(rootPath.toString(), effectiveSource, CompilerPhase.CODE_GEN);
        } else {
            effectiveSource = packageName;
            return compile(rootPath.toString(), effectiveSource, CompilerPhase.CODE_GEN, new FileSystemProjectDirectory(rootPath));
        }
    } catch (URISyntaxException e) {
        throw new IllegalArgumentException("error while running test: " + e.getMessage());
    }
}
Also used : Path(java.nio.file.Path) Arrays(java.util.Arrays) CompilerUtils(org.wso2.ballerinalang.compiler.util.CompilerUtils) ProgramFile(org.ballerinalang.util.codegen.ProgramFile) URL(java.net.URL) URISyntaxException(java.net.URISyntaxException) Compiler(org.wso2.ballerinalang.compiler.Compiler) PackageInfo(org.ballerinalang.util.codegen.PackageInfo) PROJECT_DIR(org.ballerinalang.compiler.CompilerOptionName.PROJECT_DIR) SourceDirectory(org.wso2.ballerinalang.compiler.SourceDirectory) Diagnostic(org.ballerinalang.util.diagnostic.Diagnostic) Names(org.wso2.ballerinalang.compiler.util.Names) BStruct(org.ballerinalang.model.values.BStruct) StructInfo(org.ballerinalang.util.codegen.StructInfo) FileSystemProjectDirectory(org.wso2.ballerinalang.compiler.FileSystemProjectDirectory) URI(java.net.URI) PRESERVE_WHITESPACE(org.ballerinalang.compiler.CompilerOptionName.PRESERVE_WHITESPACE) Path(java.nio.file.Path) LauncherUtils(org.ballerinalang.launcher.LauncherUtils) BLangPackage(org.wso2.ballerinalang.compiler.tree.BLangPackage) DiagnosticListener(org.ballerinalang.util.diagnostic.DiagnosticListener) Files(java.nio.file.Files) CompilerPhase(org.ballerinalang.compiler.CompilerPhase) PackageID(org.ballerinalang.model.elements.PackageID) COMPILER_PHASE(org.ballerinalang.compiler.CompilerOptionName.COMPILER_PHASE) IOException(java.io.IOException) BStructType(org.ballerinalang.model.types.BStructType) CompiledBinaryFile(org.wso2.ballerinalang.programfile.CompiledBinaryFile) InputStreamReader(java.io.InputStreamReader) Collectors(java.util.stream.Collectors) Name(org.wso2.ballerinalang.compiler.util.Name) StandardCharsets(java.nio.charset.StandardCharsets) List(java.util.List) Paths(java.nio.file.Paths) BufferedReader(java.io.BufferedReader) CodeSource(java.security.CodeSource) CompilerOptions(org.wso2.ballerinalang.compiler.util.CompilerOptions) CompilerContext(org.wso2.ballerinalang.compiler.util.CompilerContext) InputStream(java.io.InputStream) FileSystemProjectDirectory(org.wso2.ballerinalang.compiler.FileSystemProjectDirectory) URISyntaxException(java.net.URISyntaxException) CodeSource(java.security.CodeSource) URI(java.net.URI) URL(java.net.URL) Name(org.wso2.ballerinalang.compiler.util.Name) PackageID(org.ballerinalang.model.elements.PackageID)

Example 34 with Source

use of org.wso2.siddhi.core.stream.input.source.Source in project ballerina by ballerina-lang.

the class SymbolEnter method visit.

@Override
public void visit(BLangTransformer transformerNode) {
    validateTransformerMappingTypes(transformerNode);
    boolean safeConversion = transformerNode.retParams.size() == 1;
    Name name = getTransformerSymbolName(transformerNode);
    BTransformerSymbol transformerSymbol = Symbols.createTransformerSymbol(Flags.asMask(transformerNode.flagSet), name, env.enclPkg.symbol.pkgID, null, safeConversion, env.scope.owner);
    transformerNode.symbol = transformerSymbol;
    // If this is a default transformer, check whether this transformer conflicts with a built-in conversion
    if (transformerNode.name.value.isEmpty()) {
        BType targetType = transformerNode.retParams.get(0).type;
        BSymbol symbol = symResolver.resolveConversionOperator(transformerNode.source.type, targetType);
        if (symbol != symTable.notFoundSymbol) {
            dlog.error(transformerNode.pos, DiagnosticCode.TRANSFORMER_CONFLICTS_WITH_CONVERSION, transformerNode.source.type, targetType);
            return;
        }
    }
    // Define the transformer
    SymbolEnv transformerEnv = SymbolEnv.createTransformerEnv(transformerNode, transformerSymbol.scope, env);
    transformerNode.symbol = transformerSymbol;
    defineSymbol(transformerNode.pos, transformerSymbol);
    transformerEnv.scope = transformerSymbol.scope;
    // Define transformer source.
    defineNode(transformerNode.source, transformerEnv);
}
Also used : BTransformerSymbol(org.wso2.ballerinalang.compiler.semantics.model.symbols.BTransformerSymbol) BSymbol(org.wso2.ballerinalang.compiler.semantics.model.symbols.BSymbol) BType(org.wso2.ballerinalang.compiler.semantics.model.types.BType) SymbolEnv(org.wso2.ballerinalang.compiler.semantics.model.SymbolEnv) BLangXMLQName(org.wso2.ballerinalang.compiler.tree.expressions.BLangXMLQName) Name(org.wso2.ballerinalang.compiler.util.Name)

Example 35 with Source

use of org.wso2.siddhi.core.stream.input.source.Source in project ballerina by ballerina-lang.

the class Types method isAssignableToUnionType.

private boolean isAssignableToUnionType(BType source, BType target) {
    Set<BType> sourceTypes = new HashSet<>();
    Set<BType> targetTypes = new HashSet<>();
    if (source.tag == TypeTags.UNION) {
        BUnionType sourceUnionType = (BUnionType) source;
        sourceTypes.addAll(sourceUnionType.memberTypes);
    } else {
        sourceTypes.add(source);
    }
    if (target.tag == TypeTags.UNION) {
        BUnionType targetUnionType = (BUnionType) target;
        targetTypes.addAll(targetUnionType.memberTypes);
    } else {
        targetTypes.add(target);
    }
    boolean notAssignable = sourceTypes.stream().map(s -> targetTypes.stream().anyMatch(t -> isAssignable(s, t))).anyMatch(assignable -> !assignable);
    return !notAssignable;
}
Also used : BUnionType(org.wso2.ballerinalang.compiler.semantics.model.types.BUnionType) BStructField(org.wso2.ballerinalang.compiler.semantics.model.types.BStructType.BStructField) BInvokableType(org.wso2.ballerinalang.compiler.semantics.model.types.BInvokableType) BTupleType(org.wso2.ballerinalang.compiler.semantics.model.types.BTupleType) BMapType(org.wso2.ballerinalang.compiler.semantics.model.types.BMapType) BLangTypeConversionExpr(org.wso2.ballerinalang.compiler.tree.expressions.BLangTypeConversionExpr) BAttachedFunction(org.wso2.ballerinalang.compiler.semantics.model.symbols.BStructSymbol.BAttachedFunction) BStreamType(org.wso2.ballerinalang.compiler.semantics.model.types.BStreamType) BBuiltInRefType(org.wso2.ballerinalang.compiler.semantics.model.types.BBuiltInRefType) Lists(org.wso2.ballerinalang.util.Lists) BConnectorType(org.wso2.ballerinalang.compiler.semantics.model.types.BConnectorType) ArrayList(java.util.ArrayList) BXMLType(org.wso2.ballerinalang.compiler.semantics.model.types.BXMLType) TypeTags(org.wso2.ballerinalang.compiler.util.TypeTags) HashSet(java.util.HashSet) Flags(org.wso2.ballerinalang.util.Flags) TreeBuilder(org.ballerinalang.model.TreeBuilder) BType(org.wso2.ballerinalang.compiler.semantics.model.types.BType) Names(org.wso2.ballerinalang.compiler.util.Names) BInvokableSymbol(org.wso2.ballerinalang.compiler.semantics.model.symbols.BInvokableSymbol) BErrorType(org.wso2.ballerinalang.compiler.semantics.model.types.BErrorType) BFutureType(org.wso2.ballerinalang.compiler.semantics.model.types.BFutureType) DiagnosticPos(org.wso2.ballerinalang.compiler.util.diagnotic.DiagnosticPos) BArrayType(org.wso2.ballerinalang.compiler.semantics.model.types.BArrayType) BEnumType(org.wso2.ballerinalang.compiler.semantics.model.types.BEnumType) BLangDiagnosticLog(org.wso2.ballerinalang.compiler.util.diagnotic.BLangDiagnosticLog) BStructType(org.wso2.ballerinalang.compiler.semantics.model.types.BStructType) BUnionType(org.wso2.ballerinalang.compiler.semantics.model.types.BUnionType) BLangExpression(org.wso2.ballerinalang.compiler.tree.expressions.BLangExpression) BConversionOperatorSymbol(org.wso2.ballerinalang.compiler.semantics.model.symbols.BConversionOperatorSymbol) BSymbol(org.wso2.ballerinalang.compiler.semantics.model.symbols.BSymbol) BJSONType(org.wso2.ballerinalang.compiler.semantics.model.types.BJSONType) Set(java.util.Set) BTypeVisitor(org.wso2.ballerinalang.compiler.semantics.model.types.BTypeVisitor) Symbols(org.wso2.ballerinalang.compiler.semantics.model.symbols.Symbols) Collectors(java.util.stream.Collectors) BLangNode(org.wso2.ballerinalang.compiler.tree.BLangNode) List(java.util.List) DiagnosticCode(org.ballerinalang.util.diagnostic.DiagnosticCode) InstructionCodes(org.wso2.ballerinalang.programfile.InstructionCodes) BAnyType(org.wso2.ballerinalang.compiler.semantics.model.types.BAnyType) BTableType(org.wso2.ballerinalang.compiler.semantics.model.types.BTableType) BStructSymbol(org.wso2.ballerinalang.compiler.semantics.model.symbols.BStructSymbol) Collections(java.util.Collections) SymbolTable(org.wso2.ballerinalang.compiler.semantics.model.SymbolTable) CompilerContext(org.wso2.ballerinalang.compiler.util.CompilerContext) BType(org.wso2.ballerinalang.compiler.semantics.model.types.BType) HashSet(java.util.HashSet)

Aggregations

Test (org.testng.annotations.Test)22 CompilerContext (org.wso2.ballerinalang.compiler.util.CompilerContext)15 ArrayList (java.util.ArrayList)11 CompilerOptions (org.wso2.ballerinalang.compiler.util.CompilerOptions)11 SiddhiAppRuntime (org.wso2.siddhi.core.SiddhiAppRuntime)11 SiddhiManager (org.wso2.siddhi.core.SiddhiManager)11 ANTLRInputStream (org.antlr.v4.runtime.ANTLRInputStream)8 CommonTokenStream (org.antlr.v4.runtime.CommonTokenStream)8 ParseTree (org.antlr.v4.runtime.tree.ParseTree)8 OMElement (org.apache.axiom.om.OMElement)8 TopLevelNode (org.ballerinalang.model.tree.TopLevelNode)8 BLangPackage (org.wso2.ballerinalang.compiler.tree.BLangPackage)8 DiagnosticPos (org.wso2.ballerinalang.compiler.util.diagnotic.DiagnosticPos)8 DocumentInfo (org.wso2.carbon.apimgt.core.models.DocumentInfo)8 Event (org.wso2.siddhi.core.event.Event)8 HashMap (java.util.HashMap)7 List (java.util.List)7 Compiler (org.wso2.ballerinalang.compiler.Compiler)7 APIManagementException (org.wso2.carbon.apimgt.core.exception.APIManagementException)6 SiddhiQLBaseVisitorImpl (org.wso2.siddhi.query.compiler.internal.SiddhiQLBaseVisitorImpl)6