Search in sources :

Example 11 with TypeChecker

use of org.eclipse.ceylon.compiler.typechecker.TypeChecker in project ceylon by eclipse.

the class TestMultipackages method setup.

@Before
public void setup() throws IOException {
    // Compile module with 2 packages
    System.out.println("Compiling multi");
    TypeCheckerBuilder tcb = new TypeCheckerBuilder().usageWarnings(false);
    tcb.addSrcDirectory(new java.io.File("src/test/resources/multi/pass1"));
    tcb.setRepositoryManager(repoman);
    TypeChecker tc = tcb.getTypeChecker();
    tc.process();
    Options options = new Options().addRepo("build/test/test_modules").outRepo("build/test/test_modules").addSrcDir("src/test/resources/multi/pass1");
    JsCompiler compiler = new JsCompiler(tc, options);
    compiler.stopOnErrors(false);
    compiler.generate();
}
Also used : Options(org.eclipse.ceylon.compiler.js.util.Options) TypeChecker(org.eclipse.ceylon.compiler.typechecker.TypeChecker) TypeCheckerBuilder(org.eclipse.ceylon.compiler.typechecker.TypeCheckerBuilder) JsCompiler(org.eclipse.ceylon.compiler.js.JsCompiler) Before(org.junit.Before)

Example 12 with TypeChecker

use of org.eclipse.ceylon.compiler.typechecker.TypeChecker in project ceylon by eclipse.

the class TestMultipackages method test.

@Test
public void test() throws IOException {
    // Compile module with 2 packages
    System.out.println("Compiling usemulti");
    TypeCheckerBuilder tcb = new TypeCheckerBuilder().usageWarnings(false);
    tcb.moduleManagerFactory(new JsModuleManagerFactory("UTF-8"));
    tcb.addSrcDirectory(new java.io.File("src/test/resources/multi/pass2"));
    tcb.setRepositoryManager(repoman);
    TypeChecker tc = tcb.getTypeChecker();
    tc.process();
    Options options = new Options().addRepo("build/test/test_modules").outRepo("build/test/test_modules").addSrcDir("src/test/resources/multi/pass2").verbose("");
    JsCompiler compiler = new JsCompiler(tc, options);
    compiler.stopOnErrors(false);
    compiler.generate();
}
Also used : JsModuleManagerFactory(org.eclipse.ceylon.compiler.js.loader.JsModuleManagerFactory) Options(org.eclipse.ceylon.compiler.js.util.Options) TypeChecker(org.eclipse.ceylon.compiler.typechecker.TypeChecker) TypeCheckerBuilder(org.eclipse.ceylon.compiler.typechecker.TypeCheckerBuilder) JsCompiler(org.eclipse.ceylon.compiler.js.JsCompiler) Test(org.junit.Test)

Example 13 with TypeChecker

use of org.eclipse.ceylon.compiler.typechecker.TypeChecker in project ceylon by eclipse.

the class TestSiteVariance method testSiteVariance.

