Package org.aspectj.bridge

Examples of org.aspectj.bridge.Message


    if (munger.getMunger() != null && (munger.getMunger() instanceof NewMethodTypeMunger)) {
      ResolvedMember itdMember = munger.getSignature();
      ResolvedType onType = itdMember.getDeclaringType().resolve(world);
      if (onType.isInterface() && itdMember.isAbstract() && !itdMember.isPublic()) {
        world.getMessageHandler().handleMessage(
            new Message(WeaverMessages.format(WeaverMessages.ITD_ABSTRACT_MUST_BE_PUBLIC_ON_INTERFACE,
                munger.getSignature(), onType), "", Message.ERROR, getSourceLocation(), null,
                new ISourceLocation[] { getMungerLocation(munger) }));
        return true;
      }
    }
View Full Code Here


                    sb.append("on the same target type.  Please recompile at least one aspect with '-Xset:itdVersion=1'.");
                    sb.append(" Aspects involved: " + munger.getAspectType().getName() + " and "
                        + typeMunger.getAspectType().getName() + ".");
                    sb.append(" Field is named '" + existing.getSignature().getName() + "'");
                    getWorld().getMessageHandler().handleMessage(
                        new Message(sb.toString(), getSourceLocation(), true));
                    return;
                  }
                }
              }
            }
View Full Code Here

                  // this isn't quite right really... as I think the errors should only be recorded against
                  // what is currently being processed or they may get lost or reported twice

                  // report error on the aspect
                  getWorld().getMessageHandler().handleMessage(new Message(msg, typeTransformerLocation, true));

                  // report error on the affected type, if we can
                  if (existingMemberLocation != null) {
                    getWorld().getMessageHandler()
                        .handleMessage(new Message(msg, existingMemberLocation, true));
                  }
                  return true; // clash - so ignore this itd
                }
              }
            }
