Package com.google.eclipse.protobuf.resource

Source Code of com.google.eclipse.protobuf.resource.FastXtextResourceSet

package com.google.eclipse.protobuf.resource;

import static org.eclipse.xtext.resource.ClasspathUriUtil.isClasspathUri;

import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.Map;

import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.IPath;
import org.eclipse.emf.common.util.URI;
import org.eclipse.emf.ecore.resource.URIConverter;
import org.eclipse.emf.ecore.resource.impl.ExtensibleURIConverterImpl;
import org.eclipse.xtext.resource.ClasspathUriResolutionException;
import org.eclipse.xtext.resource.SynchronizedXtextResourceSet;

import com.google.eclipse.protobuf.util.Uris;
import com.google.inject.Inject;

public class FastXtextResourceSet extends SynchronizedXtextResourceSet {
  @Inject private Uris uris;

  @Override public URIConverter getURIConverter() {
    if (uriConverter == null) {
      uriConverter = new ExtensibleURIConverterImpl() {
        @Override public URI normalize(URI uri) {
          if (isClasspathUri(uri)) {
            URI result = resolveClasspathURI(uri);
            if (isClasspathUri(result)) {
              throw new ClasspathUriResolutionException(result);
            }
            result = super.normalize(result);
            return result;
          }
          return super.normalize(uri);
        }

        @Override public InputStream createInputStream(URI uri) throws IOException {
          InputStream in = doCreateInputStream(uri);
          return in != null ? in : super.createInputStream(uri);
        }

        @Override public InputStream createInputStream(URI uri, Map<?, ?> options) throws IOException {
          InputStream in = doCreateInputStream(uri);
          return in != null ? in : super.createInputStream(uri, options);
        }

        private InputStream doCreateInputStream(URI uri) throws IOException {
          if (isClasspathUri(uri)) {
            return getClass().getResourceAsStream(uri.path());
          }
          if (uris.hasProtoExtension(uri)) {
            if (uri.isPlatformResource()) {
              IFile file = uris.referredFile(uri);
              if (file != null && file.exists()) {
                IPath location = file.getLocation();
                return new FileInputStream(location.toFile());
              }
            }
            if (uri.isFile()) {
              return new FileInputStream(uri.path());
            }
          }
          return null;
        }
      };
    }
    return uriConverter;
  }

  private URI resolveClasspathURI(URI uri) {
    return getClasspathUriResolver().resolve(getClasspathURIContext(), uri);
  }
}
TOP

Related Classes of com.google.eclipse.protobuf.resource.FastXtextResourceSet

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.