blob: ed5c64a9546ff9d74b69c25f37204860d69a1831 [file] [log] [blame]
/**********************************************************************
* Copyright (c) 2002,2003 Rational Software Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Rational Software - Initial API and implementation
***********************************************************************/
package org.eclipse.cdt.internal.core.parser;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.cdt.core.parser.IProblem;
/**
* @author jcamelon
*
*/
public class ScannerProblemFactory extends BaseProblemFactory implements IProblemFactory
{
protected static Map errorMessages = new HashMap();
static {
errorMessages.put(
new Integer(IProblem.PREPROCESSOR_POUND_ERROR),
"#error encountered with text: ");
errorMessages.put(
new Integer(IProblem.PREPROCESSOR_INCLUSION_NOT_FOUND),
"Preprocessor Inclusion not found: ");
errorMessages.put(
new Integer(IProblem.PREPROCESSOR_DEFINITION_NOT_FOUND),
"Macro definition not found: ");
errorMessages.put(
new Integer(IProblem.PREPROCESSOR_INVALID_MACRO_DEFN),
"Macro definition malformed for macro: ");
errorMessages.put(
new Integer(IProblem.PREPROCESSOR_INVALID_MACRO_REDEFN),
"Invalid macro redefinition for macro : ");
errorMessages.put(
new Integer(IProblem.PREPROCESSOR_UNBALANCE_CONDITION),
"Preprocessor Conditionals unbalanced : ");
errorMessages.put(
new Integer(IProblem.PREPROCESSOR_CONDITIONAL_EVAL_ERROR),
"Expression Evaluation error for condition : ");
errorMessages.put(
new Integer(IProblem.PREPROCESSOR_MACRO_USAGE_ERROR),
"Macro usage error for macro :");
errorMessages.put(
new Integer(IProblem.PREPROCESSOR_CIRCULAR_INCLUSION),
"Circular inclusion for file : ");
errorMessages.put(
new Integer(IProblem.PREPROCESSOR_INVALID_DIRECTIVE),
"Invalid preprocessor directive : ");
errorMessages.put(
new Integer(IProblem.PREPROCESSOR_MACRO_PASTING_ERROR),
"Invalid use of macro pasting in macro : ");
errorMessages.put(
new Integer(IProblem.SCANNER_INVALID_ESCAPECHAR),
"Invalid escape character encountered ");
errorMessages.put(
new Integer(IProblem.SCANNER_UNBOUNDED_STRING),
"Unbounded string encountered ");
errorMessages.put(
new Integer(IProblem.SCANNER_BAD_FLOATING_POINT),
"Invalid floating point format encountered ");
errorMessages.put(
new Integer(IProblem.SCANNER_BAD_HEX_FORMAT),
"Invalid hexidecimal format encountered ");
errorMessages.put(
new Integer(IProblem.SCANNER_UNEXPECTED_EOF),
"Unexpected End Of File encountered ");
errorMessages.put(
new Integer(IProblem.SCANNER_BAD_CHARACTER),
"Bad character sequence encountered : ");
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.BaseProblemFactory#createMessage()
*/
public String createMessage(int id, Map arguments, int lineNumber, char[] fileName)
{
StringBuffer buffer = new StringBuffer();
buffer.append(PROBLEM);
buffer.append(errorMessages.get(new Integer(id)));
switch (id)
{
case IProblem.PREPROCESSOR_POUND_ERROR :
buffer.append(arguments.get(IProblem.A_PREPROC_POUND_ERROR));
break;
case IProblem.PREPROCESSOR_INCLUSION_NOT_FOUND :
buffer.append(arguments.get(IProblem.A_PREPROC_INCLUDE_FILENAME));
break;
case IProblem.PREPROCESSOR_DEFINITION_NOT_FOUND :
buffer.append(arguments.get(IProblem.A_PREPROC_MACRO_NAME));
break;
case IProblem.PREPROCESSOR_UNBALANCE_CONDITION :
buffer.append(arguments.get(IProblem.A_PREPROC_CONDITIONAL_MISMATCH));
break;
case IProblem.PREPROCESSOR_INVALID_MACRO_DEFN :
buffer.append(arguments.get(IProblem.A_PREPROC_MACRO_NAME));
break;
case IProblem.PREPROCESSOR_INVALID_DIRECTIVE :
buffer.append(arguments.get(IProblem.A_PREPROC_UNKNOWN_DIRECTIVE));
break;
case IProblem.PREPROCESSOR_INVALID_MACRO_REDEFN :
buffer.append(arguments.get(IProblem.A_PREPROC_MACRO_NAME));
break;
case IProblem.PREPROCESSOR_CONDITIONAL_EVAL_ERROR :
buffer.append(arguments.get(IProblem.A_PREPROC_CONDITION));
break;
case IProblem.PREPROCESSOR_MACRO_USAGE_ERROR :
buffer.append(arguments.get(IProblem.A_PREPROC_MACRO_NAME));
break;
case IProblem.PREPROCESSOR_MACRO_PASTING_ERROR :
buffer.append(arguments.get(IProblem.A_PREPROC_MACRO_NAME));
break;
case IProblem.PREPROCESSOR_CIRCULAR_INCLUSION :
buffer.append(arguments.get(IProblem.A_PREPROC_INCLUDE_FILENAME));
break;
case IProblem.SCANNER_BAD_CHARACTER :
buffer.append( arguments.get(IProblem.A_SCANNER_BADCHAR));
break;
case IProblem.SCANNER_UNBOUNDED_STRING :
case IProblem.SCANNER_INVALID_ESCAPECHAR :
case IProblem.SCANNER_BAD_FLOATING_POINT :
case IProblem.SCANNER_BAD_HEX_FORMAT :
case IProblem.SCANNER_UNEXPECTED_EOF :
break;
default :
return null;
}
buffer.append( IN_FILE );
buffer.append(fileName);
buffer.append( ON_LINE );
buffer.append(lineNumber);
return buffer.toString();
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IProblemFactory#createProblem(int, int, int, int, char[], java.lang.String, boolean, boolean)
*/
public IProblem createProblem(
int id,
int start,
int end,
int line,
char[] file,
Map arguments,
boolean warn,
boolean error)
{
if( checkBitmask( id, IProblem.INTERNAL_RELATED ) )
return createInternalProblem( id, start, end, line, file, arguments, warn, error );
if ( checkBitmask( id, IProblem.SCANNER_RELATED ) ||
checkBitmask( id, IProblem.PREPROCESSOR_RELATED ) )
return super.createProblem(
id,
start,
end,
line,
file,
createMessage(id, arguments, line, file),
arguments,
warn,
error);
return null;
}
/* (non-Javadoc)
* @see org.eclipse.cdt.internal.core.parser.IProblemFactory#getRequiredAttributesForId(int)
*/
public String[] getRequiredAttributesForId(int id)
{
String [] result = new String[1];
switch (id)
{
case IProblem.PREPROCESSOR_POUND_ERROR :
result[0] = IProblem.A_PREPROC_POUND_ERROR;
break;
case IProblem.PREPROCESSOR_INCLUSION_NOT_FOUND :
result[0] = IProblem.A_PREPROC_INCLUDE_FILENAME;
break;
case IProblem.PREPROCESSOR_DEFINITION_NOT_FOUND :
result[0] = IProblem.A_PREPROC_MACRO_NAME;
break;
case IProblem.PREPROCESSOR_UNBALANCE_CONDITION :
result[0] = IProblem.A_PREPROC_CONDITIONAL_MISMATCH;
break;
case IProblem.PREPROCESSOR_INVALID_MACRO_DEFN :
result[0] = IProblem.A_PREPROC_MACRO_NAME;
break;
case IProblem.PREPROCESSOR_INVALID_DIRECTIVE :
result[0] = IProblem.A_PREPROC_UNKNOWN_DIRECTIVE;
break;
case IProblem.PREPROCESSOR_INVALID_MACRO_REDEFN :
result[0] = IProblem.A_PREPROC_MACRO_NAME;
break;
case IProblem.PREPROCESSOR_CONDITIONAL_EVAL_ERROR :
result[0] = IProblem.A_PREPROC_CONDITION;
break;
case IProblem.PREPROCESSOR_MACRO_USAGE_ERROR :
result[0] = IProblem.A_PREPROC_MACRO_NAME;
break;
case IProblem.PREPROCESSOR_MACRO_PASTING_ERROR :
result[0] = IProblem.A_PREPROC_MACRO_NAME;
break;
case IProblem.PREPROCESSOR_CIRCULAR_INCLUSION :
result[0] = IProblem.A_PREPROC_INCLUDE_FILENAME;
break;
case IProblem.SCANNER_BAD_CHARACTER :
result[0] = IProblem.A_SCANNER_BADCHAR;
break;
case IProblem.SCANNER_UNBOUNDED_STRING :
case IProblem.SCANNER_INVALID_ESCAPECHAR :
case IProblem.SCANNER_BAD_FLOATING_POINT :
case IProblem.SCANNER_BAD_HEX_FORMAT :
case IProblem.SCANNER_UNEXPECTED_EOF :
break;
}
return result;
}
}