edu.buffalo.cse.green.relationship.dependency.DependencyLGenerator.java Source code

Java tutorial

Introduction

Here is the source code for edu.buffalo.cse.green.relationship.dependency.DependencyLGenerator.java

Source

/* This file is part of Green.
 *
 * Copyright (C) 2005 The Research Foundation of State University of New York
 * All Rights Under Copyright Reserved, The Research Foundation of S.U.N.Y.
 * 
 * Green is free software, licensed under the terms of the Eclipse
 * Public License, version 1.0.  The license is available at
 * http://www.eclipse.org/legal/epl-v10.html
 */
package edu.buffalo.cse.green.relationship.dependency;

import static edu.buffalo.cse.green.GreenException.GRERR_RELATIONSHIP_NO_METHODS;
import static edu.buffalo.cse.green.preferences.VariableAffix.*;
import edu.buffalo.cse.green.preferences.VariableAffix;

import java.util.AbstractList;
import java.util.List;

import org.eclipse.jdt.core.IMethod;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.dom.Block;
import org.eclipse.jdt.core.dom.Statement;
import org.eclipse.jdt.core.dom.VariableDeclarationStatement;

import edu.buffalo.cse.green.GreenException;
import edu.buffalo.cse.green.PlugIn;
import edu.buffalo.cse.green.dialogs.ChooseMethodsDialog;
import edu.buffalo.cse.green.dialogs.MethodDialogListener;
import edu.buffalo.cse.green.relationships.CardinalRelationshipGenerator;

/**
 * @see edu.buffalo.cse.green.relationship.CardinalRelationshipGenerator
 * 
 * @author bcmartin
 */
public class DependencyLGenerator extends CardinalRelationshipGenerator {
    private List<IMethod> _selectedMethods;

    /**
     * @see edu.buffalo.cse.green.relationships.RelationshipVisitor#preVisit()
     * @author zgwang
     */
    protected void preVisit() {
        _selectedMethods = null; //Ensures that previously used methods do not carry over
        try {
            if (getSourceType().getMethods().length == 0)
                GreenException.errorDialog(GRERR_RELATIONSHIP_NO_METHODS);
            else {
                ChooseMethodsDialog dialog = new ChooseMethodsDialog(PlugIn.getDefaultShell(), getSourceType());
                dialog.addMethodDialogListener(new MethodDialogListener() {
                    public void okPressed(List<IMethod> selectedMethods) {
                        _selectedMethods = selectedMethods;
                    }
                });
                dialog.open();
            }
        } catch (JavaModelException jme) {
            jme.printStackTrace();
        }
    }

    /**
     * @see edu.buffalo.cse.green.relationships.RelationshipGenerator#process(org.eclipse.jdt.core.dom.Block)
     */
    protected boolean process(Block block) {
        if (_selectedMethods == null)
            return true;
        if (!correctTypeToGenerate())
            return true;
        IMethod method = (IMethod) getMethodDeclaration().resolveBinding().getJavaElement();
        if (!_selectedMethods.contains(method))
            return true;

        List<Statement> statements = (AbstractList<Statement>) (List) block.statements();

        for (int x = 0; x < _cardinality; x++) {
            String localName = generateVariableName(VariableAffix.getAffixString(LocalPrefix)
                    + getBaseVariableName() + VariableAffix.getAffixString(LocalSuffix));
            VariableDeclarationStatement varDec = createNormalVariableDeclaration(getTargetType(), localName,
                    createInvocation(createTypeReference(getActualTargetType())));
            statements.add(0, varDec);

            // add the variable name(s) to the appropriate list(s)
            getLocalDeclarations().add(localName);
        }

        return true;
    }
}