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

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

Introduction

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

Prototype

public void setExtraDimensions(int dimensions) 

Source Link

Document

Sets the number of extra array dimensions over and above the explicitly-specified type.

Usage

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 ww w  .jav  a 2s.  co  m*/

            // 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

@Override
public boolean visit(Block node) {
    // split array declarations so that initializers are in separate statements.
    @SuppressWarnings("unchecked")
    List<Statement> stmts = node.statements(); // safe by definition
    int n = stmts.size();
    for (int i = 0; i < n; i++) {
        Statement s = stmts.get(i);
        if (s instanceof VariableDeclarationStatement) {
            VariableDeclarationStatement var = (VariableDeclarationStatement) s;
            Map<VariableDeclarationFragment, Expression> initializers = Maps.newLinkedHashMap();
            @SuppressWarnings("unchecked")
            List<VariableDeclarationFragment> fragments = var.fragments();
            for (VariableDeclarationFragment fragment : fragments) {
                ITypeBinding varType = Types.getTypeBinding(fragment);
                if (varType.isArray()) {
                    fragment.setExtraDimensions(0);
                    Expression initializer = fragment.getInitializer();
                    if (initializer != null) {
                        initializers.put(fragment, initializer);
                        if (initializer instanceof ArrayCreation) {
                            ArrayCreation creator = (ArrayCreation) initializer;
                            if (creator.getInitializer() != null) {
                                // replace this redundant array creation node with its
                                // rewritten initializer
                                initializer = creator.getInitializer();
                            } else {
                                continue;
                            }/*from   w w w. j  ava  2s.  co  m*/
                        }
                        if (initializer instanceof ArrayInitializer) {
                            fragment.setInitializer(createIOSArrayInitializer(Types.getTypeBinding(fragment),
                                    (ArrayInitializer) initializer));
                        }
                    }
                }
            }
        } else if (s instanceof ExpressionStatement
                && ((ExpressionStatement) s).getExpression() instanceof Assignment) {
            Assignment assign = (Assignment) ((ExpressionStatement) s).getExpression();
            ITypeBinding assignType = Types.getTypeBinding(assign);
            if (assign.getRightHandSide() instanceof ArrayInitializer) {
                ArrayInitializer arrayInit = (ArrayInitializer) assign.getRightHandSide();
                assert assignType.isArray() : "array initializer assigned to non-array";
                assign.setRightHandSide(createIOSArrayInitializer(assignType, arrayInit));
            } else if (assign.getRightHandSide() instanceof ArrayCreation) {
                ArrayCreation arrayCreate = (ArrayCreation) assign.getRightHandSide();
                ArrayInitializer arrayInit = arrayCreate.getInitializer();
                if (arrayInit != null) {
                    // Replace ArrayCreation node with its initializer.
                    AST ast = node.getAST();
                    Assignment newAssign = ast.newAssignment();
                    Types.addBinding(newAssign, assignType);
                    newAssign.setLeftHandSide(NodeCopier.copySubtree(ast, assign.getLeftHandSide()));
                    newAssign.setRightHandSide(createIOSArrayInitializer(assignType, arrayInit));
                    ((ExpressionStatement) s).setExpression(newAssign);
                }
            }
        }
    }
    return true;
}

From source file:edu.illinois.compositerefactorings.refactorings.copymembertosubtype.CopyMemberToSubtypeRefactoringProcessor.java

License:Open Source License

/**
 * {@link org.eclipse.jdt.internal.corext.refactoring.structure.PushDownRefactoringProcessor#createNewFieldDeclarationNode(MemberActionInfo, CompilationUnit, TypeVariableMaplet[], ASTRewrite, VariableDeclarationFragment)}
 *///from   w ww . j a  v  a  2 s . co m
private FieldDeclaration createNewFieldDeclarationNode(MemberActionInfo info, CompilationUnit declaringCuNode,
        TypeVariableMaplet[] mapping, ASTRewrite rewrite, VariableDeclarationFragment oldFieldFragment)
        throws JavaModelException {
    Assert.isTrue(info.isFieldInfo());
    IField field = (IField) info.getMember();
    AST ast = rewrite.getAST();
    VariableDeclarationFragment newFragment = ast.newVariableDeclarationFragment();
    newFragment.setExtraDimensions(oldFieldFragment.getExtraDimensions());
    Expression initializer = oldFieldFragment.getInitializer();
    if (initializer != null) {
        Expression newInitializer = null;
        if (mapping.length > 0)
            newInitializer = createPlaceholderForExpression(initializer, field.getCompilationUnit(), mapping,
                    rewrite);
        else
            newInitializer = createPlaceholderForExpression(initializer, field.getCompilationUnit(), rewrite);
        newFragment.setInitializer(newInitializer);
    }
    newFragment.setName(ast.newSimpleName(oldFieldFragment.getName().getIdentifier()));
    FieldDeclaration newField = ast.newFieldDeclaration(newFragment);
    FieldDeclaration oldField = ASTNodeSearchUtil.getFieldDeclarationNode(field, declaringCuNode);
    if (info.copyJavadocToCopiesInSubclasses())
        copyJavadocNode(rewrite, oldField, newField);
    copyAnnotations(oldField, newField);
    newField.modifiers().addAll(
            ASTNodeFactory.newModifiers(ast, info.getNewModifiersForCopyInSubclass(oldField.getModifiers())));
    Type oldType = oldField.getType();
    ICompilationUnit cu = field.getCompilationUnit();
    Type newType = null;
    if (mapping.length > 0) {
        newType = createPlaceholderForType(oldType, cu, mapping, rewrite);
    } else
        newType = createPlaceholderForType(oldType, cu, rewrite);
    newField.setType(newType);
    return newField;
}

