Example usage for org.eclipse.jdt.core.dom VariableDeclarationFragment getAST

List of usage examples for org.eclipse.jdt.core.dom VariableDeclarationFragment getAST

Introduction

In this page you can find the example usage for org.eclipse.jdt.core.dom VariableDeclarationFragment getAST.

Prototype

public final AST getAST() 

Source Link

Document

Returns this node's AST.

Usage

From source file:at.bestsolution.fxide.jdt.corext.dom.ASTFlattener.java

License:Open Source License

@Override
public boolean visit(VariableDeclarationFragment node) {
    node.getName().accept(this);
    if (node.getAST().apiLevel() >= AST.JLS8) {
        List<Dimension> dimensions = node.extraDimensions();
        for (Iterator<Dimension> it = dimensions.iterator(); it.hasNext();) {
            Dimension e = it.next();
            e.accept(this);
        }//from  w  ww. j a  va  2 s . c om
    } else {
        for (int i = 0; i < node.getExtraDimensions(); i++) {
            this.fBuffer.append("[]"); //$NON-NLS-1$
        }
    }
    if (node.getInitializer() != null) {
        this.fBuffer.append("=");//$NON-NLS-1$
        node.getInitializer().accept(this);
    }
    return false;
}

From source file:ch.acanda.eclipse.pmd.java.resolution.design.SingularFieldQuickFix.java

License:Open Source License

/**
 * Replaces the assignment with a variable declaration. If the assignment is the only one in the block for this
 * variable, the final modifier is added to the declaration.
 *///  w ww .  ja v  a 2s.c o m
@SuppressWarnings("unchecked")
private void replaceAssignment(final VariableDeclarationFragment node, final Assignment assignment,
        final boolean finalDeclaration) {
    final FieldDeclaration fieldDeclaration = (FieldDeclaration) node.getParent();
    final VariableDeclarationStatement declaration = (VariableDeclarationStatement) node.getAST()
            .createInstance(VariableDeclarationStatement.class);
    declaration.setType(ASTUtil.copy(fieldDeclaration.getType()));
    final VariableDeclarationFragment fragment = (VariableDeclarationFragment) node.getAST()
            .createInstance(VariableDeclarationFragment.class);
    fragment.setName(ASTUtil.copy(node.getName()));
    fragment.setInitializer(ASTUtil.copy(assignment.getRightHandSide()));
    declaration.fragments().add(fragment);
    if (finalDeclaration) {
        final Modifier modifier = (Modifier) node.getAST().createInstance(Modifier.class);
        modifier.setKeyword(ModifierKeyword.FINAL_KEYWORD);
        declaration.modifiers().add(modifier);
    }
    ASTUtil.replace(assignment.getParent(), declaration);
}

From source file:com.google.devtools.j2cpp.translate.DeadCodeEliminator.java

License:Open Source License

/**
 * Add an initializer expression to a field declaration fragment.
 *///from w w  w  . ja v  a  2s.  c o m
private void addFieldInitializer(VariableDeclarationFragment var) {
    AST ast = var.getAST();
    ITypeBinding type = ((FieldDeclaration) var.getParent()).getType().resolveBinding();
    var.setInitializer(getDefaultValue(ast, type));
}

From source file:com.google.devtools.j2cpp.translate.InitializationNormalizer.java

License:Open Source License

