Example usage for org.aspectj.asm IRelationship getSourceHandle

List of usage examples for org.aspectj.asm IRelationship getSourceHandle

Introduction

In this page you can find the example usage for org.aspectj.asm IRelationship getSourceHandle.

Prototype

public String getSourceHandle();

Source Link

Usage

From source file:edu.utdallas.fdaf.aspectj.reverse.AspectJ2UMLConverter.java

License:Open Source License

/**
 * Adds the model's aspect-related relationships to the Package.
 * /*from  w ww .ja v a  2  s.co m*/
 * @param model the AJ Model facade
 * @param packageObject the UML Package
 * @param fragment the AspectJ/Java model package associated with packageObject
 */
void addAspectRelationships(AJProjectModelFacade model, Package packageObject, IPackageFragment fragment) {
    // You can narrow this to include on certain kinds of relationships
    AJRelationshipType[] relsTypes = AJRelationshipManager.getAllRelationshipTypes();

    // check first to see if there is a model
    // will return false if there has not yet been a successful build of this project
    if (model.hasModel()) {

        // all relationships for project
        // can also query for relationships on individual elements or compilation units
        List<IRelationship> rels = model.getRelationshipsForProject(relsTypes);
        for (IRelationship rel : rels) {
            // Source is an IProgramElement handle, which refers to a piece of the program in AspectJ's World
            String sourceJHandle = ajHandleToJavaHandle(rel.getSourceHandle());
            NamedElement sourceElement = a2uInfo.get(sourceJHandle);

            for (String targetHandle : rel.getTargets()) {

                String targetJHandle = ajHandleToJavaHandle(targetHandle);
                NamedElement targetElement = a2uInfo.get(targetJHandle);
                try {
                    System.err.println("Calling addAspectRelationship - rel = " + rel.getName());
                    System.err.println("==>Source:  jHandle=" + sourceJHandle + ", sourceElement="
                            + sourceElement.getQualifiedName() + " (class " + sourceElement.getClass().getName()
                            + ")");
                    System.err.println("==>Target:  jHandle=" + targetJHandle + ", targetElement="
                            + targetElement.getQualifiedName() + " (class " + targetElement.getClass().getName()
                            + ")");

                    addAspectRelationship(rel, sourceElement, targetElement);
                } catch (Exception e) {
                    // TODO Auto-generated catch block
                    System.err.println("Exception thrown by addAspectRelationship");
                    System.err.println("***rel = " + rel.getName());
                    System.err.println("***Source:  jHandle=" + sourceJHandle + ", sourceElement="
                            + sourceElement.getQualifiedName());
                    System.err.println("***Target:  jHandle=" + targetJHandle + ", targetElement="
                            + targetElement.getQualifiedName());
                    e.printStackTrace();
                }
            }
        }
    }
}

From source file:org.caesarj.compiler.asm.StructureModelDump.java

License:Open Source License

protected void printRelationshipMap(CaesarJAsmManager asmManager) {
    System.out.println("Dumping Relationship Map");
    IHierarchy hierarchy = asmManager.getHierarchy();
    IRelationshipMap map = asmManager.getRelationshipMap();
    Set entries = map.getEntries();
    Iterator i = entries.iterator();
    while (i.hasNext()) {
        List relationships = map.get((String) i.next());
        Iterator j = relationships.iterator();
        while (j.hasNext()) {
            IRelationship relationship = (IRelationship) j.next();
            System.out.println("Relationship '" + relationship.getName() + "' of kind '"
                    + relationship.getKind() + "' has " + relationship.getTargets().size() + " target(s) ");
            System.out.println("   source handle -->" + relationship.getSourceHandle());
            Iterator k = relationship.getTargets().iterator();
            while (k.hasNext()) {
                IProgramElement element = hierarchy.findElementForHandle((String) k.next());
                System.out.println("  -> '" + element.getName() + "' of kind '" + element.getKind()
                        + "' with handle " + element.getHandleIdentifier());
            }//from www  .j  a  va 2s  . c  om
        }
    }
}

From source file:org.eclipse.ajdt.core.model.AJModel.java

License:Open Source License

