Package org.xtext.template.jvmmodel

Source Code of org.xtext.template.jvmmodel.TemplateCompiler

/**
* 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.xtext.template.jvmmodel;

import com.google.common.base.Objects;
import org.eclipse.emf.common.util.EList;
import org.eclipse.xtend2.lib.StringConcatenation;
import org.eclipse.xtext.common.types.JvmFormalParameter;
import org.eclipse.xtext.xbase.XExpression;
import org.eclipse.xtext.xbase.compiler.XbaseCompiler;
import org.eclipse.xtext.xbase.compiler.output.ITreeAppendable;
import org.eclipse.xtext.xbase.typesystem.references.LightweightTypeReference;
import org.xtext.template.template.RichString;
import org.xtext.template.template.RichStringForLoop;

@SuppressWarnings("all")
public class TemplateCompiler extends XbaseCompiler {
  protected void doInternalToJavaStatement(final XExpression expr, final ITreeAppendable it, final boolean isReferenced) {
    boolean _matched = false;
    if (!_matched) {
      if (expr instanceof RichString) {
        _matched=true;
        final String name = it.declareVariable(expr, "_appendable");
        it.newLine();
        StringConcatenation _builder = new StringConcatenation();
        _builder.append("StringBuilder ");
        _builder.append(name, "");
        _builder.append(" = new StringBuilder();");
        _builder.newLineIfNotEmpty();
        it.append(_builder);
        EList<XExpression> _expressions = ((RichString)expr).getExpressions();
        for (final XExpression nestedExpression : _expressions) {
          {
            this.internalToJavaStatement(nestedExpression, it, true);
            it.newLine();
            StringConcatenation _builder_1 = new StringConcatenation();
            _builder_1.append(name, "");
            _builder_1.append(".append(org.eclipse.xtext.xbase.lib.ObjectExtensions.operator_elvis(");
            it.append(_builder_1);
            this.internalToJavaExpression(nestedExpression, it);
            it.append(",\"\"));");
          }
        }
      }
    }
    if (!_matched) {
      if (expr instanceof RichStringForLoop) {
        _matched=true;
        XExpression _forExpression = ((RichStringForLoop)expr).getForExpression();
        this.internalToJavaStatement(_forExpression, it, true);
        JvmFormalParameter _declaredParam = ((RichStringForLoop)expr).getDeclaredParam();
        final LightweightTypeReference paramType = this.getLightweightType(_declaredParam);
        final String name = it.declareVariable(expr, "_forLoopResult");
        it.newLine();
        StringConcatenation _builder = new StringConcatenation();
        _builder.append("StringBuilder ");
        _builder.append(name, "");
        _builder.append(" = new StringBuilder();");
        _builder.newLineIfNotEmpty();
        _builder.append("for (final ");
        it.append(_builder);
        boolean _notEquals = (!Objects.equal(paramType, null));
        if (_notEquals) {
          it.append(paramType);
        } else {
          it.append("Object");
        }
        StringConcatenation _builder_1 = new StringConcatenation();
        _builder_1.append(" ");
        JvmFormalParameter _declaredParam_1 = ((RichStringForLoop)expr).getDeclaredParam();
        JvmFormalParameter _declaredParam_2 = ((RichStringForLoop)expr).getDeclaredParam();
        String _name = _declaredParam_2.getName();
        String _makeJavaIdentifier = this.makeJavaIdentifier(_name);
        String _declareVariable = it.declareVariable(_declaredParam_1, _makeJavaIdentifier);
        _builder_1.append(_declareVariable, " ");
        _builder_1.append(" : ");
        it.append(_builder_1);
        XExpression _forExpression_1 = ((RichStringForLoop)expr).getForExpression();
        this.internalToJavaExpression(_forExpression_1, it);
        ITreeAppendable _append = it.append(") {");
        _append.increaseIndentation();
        XExpression _eachExpression = ((RichStringForLoop)expr).getEachExpression();
        this.internalToJavaStatement(_eachExpression, it, true);
        it.newLine();
        StringConcatenation _builder_2 = new StringConcatenation();
        _builder_2.append(name, "");
        _builder_2.append(".append(");
        it.append(_builder_2);
        XExpression _eachExpression_1 = ((RichStringForLoop)expr).getEachExpression();
        this.internalToJavaExpression(_eachExpression_1, it);
        it.append(");");
        ITreeAppendable _decreaseIndentation = it.decreaseIndentation();
        ITreeAppendable _newLine = _decreaseIndentation.newLine();
        _newLine.append("}");
      }
    }
    if (!_matched) {
      super.doInternalToJavaStatement(expr, it, isReferenced);
    }
  }
 
  protected void internalToConvertedExpression(final XExpression obj, final ITreeAppendable it) {
    boolean _hasName = it.hasName(obj);
    if (_hasName) {
      String _name = it.getName(obj);
      it.append(_name);
    } else {
      super.internalToConvertedExpression(obj, it);
    }
  }
}
TOP

Related Classes of org.xtext.template.jvmmodel.TemplateCompiler

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.