/** * If the munger has a declared signature */ public ResolvedMember getDeclaredInterMethodBody(UnresolvedType aspectType, World w) { if (declaredSignature != null) { ResolvedMember rm = declaredSignature.parameterizedWith(null, signature.getDeclaringType().resolve(w), false, getTypeVariableAliases()); return AjcMemberMaker.interMethodBody(rm, aspectType); } else { return AjcMemberMaker.interMethodBody(signature, aspectType); } }
public ResolvedMember getDeclaredInterMethodDispatcher(UnresolvedType aspectType, World w) { if (declaredSignature != null) { ResolvedMember rm = declaredSignature.parameterizedWith(null, signature.getDeclaringType().resolve(w), false, getTypeVariableAliases()); return AjcMemberMaker.interMethodDispatcher(rm, aspectType); } else { return AjcMemberMaker.interMethodDispatcher(signature, aspectType); } }
private void createBridgeIfNecessary(BcelClassWeaver classWeaver, NewMethodTypeMunger munger, ResolvedMember unMangledInterMethod, LazyClassGen classGen) { if (munger.getDeclaredSignature() != null) { boolean needsbridging = false; ResolvedMember mungerSignature = munger.getSignature(); ResolvedMember toBridgeTo = munger.getDeclaredSignature().parameterizedWith(null, mungerSignature.getDeclaringType().resolve(getWorld()), false, munger.getTypeVariableAliases()); if (!toBridgeTo.getReturnType().getErasureSignature().equals(mungerSignature.getReturnType().getErasureSignature())) { needsbridging = true; } UnresolvedType[] originalParams = toBridgeTo.getParameterTypes(); UnresolvedType[] newParams = mungerSignature.getParameterTypes(); for (int ii = 0; ii < originalParams.length; ii++) { if (!originalParams[ii].getErasureSignature().equals(newParams[ii].getErasureSignature())) { needsbridging = true; } } if (needsbridging) { createBridge(classWeaver, unMangledInterMethod, classGen, toBridgeTo); } } }