package jasext.jhplotserver;


import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
import java.util.Set;

import javax.tools.DiagnosticCollector;
import javax.tools.JavaFileObject;

/**
 * An exception thrown when trying to compile Java programs from strings
 * containing source.
 * 
 * @author David J. Biesack
 */
public class CharSequenceCompilerException extends Exception {
   private static final long serialVersionUID = 1L;
   /**
    * The fully qualified name of the class that was being compiled.
    */
   private Set classNames;
   // Unfortunately, Diagnostic and Collector are not Serializable, so we can't
   // serialize the collector.
   transient private DiagnosticCollector diagnostics;

   public CharSequenceCompilerException(String message,
         Set qualifiedClassNames, Throwable cause,
         DiagnosticCollector diagnostics) {
      super(message, cause);
      setClassNames(qualifiedClassNames);
      setDiagnostics(diagnostics);
   }

   public CharSequenceCompilerException(String message,
         Set qualifiedClassNames,
         DiagnosticCollector diagnostics) {
      super(message);
      setClassNames(qualifiedClassNames);
      setDiagnostics(diagnostics);
   }

   public CharSequenceCompilerException(Set qualifiedClassNames,
         Throwable cause, DiagnosticCollector diagnostics) {
      super(cause);
      setClassNames(qualifiedClassNames);
      setDiagnostics(diagnostics);
   }

   private void setClassNames(Set qualifiedClassNames) {
      // create a new HashSet because the set passed in may not
      // be Serializable. For example, Map.keySet() returns a non-Serializable
      // set.
      classNames = new HashSet(qualifiedClassNames);
   }

   private void setDiagnostics(DiagnosticCollector diagnostics) {
      this.diagnostics = diagnostics;
   }

   /**
    * Gets the diagnostics collected by this exception.
    * 
    * @return this exception's diagnostics
    */
   public DiagnosticCollector getDiagnostics() {
      return diagnostics;
   }

   /**
    * @return The name of the classes whose compilation caused the compile
    *         exception
    */
   public Collection getClassNames() {
      return Collections.unmodifiableSet(classNames);
   }
}

 

Ads help maintain this website.