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;
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 " +
}
return resolveVisible(name);
+ */
}
<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>
--- /dev/null
+// 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";
+ }
+ }
+
+}
--- /dev/null
+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;
+ }
+}
--- /dev/null
+package sub;
+
+public aspect ExecutionMonitor {
+ public interface MonitoredItem {
+ int getCount(String eventType, String eventName);
+ }
+
+ public int MonitoredItem.getCount(String eventType, String eventName) {
+ return 0;
+ }
+}
--- /dev/null
+package sub;\r
+\r
+public abstract aspect ObserverProtocol { \r
+ protected interface Observer { }\r
+ public void add(Observer o) {}\r
+}\r
<!DOCTYPE suite SYSTEM "../tests/ajcTestSuite.dtd">
<suite>
-
-
<!--
+/*
+ * 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");
}
}