/**
 * @param proj the project whose relationships we are looking for
 * @param relTypes the relationship types we are looking for
 * @return all DECLARED_ON relationships for the given java element
 * /*  ww  w .j a v a 2 s. c  om*/
 * @deprecated see bug 253245
 */
public List/*AJRelationship*/ getAllRelationships(IProject proj, AJRelationshipType[] relTypes) {
    AJProjectModelFacade model = AJProjectModelFactory.getInstance().getModelForProject(proj);
    if (model.hasModel()) { // returns false if project is not built
        List/*IRelationship*/ allRels = model.getRelationshipsForProject(relTypes);
        List/*AJRelationship*/ ajRels = new ArrayList(allRels.size());
        for (Iterator relIter = allRels.iterator(); relIter.hasNext();) {
            IRelationship rel = (IRelationship) relIter.next();
            IJavaElement source = model.programElementToJavaElement(rel.getSourceHandle());
            if (source instanceof IntertypeElement) {
                for (Iterator targetIter = rel.getTargets().iterator(); targetIter.hasNext();) {
                    String target = (String) targetIter.next();
                    // ensure a Java handle is used here.
                    // because the things being compared to are 
                    // Java handles.
                    // This is avoiding problems when Type is in a .aj file
                    IJavaElement elt = model.programElementToJavaElement(target);
                    elt = JavaCore.create(AspectJCore.convertToJavaCUHandle(elt.getHandleIdentifier(), elt));
                    if (elt != null) {
                        // will be null if type is an aspect type or contained in an aspect type
                        AJRelationship ajRel = new AJRelationship(source,
                                AJRelationshipManager.toRelationshipType(rel.getName()), elt,
                                rel.hasRuntimeTest());
                        ajRels.add(ajRel);
                    }
                }
            }
        }
        return ajRels;
    } else {
        return Collections.EMPTY_LIST;
    }
}

From source file:org.eclipse.ajdt.core.model.AJModelChecker.java

License:Open Source License

private static List<String> invalidAdviceRelationsip(IRelationship rel, AJProjectModelFacade model) {
    List<String> problems = new ArrayList<String>();
    if (rel.getKind() == IRelationship.Kind.ADVICE || rel.getKind() == IRelationship.Kind.ADVICE_AFTER
            || rel.getKind() == IRelationship.Kind.ADVICE_AFTERRETURNING
            || rel.getKind() == IRelationship.Kind.ADVICE_AFTERTHROWING
            || rel.getKind() == IRelationship.Kind.ADVICE_BEFORE
            || rel.getKind() == IRelationship.Kind.ADVICE_AROUND) {

        IJavaElement elt = model.programElementToJavaElement(rel.getSourceHandle());
        if (!elt.exists()) {
            problems.add("Java Element does not exist: " + rel.getSourceHandle()
                    + "\n\tIt is the source relationship of " + toRelString(rel)
                    + "\n\tThis may not actually be a problem if compiling broken code or advising static initializers.");
        }/*  w  w w .jav a 2 s .c  om*/
        if (elt.getElementType() == IJavaElement.COMPILATION_UNIT
                || elt.getElementType() == IJavaElement.CLASS_FILE) {
            problems.add(
                    "Java Element is wrong type (advice relationships should not contain any types or compilation units): "
                            + rel.getSourceHandle() + "\n\tIt is the source relationship of "
                            + toRelString(rel));
        }

        for (Iterator<String> targetIter = rel.getTargets().iterator(); targetIter.hasNext();) {
            String target = targetIter.next();
            elt = model.programElementToJavaElement(target);
            if (!elt.exists()) {
                problems.add("Java Element does not exist: " + target + "\n\tIt is the source relationship of "
                        + toRelString(rel)
                        + "\n\tThis may not actually be a problem if compiling broken code or advising static initializers.");
            }
            if (elt != AJProjectModelFacade.ERROR_JAVA_ELEMENT
                    && (elt.getElementType() == IJavaElement.COMPILATION_UNIT
                            || elt.getElementType() == IJavaElement.CLASS_FILE)) {
                problems.add(
                        "Java Element is wrong type (advice relationships should not contain any types or compilation units): "
                                + target + "\n\tIt is the source relationship of " + toRelString(rel));
            }
        }

    }
    return problems;
}

