Logo Search packages:      
Sourcecode: aspectj version File versions

PinpointingMessageHandler.java

/* *******************************************************************
 * 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.
 */
00030 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)
       */
00041       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...";
      }
    }

}

Generated by  Doxygen 1.6.0   Back to index