private void installRequest(RequestContext context) { AdviceKind adviceKind = advice.getKind(); for (final Shadow.Kind kind : Shadow.toSet(context.kinds)) { switch (kind.bit) { case (Shadow.MethodExecutionBit): case (Shadow.MethodCallBit): // If there are no filters at all, it's much more efficient to create single request if (context.thisFilters.isEmpty()) { if (adviceKind == AdviceKind.Before || adviceKind.isCflow()) { addFiltersAndInstall( manager.createMethodMirrorHandlerRequest(), context.thisFilters, kind, context); } if (adviceKind.isAfter()) { addFiltersAndInstall( manager.createMethodMirrorHandlerRequest(), context.thisFilters, kind, context); } if (adviceKind == AdviceKind.Around) { addFiltersAndInstall( manager.createMethodMirrorHandlerRequest(), context.thisFilters, kind, context); } } else { installMethodRequests(kind, context); } break; case (Shadow.ConstructorExecutionBit): case (Shadow.ConstructorCallBit): if (adviceKind == AdviceKind.Before || adviceKind.isCflow()) { addFiltersAndInstall( manager.createConstructorMirrorHandlerRequest(), context.thisFilters, kind, context); } if (adviceKind.isAfter()) { addFiltersAndInstall( manager.createConstructorMirrorHandlerRequest(), context.thisFilters, kind, context); } if (adviceKind == AdviceKind.Around) { addFiltersAndInstall( manager.createConstructorMirrorHandlerRequest(), context.thisFilters, kind, context); } break; case (Shadow.FieldSetBit): case (Shadow.FieldGetBit): installFieldRequests(kind, context); break; case Shadow.SynchronizationLockBit: case Shadow.SynchronizationUnlockBit: installSynchronizationRequests(kind, context); break; case Shadow.AdviceExecutionBit: case Shadow.InitializationBit: case Shadow.PreInitializationBit: case Shadow.ExceptionHandlerBit: world.showMessage(IMessage.WARNING, "Unsupported pointcut kind: " + kind, null, null); break; } } }