Search in sources :

Example 1 with CeyloncFileManager

use of org.eclipse.ceylon.compiler.java.tools.CeyloncFileManager in project ceylon by eclipse.

the class JavacProcessingEnvironment method discoverAndRunProcs.

private void discoverAndRunProcs(Context context, Set<TypeElement> annotationsPresent, List<ClassSymbol> topLevelClasses, List<PackageSymbol> packageInfoFiles) {
    Map<String, TypeElement> unmatchedAnnotations = new HashMap<String, TypeElement>(annotationsPresent.size());
    for (TypeElement a : annotationsPresent) {
        unmatchedAnnotations.put(a.getQualifiedName().toString(), a);
    }
    // Give "*" processors a chance to match
    if (unmatchedAnnotations.size() == 0)
        unmatchedAnnotations.put("", null);
    DiscoveredProcessors.ProcessorStateIterator psi = discoveredProcs.iterator();
    // TODO: Create proper argument values; need past round
    // information to fill in this constructor.  Note that the 1
    // st round of processing could be the last round if there
    // were parse errors on the initial source files; however, we
    // are not doing processing in that case.
    Set<Element> rootElements = new LinkedHashSet<Element>();
    rootElements.addAll(topLevelClasses);
    rootElements.addAll(packageInfoFiles);
    rootElements = Collections.unmodifiableSet(rootElements);
    RoundEnvironment renv = new JavacRoundEnvironment(false, false, rootElements, JavacProcessingEnvironment.this);
    while (unmatchedAnnotations.size() > 0 && psi.hasNext()) {
        ProcessorState ps = psi.next();
        Set<String> matchedNames = new HashSet<String>();
        Set<TypeElement> typeElements = new LinkedHashSet<TypeElement>();
        for (Map.Entry<String, TypeElement> entry : unmatchedAnnotations.entrySet()) {
            String unmatchedAnnotationName = entry.getKey();
            if (ps.annotationSupported(unmatchedAnnotationName)) {
                matchedNames.add(unmatchedAnnotationName);
                TypeElement te = entry.getValue();
                if (te != null)
                    typeElements.add(te);
            }
        }
        if (matchedNames.size() > 0 || ps.contributed) {
            // Ceylon: set the output module for APT-generated files
            LanguageCompiler compiler = (LanguageCompiler) LanguageCompiler.instance(context);
            if (compiler.getCompiledModules().size() == 1) {
                CeyloncFileManager fm = (CeyloncFileManager) context.get(JavaFileManager.class);
                fm.setModule(compiler.getCompiledModules().iterator().next());
                fm.setAptRound(true);
            } else {
                log.error("Running APT processors while compiling more than one module is not supported yet");
            }
            boolean processingResult = callProcessor(ps.processor, typeElements, renv);
            ps.contributed = true;
            ps.removeSupportedOptions(unmatchedProcessorOptions);
            if (printProcessorInfo || verbose) {
                log.printLines("x.print.processor.info", ps.processor.getClass().getName(), matchedNames.toString(), processingResult);
            }
            if (processingResult) {
                unmatchedAnnotations.keySet().removeAll(matchedNames);
            }
        }
    }
    unmatchedAnnotations.remove("");
    if (lint && unmatchedAnnotations.size() > 0) {
        // Remove annotations processed by javac
        unmatchedAnnotations.keySet().removeAll(platformAnnotations);
        if (unmatchedAnnotations.size() > 0) {
            log = Log.instance(context);
            log.warning("proc.annotations.without.processors", unmatchedAnnotations.keySet());
        }
    }
    // Run contributing processors that haven't run yet
    psi.runContributingProcs(renv);
    // Debugging
    if (options.isSet("displayFilerState"))
        filer.displayState();
}
Also used : JavaFileManager(org.eclipse.ceylon.javax.tools.JavaFileManager) StandardJavaFileManager(org.eclipse.ceylon.javax.tools.StandardJavaFileManager) LanguageCompiler(org.eclipse.ceylon.compiler.java.tools.LanguageCompiler) CeyloncFileManager(org.eclipse.ceylon.compiler.java.tools.CeyloncFileManager)

Example 2 with CeyloncFileManager

use of org.eclipse.ceylon.compiler.java.tools.CeyloncFileManager in project ceylon by eclipse.

the class MiscTests method debugIncrementalCompilationBug.

/**
 * This test is for when we need to debug an incremental compilation error from the IDE, to make
 * sure it is indeed a bug and find which bug it is, do not enable it by default, it's only there
 * for debugging purpose. Once the bug is found, add it where it belongs (not here).
 */
