}
+ public void doSupertypesFirst(ReferenceBinding rb,Collection yetToProcess) {
+ if (rb instanceof SourceTypeBinding) {
+ if (yetToProcess.contains(rb)) {
+ collectAllITDsAndDeclares((SourceTypeBinding)rb, yetToProcess);
+ }
+ } else if (rb instanceof ParameterizedTypeBinding) {
+ // If its a PTB we need to pull the SourceTypeBinding out of it.
+ ParameterizedTypeBinding ptb = (ParameterizedTypeBinding)rb;
+ if (ptb.type instanceof SourceTypeBinding && yetToProcess.contains(ptb.type)) {
+ collectAllITDsAndDeclares((SourceTypeBinding)ptb.type, yetToProcess);
+ }
+ }
+ }
/**
* Find all the ITDs and Declares, but it is important we do this from the supertypes
* down to the subtypes.
private void collectAllITDsAndDeclares(SourceTypeBinding sourceType, Collection yetToProcess) {
// Look at the supertype first
ContextToken tok = CompilationAndWeavingContext.enteringPhase(CompilationAndWeavingContext.COLLECTING_ITDS_AND_DECLARES, sourceType.sourceName);
- ReferenceBinding superType = sourceType.superclass();
- if (superType instanceof SourceTypeBinding) {
- if (yetToProcess.contains(superType)) {
- collectAllITDsAndDeclares((SourceTypeBinding)superType, yetToProcess);
- }
- } else if (superType instanceof ParameterizedTypeBinding) {
- // If its a PTB we need to pull the SourceTypeBinding out of it.
- ParameterizedTypeBinding ptb = (ParameterizedTypeBinding)superType;
- if (ptb.type instanceof SourceTypeBinding && yetToProcess.contains(ptb.type)) {
- collectAllITDsAndDeclares((SourceTypeBinding)ptb.type, yetToProcess);
- }
- }
+
+ // look out our direct supertype
+ doSupertypesFirst(sourceType.superclass(),yetToProcess);
+
+ // now check our membertypes (pr119570)
+ ReferenceBinding[] memberTypes = sourceType.memberTypes;
+ for (int i = 0, length = memberTypes.length; i < length; i++) {
+ SourceTypeBinding rb = (SourceTypeBinding)memberTypes[i];
+ if (!rb.superclass().equals(sourceType))
+ doSupertypesFirst(rb.superclass(),yetToProcess);
+ }
+
buildInterTypeAndPerClause(sourceType.scope);
addCrosscuttingStructures(sourceType.scope);
yetToProcess.remove(sourceType);
// unneeded declare-parents duplicates one in NodeImpl
// when here, get spurious error message
// when commented out, d-p fails and get compiler error at 1) above
- declare parents : Tag implements INode<Tag,Tag>;
+// declare parents : Tag implements INode<Tag,Tag>;
}
-}
\ No newline at end of file
+}
public void testCunningDeclareParents_pr92311() { runTest("cunning declare parents");}
public void testGenericITDsAndAbstractMethodError_pr102357() { runTest("generic itds and abstract method error");}
*/
+ //public void testIncorrectSignatureMatchingWithExceptions_pr119749() { runTest("incorrect exception signature matching");}
public void testGeneratingCodeForAnOldRuntime_pr116679_1() { runTest("generating code for a 1.2.1 runtime - 1");}
public void testGeneratingCodeForAnOldRuntime_pr116679_2() { runTest("generating code for a 1.2.1 runtime - 2");}
public void testAmbiguousMethod_pr118599_1() { runTest("ambiguous method when binary weaving - 1");}
public void testBadDecp_pr110788_2() { runTest("bad generic decp - 2");}
public void testBadDecp_pr110788_3() { runTest("bad generic decp - 3");}
public void testBadDecp_pr110788_4() { runTest("bad generic decp - 4");}
- public void testSpuriousOverrideMethodWarning_pr119570() { runTest("spurious override method warning");}
+ public void testSpuriousOverrideMethodWarning_pr119570_1() { runTest("spurious override method warning");}
+ public void testSpuriousOverrideMethodWarning_pr119570_2() { runTest("spurious override method warning - 2");}
public void testBrokenSwitch_pr117854() { runTest("broken switch transform");}
public void testVarargsITD_pr110906() { runTest("ITD varargs problem");}
public void testBadRenderer_pr86903() { runTest("bcelrenderer bad");}
<ajc-test dir="bugs150/pr119570" pr="119570" title="spurious override method warning">
<compile files="NodeImpl.java,INode.java,ParameterizedDP.java" options="-1.5"/>
<run class="bugs.ParameterizedDP"/>
+ </ajc-test>
+
+ <ajc-test dir="bugs150/pr119570" pr="119570" title="spurious override method warning - 2">
+ <compile files="ParameterizedDP.java,NodeImpl.java,INode.java" options="-1.5"/>
+ <run class="bugs.ParameterizedDP"/>
</ajc-test>
<ajc-test dir="bugs150/pr119210" pr="119210" title="autoboxing around advice - 1">
<run class="BrokenSwitch"/>
</ajc-test>
+ <ajc-test dir="bugs150/pr119749" pr="119749" title="incorrect exception signature matching">
+ <compile files="InheritedThrows.java" options="">
+ <message kind="warning" line="19" text="one"/>
+ <message kind="warning" line="27" text="one"/>
+ </compile>
+ </ajc-test>
+
<ajc-test dir="bugs150/pr118599" pr="118599" title="ambiguous method when binary weaving - 1">
<!-- separate compilation was failing -->
<compile files="Attributable.java" outjar="foo.jar" options="-1.5"/>
public void testPr119570() {
initialiseProject("PR119570");
build("PR119570");
- List l = MyTaskListManager.getWarningMessages();
- assertTrue("Should be no warnings, but got "+l,l.size()==0);
+ assertTrue("Should be no errors, but got "+MyTaskListManager.getErrorMessages(),MyTaskListManager.getErrorMessages().size()==0);
}
public void testPr119570_2() {