Browse Source

Fix for 38824.

tags/v_preCompileLoopAlteration
acolyer 20 years ago
parent
commit
0071cb4d0f

+ 12
- 14
org.aspectj.ajdt.core/src/org/aspectj/ajdt/internal/compiler/problem/AjProblemReporter.java View File

@@ -144,21 +144,19 @@ public class AjProblemReporter extends ProblemReporter {
// if we implemented this method by an inter-type declaration, then there is no error
//??? be sure this is always right
ResolvedTypeX onTypeX = factory.fromEclipse(type); //abstractMethod.declaringClass);
for (Iterator i = onTypeX.getInterTypeMungers().iterator(); i.hasNext(); ) {
for (Iterator i = onTypeX.getInterTypeMungersIncludingSupers().iterator(); i.hasNext(); ) {
ConcreteTypeMunger m = (ConcreteTypeMunger)i.next();
if (m.matches(onTypeX)) {
ResolvedMember sig = m.getSignature();
if (!Modifier.isAbstract(sig.getModifiers())) {
if (ResolvedTypeX
.matches(
AjcMemberMaker.interMethod(
sig,
m.getAspectType(),
sig.getDeclaringType().isInterface(
factory.getWorld())),
EclipseFactory.makeResolvedMember(abstractMethod))) {
return;
}
ResolvedMember sig = m.getSignature();
if (!Modifier.isAbstract(sig.getModifiers())) {
if (ResolvedTypeX
.matches(
AjcMemberMaker.interMethod(
sig,
m.getAspectType(),
sig.getDeclaringType().isInterface(
factory.getWorld())),
EclipseFactory.makeResolvedMember(abstractMethod))) {
return;
}
}
}

+ 6
- 0
tests/ajcTests.xml View File

@@ -7105,5 +7105,11 @@
</compile>
<run class="ErroneousExceptionConversion1"/>
</ajc-test>

<ajc-test dir="bugs" pr="38824"
title="Anomalous handling of inter-type declarations to abstract base classes in aspectj 1.1">
<compile files="AbstractBaseAndInterTypeInterface.java">
</compile>
</ajc-test>
</suite>

+ 30
- 0
tests/bugs/AbstractBaseAndInterTypeInterface.java View File

@@ -0,0 +1,30 @@
// pr 38824


public class AbstractBaseAndInterTypeInterface {

interface I
{
public void foo();
}

/*abstract*/ class A implements I
{
}

class B extends A
{
}

private static aspect Test
{
protected interface ITest {};

declare parents: A implements ITest;

public void ITest.foo()
{
System.out.println("Hi");
}
}
}

+ 5
- 5
weaver/src/org/aspectj/weaver/ResolvedTypeX.java View File

@@ -930,17 +930,17 @@ public abstract class ResolvedTypeX extends TypeX {
return interTypeMungers;
}
private List getInterTypeMungersIncludingSupers() {
/**
* ??? This method is O(N*M) where N = number of methods and M is number of
* inter-type declarations in my super
*/
public List getInterTypeMungersIncludingSupers() {
ArrayList ret = new ArrayList();
collectInterTypeMungers(ret);
return ret;
}
/**
* ??? This method is O(N*M) where N = number of methods and M is number of
* inter-type declarations in my super
*/
private void collectInterTypeMungers(List collector) {
for (Iterator iter = getDirectSupertypes(); iter.hasNext();) {
ResolvedTypeX superType = (ResolvedTypeX) iter.next();

Loading…
Cancel
Save