Search in sources :

Example 1 with FilteringClassLoader

use of org.eclipse.xtend.core.macro.FilteringClassLoader in project xtext-xtend by eclipse.

the class ProcessorInstanceForJvmTypeProvider method getClassLoader.

public ClassLoader getClassLoader(final EObject ctx) {
    final ResourceSet resourceSet = ctx.eResource().getResourceSet();
    final ProcessorInstanceForJvmTypeProvider.ProcessorClassloaderAdapter adapter = IterableExtensions.<ProcessorInstanceForJvmTypeProvider.ProcessorClassloaderAdapter>head(Iterables.<ProcessorInstanceForJvmTypeProvider.ProcessorClassloaderAdapter>filter(resourceSet.eAdapters(), ProcessorInstanceForJvmTypeProvider.ProcessorClassloaderAdapter.class));
    if ((adapter != null)) {
        return adapter.getClassLoader();
    }
    boolean _matched = false;
    if (resourceSet instanceof XtextResourceSet) {
        _matched = true;
        final Object classLoaderCtx = ((XtextResourceSet) resourceSet).getClasspathURIContext();
        ClassLoader _switchResult_1 = null;
        boolean _matched_1 = false;
        if (classLoaderCtx instanceof ClassLoader) {
            _matched_1 = true;
            _switchResult_1 = ((ClassLoader) classLoaderCtx);
        }
        if (!_matched_1) {
            if (classLoaderCtx instanceof Class) {
                _matched_1 = true;
                _switchResult_1 = ((Class<?>) classLoaderCtx).getClassLoader();
            }
        }
        final ClassLoader jvmTypeLoader = _switchResult_1;
        ClassLoader _xifexpression = null;
        if ((jvmTypeLoader instanceof URLClassLoader)) {
            URLClassLoader _xblockexpression = null;
            {
                final ArrayList<URL> urls = CollectionLiterals.<URL>newArrayList();
                URL[] _uRLs = ((URLClassLoader) jvmTypeLoader).getURLs();
                Iterables.<URL>addAll(urls, ((Iterable<? extends URL>) Conversions.doWrapArray(_uRLs)));
                final ClassLoader bootClassloader = ((URLClassLoader) jvmTypeLoader).getParent();
                if ((bootClassloader instanceof AlternateJdkLoader)) {
                    URL[] _uRLs_1 = ((AlternateJdkLoader) bootClassloader).getURLs();
                    Iterables.<URL>addAll(urls, ((Iterable<? extends URL>) Conversions.doWrapArray(_uRLs_1)));
                }
                ClassLoader _classLoader = TransformationContext.class.getClassLoader();
                final FilteringClassLoader filtered = new FilteringClassLoader(_classLoader, Collections.<String>unmodifiableList(CollectionLiterals.<String>newArrayList("org.eclipse.xtext.xbase.lib", "org.eclipse.xtend.lib", "org.eclipse.xtend2.lib", "com.google.common")));
                _xblockexpression = new URLClassLoader(((URL[]) Conversions.unwrapArray(urls, URL.class)), filtered);
            }
            _xifexpression = _xblockexpression;
        } else {
            _xifexpression = jvmTypeLoader;
        }
        final ClassLoader processorClassLoader = _xifexpression;
        if ((processorClassLoader != null)) {
            EList<Adapter> _eAdapters = ((XtextResourceSet) resourceSet).eAdapters();
            ProcessorInstanceForJvmTypeProvider.ProcessorClassloaderAdapter _processorClassloaderAdapter = new ProcessorInstanceForJvmTypeProvider.ProcessorClassloaderAdapter(processorClassLoader);
            _eAdapters.add(_processorClassloaderAdapter);
            return processorClassLoader;
        }
    }
    ProcessorInstanceForJvmTypeProvider.logger.info("No class loader configured. Trying with this class classloader.");
    return this.getClass().getClassLoader();
}
Also used : AlternateJdkLoader(org.eclipse.xtext.util.internal.AlternateJdkLoader) ArrayList(java.util.ArrayList) Adapter(org.eclipse.emf.common.notify.Adapter) ResourceSet(org.eclipse.emf.ecore.resource.ResourceSet) XtextResourceSet(org.eclipse.xtext.resource.XtextResourceSet) TransformationContext(org.eclipse.xtend.lib.macro.TransformationContext) URL(java.net.URL) XtextResourceSet(org.eclipse.xtext.resource.XtextResourceSet) URLClassLoader(java.net.URLClassLoader) FilteringClassLoader(org.eclipse.xtend.core.macro.FilteringClassLoader) URLClassLoader(java.net.URLClassLoader) FilteringClassLoader(org.eclipse.xtend.core.macro.FilteringClassLoader) EObject(org.eclipse.emf.ecore.EObject)

Aggregations

URL (java.net.URL)1 URLClassLoader (java.net.URLClassLoader)1 ArrayList (java.util.ArrayList)1 Adapter (org.eclipse.emf.common.notify.Adapter)1 EObject (org.eclipse.emf.ecore.EObject)1 ResourceSet (org.eclipse.emf.ecore.resource.ResourceSet)1 FilteringClassLoader (org.eclipse.xtend.core.macro.FilteringClassLoader)1 TransformationContext (org.eclipse.xtend.lib.macro.TransformationContext)1 XtextResourceSet (org.eclipse.xtext.resource.XtextResourceSet)1 AlternateJdkLoader (org.eclipse.xtext.util.internal.AlternateJdkLoader)1