private ExpressionStatement makeAssignmentStatement(VariableDeclarationFragment fragment) {
    AST ast = fragment.getAST();
    IVariableBinding varBinding = Types.getVariableBinding(fragment);
    Assignment assignment = ast.newAssignment();
    Types.addBinding(assignment, varBinding.getType());
    Expression lhs = ast.newSimpleName(fragment.getName().getIdentifier());
    Types.addBinding(lhs, varBinding);
    assignment.setLeftHandSide(lhs);//from  w  ww  .  j  a va 2  s. com

    Expression initializer = fragment.getInitializer();
    if (initializer instanceof ArrayInitializer) {
        // An array initializer cannot be directly assigned, since by itself
        // it's just shorthand for an array creation node.  This therefore
        // builds an array creation node with the existing initializer.
        ArrayCreation arrayCreation = ast.newArrayCreation();
        ITypeBinding arrayType = varBinding.getType();
        Types.addBinding(arrayCreation, arrayType);
        Type newType = Types.makeIOSType(arrayType);
        assert newType != null;
        ArrayType newArrayType = ast.newArrayType(newType);
        Types.addBinding(newArrayType, arrayType);
        arrayCreation.setType(newArrayType);
        arrayCreation.setInitializer((ArrayInitializer) NodeCopier.copySubtree(ast, initializer));
        assignment.setRightHandSide(arrayCreation);
    } else {
        assignment.setRightHandSide(NodeCopier.copySubtree(ast, initializer));
    }
    return ast.newExpressionStatement(assignment);
}

From source file:com.google.devtools.j2cpp.translate.Rewriter.java

License:Open Source License

@Override
public boolean visit(FieldDeclaration node) {
    int mods = node.getModifiers();
    if (Modifier.isStatic(mods)) {
        ASTNode parent = node.getParent();
        @SuppressWarnings("unchecked")
        List<BodyDeclaration> classMembers = parent instanceof AbstractTypeDeclaration
                ? ((AbstractTypeDeclaration) parent).bodyDeclarations()
                : ((AnonymousClassDeclaration) parent).bodyDeclarations(); // safe by specification
        int indexOfNewMember = classMembers.indexOf(node) + 1;

        @SuppressWarnings("unchecked")
        List<VariableDeclarationFragment> fragments = node.fragments(); // safe by specification
        for (VariableDeclarationFragment var : fragments) {
            IVariableBinding binding = Types.getVariableBinding(var);
            if (Types.isPrimitiveConstant(binding) && Modifier.isPrivate(binding.getModifiers())) {
                // Don't define accessors for private constants, since they can be
                // directly referenced.
                continue;
            }//from w  w  w .j av  a2  s .  c  om

            // rename varName to varName_, per Obj-C style guide
            SimpleName oldName = var.getName();
            ITypeBinding type = ((AbstractTypeDeclaration) node.getParent()).resolveBinding();
            String varName = NameTable.getStaticVarQualifiedName(type, oldName.getIdentifier());
            NameTable.rename(binding, varName);
            ITypeBinding typeBinding = binding.getType();
            var.setExtraDimensions(0); // if array, type was corrected above

            // add accessor(s)
            if (needsReader(var, classMembers)) {
                classMembers.add(indexOfNewMember++, makeStaticReader(var, mods));
            }
            if (!Modifier.isFinal(node.getModifiers()) && needsWriter(var, classMembers)) {
                classMembers.add(indexOfNewMember++,
                        makeStaticWriter(var, oldName.getIdentifier(), node.getType(), mods));
            }

            // move non-constant initialization to init block
            Expression initializer = var.getInitializer();
            if (initializer != null && initializer.resolveConstantExpressionValue() == null) {
                var.setInitializer(null);

                AST ast = var.getAST();
                SimpleName newName = ast.newSimpleName(varName);
                Types.addBinding(newName, binding);
                Assignment assign = ast.newAssignment();
                assign.setLeftHandSide(newName);
                Expression newInit = NodeCopier.copySubtree(ast, initializer);
                assign.setRightHandSide(newInit);
                Types.addBinding(assign, typeBinding);

                Block initBlock = ast.newBlock();
                @SuppressWarnings("unchecked")
                List<Statement> stmts = initBlock.statements(); // safe by definition
                stmts.add(ast.newExpressionStatement(assign));
                Initializer staticInitializer = ast.newInitializer();
                staticInitializer.setBody(initBlock);
                @SuppressWarnings("unchecked")
                List<IExtendedModifier> initMods = staticInitializer.modifiers(); // safe by definition
                initMods.add(ast.newModifier(ModifierKeyword.STATIC_KEYWORD));
                classMembers.add(indexOfNewMember++, staticInitializer);
            }
        }
    }
    return true;
}

From source file:com.google.devtools.j2cpp.translate.Rewriter.java

