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