| /******************************************************************************* |
| * 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(); |
| } |
| } |