View Full Code Here

        String constantValue = ((ConstantUtf8) constant).getValue();
        if (constantValue.length() > 28 && constantValue.charAt(1) == 'o') {
          if (constantValue.startsWith("Lorg/aspectj/lang/annotation")) {
            containsAnnotationClassReference = true;
            if ("Lorg/aspectj/lang/annotation/DeclareAnnotation;".equals(constantValue)) {
              msgHandler.handleMessage(new Message(
                  "Found @DeclareAnnotation while current release does not support it (see '" + type.getName()
                      + "')", IMessage.WARNING, null, type.getSourceLocation()));
            }
            if ("Lorg/aspectj/lang/annotation/Pointcut;".equals(constantValue)) {
              containsPointcut = true;
            }
          }

        }
      }
    }
    if (!containsAnnotationClassReference) {
      return NO_ATTRIBUTES;
    }

    AjAttributeStruct struct = new AjAttributeStruct(type, context, msgHandler);
    Attribute[] attributes = javaClass.getAttributes();
    boolean hasAtAspectAnnotation = false;
    boolean hasAtPrecedenceAnnotation = false;

    for (int i = 0; i < attributes.length; i++) {
      Attribute attribute = attributes[i];
      if (acceptAttribute(attribute)) {
        RuntimeAnnos rvs = (RuntimeAnnos) attribute;
        // we don't need to look for several attribute occurrences since
        // it cannot happen as per JSR175
        if (!isCodeStyleAspect && !javaClass.isInterface()) {
          hasAtAspectAnnotation = handleAspectAnnotation(rvs, struct);
          // TODO AV - if put outside the if isCodeStyleAspect then we
          // would enable mix style
          hasAtPrecedenceAnnotation = handlePrecedenceAnnotation(rvs, struct);
        }
        // there can only be one RuntimeVisible bytecode attribute
        break;
      }
    }

    // basic semantic check
    if (hasAtPrecedenceAnnotation && !hasAtAspectAnnotation) {
      msgHandler.handleMessage(new Message("Found @DeclarePrecedence on a non @Aspect type '" + type.getName() + "'",
          IMessage.WARNING, null, type.getSourceLocation()));
      // bypass what we have read
      return NO_ATTRIBUTES;
    }

    // the following block will not detect @Pointcut in non @Aspect types
    // for optimization purpose
    if (!(hasAtAspectAnnotation || isCodeStyleAspect) && !containsPointcut) {
      return NO_ATTRIBUTES;
    }

    // FIXME AV - turn on when ajcMightHaveAspect
    // if (hasAtAspectAnnotation && type.isInterface()) {
    // msgHandler.handleMessage(
    // new Message(
    // "Found @Aspect on an interface type '" + type.getName() + "'",
    // IMessage.WARNING,
    // null,
    // type.getSourceLocation()
    // )
    // );
    // // bypass what we have read
    // return EMPTY_LIST;
    // }

    // semantic check: @Aspect must be public
    // FIXME AV - do we really want to enforce that?
    // if (hasAtAspectAnnotation && !javaClass.isPublic()) {
    // msgHandler.handleMessage(
    // new Message(
    // "Found @Aspect annotation on a non public class '" +
    // javaClass.getClassName() + "'",
    // IMessage.ERROR,
    // null,
    // type.getSourceLocation()
    // )
    // );
    // return EMPTY_LIST;
    // }

    // code style pointcuts are class attributes
    // we need to gather the @AJ pointcut right now and not at method level
    // annotation extraction time
    // in order to be able to resolve the pointcut references later on
    // we don't need to look in super class, the pointcut reference in the
    // grammar will do it

    for (int i = 0; i < javaClass.getMethods().length; i++) {
      Method method = javaClass.getMethods()[i];
      if (method.getName().startsWith(NameMangler.PREFIX)) {
        continue; // already dealt with by ajc...
      }
      // FIXME alex optimize, this method struct will gets recreated for
      // advice extraction
      AjAttributeMethodStruct mstruct = null;
      boolean processedPointcut = false;
      Attribute[] mattributes = method.getAttributes();
      for (int j = 0; j < mattributes.length; j++) {
        Attribute mattribute = mattributes[j];
        if (acceptAttribute(mattribute)) {
          // TODO speed all this nonsense up rather than looking
          // through all the annotations every time
          // same for fields
          mstruct = new AjAttributeMethodStruct(method, null, type, context, msgHandler);
          processedPointcut = handlePointcutAnnotation((RuntimeAnnos) mattribute, mstruct);
          if (!processedPointcut) {
            processedPointcut = handleDeclareMixinAnnotation((RuntimeAnnos) mattribute, mstruct);
          }
          // there can only be one RuntimeVisible bytecode attribute
          break;
        }
      }
      if (processedPointcut) {
        // FIXME asc should check we aren't adding multiple versions...
        // will do once I get the tests passing again...
        struct.ajAttributes.add(new AjAttribute.WeaverVersionInfo());
        struct.ajAttributes.addAll(mstruct.ajAttributes);
      }
    }

    // code style declare error / warning / implements / parents are field
    // attributes
    Field[] fs = javaClass.getFields();
    for (int i = 0; i < fs.length; i++) {
      Field field = fs[i];
      if (field.getName().startsWith(NameMangler.PREFIX)) {
        continue; // already dealt with by ajc...
      }
      // FIXME alex optimize, this method struct will gets recreated for
      // advice extraction
      AjAttributeFieldStruct fstruct = new AjAttributeFieldStruct(field, null, type, context, msgHandler);
      Attribute[] fattributes = field.getAttributes();

      for (int j = 0; j < fattributes.length; j++) {
        Attribute fattribute = fattributes[j];
        if (acceptAttribute(fattribute)) {
          RuntimeAnnos frvs = (RuntimeAnnos) fattribute;
          if (handleDeclareErrorOrWarningAnnotation(model, frvs, fstruct)
              || handleDeclareParentsAnnotation(frvs, fstruct)) {
            // semantic check - must be in an @Aspect [remove if
            // previous block bypassed in advance]
            if (!type.isAnnotationStyleAspect() && !isCodeStyleAspect) {
              msgHandler.handleMessage(new Message("Found @AspectJ annotations in a non @Aspect type '"
                  + type.getName() + "'", IMessage.WARNING, null, type.getSourceLocation()));
              // go ahead
            }
          }
          // there can only be one RuntimeVisible bytecode attribute
View Full Code Here

          hasAtAspectJAnnotation = hasAtAspectJAnnotation || handleAroundAnnotation(rvs, struct, preResolvedPointcut);
          // there can only be one RuntimeVisible bytecode attribute
          break;
        }
      } catch (ReturningFormalNotDeclaredInAdviceSignatureException e) {
        msgHandler.handleMessage(new Message(WeaverMessages.format(WeaverMessages.RETURNING_FORMAL_NOT_DECLARED_IN_ADVICE,
            e.getFormalName()), IMessage.ERROR, null, bMethod.getSourceLocation()));
      } catch (ThrownFormalNotDeclaredInAdviceSignatureException e) {
        msgHandler.handleMessage(new Message(WeaverMessages.format(WeaverMessages.THROWN_FORMAL_NOT_DECLARED_IN_ADVICE,
            e.getFormalName()), IMessage.ERROR, null, bMethod.getSourceLocation()));
      }
    }
    hasAtAspectJAnnotation = hasAtAspectJAnnotation || hasAtAspectJAnnotationMustReturnVoid;

    // semantic check - must be in an @Aspect [remove if previous block
    // bypassed in advance]
    if (hasAtAspectJAnnotation && !type.isAspect()) { // isAnnotationStyleAspect())
      // {
      msgHandler.handleMessage(new Message("Found @AspectJ annotations in a non @Aspect type '" + type.getName() + "'",
          IMessage.WARNING, null, type.getSourceLocation()));
      // go ahead
    }
    // semantic check - advice must be public
    if (hasAtAspectJAnnotation && !struct.method.isPublic()) {
      msgHandler.handleMessage(new Message("Found @AspectJ annotation on a non public advice '"
          + methodToString(struct.method) + "'", IMessage.ERROR, null, type.getSourceLocation()));
      // go ahead
    }

    // semantic check - advice must not be static
    if (hasAtAspectJAnnotation && struct.method.isStatic()) {
      msgHandler.handleMessage(MessageUtil.error("Advice cannot be declared static '" + methodToString(struct.method) + "'",
          type.getSourceLocation()));
      // new Message(
      // "Advice cannot be declared static '" +
      // methodToString(struct.method) + "'",
      // IMessage.ERROR,
      // null,
      // type.getSourceLocation()
      // )
      // );
      // go ahead
    }

    // semantic check for non around advice must return void
    if (hasAtAspectJAnnotationMustReturnVoid && !Type.VOID.equals(struct.method.getReturnType())) {
      msgHandler.handleMessage(new Message("Found @AspectJ annotation on a non around advice not returning void '"
          + methodToString(struct.method) + "'", IMessage.ERROR, null, type.getSourceLocation()));
      // go ahead
    }

    return struct.ajAttributes;