From source file:org.eclipse.ajdt.core.model.AJModelChecker.java

License:Open Source License

private static List<String> itdsNotOnType(IRelationship rel, AJProjectModelFacade model) {
    List<String> problems = new ArrayList<String>();
    if (rel.getKind() == IRelationship.Kind.DECLARE_INTER_TYPE) {

        IJavaElement elt = model.programElementToJavaElement(rel.getSourceHandle());
        if (!elt.exists()) {
            problems.add("Java Element does not exist: " + rel.getSourceHandle()
                    + "\n\tIt is the source relationship of " + toRelString(rel)
                    + "\n\tThis may not actually be a problem if compiling broken code.");
        }/*  www  .  j av  a2s .c o m*/
        if (elt != AJProjectModelFacade.ERROR_JAVA_ELEMENT
                && (elt.getElementType() == IJavaElement.FIELD || elt.getElementType() == IJavaElement.METHOD
                        || elt.getElementType() == IJavaElement.LOCAL_VARIABLE
                        || elt.getElementType() == IJavaElement.INITIALIZER
                        || elt.getElementType() == IJavaElement.COMPILATION_UNIT
                        || elt.getElementType() == IJavaElement.CLASS_FILE)
                && !(elt instanceof IntertypeElement || elt instanceof DeclareElement)) {
            problems.add(
                    "Java Element is wrong type (ITD relationships should only contain types and intertype elements): "
                            + rel.getSourceHandle() + "\n\tIt is the source relationship of "
                            + toRelString(rel));
        }

        for (Iterator<String> targetIter = rel.getTargets().iterator(); targetIter.hasNext();) {
            String target = targetIter.next();
            elt = model.programElementToJavaElement(target);
            if (!elt.exists()) {
                problems.add("Java Element does not exist: " + target + "\n\tIt is the source relationship of "
                        + toRelString(rel)
                        + "\n\tThis may not actually be a problem if compiling broken code.");
            }
            if (elt != AJProjectModelFacade.ERROR_JAVA_ELEMENT
                    && (elt.getElementType() == IJavaElement.FIELD
                            || elt.getElementType() == IJavaElement.METHOD
                            || elt.getElementType() == IJavaElement.LOCAL_VARIABLE
                            || elt.getElementType() == IJavaElement.INITIALIZER
                            || elt.getElementType() == IJavaElement.COMPILATION_UNIT
                            || elt.getElementType() == IJavaElement.CLASS_FILE)
                    && !(elt instanceof IntertypeElement || elt instanceof DeclareElement)) {
                problems.add(
                        "Java Element is wrong type (ITD relationships should only contain types and intertype elements): "
                                + target + "\n\tIt is the source relationship of " + toRelString(rel));
            }
        }

    }
    return problems;
}

From source file:org.eclipse.ajdt.core.model.AJModelChecker.java

License:Open Source License

private static String toRelString(IRelationship rel) {
    StringBuffer sb = new StringBuffer();
    sb.append(rel.getSourceHandle());
    sb.append(" --");
    sb.append(rel.getName());/*from w  ww . j  av a  2s.  c om*/
    sb.append("--> ");
    for (Iterator<String> targetIter = rel.getTargets().iterator(); targetIter.hasNext();) {
        String target = targetIter.next();
        sb.append(target);
        if (targetIter.hasNext()) {
            sb.append(",   ");
        }
    }
    return sb.toString();
}

From source file:org.eclipse.ajdt.core.model.AJProjectModelFacade.java

License:Open Source License

/**
 * useful for testing/*www  .  j a  va  2s  . co m*/
 */
public static String printRelationship(IRelationship rel) {
    return rel.getSourceHandle() + " --" + rel.getName() + "--> " + rel.getTargets();
}

From source file:org.eclipse.ajdt.core.parserbridge.AJCompilationUnitProblemFinder.java

License:Open Source License

