List of usage examples for org.eclipse.jdt.core.dom VariableDeclaration setExtraDimensions
public void setExtraDimensions(int dimensions)
From source file:net.sf.eclipsecs.ui.quickfixes.misc.ArrayTypeStyleQuickfix.java
License:Open Source License
/** * {@inheritDoc}/*w ww . j av a2s . c om*/ */ protected ASTVisitor handleGetCorrectingASTVisitor(final IRegion lineInfo, final int markerStartOffset) { return new ASTVisitor() { public boolean visit(VariableDeclarationStatement node) { if (containsPosition(node, markerStartOffset)) { if (isCStyle(node.fragments())) { int dimensions = 0; List fragments = node.fragments(); for (int i = 0, size = fragments.size(); i < size; i++) { VariableDeclaration decl = (VariableDeclaration) fragments.get(i); if (decl.getExtraDimensions() > dimensions) { dimensions = decl.getExtraDimensions(); } decl.setExtraDimensions(0); } // wrap current type into ArrayType ArrayType arrayType = createArrayType(node.getType(), dimensions); node.setType(arrayType); } else if (isJavaStyle(node.getType())) { int dimensions = ((ArrayType) node.getType()).getDimensions(); List fragments = node.fragments(); for (int i = 0, size = fragments.size(); i < size; i++) { VariableDeclaration decl = (VariableDeclaration) fragments.get(i); decl.setExtraDimensions(dimensions); } Type elementType = (Type) ASTNode.copySubtree(node.getAST(), ((ArrayType) node.getType()).getElementType()); node.setType(elementType); } } return true; } public boolean visit(SingleVariableDeclaration node) { if (containsPosition(node, markerStartOffset)) { if (isCStyle(node)) { // wrap the existing type into an array type node.setType(createArrayType(node.getType(), node.getExtraDimensions())); node.setExtraDimensions(0); } else if (isJavaStyle(node.getType())) { ArrayType arrayType = (ArrayType) node.getType(); Type elementType = (Type) ASTNode.copySubtree(node.getAST(), arrayType.getElementType()); node.setType(elementType); node.setExtraDimensions(arrayType.getDimensions()); } } return true; } public boolean visit(FieldDeclaration node) { if (containsPosition(node, markerStartOffset)) { if (isCStyle(node.fragments())) { int dimensions = 0; List fragments = node.fragments(); for (int i = 0, size = fragments.size(); i < size; i++) { VariableDeclaration decl = (VariableDeclaration) fragments.get(i); if (decl.getExtraDimensions() > dimensions) { dimensions = decl.getExtraDimensions(); } decl.setExtraDimensions(0); } // wrap current type into ArrayType ArrayType arrayType = createArrayType(node.getType(), dimensions); node.setType(arrayType); } else if (isJavaStyle(node.getType())) { int dimensions = ((ArrayType) node.getType()).getDimensions(); List fragments = node.fragments(); for (int i = 0, size = fragments.size(); i < size; i++) { VariableDeclaration decl = (VariableDeclaration) fragments.get(i); decl.setExtraDimensions(dimensions); } Type elementType = (Type) ASTNode.copySubtree(node.getAST(), ((ArrayType) node.getType()).getElementType()); node.setType(elementType); } } return true; } private boolean isJavaStyle(Type type) { return type instanceof ArrayType; } private boolean isCStyle(VariableDeclaration decl) { return decl.getExtraDimensions() > 0; } private boolean isCStyle(List fragments) { Iterator it = fragments.iterator(); while (it.hasNext()) { VariableDeclaration decl = (VariableDeclaration) it.next(); if (isCStyle(decl)) { return true; } } return false; } private ArrayType createArrayType(Type componentType, int dimensions) { Type type = (Type) ASTNode.copySubtree(componentType.getAST(), componentType); ArrayType arrayType = componentType.getAST().newArrayType(type, dimensions); return arrayType; } }; }