@SuppressWarnings("unchecked") public Expression newArrayCreationFromDimensions(Type type, List<Expression> dimensions) { ArrayCreation ac = ast.newArrayCreation(); ac.dimensions().addAll(dimensions); ac.setType(ast.newArrayType(type)); return ac; }
// Função auxiliar para copiar o tipo da variável // considerando que um tipo nao pode pertencer a outra AST private Type getType(ITypeBinding typeBinding, AST newAST) { if (typeBinding.isPrimitive()) { return newAST.newPrimitiveType(PrimitiveType.toCode(typeBinding.getName())); } else if (typeBinding.isArray()) { return newAST.newArrayType( this.getType(typeBinding.getElementType(), newAST), typeBinding.getDimensions()); } else if (typeBinding.isParameterizedType()) { ParameterizedType pt = newAST.newParameterizedType(this.getType(typeBinding.getTypeDeclaration(), newAST)); for (ITypeBinding itb : typeBinding.getTypeArguments()) { pt.typeArguments().add(this.getType(itb, newAST)); } return pt; } else if (typeBinding.isWildcardType()) { WildcardType wt = newAST.newWildcardType(); wt.setBound( typeBinding.getBound() == null ? null : this.getType(typeBinding.getBound(), newAST), typeBinding.isUpperbound()); return wt; } else { try { return newAST.newSimpleType(newAST.newName(typeBinding.getQualifiedName())); } catch (Exception e) { return newAST.newSimpleType(newAST.newName(typeBinding.getName())); } } }
@SuppressWarnings("unchecked") public ArrayCreation newArrayCreation(Type type, Collection<Expression> values) { ArrayCreation ac = ast.newArrayCreation(); ArrayInitializer initializer = ast.newArrayInitializer(); for (Expression expr : values) { initializer.expressions().add(expr); } ac.setInitializer(initializer); ac.setType(ast.newArrayType(type)); return ac; }
/** * Create an AST type node with a type string (possibly partitioned with "." and "[]"). * * @param ast The {@link org.eclipse.jdt.core.dom.AST} object. * @param type The type. * @return The AST type node. */ public static org.eclipse.jdt.core.dom.Type createType(AST ast, String type) { String elementName = Type.getElementType(type); org.eclipse.jdt.core.dom.Type elementType; if (Type.isPrimitive(elementName)) { elementType = ast.newPrimitiveType(PrimitiveType.toCode(elementName)); } else { Name element = createName(ast, elementName); elementType = ast.newSimpleType(element); } org.eclipse.jdt.core.dom.Type returnType = elementType; for (int i = 0; i < Type.dimensions(type); i++) { returnType = ast.newArrayType(returnType); } return returnType; }
private SingleVariableDeclaration createParameterDeclaration( String parameterName, VariableDeclarationFragment fragement, Expression arrayAccess, ForStatement statement, ImportRewrite importRewrite, ASTRewrite rewrite, TextEditGroup group, LinkedProposalPositionGroup pg, boolean makeFinal) { CompilationUnit compilationUnit = (CompilationUnit) arrayAccess.getRoot(); AST ast = compilationUnit.getAST(); SingleVariableDeclaration result = ast.newSingleVariableDeclaration(); SimpleName name = ast.newSimpleName(parameterName); pg.addPosition(rewrite.track(name), true); result.setName(name); ITypeBinding arrayTypeBinding = arrayAccess.resolveTypeBinding(); Type type = importType(arrayTypeBinding.getElementType(), statement, importRewrite, compilationUnit); if (arrayTypeBinding.getDimensions() != 1) { type = ast.newArrayType(type, arrayTypeBinding.getDimensions() - 1); } result.setType(type); if (fragement != null) { VariableDeclarationStatement declaration = (VariableDeclarationStatement) fragement.getParent(); ModifierRewrite.create(rewrite, result).copyAllModifiers(declaration, group); } if (makeFinal && (fragement == null || ASTNodes.findModifierNode(Modifier.FINAL, ASTNodes.getModifiers(fragement)) == null)) { ModifierRewrite.create(rewrite, result).setModifiers(Modifier.FINAL, 0, group); } return result; }
public Expression newArrayCreation(String canonicalName, ArrayInitializer initializer) { ArrayCreation ac = ast.newArrayCreation(); ac.setInitializer(initializer); ac.setType(ast.newArrayType(newType(canonicalName))); return ac; }
private static Type resolveQualifiedType(String s) { if (s.equals("byte")) { return AST.newAST(AST.JLS8).newPrimitiveType(PrimitiveType.BYTE); } if (s.equals("")) { return AST.newAST(AST.JLS8).newWildcardType(); } // It's a type parameter if (s.contains("<") && s.contains(">")) { // TODO: resolve type parameters String s0 = s.substring(0, s.indexOf("<")); Type hd = resolveQualifiedType(s0); AST tAST = AST.newAST(AST.JLS8); ParameterizedType pt = tAST.newParameterizedType((Type) ASTNode.copySubtree(tAST, hd)); for (String i : splitTypeArgs(s.substring(s.indexOf("<") + 1, s.lastIndexOf(">")))) { pt.typeArguments().add(ASTNode.copySubtree(tAST, resolveQualifiedType(i))); } return pt; } // It's an array type if (s.contains("[") && s.contains("]")) { String s0 = s.substring(0, s.indexOf("[")); Type hd = resolveQualifiedType(s0); AST tast = AST.newAST(AST.JLS8); ArrayType pt = tast.newArrayType((Type) ASTNode.copySubtree(tast, hd)); return pt; } if (!s.contains(".")) { AST ast = AST.newAST(AST.JLS8); if (s == null || s.equals("null")) { return ast.newSimpleType((Name) ASTNode.copySubtree(ast, genSimpleName("String"))); } switch (s) { case "void": return AST.newAST(AST.JLS8).newPrimitiveType(PrimitiveType.VOID); case "int": return AST.newAST(AST.JLS8).newPrimitiveType(PrimitiveType.INT); case "char": return AST.newAST(AST.JLS8).newPrimitiveType(PrimitiveType.CHAR); case "long": return AST.newAST(AST.JLS8).newPrimitiveType(PrimitiveType.LONG); case "boolean": return AST.newAST(AST.JLS8).newPrimitiveType(PrimitiveType.BOOLEAN); case "float": return AST.newAST(AST.JLS8).newPrimitiveType(PrimitiveType.FLOAT); case "short": return AST.newAST(AST.JLS8).newPrimitiveType(PrimitiveType.SHORT); case "byte": return AST.newAST(AST.JLS8).newPrimitiveType(PrimitiveType.BYTE); case "double": return AST.newAST(AST.JLS8).newPrimitiveType(PrimitiveType.DOUBLE); } return ast.newSimpleType((Name) ASTNode.copySubtree(ast, genSimpleName(s))); } else { int last = s.lastIndexOf("."); AST ast = AST.newAST(AST.JLS8); String lastFrag = s.substring(last + 1); return ast.newQualifiedType( (Type) ASTNode.copySubtree(ast, resolveQualifiedType(s.substring(0, last))), (SimpleName) ASTNode.copySubtree(ast, genSimpleName(lastFrag))); } }