List of usage examples for org.eclipse.jdt.core.dom MethodDeclaration getBody
public Block getBody()
null if this method has no body. From source file:ac.at.tuwien.dsg.uml.statemachine.export.transformation.engines.impl.PathWithUncertaintyTestStrategy.java
License:Open Source License
/** * //from w w w . j a va 2 s . c o m * @param state - the state for which we inspect the transitions and generate the test plan * @param rewrite - rewriter used to modify the generated code * @param planMethodDeclaration - the method in which the code must be added * @param parrentPlanBlock - the block of code where the new state code must be added. Can be a method body, the body of an If statement, etc * @param pathTransitions - used to avoid testing cycles and ensure test plan keeps uniqueness on transitions */ private void generatePlanForState(final StateMachineState state, final ASTRewrite rewrite, final MethodDeclaration planMethodDeclaration, final Set<StateMachineStateTransition> pathTransitions) { AST ast = planMethodDeclaration.getAST(); Block parrentPlanBlock = planMethodDeclaration.getBody(); ListRewrite listRewrite = rewrite.getListRewrite(parrentPlanBlock, Block.STATEMENTS_PROPERTY); /** * First we create an abstract method to assert that we have reached current state and we call it * only if the state is not a choice. Choices are "virtual" states that signal splits in transition. * */ { //only create method if not previously created String stateName = state.getName(); String methodName = ASSERT_STATE_LEADING + stateName; if (!generatedAbstractMethods.containsKey(stateName)) { MethodDeclaration method = createAbstractMethodForState(state, planMethodDeclaration.getAST()); generatedAbstractMethods.put(stateName, method); } /** * Call the assert state method to check if we have reached the current state. * For the initial state this assert can also reset the system to initial state. */ { //invoke guard as Assert statement AssertStatement assertStatement = ast.newAssertStatement(); MethodInvocation invocation = ast.newMethodInvocation(); invocation.setName(ast.newSimpleName(methodName)); assertStatement.setExpression(invocation); parrentPlanBlock.statements().add(assertStatement); // listRewrite.insertFirst(rewrite.createStringPlaceholder("//Call the assert state method to check if we have reached the current state.", ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(rewrite.createStringPlaceholder("//For the initial state this assert can also reset the system to initial state.", ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(assertStatement, null); // listRewrite.insertLast(rewrite.createStringPlaceholder("", ASTNode.EMPTY_STATEMENT), null); } } /** * If from one state we have multiple triggers, or from a choice we can go to multiple classes * then we generate for each of these transitions paths a separate test plan. * This means we clone the previous method into how many we need */ List<StateMachineStateTransition> transitions = state.getOutTransitions(); //if 1 transition, then we add to same plan //if more, we need separate test plans for each branching if (transitions.isEmpty() && !(state.getVertex() instanceof FinalState)) { //notify user that something is wrong with the model we are converting notifyUser("State \"" + state.getName() + "\"is not final and does not have any transitions. All state machine flows must reach a FinalState."); System.err.println(state.getName() + " is not final and does not have any transitions. All state machine flows must reach a FinalState to be converted in test plans."); } else if (transitions.size() == 1) { StateMachineStateTransition transition = transitions.get(0); //if we have visited this transition, continue if (pathTransitions.contains(transition)) { return; } else { // add transition to visited transitions pathTransitions.add(transition); } // listRewrite.insertLast(rewrite.createStringPlaceholder("//Test transition " + transition.getTransition().getName(), ASTNode.EMPTY_STATEMENT), null); /** * Must assert before any transition that the guard condition is fulfilled */ { //get transition condition (could also be Rule, currently we get only Guard transitions) Constraint guard = transition.getTransition().getGuard(); if (guard != null) { for (Element element : guard.allOwnedElements()) { //currently condition retrieved as plain text that will need to be parsed and evaluated OpaqueExpression expression = (OpaqueExpression) element; for (String body : expression.getBodies()) { if (body.isEmpty()) { notifyUser("Guard condition for transition " + transition.getTransition().getName() + " from state " + state.getName() + " is empty"); System.err.println( "Guard condition for transition " + transition.getTransition().getName() + " from state " + state.getName() + " is empty"); continue; } MethodDeclaration method = createAbstractMethodForGuard(body, ast); if (!generatedAbstractMethods.containsKey(method.getName().toString())) { generatedAbstractMethods.put(method.getName().toString(), method); } //invoke guard as Assert statement AssertStatement assertStatement = ast.newAssertStatement(); MethodInvocation invocation = ast.newMethodInvocation(); invocation.setName(ast.newSimpleName(method.getName().toString())); assertStatement.setExpression(invocation); parrentPlanBlock.statements().add(assertStatement); // listRewrite.insertLast(rewrite.createStringPlaceholder("//Assert guard condition for next transition is true", ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(assertStatement, null); // listRewrite.insertLast(rewrite.createStringPlaceholder("", ASTNode.EMPTY_STATEMENT), null); } } } } //get all transition triggers List<Trigger> triggers = transition.getTransition().getTriggers(); //for each trigger for (Trigger trigger : triggers) { /** * If we have not created it already, we create an abstract method to invoke the trigger */ { //TODO: update so we do not generate the trigger if it was already generated MethodDeclaration method = createAbstractTriggerInvocation(trigger, planMethodDeclaration.getAST()); if (!generatedAbstractMethods.containsKey(method.getName().toString())) { generatedAbstractMethods.put(method.getName().toString(), method); } //invoke trigger MethodInvocation invocation = ast.newMethodInvocation(); invocation.setName(ast.newSimpleName(method.getName().toString())); // listRewrite.insertLast(rewrite.createStringPlaceholder("//Invoke transition trigger", ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(ast.newExpressionStatement(invocation), null); // listRewrite.insertLast(rewrite.createStringPlaceholder("", ASTNode.EMPTY_STATEMENT), null); parrentPlanBlock.statements().add(ast.newExpressionStatement(invocation)); } } if (!(state.getVertex() instanceof FinalState)) { //continue from target state with plan generation StateMachineState targetState = transition.getTargetState(); generatePlanForState(targetState, rewrite, planMethodDeclaration, pathTransitions); } else { if (transition.getTargetState() == null) { notifyUser(state.getName() + " is not final and does not have a target state on transition " + transition.getTransition().getName()); System.err.println( state.getName() + " is not final and does not have a target state on transition " + transition.getTransition().getName()); } } } else if (transitions.size() > 1) { for (StateMachineStateTransition transition : transitions) { //clone transitions to use clean path for each sub-trees Set<StateMachineStateTransition> transitionsCopy = new HashSet<>(); transitionsCopy.addAll(pathTransitions); //if we have visited this transition, continue if (transitionsCopy.contains(transition)) { continue; } else { // add transition to visited transitions transitionsCopy.add(transition); } //for each transition we do a clone of the plan until now MethodDeclaration transitionMethod = cloneMethodDeclaration(planMethodDeclaration); transitionMethod.setName(ast .newSimpleName(PLAN_METHOD_LEADING + (UUID.randomUUID().toString().replaceAll("\\W", "")))); //shadowing to local parrentPlanBlock parrentPlanBlock = transitionMethod.getBody(); //shadowing to local ListRewrite // listRewrite = rewrite.getListRewrite(transitionMethod.getBody(), Block.STATEMENTS_PROPERTY); // listRewrite.insertLast(rewrite.createStringPlaceholder("//Forcing transition " + transition.getTransition().getName() + " by ensuring guard conditions are met and triggers are invoked.", ASTNode.EMPTY_STATEMENT), null); /** * Must force-set all guard conditions to navigate to this particular execution branch */ { //get transition condition (could also be Rule, currently we get only Guard transitions) //force for the current test the transition condition to true, to enable the system to navigate to expected state Constraint guard = transition.getTransition().getGuard(); if (guard != null) { for (Element element : guard.allOwnedElements()) { //currently condition retrieved as plain text that will need to be parsed and evaluated OpaqueExpression expression = (OpaqueExpression) element; for (String body : expression.getBodies()) { if (body.isEmpty()) { notifyUser("Guard condition for transition " + transition.getTransition().getName() + " from state " + state.getName() + " is empty"); System.err.println("Guard condition for transition " + transition.getTransition().getName() + " from state " + state.getName() + " is empty"); continue; } MethodDeclaration method = createAbstractForceConditionMethod(body, ast); if (!generatedAbstractMethods.containsKey(method.getName().toString())) { generatedAbstractMethods.put(method.getName().toString(), method); } //invoke method to force guard condition to true MethodInvocation invocation = ast.newMethodInvocation(); invocation.setName(ast.newSimpleName(method.getName().toString())); // listRewrite.insertLast(rewrite.createStringPlaceholder("//Invoke method to force guard condition to true: " + body, ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(ast.newExpressionStatement(invocation), null); // listRewrite.insertLast(rewrite.createStringPlaceholder("", ASTNode.EMPTY_STATEMENT), null); parrentPlanBlock.statements().add(ast.newExpressionStatement(invocation)); } } } } //get all transition triggers and execute them, like if we had only one transition List<Trigger> triggers = transition.getTransition().getTriggers(); //for each trigger for (Trigger trigger : triggers) { /** * If we have not created it already, we create an abstract method to invoke the trigger */ { //TODO: update so we do not generate the trigger if it was already generated MethodDeclaration method = createAbstractTriggerInvocation(trigger, transitionMethod.getAST()); if (!generatedAbstractMethods.containsKey(method.getName().toString())) { generatedAbstractMethods.put(method.getName().toString(), method); } //invoke trigger MethodInvocation invocation = ast.newMethodInvocation(); invocation.setName(ast.newSimpleName(method.getName().toString())); // listRewrite.insertLast(rewrite.createStringPlaceholder("//Invoke transition trigger", ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(ast.newExpressionStatement(invocation), null); // listRewrite.insertLast(rewrite.createStringPlaceholder("", ASTNode.EMPTY_STATEMENT), null); parrentPlanBlock.statements().add(ast.newExpressionStatement(invocation)); } } if (!(state.getVertex() instanceof FinalState)) { //continue from target state with plan generation StateMachineState targetState = transition.getTargetState(); generatePlanForState(targetState, rewrite, transitionMethod, transitionsCopy); } else { if (transition.getTargetState() == null) { notifyUser(state.getName() + " is not final and does not have a target state on transition " + transition.getTransition().getName()); System.err.println( state.getName() + " is not final and does not have a target state on transition " + transition.getTransition().getName()); } } } } if (state.getVertex() instanceof FinalState) { //store generated method in methods //check and store only if there is at least one transition with an uncertain state boolean hasUncertainty = false; for (StateMachineStateTransition transition : pathTransitions) { //TODO: remove constant and make this efficient //check for all transitions only initial state for uncertainties //as for next transition, the initial will be the target of this one (except for final state) for (Stereotype stereotype : transition.getSourceState().getVertex().getAppliedStereotypes()) { //check if the applied stereotype is InfrastructureLevelUncertainty if (stereotype.getName().equals(INFRASTRUCTURE_UNCERTAINTY_NAME)) { hasUncertainty = true; break; } } } //if does not have any uncertainty on it, do not add it to generated plans if (hasUncertainty) { generatedPlans.put(planMethodDeclaration.getName().toString(), planMethodDeclaration); } } }
From source file:ac.at.tuwien.dsg.uml.statemachine.export.transformation.engines.impl.TransitionCorrectnessTestStrategy.java
License:Open Source License
/** * /*from w ww . j a va2 s. c o m*/ * @param state - the state for which we inspect the transitions and generate the test plan * @param rewrite - rewriter used to modify the generated code * @param planMethodDeclaration - the method in which the code must be added * @param parrentPlanBlock - the block of code where the new state code must be added. Can be a method body, the body of an If statement, etc * @param pathTransitions - used to avoid testing cycles and ensure test plan keeps uniqueness on transitions */ private void generatePlanForState(final StateMachineState state, final ASTRewrite rewrite, final MethodDeclaration planMethodDeclaration, final Set<StateMachineStateTransition> pathTransitions) { AST ast = planMethodDeclaration.getAST(); Block parrentPlanBlock = planMethodDeclaration.getBody(); ListRewrite listRewrite = rewrite.getListRewrite(parrentPlanBlock, Block.STATEMENTS_PROPERTY); /** * First we create an abstract method to assert that we have reached current state and we call it * only if the state is not a choice. Choices are "virtual" states that signal splits in transition. * */ { //only create method if not previously created String stateName = state.getName(); String methodName = ASSERT_STATE_LEADING + stateName; if (!generatedAbstractMethods.containsKey(stateName)) { MethodDeclaration method = createAbstractMethodForState(state, planMethodDeclaration.getAST()); generatedAbstractMethods.put(stateName, method); } /** * Call the assert state method to check if we have reached the current state. * For the initial state this assert can also reset the system to initial state. */ { //invoke guard as Assert statement AssertStatement assertStatement = ast.newAssertStatement(); MethodInvocation invocation = ast.newMethodInvocation(); invocation.setName(ast.newSimpleName(methodName)); assertStatement.setExpression(invocation); parrentPlanBlock.statements().add(assertStatement); // listRewrite.insertFirst(rewrite.createStringPlaceholder("//Call the assert state method to check if we have reached the current state.", ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(rewrite.createStringPlaceholder("//For the initial state this assert can also reset the system to initial state.", ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(assertStatement, null); // listRewrite.insertLast(rewrite.createStringPlaceholder("", ASTNode.EMPTY_STATEMENT), null); } } /** * If from one state we have multiple triggers, or from a choice we can go to multiple classes * then we generate for each of these transitions paths a separate test plan. * This means we clone the previous method into how many we need */ List<StateMachineStateTransition> transitions = state.getOutTransitions(); //if 1 transition, then we add to same plan //if more, we need separate test plans for each branching if (transitions.isEmpty() && !(state.getVertex() instanceof FinalState)) { //notify user that something is wrong with the model we are converting notifyUser("State \"" + state.getName() + "\"is not final and does not have any transitions. All state machine flows must reach a FinalState."); System.err.println(state.getName() + " is not final and does not have any transitions. All state machine flows must reach a FinalState to be converted in test plans."); } else if (transitions.size() == 1) { StateMachineStateTransition transition = transitions.get(0); //if we have visited this transition, continue if (pathTransitions.contains(transition)) { return; } else { // add transition to visited transitions pathTransitions.add(transition); } // listRewrite.insertLast(rewrite.createStringPlaceholder("//Test transition " + transition.getTransition().getName(), ASTNode.EMPTY_STATEMENT), null); /** * Must assert before any transition that the guard condition is fulfilled */ { //get transition condition (could also be Rule, currently we get only Guard transitions) Constraint guard = transition.getTransition().getGuard(); if (guard != null) { for (Element element : guard.allOwnedElements()) { //currently condition retrieved as plain text that will need to be parsed and evaluated OpaqueExpression expression = (OpaqueExpression) element; for (String body : expression.getBodies()) { if (body.isEmpty()) { notifyUser("Guard condition for transition " + transition.getTransition().getName() + " from state " + state.getName() + " is empty"); System.err.println( "Guard condition for transition " + transition.getTransition().getName() + " from state " + state.getName() + " is empty"); continue; } MethodDeclaration method = createAbstractMethodForGuard(body, ast); if (!generatedAbstractMethods.containsKey(method.getName().toString())) { generatedAbstractMethods.put(method.getName().toString(), method); } //invoke guard as Assert statement AssertStatement assertStatement = ast.newAssertStatement(); MethodInvocation invocation = ast.newMethodInvocation(); invocation.setName(ast.newSimpleName(method.getName().toString())); assertStatement.setExpression(invocation); parrentPlanBlock.statements().add(assertStatement); // listRewrite.insertLast(rewrite.createStringPlaceholder("//Assert guard condition for next transition is true", ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(assertStatement, null); // listRewrite.insertLast(rewrite.createStringPlaceholder("", ASTNode.EMPTY_STATEMENT), null); } } } } //get all transition triggers List<Trigger> triggers = transition.getTransition().getTriggers(); //for each trigger for (Trigger trigger : triggers) { /** * If we have not created it already, we create an abstract method to invoke the trigger */ { //TODO: update so we do not generate the trigger if it was already generated MethodDeclaration method = createAbstractTriggerInvocation(trigger, planMethodDeclaration.getAST()); if (!generatedAbstractMethods.containsKey(method.getName().toString())) { generatedAbstractMethods.put(method.getName().toString(), method); } //invoke trigger MethodInvocation invocation = ast.newMethodInvocation(); invocation.setName(ast.newSimpleName(method.getName().toString())); // listRewrite.insertLast(rewrite.createStringPlaceholder("//Invoke transition trigger", ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(ast.newExpressionStatement(invocation), null); // listRewrite.insertLast(rewrite.createStringPlaceholder("", ASTNode.EMPTY_STATEMENT), null); parrentPlanBlock.statements().add(ast.newExpressionStatement(invocation)); } } if (!(state.getVertex() instanceof FinalState)) { //continue from target state with plan generation StateMachineState targetState = transition.getTargetState(); generatePlanForState(targetState, rewrite, planMethodDeclaration, pathTransitions); } else { if (transition.getTargetState() == null) { notifyUser(state.getName() + " is not final and does not have a target state on transition " + transition.getTransition().getName()); System.err.println( state.getName() + " is not final and does not have a target state on transition " + transition.getTransition().getName()); } } } else if (transitions.size() > 1) { for (StateMachineStateTransition transition : transitions) { //clone transitions to use clean path for each sub-trees //cloning is done here as we are generating different paths for each transition at this point Set<StateMachineStateTransition> transitionsCopy = new HashSet<>(); transitionsCopy.addAll(pathTransitions); //if we have visited this transition, continue if (transitionsCopy.contains(transition)) { continue; } else { // add transition to visited transitions transitionsCopy.add(transition); } //for each transition we do a clone of the plan until now MethodDeclaration transitionMethod = cloneMethodDeclaration(planMethodDeclaration); transitionMethod.setName(ast .newSimpleName(PLAN_METHOD_LEADING + (UUID.randomUUID().toString().replaceAll("\\W", "")))); //shadowing to local parrentPlanBlock parrentPlanBlock = transitionMethod.getBody(); //shadowing to local ListRewrite // listRewrite = rewrite.getListRewrite(transitionMethod.getBody(), Block.STATEMENTS_PROPERTY); // listRewrite.insertLast(rewrite.createStringPlaceholder("//Forcing transition " + transition.getTransition().getName() + " by ensuring guard conditions are met and triggers are invoked.", ASTNode.EMPTY_STATEMENT), null); /** * Must force-set all guard conditions to navigate to this particular execution branch */ { //get transition condition (could also be Rule, currently we get only Guard transitions) //force for the current test the transition condition to true, to enable the system to navigate to expected state Constraint guard = transition.getTransition().getGuard(); if (guard != null) { for (Element element : guard.allOwnedElements()) { //currently condition retrieved as plain text that will need to be parsed and evaluated OpaqueExpression expression = (OpaqueExpression) element; for (String body : expression.getBodies()) { if (body.isEmpty()) { notifyUser("Guard condition for transition " + transition.getTransition().getName() + " from state " + state.getName() + " is empty"); System.err.println("Guard condition for transition " + transition.getTransition().getName() + " from state " + state.getName() + " is empty"); continue; } MethodDeclaration method = createAbstractForceConditionMethod(body, ast); if (!generatedAbstractMethods.containsKey(method.getName().toString())) { generatedAbstractMethods.put(method.getName().toString(), method); } //invoke method to force guard condition to true MethodInvocation invocation = ast.newMethodInvocation(); invocation.setName(ast.newSimpleName(method.getName().toString())); // listRewrite.insertLast(rewrite.createStringPlaceholder("//Invoke method to force guard condition to true: " + body, ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(ast.newExpressionStatement(invocation), null); // listRewrite.insertLast(rewrite.createStringPlaceholder("", ASTNode.EMPTY_STATEMENT), null); parrentPlanBlock.statements().add(ast.newExpressionStatement(invocation)); } } } } //get all transition triggers and execute them, like if we had only one transition List<Trigger> triggers = transition.getTransition().getTriggers(); //for each trigger for (Trigger trigger : triggers) { /** * If we have not created it already, we create an abstract method to invoke the trigger */ { //TODO: update so we do not generate the trigger if it was already generated MethodDeclaration method = createAbstractTriggerInvocation(trigger, transitionMethod.getAST()); if (!generatedAbstractMethods.containsKey(method.getName().toString())) { generatedAbstractMethods.put(method.getName().toString(), method); } //invoke trigger MethodInvocation invocation = ast.newMethodInvocation(); invocation.setName(ast.newSimpleName(method.getName().toString())); // listRewrite.insertLast(rewrite.createStringPlaceholder("//Invoke transition trigger", ASTNode.EMPTY_STATEMENT), null); // listRewrite.insertLast(ast.newExpressionStatement(invocation), null); // listRewrite.insertLast(rewrite.createStringPlaceholder("", ASTNode.EMPTY_STATEMENT), null); parrentPlanBlock.statements().add(ast.newExpressionStatement(invocation)); } } if (!(state.getVertex() instanceof FinalState)) { //continue from target state with plan generation StateMachineState targetState = transition.getTargetState(); generatePlanForState(targetState, rewrite, transitionMethod, transitionsCopy); } else { if (transition.getTargetState() == null) { notifyUser(state.getName() + " is not final and does not have a target state on transition " + transition.getTransition().getName()); System.err.println( state.getName() + " is not final and does not have a target state on transition " + transition.getTransition().getName()); } } } } if (state.getVertex() instanceof FinalState) { //store generated method in methods generatedPlans.put(planMethodDeclaration.getName().toString(), planMethodDeclaration); } }
From source file:at.bestsolution.fxide.jdt.corext.dom.ASTFlattener.java
License:Open Source License
@Override public boolean visit(MethodDeclaration node) { if (node.getJavadoc() != null) { node.getJavadoc().accept(this); }/* w w w . j a va 2 s .c o m*/ if (node.getAST().apiLevel() >= JLS3) { printModifiers(node.modifiers()); if (!node.typeParameters().isEmpty()) { this.fBuffer.append("<");//$NON-NLS-1$ for (Iterator<TypeParameter> it = node.typeParameters().iterator(); it.hasNext();) { TypeParameter t = it.next(); t.accept(this); if (it.hasNext()) { this.fBuffer.append(", ");//$NON-NLS-1$ } } this.fBuffer.append("> ");//$NON-NLS-1$ } } if (!node.isConstructor()) { if (node.getReturnType2() != null) { node.getReturnType2().accept(this); } else { // methods really ought to have a return type this.fBuffer.append("void");//$NON-NLS-1$ } this.fBuffer.append(" ");//$NON-NLS-1$ } node.getName().accept(this); this.fBuffer.append("(");//$NON-NLS-1$ if (node.getAST().apiLevel() >= AST.JLS8) { Type receiverType = node.getReceiverType(); if (receiverType != null) { receiverType.accept(this); this.fBuffer.append(' '); SimpleName qualifier = node.getReceiverQualifier(); if (qualifier != null) { qualifier.accept(this); this.fBuffer.append('.'); } this.fBuffer.append("this"); //$NON-NLS-1$ if (node.parameters().size() > 0) { this.fBuffer.append(','); } } } for (Iterator<SingleVariableDeclaration> it = node.parameters().iterator(); it.hasNext();) { SingleVariableDeclaration v = it.next(); v.accept(this); if (it.hasNext()) { this.fBuffer.append(", ");//$NON-NLS-1$ } } this.fBuffer.append(")");//$NON-NLS-1$ 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); } } else { for (int i = 0; i < node.getExtraDimensions(); i++) { this.fBuffer.append("[]"); //$NON-NLS-1$ } } List<? extends ASTNode> thrownExceptions = node.getAST().apiLevel() >= AST.JLS8 ? node.thrownExceptionTypes() : getThrownExceptions(node); if (!thrownExceptions.isEmpty()) { this.fBuffer.append(" throws ");//$NON-NLS-1$ for (Iterator<? extends ASTNode> it = thrownExceptions.iterator(); it.hasNext();) { ASTNode n = it.next(); n.accept(this); if (it.hasNext()) { this.fBuffer.append(", ");//$NON-NLS-1$ } } this.fBuffer.append(" ");//$NON-NLS-1$ } if (node.getBody() == null) { this.fBuffer.append(";");//$NON-NLS-1$ } else { node.getBody().accept(this); } return false; }
From source file:boa.datagen.util.Java7Visitor.java
License:Apache License
@Override public boolean visit(MethodDeclaration node) { List<boa.types.Ast.Method> list = methods.peek(); Method.Builder b = Method.newBuilder(); // b.setPosition(pos.build()); if (node.isConstructor()) b.setName("<init>"); else//from ww w . j av a 2 s .co m b.setName(node.getName().getFullyQualifiedName()); for (Object m : node.modifiers()) { if (((IExtendedModifier) m).isAnnotation()) ((Annotation) m).accept(this); else ((org.eclipse.jdt.core.dom.Modifier) m).accept(this); b.addModifiers(modifiers.pop()); } boa.types.Ast.Type.Builder tb = boa.types.Ast.Type.newBuilder(); if (node.getReturnType2() != null) { String name = typeName(node.getReturnType2()); for (int i = 0; i < node.getExtraDimensions(); i++) name += "[]"; tb.setName(getIndex(name)); tb.setKind(boa.types.Ast.TypeKind.OTHER); b.setReturnType(tb.build()); } else { tb.setName(getIndex("void")); tb.setKind(boa.types.Ast.TypeKind.OTHER); b.setReturnType(tb.build()); } for (Object t : node.typeParameters()) { boa.types.Ast.Type.Builder tp = boa.types.Ast.Type.newBuilder(); String name = ((TypeParameter) t).getName().getFullyQualifiedName(); String bounds = ""; for (Object o : ((TypeParameter) t).typeBounds()) { if (bounds.length() > 0) bounds += " & "; bounds += typeName((org.eclipse.jdt.core.dom.Type) o); } if (bounds.length() > 0) name = name + " extends " + bounds; tp.setName(getIndex(name)); tp.setKind(boa.types.Ast.TypeKind.GENERIC); b.addGenericParameters(tp.build()); } for (Object o : node.parameters()) { SingleVariableDeclaration ex = (SingleVariableDeclaration) o; Variable.Builder vb = Variable.newBuilder(); // vb.setPosition(pos.build()); // FIXME vb.setName(ex.getName().getFullyQualifiedName()); for (Object m : ex.modifiers()) { if (((IExtendedModifier) m).isAnnotation()) ((Annotation) m).accept(this); else ((org.eclipse.jdt.core.dom.Modifier) m).accept(this); vb.addModifiers(modifiers.pop()); } boa.types.Ast.Type.Builder tp = boa.types.Ast.Type.newBuilder(); String name = typeName(ex.getType()); for (int i = 0; i < ex.getExtraDimensions(); i++) name += "[]"; if (ex.isVarargs()) name += "..."; tp.setName(getIndex(name)); tp.setKind(boa.types.Ast.TypeKind.OTHER); vb.setVariableType(tp.build()); if (ex.getInitializer() != null) { ex.getInitializer().accept(this); vb.setInitializer(expressions.pop()); } b.addArguments(vb.build()); } for (Object o : node.thrownExceptions()) { boa.types.Ast.Type.Builder tp = boa.types.Ast.Type.newBuilder(); tp.setName(getIndex(((Name) o).getFullyQualifiedName())); tp.setKind(boa.types.Ast.TypeKind.CLASS); b.addExceptionTypes(tp.build()); } if (node.getBody() != null) { statements.push(new ArrayList<boa.types.Ast.Statement>()); node.getBody().accept(this); for (boa.types.Ast.Statement s : statements.pop()) b.addStatements(s); } list.add(b.build()); return false; }
From source file:boa.datagen.util.Java8Visitor.java
License:Apache License
@Override public boolean visit(MethodDeclaration node) { List<boa.types.Ast.Method> list = methods.peek(); Method.Builder b = Method.newBuilder(); // b.setPosition(pos.build()); if (node.isConstructor()) b.setName("<init>"); else/*from w w w. j a v a 2s.c o m*/ b.setName(node.getName().getFullyQualifiedName()); for (Object m : node.modifiers()) { if (((IExtendedModifier) m).isAnnotation()) ((Annotation) m).accept(this); else ((org.eclipse.jdt.core.dom.Modifier) m).accept(this); b.addModifiers(modifiers.pop()); } boa.types.Ast.Type.Builder tb = boa.types.Ast.Type.newBuilder(); if (node.getReturnType2() != null) { String name = typeName(node.getReturnType2()); // FIXME JLS8: Deprecated getExtraDimensions() and added extraDimensions() for (int i = 0; i < node.getExtraDimensions(); i++) name += "[]"; tb.setName(getIndex(name)); tb.setKind(boa.types.Ast.TypeKind.OTHER); b.setReturnType(tb.build()); } else { tb.setName(getIndex("void")); tb.setKind(boa.types.Ast.TypeKind.OTHER); b.setReturnType(tb.build()); } for (Object t : node.typeParameters()) { boa.types.Ast.Type.Builder tp = boa.types.Ast.Type.newBuilder(); String name = ((TypeParameter) t).getName().getFullyQualifiedName(); String bounds = ""; for (Object o : ((TypeParameter) t).typeBounds()) { if (bounds.length() > 0) bounds += " & "; bounds += typeName((org.eclipse.jdt.core.dom.Type) o); } if (bounds.length() > 0) name = name + " extends " + bounds; tp.setName(getIndex(name)); tp.setKind(boa.types.Ast.TypeKind.GENERIC); b.addGenericParameters(tp.build()); } if (node.getReceiverType() != null) { Variable.Builder vb = Variable.newBuilder(); // vb.setPosition(pos.build()); // FIXME vb.setName("this"); boa.types.Ast.Type.Builder tp = boa.types.Ast.Type.newBuilder(); String name = typeName(node.getReceiverType()); if (node.getReceiverQualifier() != null) name = node.getReceiverQualifier().getFullyQualifiedName() + "." + name; tp.setName(getIndex(name)); tp.setKind(boa.types.Ast.TypeKind.OTHER); // FIXME change to receiver? or something? vb.setVariableType(tp.build()); b.addArguments(vb.build()); } for (Object o : node.parameters()) { SingleVariableDeclaration ex = (SingleVariableDeclaration) o; Variable.Builder vb = Variable.newBuilder(); // vb.setPosition(pos.build()); // FIXME vb.setName(ex.getName().getFullyQualifiedName()); for (Object m : ex.modifiers()) { if (((IExtendedModifier) m).isAnnotation()) ((Annotation) m).accept(this); else ((org.eclipse.jdt.core.dom.Modifier) m).accept(this); vb.addModifiers(modifiers.pop()); } boa.types.Ast.Type.Builder tp = boa.types.Ast.Type.newBuilder(); String name = typeName(ex.getType()); // FIXME JLS8: Deprecated getExtraDimensions() and added extraDimensions() for (int i = 0; i < ex.getExtraDimensions(); i++) name += "[]"; if (ex.isVarargs()) name += "..."; tp.setName(getIndex(name)); tp.setKind(boa.types.Ast.TypeKind.OTHER); vb.setVariableType(tp.build()); if (ex.getInitializer() != null) { ex.getInitializer().accept(this); vb.setInitializer(expressions.pop()); } b.addArguments(vb.build()); } for (Object o : node.thrownExceptionTypes()) { boa.types.Ast.Type.Builder tp = boa.types.Ast.Type.newBuilder(); tb.setName(getIndex(typeName((org.eclipse.jdt.core.dom.Type) o))); tp.setKind(boa.types.Ast.TypeKind.CLASS); b.addExceptionTypes(tp.build()); } if (node.getBody() != null) { statements.push(new ArrayList<boa.types.Ast.Statement>()); node.getBody().accept(this); for (boa.types.Ast.Statement s : statements.pop()) b.addStatements(s); } list.add(b.build()); return false; }
From source file:br.uff.ic.gems.resources.ast.Visitor.java
@Override public boolean visit(MethodDeclaration node) { int beginLine = beginLine(node); int endLine = cu.getLineNumber(node.getStartPosition() + node.getLength()); int beginColumn = beginColunm(node); int endColumn = cu.getColumnNumber(node.getStartPosition() + node.getLength()); Block body = node.getBody(); if (body != null) { int beginLineBody = cu.getLineNumber(body.getStartPosition()); int endLineBody = cu.getLineNumber(body.getStartPosition() + body.getLength()); int beginColumnBody = cu.getColumnNumber(body.getStartPosition()); int endColumnBody = cu.getColumnNumber(body.getStartPosition() + body.getLength()); languageConstructs.add(new LanguageConstruct(node.getClass().getSimpleName(), beginLine, endLine, beginColumn, endColumn, beginLineBody, endLineBody, beginColumnBody, endColumnBody, null)); } else {/*from w w w . j a v a 2 s . co m*/ languageConstructs.add(new LanguageConstruct(node.getClass().getSimpleName() + INTERFACE, beginLine, endLine, beginColumn, endColumn)); } return true; }
From source file:br.uff.ic.mergeguider.javaparser.DepVisitor.java
@Override public boolean visit(MethodDeclaration node) { Location location;/*from w ww .java 2 s. co m*/ int elementLineBegin = cu.getLineNumber(node.getStartPosition()); int elementLineEnd = cu.getLineNumber(node.getStartPosition() + node.getLength()); int elementColumnBegin = cu.getColumnNumber(node.getStartPosition()); int elementColumnEnd = cu.getColumnNumber(node.getStartPosition() + node.getLength()); Block body = node.getBody(); if (body == null) { location = new Location(elementLineBegin, elementLineEnd, elementColumnBegin, elementColumnEnd); } else { int bodyLineBegin = cu.getLineNumber(body.getStartPosition()); int bodyLineEnd = cu.getLineNumber(body.getStartPosition() + body.getLength()); int bodyColumnBegin = cu.getColumnNumber(body.getStartPosition()); int bodyColumnEnd = cu.getColumnNumber(body.getStartPosition() + body.getLength()); location = new Location(elementLineBegin, elementLineEnd, elementColumnBegin, elementColumnEnd, bodyLineBegin, bodyLineEnd, bodyColumnBegin, bodyColumnEnd); } MyMethodDeclaration myMethodDeclaration = new MyMethodDeclaration(node, location); if (!classLanguageConstructsList.isEmpty()) { classLanguageConstructsList.get(classLanguageConstructsList.size() - 1).getMethodDeclarations() .add(myMethodDeclaration); } return true; }
From source file:cc.kave.eclipse.commons.analysis.transformer.DeclarationVisitor.java
License:Apache License
private void methodDeclHelper(MethodDeclaration decl) { if (decl != null) { MethodName methodName = (MethodName) NodeFactory.createNodeName(decl); // if (!isNestedDeclaration(methodName, context)) { cc.kave.commons.model.ssts.impl.declarations.MethodDeclaration sstDecl = new cc.kave.commons.model.ssts.impl.declarations.MethodDeclaration(); sstDecl.setName(methodName);//from w ww . j a v a 2s .co m sstDecl.setEntryPoint(entryPoints.contains(methodName)); context.getMethods().add(sstDecl); if (decl == marker.getAffectedNode()) { ExpressionStatement expStatement = new ExpressionStatement(); expStatement.setExpression(new CompletionExpression()); sstDecl.getBody().add(expStatement); } if (!Modifier.isAbstract(decl.getModifiers())) { BodyVisitor bodyVisitor = new BodyVisitor(new UniqueVariableNameGenerator(), marker, new ArrayList<IStatement>()); decl.accept(bodyVisitor); } } // } }
From source file:cc.kave.eclipse.commons.analysis.transformer.DeclarationVisitor.java
License:Apache License
private void constructorHelper(MethodDeclaration decl) { UniqueVariableNameGenerator nameGen = new UniqueVariableNameGenerator(); ExpressionVisitor exprVisit = new ExpressionVisitor(nameGen, marker); if (decl != null) { MethodName methodName = (MethodName) NodeFactory.createNodeName(decl); // if (!isNestedDeclaration(methodName, context)) { cc.kave.commons.model.ssts.impl.declarations.MethodDeclaration sstDecl = new cc.kave.commons.model.ssts.impl.declarations.MethodDeclaration(); sstDecl.setName(methodName);//from w ww . j a va 2 s .c om sstDecl.setEntryPoint(entryPoints.contains(methodName)); context.getMethods().add(sstDecl); if (decl == marker.getAffectedNode()) { ExpressionStatement expStatement = new ExpressionStatement(); expStatement.setExpression(new CompletionExpression()); sstDecl.getBody().add(expStatement); } // } } }
From source file:changetypes.ASTVisitorAtomicChange.java
License:Open Source License
public boolean visit(MethodDeclaration node) { IMethodBinding mtb = node.resolveBinding(); this.mtbStack.push(mtb); String nodeStr = node.toString(); String modifier = "protected"; int dex = nodeStr.indexOf(' '); if (dex >= 0) { String temp = nodeStr.substring(0, dex); if (temp.equals("public")) { modifier = "public"; } else if (temp.equals("private")) { modifier = "private"; }/*w w w. java2s . c o m*/ } try { String visibility = getModifier(mtb); this.facts.add(Fact.makeMethodFact(getQualifiedName(mtb), getSimpleName(mtb), getQualifiedName(mtb.getDeclaringClass()), visibility)); } catch (Exception localException1) { System.err.println("Cannot resolve return method bindings for method " + node.getName().toString()); } try { String returntype = getQualifiedName(mtb.getReturnType()); this.facts.add(Fact.makeReturnsFact(getQualifiedName(mtb), returntype)); } catch (Exception localException2) { System.err.println("Cannot resolve return type bindings for method " + node.getName().toString()); } try { this.facts.add(Fact.makeModifierMethodFact(getQualifiedName(mtb), modifier)); } catch (Exception localException3) { System.err.println( "Cannot resolve return type bindings for method modifier " + node.getName().toString()); } try { String bodystring = node.getBody() != null ? node.getBody().toString() : ""; bodystring = bodystring.replace('\n', ' '); bodystring = bodystring.replace('"', ' '); bodystring = bodystring.replace('"', ' '); bodystring = bodystring.replace('\\', ' '); this.facts.add(Fact.makeMethodBodyFact(getQualifiedName(mtb), bodystring)); } catch (Exception localException4) { System.err.println("Cannot resolve bindings for body"); } SingleVariableDeclaration param; try { List<SingleVariableDeclaration> parameters = node.parameters(); StringBuilder sb = new StringBuilder(); for (Iterator localIterator = parameters.iterator(); localIterator.hasNext();) { param = (SingleVariableDeclaration) localIterator.next(); if (sb.length() != 0) { sb.append(", "); } sb.append(param.getType().toString()); sb.append(":"); sb.append(param.getName().toString()); } this.facts.add(Fact.makeParameterFact(getQualifiedName(mtb), sb.toString(), "")); } catch (Exception localException5) { System.err.println("Cannot resolve bindings for parameters"); } try { List<Name> thrownTypes = node.thrownExceptions(); for (Name n : thrownTypes) { this.facts.add(Fact.makeThrownExceptionFact(getQualifiedName(mtb), getQualifiedName(n.resolveTypeBinding()))); } } catch (Exception localException6) { System.err.println("Cannot resolve bindings for exceptions"); } return true; }