List of usage examples for org.eclipse.jdt.core.dom VariableDeclarationFragment setExtraDimensions
public void setExtraDimensions(int dimensions)
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; }