@Test
@SuppressWarnings("unchecked")
public void testSiteVariance() throws IOException {
    // Typecheck
    Options opts = options("src/test/resources/variance/phase1");
    TypeChecker tc = typeChecker(opts);
    // Compile
    JsCompiler jsc = new JsCompiler(tc, opts);
    jsc.generate();
    Map<String, Object> model = JavaScriptResolver.readJsonModel(new File("modules/phase1/0.1/phase1-0.1-model.js"));
    Assert.assertNotNull("Model not found", model);
    model = (Map<String, Object>) model.get("phase1");
    Assert.assertNotNull("Default package not found", model);
    model = (Map<String, Object>) model.get("m2");
    Assert.assertNotNull("Function m2 not found", model);
    Map<String, Object> type = (Map<String, Object>) model.get(MetamodelGenerator.KEY_TYPE);
    List<Map<String, Object>> targs = (List<Map<String, Object>>) type.get(MetamodelGenerator.KEY_TYPE_PARAMS);
    type = targs.get(0);
    List<List<Map<String, Object>>> paramLists = (List<List<Map<String, Object>>>) model.get(MetamodelGenerator.KEY_PARAMS);
    Map<String, Object> parm = paramLists.get(0).get(0);
    parm = (Map<String, Object>) parm.get(MetamodelGenerator.KEY_TYPE);
    targs = (List<Map<String, Object>>) parm.get(MetamodelGenerator.KEY_TYPE_PARAMS);
    parm = targs.get(0);
    Assert.assertEquals(SiteVariance.OUT.ordinal(), type.get(MetamodelGenerator.KEY_US_VARIANCE));
    Assert.assertEquals(SiteVariance.IN.ordinal(), parm.get(MetamodelGenerator.KEY_US_VARIANCE));
    // Typecheck phase2
    opts = options("src/test/resources/variance/phase2");
    tc = typeChecker(opts);
    Function m2 = (Function) tc.getPhasedUnits().getPhasedUnits().get(0).getPackage().getModule().getPackage("phase1").getDirectMember("m2", null, false);
    Assert.assertNotNull("phase1::m2 missing", m2);
    Assert.assertFalse("Missing variance overrides in return type", m2.getType().getVarianceOverrides().isEmpty());
    Assert.assertFalse("Missing variance overrides in parameter", m2.getFirstParameterList().getParameters().get(0).getType().getVarianceOverrides().isEmpty());
    jsc = new JsCompiler(tc, opts);
    jsc.generate();
    Assert.assertTrue("Should compile without errors", jsc.getErrors().isEmpty());
}
Also used : Options(org.eclipse.ceylon.compiler.js.util.Options) Function(org.eclipse.ceylon.model.typechecker.model.Function) TypeChecker(org.eclipse.ceylon.compiler.typechecker.TypeChecker) List(java.util.List) File(java.io.File) Map(java.util.Map) JsCompiler(org.eclipse.ceylon.compiler.js.JsCompiler) Test(org.junit.Test)

Example 14 with TypeChecker

use of org.eclipse.ceylon.compiler.typechecker.TypeChecker in project ceylon by eclipse.

the class TestSiteVariance method typeChecker.

private TypeChecker typeChecker(Options opts) {
    final RepositoryManager repoman = CeylonUtils.repoManager().userRepos(opts.getRepos()).outRepo(opts.getOutRepo()).buildManager();
    final TypeCheckerBuilder builder = new TypeCheckerBuilder().moduleManagerFactory(new JsModuleManagerFactory("UTF-8"));
    for (File sd : opts.getSrcDirs()) {
        builder.addSrcDirectory(sd);
    }
    builder.setRepositoryManager(repoman);
    final TypeChecker tc = builder.getTypeChecker();
    JsModuleManagerFactory.setVerbose(true);
    tc.process();
    return tc;
}
Also used : JsModuleManagerFactory(org.eclipse.ceylon.compiler.js.loader.JsModuleManagerFactory) TypeChecker(org.eclipse.ceylon.compiler.typechecker.TypeChecker) RepositoryManager(org.eclipse.ceylon.cmr.api.RepositoryManager) TypeCheckerBuilder(org.eclipse.ceylon.compiler.typechecker.TypeCheckerBuilder) File(java.io.File)

Example 15 with TypeChecker

use of org.eclipse.ceylon.compiler.typechecker.TypeChecker in project ceylon by eclipse.

the class CeylonCompileJsTool method run.

