blob: 17f9258b1b09318d9d30f376c655fcba18be8d23 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2005, 2007 BEA Systems, Inc.
* 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://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* tyeung@bea.com - initial API and implementation
*******************************************************************************/
package org.eclipse.jdt.apt.core.internal.util;
import com.sun.mirror.util.SourcePosition;
import java.io.File;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jdt.apt.core.internal.declaration.AnnotationMirrorImpl;
import org.eclipse.jdt.apt.core.internal.declaration.AnnotationValueImpl;
import org.eclipse.jdt.apt.core.internal.declaration.EclipseDeclarationImpl;
import org.eclipse.jdt.apt.core.internal.declaration.EclipseMirrorObject;
public class SourcePositionImpl implements SourcePosition
{
private final int _startingOffset;
private final int _length;
private final int _line;
private final int _column;
/** the back pointer to the declaration that created this object */
private final EclipseMirrorObject _decl;
public SourcePositionImpl(final int startingOffset,
final int length,
final int line,
final int column,
final EclipseDeclarationImpl decl)
{
_startingOffset = startingOffset;
_length = length;
_line = line < 1 ? 1 : line;
_column = column < 0 ? 0 : column;
_decl = decl;
assert decl != null : "missing declaration [decl] == null."; //$NON-NLS-1$
}
public SourcePositionImpl(final int startingOffset,
final int length,
final int line,
final int column,
final AnnotationValueImpl decl )
{
_startingOffset = startingOffset;
_length = length;
_line = line < 1 ? 1 : line;
_column = column < 0 ? 0 : column;
_decl = decl;
assert decl != null : "missing declaration [decl] == null."; //$NON-NLS-1$
}
public SourcePositionImpl(final int startingOffset,
final int length,
final int line,
final int column,
final AnnotationMirrorImpl decl )
{
_startingOffset = startingOffset;
_length = length;
_line = line < 1 ? 1 : line;
_column = column < 0 ? 0 : column;
_decl = decl;
assert decl != null : "missing declaration [decl] == null."; //$NON-NLS-1$
}
public int line(){ return _line; }
public int column(){ return _column; }
public File file(){
IResource resource = getResource();
if( resource == null ) return null;
final IPath absPath = resource.getRawLocation();
if(absPath == null) return null;
return new File( absPath.toOSString() );
}
// for use in IDE mode for squiggling.
public int getStartingOffset(){ return _startingOffset; }
public int getEndingOffset(){ return _startingOffset + _length; }
public int getLength(){ return _length; }
public IFile getResource(){
if( _decl instanceof EclipseDeclarationImpl )
return ((EclipseDeclarationImpl)_decl).getResource();
else if( _decl instanceof AnnotationMirrorImpl )
return ((AnnotationMirrorImpl)_decl).getResource();
else if( _decl instanceof AnnotationValueImpl )
return ((AnnotationValueImpl)_decl).getResource();
throw new IllegalStateException();
}
public String toString()
{
StringBuilder buffer = new StringBuilder();
buffer.append("offset = "); //$NON-NLS-1$
buffer.append(_startingOffset);
buffer.append(" line = "); //$NON-NLS-1$
buffer.append( _line );
buffer.append(" column = "); //$NON-NLS-1$
buffer.append( _column );
buffer.append(" length = "); //$NON-NLS-1$
buffer.append( _length );
return buffer.toString();
}
}