Package org.aspectj.bridge.context

Source Code of org.aspectj.bridge.context.PinpointingMessageHandler$MessageIssued

/* *******************************************************************
* Copyright (c) 2005 Contributors.
* All rights reserved.
* This program and the accompanying materials are made available
* under the terms of the Eclipse Public License v1.0
* which accompanies this distribution and is available at
* http://eclipse.org/legal/epl-v10.html
* Contributors:
*   Adrian Colyer      Initial implementation
* ******************************************************************/
package org.aspectj.bridge.context;

import java.io.PrintWriter;
import java.io.StringWriter;
import java.util.List;

import org.aspectj.bridge.AbortException;
import org.aspectj.bridge.IMessage;
import org.aspectj.bridge.IMessageHandler;
import org.aspectj.bridge.ISourceLocation;
import org.aspectj.bridge.IMessage.Kind;

/**
* @author colyer
* Facade for an IMessageHandler
* Extends message with details of exactly what the compiler / weaver was doing at the
* time. Use the -Xdev:Pinpoint option to turn this facility on.
*/
public class PinpointingMessageHandler implements IMessageHandler {

  private IMessageHandler delegate;
 
  public PinpointingMessageHandler(IMessageHandler delegate) {
    this.delegate = delegate;
  }

  /* (non-Javadoc)
   * @see org.aspectj.bridge.IMessageHandler#handleMessage(org.aspectj.bridge.IMessage)
   */
  public boolean handleMessage(IMessage message) throws AbortException {
    if (!isIgnoring(message.getKind())) {
      MessageIssued ex = new MessageIssued();
      ex.fillInStackTrace();
      StringWriter sw = new StringWriter();
      ex.printStackTrace(new PrintWriter(sw));
      StringBuffer sb = new StringBuffer();
      sb.append(CompilationAndWeavingContext.getCurrentContext());
      sb.append(sw.toString());
      IMessage pinpointedMessage = new PinpointedMessage(message,sb.toString());
      return delegate.handleMessage(pinpointedMessage);
    } else {
      return delegate.handleMessage(message);
    }
  }

  /* (non-Javadoc)
   * @see org.aspectj.bridge.IMessageHandler#isIgnoring(org.aspectj.bridge.IMessage.Kind)
   */
  public boolean isIgnoring(Kind kind) {
    return delegate.isIgnoring(kind);
  }

  /* (non-Javadoc)
   * @see org.aspectj.bridge.IMessageHandler#dontIgnore(org.aspectj.bridge.IMessage.Kind)
   */
  public void dontIgnore(Kind kind) {
    delegate.dontIgnore(kind);
  }


  /* (non-Javadoc)
   * @see org.aspectj.bridge.IMessageHandler#ignore(org.aspectj.bridge.IMessage.Kind)
   */
  public void ignore(Kind kind) {
    delegate.ignore(kind);
  }
 
  private static class PinpointedMessage implements IMessage {

    private IMessage delegate;
    private String message;
   
    public PinpointedMessage(IMessage delegate, String pinpoint) {
      this.delegate = delegate;
      this.message = delegate.getMessage() + "\n" + pinpoint;
    }
   
    public String getMessage() { return this.message; }
    public Kind getKind() { return delegate.getKind();}
    public boolean isError() { return delegate.isError(); }
    public boolean isWarning() { return delegate.isWarning();}
    public boolean isDebug() { return delegate.isDebug();}
    public boolean isInfo() { return delegate.isInfo();}
    public boolean isAbort() { return delegate.isAbort();}
    public boolean isTaskTag() { return delegate.isTaskTag();}
    public boolean isFailed() { return delegate.isFailed();}
    public boolean getDeclared() { return delegate.getDeclared(); }
    public int getID() { return delegate.getID();}
    public int getSourceStart() { return delegate.getSourceStart();}
    public int getSourceEnd() { return delegate.getSourceEnd();}
    public Throwable getThrown() { return delegate.getThrown();}
    public ISourceLocation getSourceLocation() { return delegate.getSourceLocation();}
    public String getDetails() { return delegate.getDetails();}
    public List getExtraSourceLocations() { return delegate.getExtraSourceLocations();}
  }
 
   private static class MessageIssued extends RuntimeException {
   private static final long serialVersionUID = 1L;

    public String getMessage() {
        return "message issued...";
      }
    }

}
TOP

Related Classes of org.aspectj.bridge.context.PinpointingMessageHandler$MessageIssued

TOP
Copyright © 2018 www.massapi.com. 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.