org.eclipse.ajdt.core.tests.model.AbstractModelTest.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.ajdt.core.tests.model.AbstractModelTest.java

Source

/*******************************************************************************
 * Copyright (c) 2010 SpringSource Corporation and others.
 * All rights reserved. This program and the accompanying materials 
 * are made available under the terms of the Eclipse Public License v1.0
 * which accompanies this distribution, and is available at
 * http://www.eclipse.org/legal/epl-v10.html
 * 
 * Contributors:
 *      Andrew Eisenberg = Initial implementation
 *******************************************************************************/
package org.eclipse.ajdt.core.tests.model;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

import org.aspectj.asm.AsmManager;
import org.aspectj.asm.HierarchyWalker;
import org.aspectj.asm.IHierarchy;
import org.aspectj.asm.IProgramElement;
import org.eclipse.ajdt.core.AspectJPlugin;
import org.eclipse.ajdt.core.model.AJProjectModelFacade;
import org.eclipse.ajdt.core.model.AJProjectModelFactory;
import org.eclipse.ajdt.core.tests.AJDTCoreTestCase;
import org.eclipse.ajdt.core.tests.HandleTestUtils;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IPackageFragment;
import org.eclipse.jdt.core.IParent;
import org.eclipse.jdt.core.JavaModelException;

/**
 * 
 * @author Andrew Eisenberg
 * @created Oct 29, 2010
 */
public abstract class AbstractModelTest extends AJDTCoreTestCase {

    public AbstractModelTest(String name) {
        super(name);
    }

    public AbstractModelTest() {
        super();
    }

    protected void checkHandles(IJavaProject jProject) throws Exception {
        final AJProjectModelFacade model = AJProjectModelFactory.getInstance().getModelForJavaElement(jProject);
        final List<String> accumulatedErrors = new ArrayList<String>();

        // check all the java handles
        IPackageFragment[] frags = jProject.getPackageFragments();
        for (int i = 0; i < frags.length; i++) {
            ICompilationUnit[] units = frags[i].getCompilationUnits();
            for (int j = 0; j < units.length; j++) {
                accumulatedErrors.addAll(walk(units[j], model));
            }
        }

        // now check all the aj handles
        AsmManager asm = AspectJPlugin.getDefault().getCompilerFactory()
                .getCompilerForProject(jProject.getProject()).getModel();
        IHierarchy hierarchy = asm.getHierarchy();
        hierarchy.getRoot().walk(new HierarchyWalker() {
            protected void preProcess(IProgramElement node) {
                try {
                    HandleTestUtils.checkAJHandle(node.getHandleIdentifier(), model);
                } catch (JavaModelException e) {
                    throw new RuntimeException(e);
                }
            }
        });

        if (accumulatedErrors.size() > 0) {
            StringBuffer sb = new StringBuffer();
            sb.append("Found errors in comparing elements:\n");
            for (String msg : accumulatedErrors) {
                sb.append(msg + "\n");
            }
            fail(sb.toString());
        }
    }

    private Collection<String> walk(IJavaElement elt, AJProjectModelFacade model) throws Exception {
        final List<String> accumulatedErrors = new ArrayList<String>();
        accumulatedErrors.addAll(HandleTestUtils.checkJavaHandle(elt.getHandleIdentifier(), model));
        if (elt instanceof IParent) {
            IParent parent = (IParent) elt;
            IJavaElement[] children = parent.getChildren();
            for (int i = 0; i < children.length; i++) {
                accumulatedErrors.addAll(walk(children[i], model));
            }
        }
        return accumulatedErrors;
    }

}