Explorar el Código

Fix and test for PR90827: StackOverflow while weaving enum/annotation with Enum/Annotation name (Patch from Andrew Huff)

tags/PRE_ANDY
aclement hace 19 años
padre
commit
2c4f9d292a

+ 6
- 0
tests/bugs150/PR90827.aj Ver fichero

@@ -0,0 +1,6 @@
// "enum called Enum, annotation called Annotation, etc"

enum Enum {A,B,C}
@interface Annotation {}
aspect Aspect{}
class Class{}

+ 4
- 0
tests/src/org/aspectj/systemtest/ajc150/Ajc150Tests.java Ver fichero

@@ -157,6 +157,10 @@ public class Ajc150Tests extends org.aspectj.testing.XMLBasedAjcTestCase {
runTest("pertypewithin({interface}) illegal field modifier");
}
public void testEnumCalledEnumEtc() {
runTest("enum called Enum, annotation called Annotation, etc");
}
// helper methods.....
public SyntheticRepository createRepos(File cpentry) {

+ 19
- 18
weaver/src/org/aspectj/weaver/bcel/BcelWeaver.java Ver fichero

@@ -1033,24 +1033,25 @@ public class BcelWeaver implements IWeaver {
* may choose to weave them in either order - but you'll probably have other problems if
* you are supplying partial hierarchies like that !
*/
private void weaveParentsFor(List typesForWeaving,String typeToWeave) {
// Look at the supertype first
ResolvedTypeX rtx = world.resolve(typeToWeave);
ResolvedTypeX superType = rtx.getSuperclass();
if (superType!=null && typesForWeaving.contains(superType.getClassName())) {
weaveParentsFor(typesForWeaving,superType.getClassName());
}
// Then look at the superinterface list
ResolvedTypeX[] interfaceTypes = rtx.getDeclaredInterfaces();
for (int i = 0; i < interfaceTypes.length; i++) {
ResolvedTypeX rtxI = interfaceTypes[i];
if (typesForWeaving.contains(rtxI.getClassName())) {
weaveParentsFor(typesForWeaving,rtxI.getClassName());
}
}
weaveParentTypeMungers(rtx); // Now do this type
typesForWeaving.remove(typeToWeave); // and remove it from the list of those to process
private void weaveParentsFor(List typesForWeaving,String typeToWeave) {
// Look at the supertype first
ResolvedTypeX rtx = world.resolve(typeToWeave);
ResolvedTypeX superType = rtx.getSuperclass();
if (superType!=null && typesForWeaving.contains(superType.getName())) {
weaveParentsFor(typesForWeaving,superType.getName());
}
// Then look at the superinterface list
ResolvedTypeX[] interfaceTypes = rtx.getDeclaredInterfaces();
for (int i = 0; i < interfaceTypes.length; i++) {
ResolvedTypeX rtxI = interfaceTypes[i];
if (typesForWeaving.contains(rtxI.getName())) {
weaveParentsFor(typesForWeaving,rtxI.getName());
}
}
weaveParentTypeMungers(rtx); // Now do this type
typesForWeaving.remove(typeToWeave); // and remove it from the list of those to process
}
public void prepareToProcessReweavableState() {

Cargando…
Cancelar
Guardar