package de.unisiegen.gtitool.core.parser.exceptions; import java.util.ArrayList; import de.unisiegen.gtitool.core.entities.Alphabet; import de.unisiegen.gtitool.core.entities.NonterminalSymbol; import de.unisiegen.gtitool.core.entities.NonterminalSymbolSet; import de.unisiegen.gtitool.core.entities.State; import de.unisiegen.gtitool.core.entities.StateSet; import de.unisiegen.gtitool.core.entities.Symbol; import de.unisiegen.gtitool.core.entities.TerminalSymbol; import de.unisiegen.gtitool.core.entities.TerminalSymbolSet; import de.unisiegen.gtitool.core.entities.Transition; import de.unisiegen.gtitool.core.i18n.Messages; /** * The parser multi exception class. * * @author Christian Fehler * @version $Id$ */ public class ParserMultiException extends ParserException { /** * The serial version uid. */ private static final long serialVersionUID = -3411147227563168312L; /** * Throws a {@link ParserMultiException} if the {@link Alphabet} consist of * {@link Symbol}s with the same name. * * @param negativeSymbols The input list of {@link Symbol}s. */ public static void throwAlphabetException ( ArrayList < Symbol > negativeSymbols ) { String [] message = new String [ negativeSymbols.size () ]; int [] startOffset = new int [ negativeSymbols.size () ]; int [] endOffset = new int [ negativeSymbols.size () ]; for ( int j = 0 ; j < negativeSymbols.size () ; j++ ) { message [ j ] = Messages.getString ( "Parser.4", negativeSymbols //$NON-NLS-1$ .get ( j ) ); startOffset [ j ] = negativeSymbols.get ( j ).getParserOffset () .getStart (); endOffset [ j ] = negativeSymbols.get ( j ).getParserOffset ().getEnd (); } throw new ParserMultiException ( startOffset, endOffset, message ); } /** * Throws a {@link ParserMultiException} if the {@link NonterminalSymbolSet} * consist of {@link NonterminalSymbol}s with the same name. * * @param negativeNonterminalSymbols The input list of * {@link NonterminalSymbol}s. */ public static void throwNonterminalSymbolSetException ( ArrayList < NonterminalSymbol > negativeNonterminalSymbols ) { String [] message = new String [ negativeNonterminalSymbols.size () ]; int [] startOffset = new int [ negativeNonterminalSymbols.size () ]; int [] endOffset = new int [ negativeNonterminalSymbols.size () ]; for ( int j = 0 ; j < negativeNonterminalSymbols.size () ; j++ ) { message [ j ] = Messages.getString ( "Parser.7", negativeNonterminalSymbols //$NON-NLS-1$ .get ( j ) ); startOffset [ j ] = negativeNonterminalSymbols.get ( j ) .getParserOffset ().getStart (); endOffset [ j ] = negativeNonterminalSymbols.get ( j ).getParserOffset () .getEnd (); } throw new ParserMultiException ( startOffset, endOffset, message ); } /** * Throws a {@link ParserMultiException} if the {@link Alphabet} consist of * {@link Symbol}s with the same name. * * @param negativeSymbols The input list of {@link Symbol}s. */ public static void throwRegexAlphabetException ( ArrayList < Symbol > negativeSymbols ) { String [] message = new String [ negativeSymbols.size () ]; int [] startOffset = new int [ negativeSymbols.size () ]; int [] endOffset = new int [ negativeSymbols.size () ]; for ( int j = 0 ; j < negativeSymbols.size () ; j++ ) { message [ j ] = Messages.getString ( "Parser.16", negativeSymbols //$NON-NLS-1$ .get ( j ) ); startOffset [ j ] = negativeSymbols.get ( j ).getParserOffset () .getStart (); endOffset [ j ] = negativeSymbols.get ( j ).getParserOffset ().getEnd (); } throw new ParserMultiException ( startOffset, endOffset, message ); } /** * Throws a {@link ParserMultiException} if the {@link StateSet} consist of * {@link State}s with the same name. * * @param negativeStates The input list of {@link State}s. */ public static void throwStateSetException ( ArrayList < State > negativeStates ) { String [] message = new String [ negativeStates.size () ]; int [] startOffset = new int [ negativeStates.size () ]; int [] endOffset = new int [ negativeStates.size () ]; for ( int j = 0 ; j < negativeStates.size () ; j++ ) { message [ j ] = Messages.getString ( "Parser.11", negativeStates //$NON-NLS-1$ .get ( j ) ); startOffset [ j ] = negativeStates.get ( j ).getParserOffset () .getStart (); endOffset [ j ] = negativeStates.get ( j ).getParserOffset ().getEnd (); } throw new ParserMultiException ( startOffset, endOffset, message ); } /** * Throws a {@link ParserMultiException} if the {@link TerminalSymbolSet} * consist of {@link TerminalSymbol}s with the same name. * * @param negativeTerminalSymbols The input list of {@link TerminalSymbol}s. */ public static void throwTerminalSymbolSetException ( ArrayList < TerminalSymbol > negativeTerminalSymbols ) { String [] message = new String [ negativeTerminalSymbols.size () ]; int [] startOffset = new int [ negativeTerminalSymbols.size () ]; int [] endOffset = new int [ negativeTerminalSymbols.size () ]; for ( int j = 0 ; j < negativeTerminalSymbols.size () ; j++ ) { message [ j ] = Messages.getString ( "Parser.8", negativeTerminalSymbols //$NON-NLS-1$ .get ( j ) ); startOffset [ j ] = negativeTerminalSymbols.get ( j ).getParserOffset () .getStart (); endOffset [ j ] = negativeTerminalSymbols.get ( j ).getParserOffset () .getEnd (); } throw new ParserMultiException ( startOffset, endOffset, message ); } /** * Throws a {@link ParserMultiException} if the {@link Transition} consist of * {@link Symbol}s with the same name. * * @param negativeSymbols The input list of {@link Symbol}s. */ public static void throwTransitionException ( ArrayList < Symbol > negativeSymbols ) { String [] message = new String [ negativeSymbols.size () ]; int [] startOffset = new int [ negativeSymbols.size () ]; int [] endOffset = new int [ negativeSymbols.size () ]; for ( int j = 0 ; j < negativeSymbols.size () ; j++ ) { message [ j ] = Messages.getString ( "Parser.5", negativeSymbols //$NON-NLS-1$ .get ( j ) ); startOffset [ j ] = negativeSymbols.get ( j ).getParserOffset () .getStart (); endOffset [ j ] = negativeSymbols.get ( j ).getParserOffset ().getEnd (); } throw new ParserMultiException ( startOffset, endOffset, message ); } /** * The array of shown messages. */ private String [] messages; /** * The array of parser end offsets. */ private int [] parserEndOffset; /** * The array of parser start offsets. */ private int [] parserStartOffset; /** * Initializes the exception. * * @param parserStartOffset The array of parser start offsets. * @param parserEndOffset The array of parser end offsets. * @param messages The array of shown messages. */ public ParserMultiException ( int [] parserStartOffset, int [] parserEndOffset, String [] messages ) { super ( parserStartOffset [ 0 ], parserEndOffset [ 0 ], messages [ 0 ] ); this.messages = messages; this.parserStartOffset = parserStartOffset; this.parserEndOffset = parserEndOffset; } /** * Returns the messages. * * @return The messages. * @see #messages */ public String [] getMessages () { return this.messages; } /** * Returns the endOffset. * * @return The endOffset. * @see #parserEndOffset */ public int [] getParserEndOffset () { return this.parserEndOffset; } /** * Returns the startOffset. * * @return The startOffset. * @see #parserStartOffset */ public int [] getParserStartOffset () { return this.parserStartOffset; } }