Search in sources :

Example 1 with LocalLoader

use of org.jboss.modules.LocalLoader in project ceylon by eclipse.

the class OnDemandLocalLoader method loadPackageLocal.

public Package loadPackageLocal(String name) {
    String[] tokens = name.split("\\.");
    LocalLoader ll = doUpdate(tokens);
    return (ll != null ? ll.loadPackageLocal(name) : null);
}
Also used : LocalLoader(org.jboss.modules.LocalLoader)

Example 2 with LocalLoader

use of org.jboss.modules.LocalLoader in project ceylon by eclipse.

the class OnDemandLocalLoader method loadResourceLocal.

public List<Resource> loadResourceLocal(String name) {
    String[] tokens = name.split("/");
    LocalLoader ll = doUpdate(tokens);
    return (ll != null ? ll.loadResourceLocal(name) : Collections.<Resource>emptyList());
}
Also used : Resource(org.jboss.modules.Resource) LocalLoader(org.jboss.modules.LocalLoader)

Example 3 with LocalLoader

use of org.jboss.modules.LocalLoader in project ceylon by eclipse.

the class OnDemandLocalLoader method loadClassLocal.

public Class<?> loadClassLocal(String name, boolean resolve) {
    String[] tokens = name.split("\\.");
    LocalLoader ll = doUpdate(tokens);
    return (ll != null ? ll.loadClassLocal(name, resolve) : null);
}
Also used : LocalLoader(org.jboss.modules.LocalLoader)

Example 4 with LocalLoader

use of org.jboss.modules.LocalLoader in project ceylon by eclipse.

the class CeylonModuleLoader method findModule.

