List of usage examples for org.eclipse.jdt.core.dom VariableDeclarationFragment getAST
public final AST getAST()
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); } }