Browse Source

Added spacewar project for testing.

tags/V1_1_1
mkersten 21 years ago
parent
commit
eb12f56518

+ 1
- 1
ajde/testdata/examples/coverage/ModelCoverage.java View File

@@ -107,7 +107,7 @@ aspect DeclareCoverage {
pointcut illegalNewFigElt(): call(Point.new(..)) && !withincode(* *.doIt(..));

declare error: illegalNewFigElt(): "Illegal constructor call.";
declare warning: illegalNewFigElt(): "Illegal constructor call.";
declare warning: call(* Point.setX(..)): "Illegal call.";

declare parents: Point extends java.io.Serializable;
declare parents: Point+ implements java.util.Observable;

+ 1
- 1
ajde/testsrc/org/aspectj/ajde/AsmDeclarationsTest.java View File

@@ -55,7 +55,7 @@ public class AsmDeclarationsTest extends AjdeTestCase {
assertNotNull(decErrNode);
assertEquals(decErrNode.toLabelString(), label);
String decWarnMessage = "declare warning: \"Illegal construct..\"";
String decWarnMessage = "declare warning: \"Illegal call.\"";
IProgramElement decWarnNode = model.findElementForSignature(aspect, IProgramElement.Kind.DECLARE_WARNING, "declare warning");
assertNotNull(decWarnNode);
assertEquals(decWarnNode.toLabelString(), decWarnMessage);

+ 27
- 0
ajde/testsrc/org/aspectj/ajde/AsmRelationshipsTest.java View File

@@ -24,6 +24,11 @@ public class AsmRelationshipsTest extends AjdeTestCase {
public AsmRelationshipsTest(String name) {
super(name);
}

public void testDeclareWarningAndError() {
checkDeclareMapping("DeclareCoverage", "Point", "declare warning: \"Illegal call.\"",
"method-call(void Point.setX(int))", "matched by", "matches declare", IProgramElement.Kind.DECLARE_WARNING);
}
public void testInterTypeDeclarations() {
checkInterTypeMapping("InterTypeDecCoverage", "Point", "Point.xxx", "Point",
@@ -41,6 +46,28 @@ public class AsmRelationshipsTest extends AjdeTestCase {
"field-set(int Point.x)", "advises");
}

private void checkDeclareMapping(String fromType, String toType, String from, String to,
String forwardRelName, String backRelName, IProgramElement.Kind kind) {
IProgramElement aspect = AsmManager.getDefault().getHierarchy().findElementForType(null, fromType);
assertNotNull(aspect);
String beforeExec = from;
IProgramElement beforeExecNode = manager.getHierarchy().findElementForLabel(aspect, kind, beforeExec);
assertNotNull(beforeExecNode);
IRelationship rel = manager.getRelationshipMap().get(beforeExecNode, IRelationship.Kind.DECLARE, forwardRelName);
String handle = (String)rel.getTargets().get(0);
assertEquals(manager.getHierarchy().findElementForHandle(handle).toString(), to);

IProgramElement clazz = AsmManager.getDefault().getHierarchy().findElementForType(null, toType);
assertNotNull(clazz);
String set = to;
IProgramElement setNode = manager.getHierarchy().findElementForLabel(clazz, IProgramElement.Kind.CODE, set);
assertNotNull(setNode);
IRelationship rel2 = manager.getRelationshipMap().get(setNode, IRelationship.Kind.DECLARE, backRelName);
String handle2 = (String)rel2.getTargets().get(0);
assertEquals(manager.getHierarchy().findElementForHandle(handle2).toString(), from);
}
private void checkUniDirectionalMapping(String fromType, String toType, String from,
String to, String relName) {

+ 0
- 1
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/lookup/AsmInterTypeRelationshipProvider.java View File

@@ -53,7 +53,6 @@ public class AsmInterTypeRelationshipProvider {
onType.getSourceLocation().getLine(),
onType.getSourceLocation().getColumn());
// System.err.println(">> putting: " + sourceHandle + ", to " + targetHandle);
IRelationshipMap mapper = AsmManager.getDefault().getRelationshipMap();
if (sourceHandle != null && targetHandle != null) {
IRelationship foreward = mapper.get(sourceHandle, IRelationship.Kind.DECLARE_INTER_TYPE, INTER_TYPE_DECLARES);

weaver/src/org/aspectj/weaver/AsmAdviceRelationshipProvider.java → weaver/src/org/aspectj/weaver/AsmRelationshipProvider.java View File

@@ -13,24 +13,47 @@

package org.aspectj.weaver;

import java.util.*;
import java.util.ArrayList;
import java.util.Iterator;

import org.aspectj.asm.*;
import org.aspectj.asm.internal.ProgramElement;
import org.aspectj.bridge.*;
import org.aspectj.bridge.ISourceLocation;
import org.aspectj.bridge.SourceLocation;

public class AsmAdviceRelationshipProvider {
public class AsmRelationshipProvider {
public static final String ADVISES = "advises";
public static final String ADVISED_BY = "advised by";
public static final String DECLARES_ON = "declares on";
public static final String DECLAREDY_BY = "declared by";
public static final String MATCHED_BY = "matched by";
public static final String MATCHES_DECLARE = "matches declare";

public static void checkerMunger(IHierarchy model, Shadow shadow) {
// System.err.println("> " + shadow.getThisVar() + " to " + shadow.getTargetVar());
public static void checkerMunger(IHierarchy model, Shadow shadow, Checker checker) {
if (shadow.getSourceLocation() == null || checker == null) return;
String sourceHandle = ProgramElement.createHandleIdentifier(
checker.getSourceLocation().getSourceFile(),
checker.getSourceLocation().getLine(),
checker.getSourceLocation().getColumn());
String targetHandle = ProgramElement.createHandleIdentifier(
shadow.getSourceLocation().getSourceFile(),
shadow.getSourceLocation().getLine(),
shadow.getSourceLocation().getColumn());

IRelationshipMap mapper = AsmManager.getDefault().getRelationshipMap();
if (sourceHandle != null && targetHandle != null) {
IRelationship foreward = mapper.get(sourceHandle, IRelationship.Kind.DECLARE, MATCHED_BY);
foreward.getTargets().add(targetHandle);
IRelationship back = mapper.get(targetHandle, IRelationship.Kind.DECLARE, MATCHES_DECLARE);
back.getTargets().add(sourceHandle);
}
}
public static void nodeMunger(IHierarchy model, Shadow shadow, ShadowMunger munger) {
public static void adviceMunger(IHierarchy model, Shadow shadow, ShadowMunger munger) {
if (munger instanceof Advice) {
Advice advice = (Advice)munger;
if (advice.getKind().isPerEntry() || advice.getKind().isCflow()) {

+ 1
- 1
weaver/src/org/aspectj/weaver/Shadow.java View File

@@ -341,7 +341,7 @@ public abstract class Shadow {
munger.implementOn(this);
if (world.getModel() != null) {
//System.err.println("munger: " + munger + " on " + this);
AsmAdviceRelationshipProvider.nodeMunger(world.getModel(), this, munger);
AsmRelationshipProvider.adviceMunger(world.getModel(), this, munger);
}
}
}

Loading…
Cancel
Save