Search in sources :

Example 41 with PACKAGE

use of org.wso2.ballerinalang.compiler.codegen.CodeGenerator.VariableIndex.Kind.PACKAGE in project ballerina by ballerina-lang.

the class UserRepositoryUtils method installSourcePackage.

public static void installSourcePackage(Path sourceRootPath, String packageStr) {
    // First, we need to validate what is in their.
    // Let's try to compile and see.
    // If it won't compile, we won't install the package
    Path packagePath = Paths.get(packageStr);
    CompilerContext context = new CompilerContext();
    CompilerOptions cOptions = CompilerOptions.getInstance(context);
    cOptions.put(PROJECT_DIR, sourceRootPath.toString());
    cOptions.put(COMPILER_PHASE, CompilerPhase.CODE_GEN.toString());
    cOptions.put(PRESERVE_WHITESPACE, "false");
    // compile
    Compiler compiler = Compiler.getInstance(context);
    compiler.compile(packagePath.toString());
    Path srcDirectoryPath = BLangPrograms.validateAndResolveSourcePath(sourceRootPath, packagePath);
    Path targetDirectoryPath = initializeUserRepository().resolve(USER_REPO_ARTIFACTS_DIRNAME).resolve(USER_REPO_SRC_DIRNAME).resolve(packagePath);
    try {
        Files.list(srcDirectoryPath).filter(filePath -> !Files.isDirectory(filePath, LinkOption.NOFOLLOW_LINKS)).filter(filePath -> filePath.toString().endsWith(BLANG_SRC_FILE_SUFFIX)).forEach(filePath -> {
            // Here we get the absolute path.
            // Just get the file name and copy.
            Path srcNamePath = filePath.getFileName();
            Path targetFilePath = targetDirectoryPath.resolve(srcNamePath);
            CopyOption[] options = new CopyOption[] { StandardCopyOption.REPLACE_EXISTING, StandardCopyOption.COPY_ATTRIBUTES, LinkOption.NOFOLLOW_LINKS };
            try {
                if (Files.exists(targetDirectoryPath, LinkOption.NOFOLLOW_LINKS) && !Files.isDirectory(targetDirectoryPath, LinkOption.NOFOLLOW_LINKS)) {
                    throw new RuntimeException("a file exists with the same name as the package name: " + targetDirectoryPath.toString());
                } else if (!Files.exists(targetDirectoryPath, LinkOption.NOFOLLOW_LINKS)) {
                    Files.createDirectories(targetDirectoryPath);
                }
                Files.copy(filePath, targetFilePath, options);
            } catch (IOException e) {
                throw new RuntimeException("error installing package: " + packageStr + ": " + e.getMessage(), e);
            }
        });
    } catch (IOException e) {
        throw new RuntimeException("error installing package: " + packageStr + ": " + e.getMessage(), e);
    }
}
Also used : Path(java.nio.file.Path) Files(java.nio.file.Files) CompilerPhase(org.ballerinalang.compiler.CompilerPhase) DirectoryNotEmptyException(java.nio.file.DirectoryNotEmptyException) COMPILER_PHASE(org.ballerinalang.compiler.CompilerOptionName.COMPILER_PHASE) IOException(java.io.IOException) BLangPrograms.createDirectory(org.ballerinalang.util.program.BLangPrograms.createDirectory) Compiler(org.wso2.ballerinalang.compiler.Compiler) BLANG_SRC_FILE_SUFFIX(org.ballerinalang.util.BLangConstants.BLANG_SRC_FILE_SUFFIX) StandardCopyOption(java.nio.file.StandardCopyOption) PROJECT_DIR(org.ballerinalang.compiler.CompilerOptionName.PROJECT_DIR) LinkOption(java.nio.file.LinkOption) USER_REPO_DEFAULT_DIRNAME(org.ballerinalang.util.BLangConstants.USER_REPO_DEFAULT_DIRNAME) USER_REPO_ARTIFACTS_DIRNAME(org.ballerinalang.util.BLangConstants.USER_REPO_ARTIFACTS_DIRNAME) Paths(java.nio.file.Paths) USER_REPO_SRC_DIRNAME(org.ballerinalang.util.BLangConstants.USER_REPO_SRC_DIRNAME) BLangPrograms(org.ballerinalang.util.program.BLangPrograms) USER_REPO_ENV_KEY(org.ballerinalang.util.BLangConstants.USER_REPO_ENV_KEY) PRESERVE_WHITESPACE(org.ballerinalang.compiler.CompilerOptionName.PRESERVE_WHITESPACE) CompilerOptions(org.wso2.ballerinalang.compiler.util.CompilerOptions) Path(java.nio.file.Path) USER_HOME(org.ballerinalang.util.BLangConstants.USER_HOME) USER_REPO_OBJ_DIRNAME(org.ballerinalang.util.BLangConstants.USER_REPO_OBJ_DIRNAME) CompilerContext(org.wso2.ballerinalang.compiler.util.CompilerContext) CopyOption(java.nio.file.CopyOption) Compiler(org.wso2.ballerinalang.compiler.Compiler) StandardCopyOption(java.nio.file.StandardCopyOption) CopyOption(java.nio.file.CopyOption) CompilerContext(org.wso2.ballerinalang.compiler.util.CompilerContext) CompilerOptions(org.wso2.ballerinalang.compiler.util.CompilerOptions) IOException(java.io.IOException)