@Ignore
@Test
public void debugIncrementalCompilationBug() {
    java.util.List<File> sourceFiles = new ArrayList<File>();
    String sdkSourcePath = "../../ceylon-sdk/source";
    String testSourcePath = "../../ceylon-sdk/test-source";
    for (String s : new String[] { "../../ceylon-sdk/source/ceylon/json/StringPrinter.ceylon", "../../ceylon-sdk/test-source/test/ceylon/json/print.ceylon", "../../ceylon-sdk/source/ceylon/json/Array.ceylon", "../../ceylon-sdk/test-source/test/ceylon/json/use.ceylon", "../../ceylon-sdk/source/ceylon/net/uri/Path.ceylon", "../../ceylon-sdk/test-source/test/ceylon/net/run.ceylon", "../../ceylon-sdk/source/ceylon/json/Printer.ceylon", "../../ceylon-sdk/source/ceylon/json/Object.ceylon", "../../ceylon-sdk/source/ceylon/net/uri/Query.ceylon", "../../ceylon-sdk/test-source/test/ceylon/json/run.ceylon", "../../ceylon-sdk/test-source/test/ceylon/net/connection.ceylon", "../../ceylon-sdk/source/ceylon/json/parse.ceylon", "../../ceylon-sdk/test-source/test/ceylon/json/parse.ceylon", "../../ceylon-sdk/source/ceylon/net/uri/PathSegment.ceylon" }) {
        sourceFiles.add(new File(s));
    }
    CeyloncTool compiler;
    try {
        compiler = new CeyloncTool();
    } catch (VerifyError e) {
        System.err.println("ERROR: Cannot run tests! Did you maybe forget to configure the -Xbootclasspath/p: parameter?");
        throw e;
    }
    CeyloncFileManager fileManager = (CeyloncFileManager) compiler.getStandardFileManager(null, null, null);
    Iterable<? extends JavaFileObject> compilationUnits1 = fileManager.getJavaFileObjectsFromFiles(sourceFiles);
    String compilerSourcePath = sdkSourcePath + File.pathSeparator + testSourcePath;
    CeyloncTaskImpl task = (CeyloncTaskImpl) compiler.getTask(null, fileManager, null, Arrays.asList("-sourcepath", compilerSourcePath, "-d", "../../ceylon-sdk/modules"), null, compilationUnits1);
    Boolean result = task.call();
    Assert.assertEquals("Compilation failed", Boolean.TRUE, result);
}
Also used : ArrayList(java.util.ArrayList) CeyloncTool(org.eclipse.ceylon.compiler.java.tools.CeyloncTool) CeyloncTaskImpl(org.eclipse.ceylon.compiler.java.tools.CeyloncTaskImpl) File(java.io.File) CeyloncFileManager(org.eclipse.ceylon.compiler.java.tools.CeyloncFileManager) Ignore(org.junit.Ignore) Test(org.junit.Test)

Example 3 with CeyloncFileManager

use of org.eclipse.ceylon.compiler.java.tools.CeyloncFileManager in project ceylon by eclipse.

the class MiscTests method compileSDKOnly.

private void compileSDKOnly(String[] modules, String[] extraModules) {
    String sourceDir = "../../ceylon-sdk/source";
    // don't run this if the SDK is not checked out
    File sdkFile = new File(sourceDir);
    if (!sdkFile.exists())
        return;
    java.util.List<String> moduleNames = new ArrayList<String>(modules.length);
    for (String module : modules) {
        moduleNames.add("ceylon." + module);
    }
    for (String module : extraModules) {
        moduleNames.add(module);
    }
    CeyloncTool compiler;
    try {
        compiler = new CeyloncTool();
    } catch (VerifyError e) {
        System.err.println("ERROR: Cannot run tests! Did you maybe forget to configure the -Xbootclasspath/p: parameter?");
        throw e;
    }
    ErrorCollector errorCollector = new ErrorCollector();
    CeyloncFileManager fileManager = (CeyloncFileManager) compiler.getStandardFileManager(null, null, null);
    CeyloncTaskImpl task = (CeyloncTaskImpl) compiler.getTask(null, fileManager, errorCollector, Arrays.asList("-sourcepath", sourceDir, "-d", "build/classes-sdk", "-sysrep", getSysRepPath(), "-suppress-warnings", "ceylonNamespace", "-cp", getClassPathAsPath()), moduleNames, null);
    Boolean result = task.call();
    Assert.assertEquals("Compilation of SDK itself failed: " + errorCollector.getAssertionFailureMessage(), Boolean.TRUE, result);
}
Also used : ArrayList(java.util.ArrayList) CeyloncTool(org.eclipse.ceylon.compiler.java.tools.CeyloncTool) ErrorCollector(org.eclipse.ceylon.compiler.java.test.ErrorCollector) CeyloncTaskImpl(org.eclipse.ceylon.compiler.java.tools.CeyloncTaskImpl) File(java.io.File) CeyloncFileManager(org.eclipse.ceylon.compiler.java.tools.CeyloncFileManager)

