} | } | ||||
} | } | ||||
boolean shouldSkip = false; | boolean shouldSkip = false; | ||||
for (int j = 0; j < rtx.interTypeMungers.size(); j++) { | for (int j = 0; j < rtx.interTypeMungers.size(); j++) { | ||||
ConcreteTypeMunger munger = (ConcreteTypeMunger) rtx.interTypeMungers.get(j); | ConcreteTypeMunger munger = (ConcreteTypeMunger) rtx.interTypeMungers.get(j); | ||||
if (munger.getMunger()!=null && munger.getMunger().getKind() == ResolvedTypeMunger.Parent) { | |||||
if (munger.getMunger()!=null && munger.getMunger().getKind() == ResolvedTypeMunger.Parent | |||||
&& ((NewParentTypeMunger)munger.getMunger()).getNewParent().equals(iface) // pr171953 | |||||
) { | |||||
shouldSkip = true; | shouldSkip = true; | ||||
break; | break; | ||||
} | } |
extraParamOffset += thisJoinPointVar.getType().getSize(); | extraParamOffset += thisJoinPointVar.getType().getSize(); | ||||
} | } | ||||
Type[] adviceParameterTypes = adviceMethod.getArgumentTypes(); | |||||
// We use the munger signature here because it allows for any parameterization of the mungers pointcut that | |||||
// may have occurred ie. if the pointcut is p(T t) in the super aspect and that has become p(Foo t) in the sub aspect | |||||
// then here the munger signature will have 'Foo' as an argument in it whilst the adviceMethod argument type will be 'Object' - since | |||||
// it represents the advice method in the superaspect which uses the erasure of the type variable p(Object t) - see pr174449. | |||||
Type[] adviceParameterTypes = | |||||
BcelWorld.makeBcelTypes(munger.getSignature().getParameterTypes()); | |||||
// adviceMethod.getArgumentTypes(); | |||||
adviceMethod.getArgumentTypes(); // forces initialization ... dont like this but seems to be required for some tests to pass, I think that means | |||||
// there is a LazyMethodGen method that is not correctly setup to call initialize() when it is invoked - but I dont have | |||||
// time right now to discover which | |||||
Type[] extractedMethodParameterTypes = extractedMethod.getArgumentTypes(); | Type[] extractedMethodParameterTypes = extractedMethod.getArgumentTypes(); | ||||
Type[] parameterTypes = | Type[] parameterTypes = | ||||
new Type[extractedMethodParameterTypes.length | new Type[extractedMethodParameterTypes.length |
return true; | return true; | ||||
//throw new BCException("no match for " + member + " in " + gen); | //throw new BCException("no match for " + member + " in " + gen); | ||||
} else if (member.getKind() == Member.STATIC_INITIALIZATION) { | } else if (member.getKind() == Member.STATIC_INITIALIZATION) { | ||||
gen.forcePublic(); | |||||
return true; | |||||
return gen.forcePublic(); | |||||
} else { | } else { | ||||
throw new RuntimeException("unimplemented"); | throw new RuntimeException("unimplemented"); | ||||
} | } |
} | } | ||||
public void forcePublic() { | |||||
public boolean forcePublic() { | |||||
if (myGen.isPublic()) return false; | |||||
myGen.setAccessFlags(Utility.makePublic(myGen.getAccessFlags())); | myGen.setAccessFlags(Utility.makePublic(myGen.getAccessFlags())); | ||||
return true; | |||||
} | } | ||||