1 /* 2 * Copyright 2004-2005 Sun Microsystems, Inc. All Rights Reserved. 3 * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER. 4 * 5 * This code is free software; you can redistribute it and/or modify it 6 * under the terms of the GNU General Public License version 2 only, as 7 * published by the Free Software Foundation. Sun designates this 8 * particular file as subject to the "Classpath" exception as provided 9 * by Sun in the LICENSE file that accompanied this code. 10 * 11 * This code is distributed in the hope that it will be useful, but WITHOUT 12 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 13 * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License 14 * version 2 for more details (a copy is included in the LICENSE file that 15 * accompanied this code). 16 * 17 * You should have received a copy of the GNU General Public License version 18 * 2 along with this work; if not, write to the Free Software Foundation, 19 * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA. 20 * 21 * Please contact Sun Microsystems, Inc., 4150 Network Circle, Santa Clara, 22 * CA 95054 USA or visit www.sun.com if you need additional information or 23 * have any questions. 24 */ 25 26 package com.sun.tools.apt.mirror.util; 27 28 29 import java.io.File; 30 import javax.tools.JavaFileObject; 31 32 import com.sun.mirror.util.SourcePosition; 33 import com.sun.tools.javac.util.Position; 34 35 36 /** 37 * Implementation of SourcePosition 38 */ 39 40 public class SourcePositionImpl implements SourcePosition { 41 42 private JavaFileObject sourcefile; 43 private int pos; // file position, in javac's internal format 44 private Position.LineMap linemap; 45 46 47 public SourcePositionImpl(JavaFileObject sourcefile, int pos, Position.LineMap linemap) { 48 this.sourcefile = sourcefile; 49 this.pos = pos; 50 this.linemap = linemap; 51 assert sourcefile != null; 52 assert linemap != null; 53 } 54 55 public int getJavacPosition() { 56 return pos; 57 } 58 59 public JavaFileObject getSource() { 60 return sourcefile; 61 } 62 63 /** 64 * Returns a string representation of this position in the 65 * form "sourcefile:line", or "sourcefile" if no line number is available. 66 */ 67 public String toString() { 68 int ln = line(); 69 return (ln == Position.NOPOS) 70 ? sourcefile.toString() 71 : sourcefile + ":" + ln; 72 } 73 74 /** 75 * {@inheritDoc} 76 */ 77 public File file() { 78 return new File(sourcefile.toString()); 79 } 80 81 /** 82 * {@inheritDoc} 83 */ 84 public int line() { 85 return linemap.getLineNumber(pos); 86 } 87 88 /** 89 * {@inheritDoc} 90 */ 91 public int column() { 92 return linemap.getColumnNumber(pos); 93 } 94 }