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;
}
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());
}
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());
}
}
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);
}
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;
}
Aggregations