@Override
protected ModuleSpec findModule(ModuleIdentifier moduleIdentifier) throws ModuleLoadException {
    try {
        final ArtifactResult artifact = findArtifact(moduleIdentifier);
        if (artifact == null)
            return null;
        if (!artifact.version().equals(moduleIdentifier.getSlot())) {
            AliasModuleSpec alias = (AliasModuleSpec) ModuleSpec.buildAlias(moduleIdentifier, ModuleIdentifier.create(artifact.name(), artifact.version())).create();
            return alias;
        }
        final File moduleFile = artifact.artifact();
        final boolean isDefault = RepositoryManager.DEFAULT_MODULE.equals(moduleIdentifier.getName());
        boolean isMaven = artifact.type() == ArtifactResultType.MAVEN;
        final List<DependencySpec> deps = new ArrayList<>();
        ModuleSpec.Builder builder = ModuleSpec.build(moduleIdentifier);
        if (!ModuleUtil.isMavenJarlessModule(moduleFile)) {
            // add module's jar
            ResourceLoader resourceLoader = ResourceLoaderProvider.getResourceLoader(moduleIdentifier, repository, moduleFile);
            // filter
            PathFilter filter = (artifact.filter() != null ? new CMRPathFilter(artifact.filter()) : PathFilters.acceptAll());
            // module resource root
            ResourceLoaderSpec rls = ResourceLoaderSpec.createResourceLoaderSpec(resourceLoader, filter);
            builder.addResourceRoot(rls);
        }
        // add potential native lib lookup
        ResourceLoader nativeLoader = new NativeLibraryResourceLoader(new File(moduleFile.getParent(), "lib"));
        builder.addResourceRoot(ResourceLoaderSpec.createResourceLoaderSpec(nativeLoader));
        Graph.Vertex<ModuleIdentifier, Boolean> vertex = graph.createVertex(moduleIdentifier, moduleIdentifier);
        DependencySpec lds = DependencySpec.createLocalDependencySpec();
        // local resources
        builder.addDependency(lds);
        deps.add(lds);
        if (isDefault == false) {
            Node<ArtifactResult> root = new Node<>();
            for (ArtifactResult i : artifact.dependencies()) {
                // Skip test scopes
                if (i.moduleScope() == ModuleScope.TEST)
                    continue;
                final String name = i.name();
                // route logging to JBoss LogManager
                if (isLogging(deps, builder, i)) {
                    continue;
                }
                // skip JDK modules
                if (JDK_MODULE_NAMES.contains(name)) {
                    continue;
                }
                boolean isDepMaven = MavenArtifactContext.NAMESPACE.equals(i.namespace());
                if (i.optional()) {
                    Node<ArtifactResult> current = root;
                    String[] tokens = name.split("\\.");
                    for (String token : tokens) {
                        Node<ArtifactResult> child = current.getChild(token);
                        if (child == null)
                            child = current.addChild(token);
                        current = child;
                    }
                    current.setValue(i);
                } else {
                    DependencySpec mds = createModuleDependency(i, exportMavenImports && isMaven && isDepMaven);
                    builder.addDependency(mds);
                    deps.add(mds);
                }
                ModuleIdentifier mi = createModuleIdentifier(i);
                Graph.Vertex<ModuleIdentifier, Boolean> dv = graph.createVertex(mi, mi);
                Graph.Edge.create(i.exported() || (exportMavenImports && isMaven && isDepMaven), vertex, dv);
            }
            if (root.isEmpty() == false) {
                LocalLoader onDemandLoader = new OnDemandLocalLoader(moduleIdentifier, this, root);
                builder.setFallbackLoader(onDemandLoader);
            }
        }
        // automagically import the JDK module
        builder.addDependency(JDK_DEPENDENCY);
        // no need to track system deps -- cannot be updated anyway
        createModuleDependency(vertex, deps, builder, LANGUAGE, false);
        // add runtime utils
        final DependencySpec sds = DependencySpec.createModuleDependencySpec(PathFilters.match(CEYLON_RUNTIME_PATH), PathFilters.rejectAll(), this, RUNTIME, true);
        builder.addDependency(sds);
        deps.add(sds);
        Graph.Vertex<ModuleIdentifier, Boolean> sdsv = graph.createVertex(RUNTIME, RUNTIME);
        Graph.Edge.create(false, vertex, sdsv);
        dependencies.put(moduleIdentifier, deps);
        // Stef: enable back when we upgrade jboss modules
        // index(artifact.artifact(), moduleIdentifier);
        UtilRegistryTransformer transformer = new UtilRegistryTransformer(moduleIdentifier, artifact);
        builder.setClassFileTransformer(transformer);
        // make sure we set our own class loader factory so we can find the transformer back from the class loader
        // this is used in the language module to force module metamodel registration
        builder.setModuleClassLoaderFactory(new CeylonModuleClassLoader.CeylonModuleClassLoaderFactory(transformer));
        return builder.create();
    } catch (Exception e) {
        throw new ModuleLoadException(e);
    }
}
Also used : ModuleLoadException(org.jboss.modules.ModuleLoadException) NativeLibraryResourceLoader(org.jboss.modules.NativeLibraryResourceLoader) ResourceLoader(org.jboss.modules.ResourceLoader) PathFilter(org.jboss.modules.filter.PathFilter) ArrayList(java.util.ArrayList) AliasModuleSpec(org.jboss.modules.AliasModuleSpec) ModuleSpec(org.jboss.modules.ModuleSpec) AliasModuleSpec(org.jboss.modules.AliasModuleSpec) DependencySpec(org.jboss.modules.DependencySpec) ModuleIdentifier(org.jboss.modules.ModuleIdentifier) LocalLoader(org.jboss.modules.LocalLoader) Builder(org.jboss.modules.ModuleSpec.Builder) ModuleLoadException(org.jboss.modules.ModuleLoadException) ArtifactResult(org.eclipse.ceylon.model.cmr.ArtifactResult) ResourceLoaderSpec(org.jboss.modules.ResourceLoaderSpec) NativeLibraryResourceLoader(org.jboss.modules.NativeLibraryResourceLoader) File(java.io.File)

Aggregations

LocalLoader (org.jboss.modules.LocalLoader)4 File (java.io.File)1 ArrayList (java.util.ArrayList)1 ArtifactResult (org.eclipse.ceylon.model.cmr.ArtifactResult)1 AliasModuleSpec (org.jboss.modules.AliasModuleSpec)1 DependencySpec (org.jboss.modules.DependencySpec)1 ModuleIdentifier (org.jboss.modules.ModuleIdentifier)1 ModuleLoadException (org.jboss.modules.ModuleLoadException)1 ModuleSpec (org.jboss.modules.ModuleSpec)1 Builder (org.jboss.modules.ModuleSpec.Builder)1 NativeLibraryResourceLoader (org.jboss.modules.NativeLibraryResourceLoader)1 Resource (org.jboss.modules.Resource)1 ResourceLoader (org.jboss.modules.ResourceLoader)1 ResourceLoaderSpec (org.jboss.modules.ResourceLoaderSpec)1 PathFilter (org.jboss.modules.filter.PathFilter)1