License:Open Source License

/**
 * Returns true if a writer method is needed for a specified field.  The
 * heuristic used is to find a method that has "set" plus the capitalized
 * field name, returns null, and takes a single parameter of the same type.
 * Obviously, lousy code can fail this test, but it should work in practice
 * with Google code standards./*from w ww .j av a  2  s  . c o  m*/
 */
private boolean needsWriter(VariableDeclarationFragment var, List<BodyDeclaration> classMembers) {
    String methodName = "set" + NameTable.capitalize(var.getName().getIdentifier());
    ITypeBinding varType = Types.getTypeBinding(var);
    ITypeBinding voidType = var.getAST().resolveWellKnownType("void");
    for (BodyDeclaration member : classMembers) {
        if (member instanceof MethodDeclaration) {
            IMethodBinding method = Types.getMethodBinding(member);
            ITypeBinding[] params = method.getParameterTypes();
            if (method.getName().equals(methodName) && method.getReturnType().isEqualTo(voidType)
                    && params.length == 1 && params[0].isEqualTo(varType)) {
                return false;
            }
        }
    }
    return true;
}

From source file:com.google.devtools.j2cpp.translate.Rewriter.java

License:Open Source License

/**
 * Add a static read accessor method for a specified variable. The generator
 * phase will rename the variable from "name" to "name_", following the Obj-C
 * style guide.//  w w  w  . java  2 s  . c o  m
 */
private MethodDeclaration makeStaticReader(VariableDeclarationFragment var, int modifiers) {
    AST ast = var.getAST();
    String varName = var.getName().getIdentifier();
    IVariableBinding varBinding = var.resolveBinding();
    String methodName;
    methodName = NameTable.getStaticAccessorName(varName);

    Type returnType = Types.makeType(varBinding.getType());
    MethodDeclaration accessor = createBlankAccessor(var, methodName, modifiers, returnType);

    ReturnStatement returnStmt = ast.newReturnStatement();
    SimpleName returnName = ast.newSimpleName(var.getName().getIdentifier() + "_");
    Types.addBinding(returnName, varBinding);
    returnStmt.setExpression(returnName);

    @SuppressWarnings("unchecked")
    List<Statement> stmts = accessor.getBody().statements(); // safe by definition
    stmts.add(returnStmt);

    GeneratedMethodBinding binding = new GeneratedMethodBinding(accessor, varBinding.getDeclaringClass(),
            false);
    Types.addBinding(accessor, binding);
    Types.addBinding(accessor.getName(), binding);
    Symbols.scanAST(accessor);
    return accessor;
}

From source file:com.google.devtools.j2cpp.translate.Rewriter.java

License:Open Source License

/**
 * Add a static write accessor method for a specified variable.
 *///from   ww  w  .j av a2 s .  c  o m
private MethodDeclaration makeStaticWriter(VariableDeclarationFragment var, String paramName, Type type,
        int modifiers) {
    AST ast = var.getAST();
    String varName = var.getName().getIdentifier();
    IVariableBinding varBinding = Types.getVariableBinding(var);

    Type returnType = ast.newPrimitiveType(PrimitiveType.VOID);
    Types.addBinding(returnType, ast.resolveWellKnownType("void"));
    String methodName = "set" + NameTable.capitalize(varName);
    MethodDeclaration accessor = createBlankAccessor(var, methodName, modifiers, returnType);
    GeneratedMethodBinding binding = new GeneratedMethodBinding(accessor, varBinding.getDeclaringClass(),
            false);
    Types.addBinding(accessor, binding);
    Types.addBinding(accessor.getName(), binding);

    SingleVariableDeclaration param = ast.newSingleVariableDeclaration();
    param.setName(ast.newSimpleName(paramName));
    Type paramType = NodeCopier.copySubtree(ast, type);
    param.setType(paramType);
    Types.addBinding(paramType, type.resolveBinding());
    @SuppressWarnings("unchecked")
    List<SingleVariableDeclaration> parameters = accessor.parameters(); // safe by definition
    GeneratedVariableBinding paramBinding = new GeneratedVariableBinding(paramName, 0, type.resolveBinding(),
            false, true, varBinding.getDeclaringClass(), binding);
    Types.addBinding(param, paramBinding);
    Types.addBinding(param.getName(), paramBinding);
    parameters.add(param);
    binding.addParameter(paramBinding);

    Assignment assign = ast.newAssignment();
    SimpleName sn = ast.newSimpleName(NameTable.getName(varBinding));
    assign.setLeftHandSide(sn);
    Types.addBinding(sn, varBinding);
    assign.setRightHandSide(NodeCopier.copySubtree(ast, param.getName()));
    Types.addBinding(assign, varBinding.getType());
    ExpressionStatement assignStmt = ast.newExpressionStatement(assign);

    @SuppressWarnings("unchecked")
    List<Statement> stmts = accessor.getBody().statements(); // safe by definition
    stmts.add(assignStmt);
    Symbols.scanAST(accessor);
    return accessor;
}