Example 42 with PACKAGE

use of org.wso2.ballerinalang.compiler.codegen.CodeGenerator.VariableIndex.Kind.PACKAGE in project ballerina by ballerina-lang.

the class PullCommand method execute.

@Override
public void execute() {
    if (helpFlag) {
        String commandUsageInfo = BLauncherCmd.getCommandUsageInfo(parentCmdParser, "pull");
        outStream.println(commandUsageInfo);
        return;
    }
    if (argList == null || argList.size() == 0) {
        throw new BLangCompilerException("no package given");
    }
    if (argList.size() > 1) {
        throw new BLangCompilerException("too many arguments");
    }
    // Enable remote debugging
    if (null != debugPort) {
        System.setProperty(SYSTEM_PROP_BAL_DEBUG, debugPort);
    }
    String resourceName = argList.get(0);
    String orgName;
    String packageName;
    String version;
    // Get org-name
    int orgNameIndex = resourceName.indexOf("/");
    if (orgNameIndex != -1) {
        orgName = resourceName.substring(0, orgNameIndex);
    } else {
        throw new BLangCompilerException("no package-name provided");
    }
    // Get package name
    int packageNameIndex = resourceName.indexOf(":");
    if (packageNameIndex != -1) {
        // version is provided
        packageName = resourceName.substring(orgNameIndex + 1, packageNameIndex);
        version = resourceName.substring(packageNameIndex + 1, resourceName.length());
    } else {
        packageName = resourceName.substring(orgNameIndex + 1, resourceName.length());
        version = "*";
    }
    URI baseURI = URI.create("https://staging.central.ballerina.io:9090/");
    Repo remoteRepo = new RemoteRepo(baseURI);
    PackageID packageID = new PackageID(new Name(orgName), new Name(packageName), new Name(version));
    Patten patten = remoteRepo.calculate(packageID);
    if (patten != Patten.NULL) {
        Converter converter = remoteRepo.getConverterInstance();
        patten.convertToSources(converter, packageID).collect(Collectors.toList());
    } else {
        outStream.println("couldn't find package " + patten);
    }
    Runtime.getRuntime().exit(0);
}
Also used : RemoteRepo(org.wso2.ballerinalang.compiler.packaging.repo.RemoteRepo) Repo(org.wso2.ballerinalang.compiler.packaging.repo.Repo) BLangCompilerException(org.ballerinalang.compiler.BLangCompilerException) Converter(org.wso2.ballerinalang.compiler.packaging.converters.Converter) RemoteRepo(org.wso2.ballerinalang.compiler.packaging.repo.RemoteRepo) PackageID(org.ballerinalang.model.elements.PackageID) Patten(org.wso2.ballerinalang.compiler.packaging.Patten) URI(java.net.URI) Name(org.wso2.ballerinalang.compiler.util.Name)

Example 43 with PACKAGE

use of org.wso2.ballerinalang.compiler.codegen.CodeGenerator.VariableIndex.Kind.PACKAGE 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 44 with PACKAGE

use of org.wso2.ballerinalang.compiler.codegen.CodeGenerator.VariableIndex.Kind.PACKAGE 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 45 with PACKAGE

use of org.wso2.ballerinalang.compiler.codegen.CodeGenerator.VariableIndex.Kind.PACKAGE 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)

Aggregations

BLangPackage (org.wso2.ballerinalang.compiler.tree.BLangPackage)49 ArrayList (java.util.ArrayList)34 Test (org.testng.annotations.Test)29 Page (org.ballerinalang.docgen.model.Page)18 File (java.io.File)16 CompilerContext (org.wso2.ballerinalang.compiler.util.CompilerContext)16 IOException (java.io.IOException)15 Path (java.nio.file.Path)13 List (java.util.List)13 BLangStruct (org.wso2.ballerinalang.compiler.tree.BLangStruct)11 PackageID (org.ballerinalang.model.elements.PackageID)10 Compiler (org.wso2.ballerinalang.compiler.Compiler)10 BLangFunction (org.wso2.ballerinalang.compiler.tree.BLangFunction)10 CompilerOptions (org.wso2.ballerinalang.compiler.util.CompilerOptions)10 Collectors (java.util.stream.Collectors)9 Arrays (java.util.Arrays)8 CompilerPhase (org.ballerinalang.compiler.CompilerPhase)7 BInvokableSymbol (org.wso2.ballerinalang.compiler.semantics.model.symbols.BInvokableSymbol)6 BPackageSymbol (org.wso2.ballerinalang.compiler.semantics.model.symbols.BPackageSymbol)6 BLangNode (org.wso2.ballerinalang.compiler.tree.BLangNode)6