@Override
public void run() throws Exception {
    AppendableWriter writer = new AppendableWriter(getOutAppendable());
    final Options opts = new Options().cwd(cwd).repos(getRepositoryAsStrings()).sourceDirs(roots).resourceDirs(resources).resourceRootName(resourceRootName).systemRepo(systemRepo).outRepo(getOut()).user(user).pass(pass).optimize(optimize).modulify(modulify).comment(comments).verbose(getVerbose()).profile(profile).stdin(false).generateSourceArchive(!skipSrc).encoding(encoding).includeDependencies(includeDependencies).diagnosticListener(diagnosticListener).outWriter(writer).suppressWarnings(suppwarns);
    final TypeChecker typeChecker;
    if (opts.hasVerboseFlag("cmr")) {
        append("Using repositories: " + getRepositoryAsStrings());
        newline();
    }
    final RepositoryManager repoman = getRepositoryManager();
    long t0, t1, t2, t3, t4;
    final TypeCheckerBuilder tcb;
    List<File> onlySources = null;
    List<File> onlyResources = null;
    if (opts.isStdin()) {
        VirtualFile src = new VirtualFile() {

            @Override
            public boolean exists() {
                return true;
            }

            @Override
            public boolean isFolder() {
                return false;
            }

            @Override
            public String getName() {
                return "SCRIPT.ceylon";
            }

            @Override
            public String getPath() {
                return getName();
            }

            @Override
            public String getRelativePath(VirtualFile file) {
                return "";
            }

            @Override
            public InputStream getInputStream() {
                return System.in;
            }

            @Override
            public List<VirtualFile> getChildren() {
                return Collections.emptyList();
            }

            @Override
            public int hashCode() {
                return getPath().hashCode();
            }

            @Override
            public boolean equals(Object obj) {
                if (obj instanceof VirtualFile) {
                    return ((VirtualFile) obj).getPath().equals(getPath());
                } else {
                    return super.equals(obj);
                }
            }

            @Override
            public int compareTo(VirtualFile o) {
                return getPath().compareTo(o.getPath());
            }
        };
        t0 = System.nanoTime();
        tcb = new TypeCheckerBuilder().addSrcDirectory(src);
    } else {
        t0 = System.nanoTime();
        tcb = new TypeCheckerBuilder();
        SourceArgumentsResolver resolver = new SourceArgumentsResolver(roots, resources, Constants.CEYLON_SUFFIX, Constants.JS_SUFFIX);
        resolver.cwd(cwd).expandAndParse(files, Backend.JavaScript);
        if (includeDependencies != null && !COMPILE_NEVER.equals(includeDependencies)) {
            // Determine any dependencies that might need compiling as well
            SourceDependencyResolver sdr = new SourceDependencyResolver(getModuleVersionReader(), roots, Backends.JS);
            if (sdr.traverseDependencies(resolver.getSourceFiles())) {
                for (ModuleVersionDetails mvd : sdr.getAdditionalModules()) {
                    if (COMPILE_FORCE.equals(includeDependencies) || (COMPILE_CHECK.equals(includeDependencies) && shouldRecompile(getOfflineRepositoryManager(), mvd.getModule(), mvd.getVersion(), ModuleQuery.Type.JS, true)) || (COMPILE_ONCE.equals(includeDependencies) && shouldRecompile(getOfflineRepositoryManager(), mvd.getModule(), mvd.getVersion(), ModuleQuery.Type.JS, false))) {
                        files.add(mvd.getModule());
                        resolver.expandAndParse(files, Backend.JavaScript);
                    }
                }
            }
        }
        onlySources = resolver.getSourceFiles();
        onlyResources = resolver.getResourceFiles();
        if (onlySources.isEmpty()) {
            String msg = CeylonCompileJsMessages.msg("error.no.sources");
            if (ModuleWildcardsHelper.onlyGlobArgs(files)) {
                throw new NonFatalToolMessage(msg);
            } else {
                throw new ToolUsageError(msg);
            }
        }
        if (opts.isVerbose()) {
            append("Adding source directories to typechecker:" + roots).newline();
        }
        for (File root : roots) {
            File cwdRoot = applyCwd(root);
            if (cwdRoot.exists() && cwdRoot.isDirectory()) {
                tcb.addSrcDirectory(cwdRoot);
            }
        }
        tcb.setSourceFiles(onlySources);
        if (!resolver.getSourceModules().isEmpty()) {
            tcb.setModuleFilters(resolver.getSourceModules());
        }
        tcb.statistics(opts.isProfile());
        JsModuleManagerFactory.setVerbose(opts.hasVerboseFlag("loader"));
        tcb.moduleManagerFactory(new JsModuleManagerFactory(encoding));
    }
    // getting the type checker does process all types in the source directory
    tcb.verbose(opts.hasVerboseFlag("ast")).setRepositoryManager(repoman);
    tcb.usageWarnings(false).encoding(encoding);
    typeChecker = tcb.getTypeChecker();
    t1 = System.nanoTime();
    TypeCache.doWithoutCaching(new Runnable() {

        @Override
        public void run() {
            typeChecker.process(true);
        }
    });
    t2 = System.nanoTime();
    JsCompiler jsc = new JsCompiler(typeChecker, opts);
    if (onlySources != null) {
        if (opts.isVerbose()) {
            append("Only these files will be compiled: " + onlySources).newline();
        }
        jsc.setSourceFiles(onlySources);
    }
    if (onlyResources != null) {
        jsc.setResourceFiles(onlyResources);
    }
    t3 = System.nanoTime();
    if (!jsc.generate()) {
        if (jsc.getExitCode() != 0) {
            if (throwOnError)
                throw new RuntimeException("Compiler exited with non-zero exit code: " + jsc.getExitCode());
            else {
                jsc.printErrorsAndCount(writer);
                System.exit(jsc.getExitCode());
            }
        }
        int count = jsc.printErrorsAndCount(writer);
        String msg = (count > 1) ? "There were %d errors." : "There was %d error.";
        flush();
        throw new CompilerErrorException(String.format(msg, count));
    } else {
        // We still call this here for any warning there might be
        jsc.printErrorsAndCount(writer);
    }
    t4 = System.nanoTime();
    if (opts.isProfile() || opts.hasVerboseFlag("benchmark")) {
        System.err.println("PROFILING INFORMATION");
        System.err.printf("TypeChecker creation:   %6d nanos%n", t1 - t0);
        System.err.printf("TypeChecker processing: %6d nanos%n", t2 - t1);
        System.err.printf("JS compiler creation:   %6d nanos%n", t3 - t2);
        System.err.printf("JS compilation:         %6d nanos%n", t4 - t3);
        System.out.println("Compilation finished.");
    }
}
Also used : VirtualFile(org.eclipse.ceylon.compiler.typechecker.io.VirtualFile) Options(org.eclipse.ceylon.compiler.js.util.Options) DefaultToolOptions(org.eclipse.ceylon.common.config.DefaultToolOptions) JsModuleManagerFactory(org.eclipse.ceylon.compiler.js.loader.JsModuleManagerFactory) SourceArgumentsResolver(org.eclipse.ceylon.common.tools.SourceArgumentsResolver) TypeChecker(org.eclipse.ceylon.compiler.typechecker.TypeChecker) ModuleVersionDetails(org.eclipse.ceylon.cmr.api.ModuleVersionDetails) SourceDependencyResolver(org.eclipse.ceylon.common.tools.SourceDependencyResolver) TypeCheckerBuilder(org.eclipse.ceylon.compiler.typechecker.TypeCheckerBuilder) NonFatalToolMessage(org.eclipse.ceylon.common.tool.NonFatalToolMessage) ToolUsageError(org.eclipse.ceylon.common.tool.ToolUsageError) RepositoryManager(org.eclipse.ceylon.cmr.api.RepositoryManager) VirtualFile(org.eclipse.ceylon.compiler.typechecker.io.VirtualFile) File(java.io.File)