From source file:com.google.devtools.j2cpp.translate.Rewriter.java

License:Open Source License

/**
 * Create an unbound accessor method, minus its code.
 *///from   w  w w.j a  va 2s .  c  om
@SuppressWarnings("unchecked") // safe by specification
private MethodDeclaration createBlankAccessor(VariableDeclarationFragment var, String name, int modifiers,
        Type returnType) {
    AST ast = var.getAST();
    MethodDeclaration accessor = ast.newMethodDeclaration();
    accessor.setName(ast.newSimpleName(name));
    accessor.modifiers().addAll(ast.newModifiers(modifiers));
    accessor.setBody(ast.newBlock());
    accessor.setReturnType2(NodeCopier.copySubtree(ast, returnType));
    return accessor;
}

From source file:com.motorola.studio.android.generateviewbylayout.codegenerators.ClassAttributesCodeGenerator.java

License:Apache License

/**
 * Add attributes based on the GUI items declared on layout XML
 * <br>/*  w  w w. j av a2 s .  c om*/
 * GENERATED_CODE_FORMAT:
 * <br>
 * private $GUI_TYPE $GUI_ID;
 * @throws JavaModelException
 */
@SuppressWarnings("unchecked")
private void addAttributes(IProgressMonitor monitor) throws JavaModelException {
    SubMonitor subMonitor = SubMonitor.convert(monitor);
    subMonitor.beginTask(CodeUtilsNLS.JavaViewBasedOnLayoutModifier_AddingAttributes,
            codeGeneratorData.getGuiItems().size());
    /*  
    * AST to be written       
    *   FieldDeclaration:
    * [Javadoc] { ExtendedModifier } Type VariableDeclarationFragment
    *    { , VariableDeclarationFragment } ;
    */
    for (LayoutNode node : codeGeneratorData.getGuiItems()) {
        if ((node.getNodeId() != null) && node.shouldInsertCode()) {
            boolean containFieldDeclared = getCodeGeneratorData().getJavaLayoutData().getVisitor()
                    .checkIfAttributeAlreadyDeclared(node, false);
            if (!containFieldDeclared) {
                //avoid to declare attribute twice
                Modifier privateMod = typeDeclaration.getAST().newModifier(ModifierKeyword.PRIVATE_KEYWORD);
                SimpleName guiName;
                try {
                    guiName = getNodeVariableTypeBasedOnLayoutNode(node);
                } catch (CoreException e) {
                    throw new JavaModelException(e);
                }
                SimpleType guiType = typeDeclaration.getAST().newSimpleType(guiName);
                VariableDeclarationFragment variableFragment = typeDeclaration.getAST()
                        .newVariableDeclarationFragment();
                SimpleName varName = variableFragment.getAST().newSimpleName(node.getNodeId());
                variableFragment.setName(varName);
                FieldDeclaration declaration = typeDeclaration.getAST().newFieldDeclaration(variableFragment);
                declaration.modifiers().add(privateMod);
                declaration.setType(guiType);
                typeDeclaration.bodyDeclarations().add(0, declaration); //add as the first item                
            }
        }
        subMonitor.worked(1);
    }
}