Browse Source

FIXED: Bugzilla Bug 32421

   can't resolve nested public interfaces 

FIXED: Bugzilla Bug 32399  
   Incorrect binding of protected (marker) interfaces
tags/v1_1_0_RC1
jhugunin 21 years ago
parent
commit
0a175d2d03

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

@@ -24,6 +24,7 @@ import org.aspectj.weaver.IHasPosition;
import org.aspectj.weaver.ResolvedTypeX;
import org.aspectj.weaver.TypeX;
import org.aspectj.weaver.World;
import org.aspectj.weaver.patterns.*;
import org.aspectj.weaver.patterns.FormalBinding;
import org.aspectj.weaver.patterns.IScope;
import org.eclipse.jdt.internal.compiler.lookup.ClassScope;
@@ -60,6 +61,17 @@ public class EclipseScope implements IScope {
public TypeX lookupType(String name, IHasPosition location) {
TypeBinding b = scope.getType(WildTypePattern.splitNames(name));
//FIXME need reasonable error handling...
if (!b.isValidBinding()) {
return ResolvedTypeX.MISSING;
}
//System.err.println("binding: " + b);
// Binding(tokens, bits & RestrictiveFlagMASK, this)
return world.fromBinding(b);
/*
computeImports();
// System.out.println("lookup: " + name + " in " +
@@ -98,6 +110,7 @@ public class EclipseScope implements IScope {
}

return resolveVisible(name);
*/
}

+ 10
- 0
tests/ajcTests.xml View File

@@ -5599,5 +5599,15 @@
<run class="WeaveLocal"/>
</ajc-test>
<ajc-test dir="bugs" pr="32428"
title="can't use pointcuts defined in inner aspects ">
<compile files="InnerPointcut.java"/>
<run class="InnerPointcut"/>
</ajc-test>

<ajc-test dir="bugs/interfaceNames" pr="32421"
title="can't resolve nested public interfaces (also PR#32399)">
<compile files="TransactionTest.java,sub/ExecutionMonitor.java,sub/ObserverProtocol.aj"/>
<run class="TransactionTest"/>
</ajc-test>
</suite>

+ 20
- 0
tests/bugs/InnerPointcut.java View File

@@ -0,0 +1,20 @@
// for Bug#: 32428
import org.aspectj.testing.Tester;


public class InnerPointcut {
public static void main(String[] args) {
Tester.checkEqual(TrackTestCase.note, "ran");
}
pointcut testcutOuter(): within(InnerPointcut);
static aspect TrackTestCase {
static String note = "not run yet";
pointcut testcut() : execution(public void mai*(..));
before() : testcut() && testcutOuter() {
note = "ran";
}
}

}

+ 30
- 0
tests/bugs/interfaceNames/TransactionTest.java View File

@@ -0,0 +1,30 @@
import sub.ExecutionMonitor;
import sub.ObserverProtocol;


public class TransactionTest {
public static void main(String[] args) {
}
static Transaction theTransaction;

private void assertCommitted() {
theTransaction.getCount("method-execution", "commit");
}

static aspect MonitorTest {
declare parents: Transaction implements ExecutionMonitor.MonitoredItem;
}
}

class Transaction {
}

aspect TransactionControl {
void begin() {
CommitObserver.aspectOf().add(this);
}
static aspect CommitObserver extends ObserverProtocol {
declare parents: TransactionControl implements Observer;
}
}

+ 11
- 0
tests/bugs/interfaceNames/sub/ExecutionMonitor.java View File

@@ -0,0 +1,11 @@
package sub;

public aspect ExecutionMonitor {
public interface MonitoredItem {
int getCount(String eventType, String eventName);
}

public int MonitoredItem.getCount(String eventType, String eventName) {
return 0;
}
}

+ 6
- 0
tests/bugs/interfaceNames/sub/ObserverProtocol.aj View File

@@ -0,0 +1,6 @@
package sub;
public abstract aspect ObserverProtocol {
protected interface Observer { }
public void add(Observer o) {}
}

+ 0
- 2
tests/jimTests.xml View File

@@ -1,8 +1,6 @@
<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd">
<suite>


<!--


+ 11
- 0
tests/new/EachObjectInDeepPackage.java View File

@@ -1,9 +1,20 @@
/*
* Modified this test case to reflect the fact that types in the default package
* can only be used in named packages if they are imported.
*
* I believe that according to the 1.1 interpretation of the JLS that this import
* is also disallowed and there is no way to refer to types in the default package
* from a named package.
*/

package the.deep.pkg;

import org.aspectj.testing.Tester;
import EachObjectTarget;

aspect Aspect pertarget(target(EachObjectTarget)) {
before(): call(void foo(..)) {
EachObjectTarget t = null;
Tester.check(true, "Dummy test");
}
}

Loading…
Cancel
Save