View Full Code Here

   * @param message
   * @param location
   */
  private static void reportError(String message, AjAttributeStruct location) {
    if (!location.handler.isIgnoring(IMessage.ERROR)) {
      location.handler.handleMessage(new Message(message, location.enclosingType.getSourceLocation(), true));
    }
  }
View Full Code Here

   * @param message
   * @param location
   */
  private static void reportWarning(String message, AjAttributeStruct location) {
    if (!location.handler.isIgnoring(IMessage.WARNING)) {
      location.handler.handleMessage(new Message(message, location.enclosingType.getSourceLocation(), false));
    }
  }
View Full Code Here

  protected boolean warn(String message) {
    return MessageUtil.warn(messageHandler, message);
  }

  protected boolean warn(String message, Throwable th) {
    return messageHandler.handleMessage(new Message(message, IMessage.WARNING, th, null));
  }
View Full Code Here

  protected boolean error(String message) {
    return MessageUtil.error(messageHandler, message);
  }

  protected boolean error(String message, Throwable th) {
    return messageHandler.handleMessage(new Message(message, IMessage.ERROR, th, null));
  }
View Full Code Here

          // ignore for @AJ ITD as munger.getSignature() is the
          // interface method hence abstract
        } else {
          world.getMessageHandler()
              .handleMessage(
                  new Message("must implement abstract inter-type declaration: " + munger.getSignature(), "",
                      IMessage.ERROR, getSourceLocation(), null,
                      new ISourceLocation[] { getMungerLocation(munger) }));
        }
      }
    }
View Full Code Here

TOP

Related Classes of org.aspectj.bridge.Message

Copyright © 2018 www.massapicom. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.