/******************************************************************************* * Copyright (c) 2012 itemis AG (http://www.itemis.eu) and others. * All rights reserved. This program and the accompanying materials * are made available under the terms of the Eclipse Public License v1.0 * which accompanies this distribution, and is available at * http://www.eclipse.org/legal/epl-v10.html *******************************************************************************/ package org.xpect.ui.util; import java.io.IOException; import java.util.Collections; import org.eclipse.core.resources.IFile; import org.eclipse.emf.common.util.URI; import org.eclipse.emf.ecore.EObject; import org.eclipse.emf.ecore.resource.Resource; import org.eclipse.jdt.core.IJavaProject; import org.eclipse.jdt.core.JavaCore; import org.eclipse.xtext.resource.ClassloaderClasspathUriResolver; import org.eclipse.xtext.resource.XtextResourceFactory; import org.eclipse.xtext.resource.XtextResourceSet; import org.eclipse.xtext.ui.util.JdtClasspathUriResolver; import org.xpect.XpectFile; import org.xpect.XpectJavaModel; import org.xpect.runner.XpectRunner; import org.xpect.ui.internal.XpectActivator; import com.google.inject.Injector; /** * @author Moritz Eysholdt - Initial contribution and API */ public class XpectUtil { public static XpectFile loadFile(IFile file) { Injector injector = XpectActivator.getInstance().getInjector(XpectActivator.ORG_XPECT_XPECT); XtextResourceSet rs = new XtextResourceSet(); IJavaProject javaProject = JavaCore.create(file.getProject()); if (XpectRunner.testClassloader != null) { rs.setClasspathURIContext(XpectRunner.testClassloader); rs.setClasspathUriResolver(new ClassloaderClasspathUriResolver()); } else if (javaProject != null && javaProject.exists()) { rs.setClasspathURIContext(javaProject); rs.setClasspathUriResolver(new JdtClasspathUriResolver()); } else { rs.setClasspathURIContext(XpectFileAccess.getXpectLibClassLoader()); rs.setClasspathUriResolver(new ClassloaderClasspathUriResolver()); } URI uri = URI.createPlatformResourceURI(file.getFullPath().toString(), true); Resource resource = injector.getInstance(XtextResourceFactory.class).createResource(uri); rs.getResources().add(resource); try { resource.load(Collections.emptyMap()); for (EObject obj : resource.getContents()) if (obj instanceof XpectFile) return (XpectFile) obj; } catch (IOException e) { throw new RuntimeException(e); } return null; } public static XpectJavaModel loadJavaModel(IFile file) { XpectFile xpectFile = XpectUtil.loadFile(file); if (xpectFile != null) return xpectFile.getJavaModel(); return null; } }