PageRenderTime 42ms CodeModel.GetById 30ms app.highlight 11ms RepoModel.GetById 0ms app.codeStats 0ms

/org.eclipse.xtext.example.fj/src/org/eclipse/xtext/example/util/ModelPrinter.java

https://bitbucket.org/gcubar/fj-eclipse
Java | 123 lines | 95 code | 20 blank | 8 comment | 2 complexity | e090e1bad11fc53381b9d63eeff7d679 MD5 | raw file
  1/**
  2 * 
  3 */
  4package org.eclipse.xtext.example.util;
  5
  6import java.io.ByteArrayInputStream;
  7import java.io.IOException;
  8import java.io.InputStream;
  9
 10import org.eclipse.xtext.example.FJStandaloneSetup;
 11import org.eclipse.xtext.example.fj.Class;
 12import org.eclipse.xtext.example.fj.Field;
 13import org.eclipse.xtext.example.fj.FieldSelection;
 14import org.eclipse.xtext.example.fj.MethodCall;
 15import org.eclipse.xtext.example.fj.New;
 16import org.eclipse.xtext.example.fj.Program;
 17import org.eclipse.xtext.example.fj.Selection;
 18import org.eclipse.xtext.example.fj.Type;
 19import org.eclipse.xtext.example.fj.TypedElement;
 20import org.eclipse.xtext.example.fj.Variable;
 21import org.eclipse.xtext.example.fj.util.FjSwitch;
 22
 23import org.eclipse.emf.common.util.URI;
 24import org.eclipse.emf.ecore.EObject;
 25import org.eclipse.emf.ecore.resource.Resource;
 26import org.eclipse.xtext.resource.XtextResource;
 27import org.eclipse.xtext.resource.XtextResourceSet;
 28
 29import com.google.inject.Injector;
 30
 31/**
 32 * @author bettini
 33 * 
 34 */
 35public class ModelPrinter extends FjSwitch<String> {
 36
 37	@Override
 38	public String caseField(Field object) {
 39		return "field: " + caseTypedElement(object);
 40	}
 41
 42	@Override
 43	public String caseFieldSelection(FieldSelection object) {
 44		return object.getName().getName();
 45	}
 46
 47	@Override
 48	public String caseMethodCall(MethodCall object) {
 49		return object.getName().getName() + "()";
 50	}
 51
 52	@Override
 53	public String caseNew(New object) {
 54		return "new " + object.getClass().getName();
 55	}
 56
 57	@Override
 58	public String caseSelection(Selection object) {
 59		return doSwitch(object.getReceiver()) + "."
 60				+ doSwitch(object.getMessage());
 61	}
 62
 63	@Override
 64	public String caseType(Type object) {
 65		return object.getClass().getName();
 66	}
 67
 68	@Override
 69	public String caseTypedElement(TypedElement object) {
 70		return caseType(object.getType()) + " " + object.getName();
 71	}
 72
 73	@Override
 74	public String caseVariable(Variable object) {
 75		return "var: " + object.getParamref();
 76	}
 77
 78	@Override
 79	public String defaultCase(EObject object) {
 80		return super.defaultCase(object);
 81	}
 82
 83	@Override
 84	public String caseClass(Class object) {
 85		return "class "
 86				+ object.getName()
 87				+ (object.getExtends() != null ? " extends "
 88						+ object.getExtends().getName() : "");
 89	}
 90
 91	@Override
 92	public String caseProgram(Program object) {
 93		String result = "program:\n";
 94
 95		for (Class cl : object.getClasses()) {
 96			result += doSwitch(cl) + "\n";
 97		}
 98
 99		return result;
100	}
101
102	@Override
103	public String doSwitch(EObject theEObject) {
104		// TODO Auto-generated method stub
105		return super.doSwitch(theEObject);
106	}
107
108	public static void main(String[] args) throws IOException {
109		Injector injector = new FJStandaloneSetup()
110				.createInjectorAndDoEMFRegistration();
111		XtextResourceSet resourceSet = injector
112				.getInstance(XtextResourceSet.class);
113		resourceSet.addLoadOption(XtextResource.OPTION_RESOLVE_ALL,
114				Boolean.TRUE);
115		Resource resource = resourceSet.createResource(URI
116				.createURI("dummy:/example.fj"));
117		InputStream in = new ByteArrayInputStream(
118				"class A { A a; } class B extends A { B b; }".getBytes());
119		resource.load(in, resourceSet.getLoadOptions());
120		EObject program = resource.getContents().get(0);
121		System.out.println(new ModelPrinter().doSwitch(program));
122	}
123}