/org.eclipse.xtext.example.fj/src/org/eclipse/xtext/example/util/ModelPrinter.java
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}