/*
* Copyright 2012 Red Hat, Inc. and/or its affiliates.
*
* Licensed under the Eclipse Public License version 1.0, available at
* http://www.eclipse.org/legal/epl-v10.html
*/
package org.jboss.forge.roaster.model.impl;
import org.eclipse.jdt.core.compiler.IProblem;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.jboss.forge.roaster.Internal;
import org.jboss.forge.roaster.model.JavaType;
import org.jboss.forge.roaster.model.SyntaxError;
/**
* @author <a href="mailto:lincolnbaxter@gmail.com">Lincoln Baxter, III</a>
*
*/
public class SyntaxErrorImpl implements SyntaxError, Internal
{
private final JavaType<?> parent;
private final IProblem problem;
public SyntaxErrorImpl(final JavaType<?> parent, final Object internal)
{
this.parent = parent;
this.problem = (IProblem) internal;
}
@Override
public String getDescription()
{
int line = problem.getSourceLineNumber();
int begin = problem.getSourceStart();
int end = problem.getSourceEnd();
String snippit = parent.toString().substring(begin, end);
String message = "Line " + line + " near <" + begin + "," + end + ">: \"" + snippit + "\" - "
+ problem.getMessage();
return message;
}
@Override
public Object getInternal()
{
return problem;
}
@Override
public String toString()
{
return getDescription();
}
@Override
public int getLine()
{
return problem.getSourceLineNumber();
}
@Override
public int getColumn()
{
int position = problem.getSourceStart();
if (position >= 0 && parent != null && (parent.getInternal() instanceof CompilationUnit))
{
return ((CompilationUnit) parent.getInternal()).getColumnNumber(position);
}
return -1;
}
@Override
public boolean isError()
{
return problem.isError();
}
@Override
public boolean isWarning()
{
return problem.isWarning();
}
}