Example 4 with CeyloncFileManager

use of org.eclipse.ceylon.compiler.java.tools.CeyloncFileManager in project ceylon by eclipse.

the class MiscTests method compileRuntime.

@Test
public void compileRuntime() {
    cleanCars("build/classes-runtime");
    java.util.List<File> sourceFiles = new ArrayList<File>();
    String ceylonSourcePath = "../language/src";
    String javaSourcePath = "../language/runtime";
    String[] ceylonPackages = { "ceylon.language", "ceylon.language.meta", "ceylon.language.impl", "ceylon.language.meta.declaration", "ceylon.language.meta.model", "ceylon.language.serialization" };
    // Native files
    FileFilter exceptions = new FileFilter() {

        @Override
        public boolean accept(File pathname) {
            String filename = pathname.getName();
            filename = filename.substring(0, filename.lastIndexOf('.'));
            for (String s : new String[] { "Boolean", "Integer", "Float", "Character", "String", "Byte", "Array", "Tuple", "Exception", "AssertionError", "Callable", "flatten", "className", "integerRangeByIterable", "modules", "printStackTrace", "Throwable", "type", "typeLiteral", "classDeclaration", "reach", "unflatten", "serialization", "PartialImpl" }) {
                if (s.equals(filename)) {
                    return true;
                }
            }
            if (filename.equals("annotations") && pathname.getParentFile().getName().equals("meta")) {
                return true;
            }
            return false;
        }
    };
    String[] extras = new String[] { "true", "false", "arrayToTuple" };
    String[] modelExtras = new String[] { "classDeclaration", "annotations", "modules", "type", "typeLiteral" };
    String[] s11nExtras = new String[] { "PartialImpl" };
    for (String pkg : ceylonPackages) {
        File pkgDir = new File(ceylonSourcePath, pkg.replaceAll("\\.", "/"));
        File javaPkgDir = new File(javaSourcePath, pkg.replaceAll("\\.", "/"));
        File[] files = pkgDir.listFiles();
        if (files != null) {
            for (File src : files) {
                if (src.isFile() && src.getName().toLowerCase().endsWith(".ceylon")) {
                    String baseName = src.getName().substring(0, src.getName().length() - 7);
                    if (!exceptions.accept(src)) {
                        sourceFiles.add(src);
                    } else {
                        addJavaSourceFile(baseName, sourceFiles, javaPkgDir, false);
                    }
                }
            }
        }
    }
    // add extra files that are in Java
    File javaPkgDir = new File(javaSourcePath, "ceylon/language");
    for (String extra : extras) addJavaSourceFile(extra, sourceFiles, javaPkgDir, true);
    File javaModelPkgDir = new File(javaSourcePath, "ceylon/language/meta");
    for (String extra : modelExtras) addJavaSourceFile(extra, sourceFiles, javaModelPkgDir, true);
    File javaS11nPkgDir = new File(javaSourcePath, "ceylon/language/serialization");
    for (String extra : s11nExtras) addJavaSourceFile(extra, sourceFiles, javaS11nPkgDir, true);
    File javaS11nEPkgDir = new File(javaSourcePath, "ceylon/language/impl");
    for (String extra : new String[] { "reach" }) addJavaSourceFile(extra, sourceFiles, javaS11nEPkgDir, true);
    String[] javaPackages = { "org/eclipse/ceylon/compiler/java", "org/eclipse/ceylon/compiler/java/language", "org/eclipse/ceylon/compiler/java/metadata", "org/eclipse/ceylon/compiler/java/runtime/ide", "org/eclipse/ceylon/compiler/java/runtime/metamodel", "org/eclipse/ceylon/compiler/java/runtime/model", "org/eclipse/ceylon/compiler/java/runtime/metamodel/decl", "org/eclipse/ceylon/compiler/java/runtime/metamodel/meta", "org/eclipse/ceylon/compiler/java/runtime/serialization", "org/eclipse/ceylon/compiler/java/wrapping" };
    for (String pkg : javaPackages) {
        File pkgDir = new File(javaSourcePath, pkg.replaceAll("\\.", "/"));
        File[] files = pkgDir.listFiles();
        if (files != null) {
            for (File src : files) {
                if (src.isFile() && src.getName().toLowerCase().endsWith(".java")) {
                    sourceFiles.add(src);
                }
            }
        }
    }
    CeyloncTool compiler;
    try {
        compiler = new CeyloncTool();
    } catch (VerifyError e) {
        System.err.println("ERROR: Cannot run tests! Did you maybe forget to configure the -Xbootclasspath/p: parameter?");
        throw e;
    }
    CeyloncFileManager fileManager = (CeyloncFileManager) compiler.getStandardFileManager(null, null, null);
    Iterable<? extends JavaFileObject> compilationUnits1 = fileManager.getJavaFileObjectsFromFiles(sourceFiles);
    String compilerSourcePath = ceylonSourcePath + File.pathSeparator + javaSourcePath;
    CeyloncTaskImpl task = (CeyloncTaskImpl) compiler.getTask(null, fileManager, null, Arrays.asList("-sourcepath", compilerSourcePath, "-d", "build/classes-runtime", "-Xbootstrapceylon", "-cp", getClassPathAsPathExcludingLanguageModule(), "-suppress-warnings", "ceylonNamespace"), null, compilationUnits1);
    Boolean result = task.call();
    Assert.assertEquals("Compilation failed", Boolean.TRUE, result);
}
Also used : ArrayList(java.util.ArrayList) CeyloncTool(org.eclipse.ceylon.compiler.java.tools.CeyloncTool) CeyloncTaskImpl(org.eclipse.ceylon.compiler.java.tools.CeyloncTaskImpl) FileFilter(java.io.FileFilter) File(java.io.File) CeyloncFileManager(org.eclipse.ceylon.compiler.java.tools.CeyloncFileManager) Test(org.junit.Test)

