Package me.pixodro.j2cpp.core.info

Source Code of me.pixodro.j2cpp.core.info.FunctionDefinitionInfo

package me.pixodro.j2cpp.core.info;

import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTFunctionDefinition;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTInitializerList;
import org.eclipse.cdt.core.dom.ast.cpp.ICPPASTQualifiedName;
import org.eclipse.cdt.internal.core.dom.parser.cpp.CPPNodeFactory;
import org.eclipse.jdt.core.dom.MethodDeclaration;
import org.eclipse.jdt.core.dom.TypeDeclaration;

public class FunctionDefinitionInfo extends AbstractFunctionInfo {
  private static final CPPNodeFactory f = CPPNodeFactory.getDefault();
  private final ICPPASTFunctionDefinition definition;

  public FunctionDefinitionInfo(final MethodDeclaration methodDeclaration, final TypeDeclaration typeDeclaration, final TypeDeclarationInfo enclosingType, final CompilationUnitInfo compilationUnitInfo) {
    super(methodDeclaration, enclosingType, compilationUnitInfo);
    final ICPPASTQualifiedName qualifiedName = f.newQualifiedName();
    // for (String name : namespace) {
    // qualifiedName.addName(f.newName(name.toCharArray()));
    // }
    if (enclosingType != null) {
      qualifiedName.addName(new NameInfo(enclosingType.getName()).getName());
    }
    qualifiedName.addName(new NameInfo(typeDeclaration.getName()).getName());
    qualifiedName.addName(new NameInfo(methodDeclaration.getName()).getName());

    // Declarator use for function definition (cpp)
    functionDeclarator.setName(qualifiedName);

    // Method body
    final StatementInfo statementInfo = new StatementInfo(methodDeclaration.getBody(), typeDeclaration, compilationUnitInfo);
    definition = f.newFunctionDefinition(declSpecifier, functionDeclarator, statementInfo.getStatement());
    if (methodDeclaration.isConstructor() && (enclosingType != null)) {
      final ICPPASTInitializerList initializerList = f.newInitializerList();
      initializerList.addClause(f.newIdExpression(f.newName("__parent".toCharArray())));
      definition.addMemberInitializer(f.newConstructorChainInitializer(f.newName("__parent".toCharArray()), initializerList));
    }
  }

  public ICPPASTFunctionDefinition getDefinition() {
    return definition;
  }
}
TOP

Related Classes of me.pixodro.j2cpp.core.info.FunctionDefinitionInfo

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.