9139979a4dc6c641dad0acc2d7d3877fd90d33b3
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / core / SourceRefElement.java
1 /*******************************************************************************
2  * Copyright (c) 2000, 2003 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials 
4  * are made available under the terms of the Common Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/cpl-v10.html
7  * 
8  * Contributors:
9  *     IBM Corporation - initial API and implementation
10  *******************************************************************************/
11 package net.sourceforge.phpdt.internal.core;
12
13 import net.sourceforge.phpdt.core.IBuffer;
14 import net.sourceforge.phpdt.core.ICompilationUnit;
15 import net.sourceforge.phpdt.core.IJavaElement;
16 import net.sourceforge.phpdt.core.IJavaProject;
17 import net.sourceforge.phpdt.core.IOpenable;
18 import net.sourceforge.phpdt.core.ISourceRange;
19 import net.sourceforge.phpdt.core.ISourceReference;
20 import net.sourceforge.phpdt.core.JavaModelException;
21
22 import org.eclipse.core.resources.IResource;
23 import org.eclipse.core.runtime.IPath;
24 import org.eclipse.core.runtime.IProgressMonitor;
25
26
27 /**
28  * Abstract class for Java elements which implement ISourceReference.
29  */
30 /* package */ abstract class SourceRefElement extends JavaElement implements ISourceReference {
31 protected SourceRefElement(int type, IJavaElement parent, String name) {
32         super(type, parent, name);
33 }
34 /**
35  * @see ISourceManipulation
36  */
37 //public void copy(IJavaElement container, IJavaElement sibling, String rename, boolean force, IProgressMonitor monitor) throws JavaModelException {
38 //      if (container == null) {
39 //              throw new IllegalArgumentException(Util.bind("operation.nullContainer")); //$NON-NLS-1$
40 //      }
41 //      IJavaElement[] elements= new IJavaElement[] {this};
42 //      IJavaElement[] containers= new IJavaElement[] {container};
43 //      IJavaElement[] siblings= null;
44 //      if (sibling != null) {
45 //              siblings= new IJavaElement[] {sibling};
46 //      }
47 //      String[] renamings= null;
48 //      if (rename != null) {
49 //              renamings= new String[] {rename};
50 //      }
51 //      getJavaModel().copy(elements, containers, siblings, renamings, force, monitor);
52 //}
53 /**
54  * @see ISourceManipulation
55  */
56 //public void delete(boolean force, IProgressMonitor monitor) throws JavaModelException {
57 //      IJavaElement[] elements = new IJavaElement[] {this};
58 //      getJavaModel().delete(elements, force, monitor);
59 //}
60 /**
61  * @see IMember
62  */
63 public ICompilationUnit getCompilationUnit() {
64         return ((JavaElement)getParent()).getCompilationUnit();
65 }
66 /**
67  * Elements within compilation units and class files have no
68  * corresponding resource.
69  *
70  * @see IJavaElement
71  */
72 public IResource getCorrespondingResource() throws JavaModelException {
73         if (!exists()) throw newNotPresentException();
74         return null;
75 }
76 /**
77  * Return the first instance of IOpenable in the hierarchy of this
78  * type (going up the hierarchy from this type);
79  */
80 public IOpenable getOpenableParent() {
81         IJavaElement current = getParent();
82         while (current != null){
83                 if (current instanceof IOpenable){
84                         return (IOpenable) current;
85                 }
86                 current = current.getParent();
87         }
88         return null;
89 }
90 /*
91  * @see IJavaElement
92  */
93 public IPath getPath() {
94         return this.getParent().getPath();
95 }
96 /*
97  * @see IJavaElement
98  */
99 public IResource getResource() {
100         return this.getParent().getResource();
101 }
102 /**
103  * @see ISourceReference
104  */
105 public String getSource() throws JavaModelException {
106         IOpenable openable = getOpenableParent();
107         IBuffer buffer = openable.getBuffer();
108         if (buffer == null) {
109                 return null;
110         }
111         ISourceRange range = getSourceRange();
112         int offset = range.getOffset();
113         int length = range.getLength();
114         if (offset == -1 || length == 0 ) {
115                 return null;
116         }
117         return buffer.getText(offset, length);
118 }
119 /**
120  * @see ISourceReference
121  */
122 public ISourceRange getSourceRange() throws JavaModelException {
123         SourceRefElementInfo info = (SourceRefElementInfo) getElementInfo();
124         return info.getSourceRange();
125 }
126 /**
127  * @see IJavaElement
128  */
129 public IResource getUnderlyingResource() throws JavaModelException {
130         if (!exists()) throw newNotPresentException();
131         return getParent().getUnderlyingResource();
132 }
133 /**
134  * @see ISourceManipulation
135  */
136 //public void move(IJavaElement container, IJavaElement sibling, String rename, boolean force, IProgressMonitor monitor) throws JavaModelException {
137 //      if (container == null) {
138 //              throw new IllegalArgumentException(Util.bind("operation.nullContainer")); //$NON-NLS-1$
139 //      }
140 //      IJavaElement[] elements= new IJavaElement[] {this};
141 //      IJavaElement[] containers= new IJavaElement[] {container};
142 //      IJavaElement[] siblings= null;
143 //      if (sibling != null) {
144 //              siblings= new IJavaElement[] {sibling};
145 //      }
146 //      String[] renamings= null;
147 //      if (rename != null) {
148 //              renamings= new String[] {rename};
149 //      }
150 //      getJavaModel().move(elements, containers, siblings, renamings, force, monitor);
151 //}
152 /**
153  * @see ISourceManipulation
154  */
155 //public void rename(String name, boolean force, IProgressMonitor monitor) throws JavaModelException {
156 //      if (name == null) {
157 //              throw new IllegalArgumentException(Util.bind("element.nullName")); //$NON-NLS-1$
158 //      }
159 //      IJavaElement[] elements= new IJavaElement[] {this};
160 //      IJavaElement[] dests= new IJavaElement[] {this.getParent()};
161 //      String[] renamings= new String[] {name};
162 //      getJavaModel().rename(elements, dests, renamings, force, monitor);
163 //}
164 /*
165  * @see JavaElement#rootedAt(IJavaProject)
166  */
167 public IJavaElement rootedAt(IJavaProject project) {
168         // not needed
169         return null;
170 }
171 }