Package me.pixodro.j2cpp.core.info

Source Code of me.pixodro.j2cpp.core.info.AbstractVariableDeclarationInfo$VariableDeclarationWrapper

package me.pixodro.j2cpp.core.info;

import java.util.List;

import org.eclipse.cdt.core.dom.ast.IASTDeclSpecifier;
import org.eclipse.cdt.core.dom.ast.IASTSimpleDeclaration;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory;
import org.eclipse.jdt.core.dom.Type;
import org.eclipse.jdt.core.dom.VariableDeclarationExpression;
import org.eclipse.jdt.core.dom.VariableDeclarationFragment;
import org.eclipse.jdt.core.dom.VariableDeclarationStatement;

/**
* Created with IntelliJ IDEA.
* User: bquenin
* Date: 7/9/12
* Time: 10:34 PM
* To change this template use File | Settings | File Templates.
*/
abstract public class AbstractVariableDeclarationInfo {
  private static final CPPNodeFactory f = CPPNodeFactory.getDefault();

  private final IASTSimpleDeclaration declaration;

  private final CompilationUnitInfo compilationUnitInfo;

  public AbstractVariableDeclarationInfo(final VariableDeclarationStatement variableDeclarationStatement, final CompilationUnitInfo compilationUnitInfo) {
    this.compilationUnitInfo = compilationUnitInfo;
    final VariableDeclarationWrapper wrapper = new VariableDeclarationWrapper(variableDeclarationStatement);
    declaration = convertWrapper(wrapper);
  }

  public AbstractVariableDeclarationInfo(final VariableDeclarationExpression variableDeclarationExpression, final CompilationUnitInfo compilationUnitInfo) {
    this.compilationUnitInfo = compilationUnitInfo;
    final VariableDeclarationWrapper wrapper = new VariableDeclarationWrapper(variableDeclarationExpression);
    declaration = convertWrapper(wrapper);
  }

  private IASTSimpleDeclaration convertWrapper(final VariableDeclarationWrapper wrapper) {
    final ModifiersInfo modifiers = new ModifiersInfo(wrapper.modifiers());
    final TypeInfo typeInfo = new TypeInfo(wrapper.getType(), compilationUnitInfo);

    final IASTDeclSpecifier declSpecifier = typeInfo.getDeclSpecifier();

    if (modifiers.isStatic && modifiers.isFinal) {
      declSpecifier.setStorageClass(IASTDeclSpecifier.sc_static);
      declSpecifier.setConst(true);
    }
    if (modifiers.isStatic) {
      declSpecifier.setStorageClass(IASTDeclSpecifier.sc_static);
    }

    return convertFragments(wrapper, declSpecifier);
  }

  private IASTSimpleDeclaration convertFragments(final VariableDeclarationWrapper wrapper, final IASTDeclSpecifier declSpecifier) {
    final IASTSimpleDeclaration simpleDeclaration = f.newSimpleDeclaration(declSpecifier);
    for (final Object fragmentObject : wrapper.fragments()) {
      final VariableDeclarationFragment fragment = (VariableDeclarationFragment) fragmentObject;
      final VariableDeclarationFragmentInfo fragmentInfo = new VariableDeclarationFragmentInfo(fragment, wrapper.getType(), compilationUnitInfo);
      simpleDeclaration.addDeclarator(fragmentInfo.getDeclarator());

    }
    return simpleDeclaration;
  }

  public IASTSimpleDeclaration getDeclaration() {
    return declaration;
  }

  private class VariableDeclarationWrapper {
    private VariableDeclarationStatement statement;
    private VariableDeclarationExpression expression;

    public VariableDeclarationWrapper(final VariableDeclarationStatement statement) {
      this.statement = statement;
    }

    public VariableDeclarationWrapper(final VariableDeclarationExpression expression) {
      this.expression = expression;
    }

    public List<?> modifiers() {
      if (statement != null) {
        return statement.modifiers();
      }
      return expression.modifiers();
    }

    public Type getType() {
      if (statement != null) {
        return statement.getType();
      }
      return expression.getType();
    }

    public List<?> fragments() {
      if (statement != null) {
        return statement.fragments();
      }
      return expression.fragments();
    }
  }
}
TOP

Related Classes of me.pixodro.j2cpp.core.info.AbstractVariableDeclarationInfo$VariableDeclarationWrapper

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.