Browse Source

test and fix for

Bugzilla Bug 36046  
   inter-type declaration bug with abstract classes
tags/V1_1_0_RC2
jhugunin 21 years ago
parent
commit
808bae83b3

+ 7
- 0
tests/ajcTests.xml View File

@@ -5768,4 +5768,11 @@
<run class="ConvertToUnchecked"/>
</ajc-test>
<ajc-test dir="bugs/interAbstract"
title="inter-type declaration bug with abstract classes"
pr="36046">
<compile files="Driver.java"/>
<run class="Driver"/>
</ajc-test>
</suite>

+ 35
- 0
tests/bugs/interAbstract/Driver.java View File

@@ -0,0 +1,35 @@
//Bugzilla Bug 36046
// inter-type declaration bug with abstract classes

public class Driver {
public static void main(String args[]) {
Derived generator = new Derived();
System.out.println(generator.getExecutions("processEvents"));
}
static aspect MonitorBase {
declare parents: Base implements ExecutionMonitor.MonitoredItem;
}
}

class Derived extends Base {
public String getName() {
return null;
}
}

abstract class Base {
abstract public String getName();
}

aspect ExecutionMonitor {
/** marker interface to indicate the execution monitor should track calls
and executions on this class. */
public interface MonitoredItem {
int getExecutions(String methodName);
}

/** a Map of events to mutable integers */
public int MonitoredItem.getExecutions(String methodName) {
return 0;
}
}

+ 1
- 5
tests/jimTests.xml View File

@@ -1,10 +1,6 @@
<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd">
<suite>
<ajc-test dir="new" title="new around construct"
keywords="from-resolved_10x">
<compile files="AroundAdvice.java"/>
<run class="AroundAdvice"/>
</ajc-test>

<!--
<ajc-test dir="new" pr="885"

+ 6
- 1
weaver/src/org/aspectj/weaver/bcel/BcelClassWeaver.java View File

@@ -220,7 +220,12 @@ class BcelClassWeaver implements IClassWeaver {

private boolean alreadyDefined(LazyClassGen clazz, LazyMethodGen mg) {
for (Iterator i = clazz.getMethodGens().iterator(); i.hasNext(); ) {
if (signaturesMatch(mg, (LazyMethodGen)i.next())) {
LazyMethodGen existing = (LazyMethodGen)i.next();
if (signaturesMatch(mg, existing)) {
if (!mg.isAbstract() && existing.isAbstract()) {
i.remove();
return false;
}
return true;
}
}

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

@@ -147,7 +147,7 @@ public final class LazyClassGen {
}

public List getMethodGens() {
return Collections.unmodifiableList(methodGens);
return methodGens; //???Collections.unmodifiableList(methodGens);

}


+ 7
- 3
weaver/src/org/aspectj/weaver/bcel/LazyMethodGen.java View File

@@ -594,9 +594,13 @@ public final class LazyMethodGen {
return prevLine;
}

public boolean isStatic() {
return Modifier.isStatic(getAccessFlags());
}
public boolean isStatic() {
return Modifier.isStatic(getAccessFlags());
}
public boolean isAbstract() {
return Modifier.isAbstract(getAccessFlags());
}
public void addExceptionHandler(
InstructionHandle start,

Loading…
Cancel
Save