Example 5 with CeyloncFileManager

use of org.eclipse.ceylon.compiler.java.tools.CeyloncFileManager in project ceylon by eclipse.

the class IssuesTests_1500_1999 method testBug1969.

@SuppressWarnings("deprecation")
@Test
public void testBug1969() {
    java.util.List<File> sourceFiles = new ArrayList<File>(1);
    sourceFiles.add(new File(getPackagePath(), "bug19xx/Bug1969.ceylon"));
    CeyloncTool runCompiler = makeCompiler();
    StringWriter writer = new StringWriter();
    CeyloncFileManager runFileManager = (CeyloncFileManager) runCompiler.getStandardFileManager(writer, null, null, null);
    // make sure the destination repo exists
    new File(destDir).mkdirs();
    List<String> options = new LinkedList<String>();
    options.addAll(defaultOptions);
    if (!options.contains("-src"))
        options.addAll(Arrays.asList("-src", getSourcePath()));
    if (!options.contains("-cacherep"))
        options.addAll(Arrays.asList("-cacherep", getCachePath()));
    if (!options.contains("-sysrep"))
        options.addAll(Arrays.asList("-sysrep", getSysRepPath()));
    if (!options.contains("-cp"))
        options.addAll(Arrays.asList("-cp", getClassPathAsPath()));
    options.add("-verbose");
    Iterable<? extends JavaFileObject> compilationUnits1 = runFileManager.getJavaFileObjectsFromFiles(sourceFiles);
    CeyloncTaskImpl task = runCompiler.getTask(writer, runFileManager, null, options, null, compilationUnits1);
    ErrorCollector collector = new ErrorCollector();
    assertCompilesOk(collector, task.call2());
    Assert.assertTrue(writer.toString().length() > 0);
}
Also used : ArrayList(java.util.ArrayList) CeyloncTool(org.eclipse.ceylon.compiler.java.tools.CeyloncTool) ErrorCollector(org.eclipse.ceylon.compiler.java.test.ErrorCollector) CeyloncTaskImpl(org.eclipse.ceylon.compiler.java.tools.CeyloncTaskImpl) LinkedList(java.util.LinkedList) StringWriter(java.io.StringWriter) File(java.io.File) CeyloncFileManager(org.eclipse.ceylon.compiler.java.tools.CeyloncFileManager) Test(org.junit.Test)

Aggregations

CeyloncFileManager (org.eclipse.ceylon.compiler.java.tools.CeyloncFileManager)7 File (java.io.File)6 ArrayList (java.util.ArrayList)6 CeyloncTool (org.eclipse.ceylon.compiler.java.tools.CeyloncTool)6 CeyloncTaskImpl (org.eclipse.ceylon.compiler.java.tools.CeyloncTaskImpl)5 ErrorCollector (org.eclipse.ceylon.compiler.java.test.ErrorCollector)3 Test (org.junit.Test)3 LinkedList (java.util.LinkedList)2 FileFilter (java.io.FileFilter)1 StringWriter (java.io.StringWriter)1 ZipFile (java.util.zip.ZipFile)1 LanguageCompiler (org.eclipse.ceylon.compiler.java.tools.LanguageCompiler)1 JavaFileManager (org.eclipse.ceylon.javax.tools.JavaFileManager)1 StandardJavaFileManager (org.eclipse.ceylon.javax.tools.StandardJavaFileManager)1 Ignore (org.junit.Ignore)1