private static Set<String> getITDNames(CompilationUnit unit, AJProjectModelFacade model) {
    Set<String> names = new HashSet<String>();
    Map relsMap = model.getRelationshipsForFile(unit, new AJRelationshipType[] {
            AJRelationshipManager.DECLARED_ON, AJRelationshipManager.ASPECT_DECLARATIONS });
    for (Iterator relsMapIter = relsMap.values().iterator(); relsMapIter.hasNext();) {
        List rels = (List) relsMapIter.next();
        for (Iterator relsIter = rels.iterator(); relsIter.hasNext();) {
            IRelationship rel = (IRelationship) relsIter.next();
            IProgramElement[] ipes;/*from w ww. jav  a 2 s  .  co m*/
            if (rel.getName().equals(AJRelationshipManager.DECLARED_ON.getDisplayName())) {
                ipes = new IProgramElement[1];
                ipes[0] = model.getProgramElement(rel.getSourceHandle());
            } else {
                List<String> targets = rel.getTargets();
                ipes = new IProgramElement[targets.size()];
                for (int i = 0; i < ipes.length; i++) {
                    ipes[i] = model.getProgramElement(targets.get(i));
                }
            }
            for (int i = 0; i < ipes.length; i++) {
                String longName = ipes[i].getName();
                String[] splits = longName.split("\\.");
                String lastSegment = splits[splits.length - 1];
                String itdName = lastSegment;
                // ignore constructors
                if (splits.length > 1 && itdName.equals(splits[splits.length - 2])) {
                    continue;
                }
                names.add(itdName);
            }
        }
    }
    return names;
}

From source file:org.eclipse.ajdt.core.tests.AJCoreTest.java

License:Open Source License

static void compareElementsFromRelationships(AJRelationshipType[] rels, IProject project)
        throws JavaModelException {
    IJavaProject jProject = JavaCore.create(project);
    AJProjectModelFacade model = AJProjectModelFactory.getInstance().getModelForProject(jProject.getProject());

    List allRels = model.getRelationshipsForProject(rels);
    if (!model.hasModel() || allRels.size() == 0) {
        // if the project or model didn't build properly we'd get no
        // relationships
        // and the test would blindly pass without this check
        fail("No relationships found for project " + project.getName()); //$NON-NLS-1$
    }//from  w w w.ja  va 2s .c o m
    for (Iterator iter = allRels.iterator(); iter.hasNext();) {
        IRelationship rel = (IRelationship) iter.next();
        HandleTestUtils.checkAJHandle(rel.getSourceHandle(), model);
        for (Iterator targetIter = rel.getTargets().iterator(); targetIter.hasNext();) {
            String handle = (String) targetIter.next();
            HandleTestUtils.checkAJHandle(handle, model);
        }
    }
}

From source file:org.eclipse.ajdt.core.tests.model.AJModelTest2.java

License:Open Source License

/**
 * Tests for a injar/binary relationship for an element advised by advice in
 * another project (by adding that project's bin directory to the
 * aspectpath)/*from   w w w.j  av  a2  s. c  om*/
 * 
 * @throws Exception
 */
public void testAspectPathDirWeaving() throws Exception {
    createPredefinedProject14("MyAspectLibrary"); //$NON-NLS-1$
    IProject weaveMeProject = createPredefinedProject("WeaveMe"); //$NON-NLS-1$
    this.waitForIndexes();
    AJProjectModelFacade model = AJProjectModelFactory.getInstance().getModelForProject(weaveMeProject);

    AJRelationshipType[] rels = new AJRelationshipType[] { AJRelationshipManager.ADVISED_BY };
    List<IRelationship> allRels = model.getRelationshipsForProject(rels);
    boolean gotBinaryAdvice = false;
    for (IRelationship rel : allRels) {
        IJavaElement source = model.programElementToJavaElement(rel.getSourceHandle());
        if (source.getElementName().equals("main")) { //$NON-NLS-1$
            for (String targetStr : rel.getTargets()) {
                IJavaElement target = model.programElementToJavaElement(targetStr);
                if (target.getElementName().indexOf("before") != -1) { //$NON-NLS-1$
                    gotBinaryAdvice = true;
                }
            }
        }
    }
    assertTrue("Didn't find main element advised by before advice", //$NON-NLS-1$
            gotBinaryAdvice);
}