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;
     }
   }
 }