Aggregations

TypeChecker (org.eclipse.ceylon.compiler.typechecker.TypeChecker)15 TypeCheckerBuilder (org.eclipse.ceylon.compiler.typechecker.TypeCheckerBuilder)14 File (java.io.File)11 Options (org.eclipse.ceylon.compiler.js.util.Options)8 RepositoryManager (org.eclipse.ceylon.cmr.api.RepositoryManager)7 JsCompiler (org.eclipse.ceylon.compiler.js.JsCompiler)6 JsModuleManagerFactory (org.eclipse.ceylon.compiler.js.loader.JsModuleManagerFactory)5 ArrayList (java.util.ArrayList)4 PhasedUnit (org.eclipse.ceylon.compiler.typechecker.context.PhasedUnit)4 Test (org.junit.Test)4 ClosableVirtualFile (org.eclipse.ceylon.compiler.typechecker.io.ClosableVirtualFile)3 Module (org.eclipse.ceylon.model.typechecker.model.Module)3 HashMap (java.util.HashMap)2 Map (java.util.Map)2 LeakingLogger (org.eclipse.ceylon.compiler.typechecker.io.cmr.impl.LeakingLogger)2 FileReader (java.io.FileReader)1 FileWriter (java.io.FileWriter)1 OutputStreamWriter (java.io.OutputStreamWriter)1 PrintWriter (java.io.PrintWriter)1 StringWriter (java.io.StringWriter)1