From source file:org.eclipse.jdt.core.dom.ASTConverter.java

License:Open Source License

protected VariableDeclarationFragment convertToVariableDeclarationFragment(
        org.eclipse.jdt.internal.compiler.ast.FieldDeclaration fieldDeclaration) {
    final VariableDeclarationFragment variableDeclarationFragment = new VariableDeclarationFragment(this.ast);
    final SimpleName name = new SimpleName(this.ast);
    name.internalSetIdentifier(new String(fieldDeclaration.name));
    name.setSourceRange(fieldDeclaration.sourceStart,
            fieldDeclaration.sourceEnd - fieldDeclaration.sourceStart + 1);
    variableDeclarationFragment.setName(name);
    int start = fieldDeclaration.sourceEnd;
    int end = start;
    int extraDimensions = retrieveExtraDimension(fieldDeclaration.sourceEnd + 1,
            fieldDeclaration.declarationSourceEnd);
    variableDeclarationFragment.setExtraDimensions(extraDimensions);
    if (fieldDeclaration.initialization != null) {
        final Expression expression = convert(fieldDeclaration.initialization);
        variableDeclarationFragment.setInitializer(expression);
        start = expression.getStartPosition() + expression.getLength();
        end = start - 1;//from w  ww  .ja  va2 s  . c  o  m
    } else {
        // we need to do it even if extendedDimension is null in case of syntax error in an array initializer
        // need the exclusive range for retrieveEndOfPotentialExtendedDimensions
        int possibleEnd = retrieveEndOfPotentialExtendedDimensions(start + 1, fieldDeclaration.sourceEnd,
                fieldDeclaration.declarationSourceEnd);
        if (possibleEnd == Integer.MIN_VALUE) {
            end = fieldDeclaration.declarationSourceEnd;
            variableDeclarationFragment.setFlags(variableDeclarationFragment.getFlags() | ASTNode.MALFORMED);
        }
        if (possibleEnd < 0) {
            end = -possibleEnd;
            variableDeclarationFragment.setFlags(variableDeclarationFragment.getFlags() | ASTNode.MALFORMED);
        } else {
            end = possibleEnd;
        }
    }
    variableDeclarationFragment.setSourceRange(fieldDeclaration.sourceStart,
            end - fieldDeclaration.sourceStart + 1);
    if (this.resolveBindings) {
        recordNodes(name, fieldDeclaration);
        recordNodes(variableDeclarationFragment, fieldDeclaration);
        variableDeclarationFragment.resolveBinding();
    }
    return variableDeclarationFragment;
}

From source file:org.eclipse.jdt.core.dom.ASTConverter.java

License:Open Source License

protected VariableDeclarationFragment convertToVariableDeclarationFragment(
        org.eclipse.jdt.internal.compiler.ast.LocalDeclaration localDeclaration) {
    final VariableDeclarationFragment variableDeclarationFragment = new VariableDeclarationFragment(this.ast);
    final SimpleName name = new SimpleName(this.ast);
    name.internalSetIdentifier(new String(localDeclaration.name));
    name.setSourceRange(localDeclaration.sourceStart,
            localDeclaration.sourceEnd - localDeclaration.sourceStart + 1);
    variableDeclarationFragment.setName(name);
    int start = localDeclaration.sourceEnd;
    org.eclipse.jdt.internal.compiler.ast.Expression initialization = localDeclaration.initialization;
    int extraDimension = retrieveExtraDimension(localDeclaration.sourceEnd + 1,
            this.compilationUnitSourceLength);
    variableDeclarationFragment.setExtraDimensions(extraDimension);
    boolean hasInitialization = initialization != null;
    int end;//from   w  w w.ja  va 2s  .c om
    if (hasInitialization) {
        final Expression expression = convert(initialization);
        variableDeclarationFragment.setInitializer(expression);
        start = expression.getStartPosition() + expression.getLength();
        end = start - 1;
    } else {
        // we need to do it even if extendedDimension is null in case of syntax error in an array initializer
        // start + 1 because we need the exclusive range for retrieveEndOfPotentialExtendedDimensions
        int possibleEnd = retrieveEndOfPotentialExtendedDimensions(start + 1, localDeclaration.sourceEnd,
                localDeclaration.declarationSourceEnd);
        if (possibleEnd == Integer.MIN_VALUE) {
            end = start;
            variableDeclarationFragment.setFlags(variableDeclarationFragment.getFlags() | ASTNode.MALFORMED);
        } else if (possibleEnd < 0) {
            end = -possibleEnd;
            variableDeclarationFragment.setFlags(variableDeclarationFragment.getFlags() | ASTNode.MALFORMED);
        } else {
            end = possibleEnd;
        }
    }
    variableDeclarationFragment.setSourceRange(localDeclaration.sourceStart,
            end - localDeclaration.sourceStart + 1);
    if (this.resolveBindings) {
        recordNodes(variableDeclarationFragment, localDeclaration);
        recordNodes(name, localDeclaration);
        variableDeclarationFragment.resolveBinding();
    }
    return variableDeclarationFragment;
}