e359e6b15b3c83d7840813cc548051c1cb70acc6
[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 java.util.HashMap;
14
15 import net.sourceforge.phpdt.core.IBuffer;
16 import net.sourceforge.phpdt.core.ICompilationUnit;
17 import net.sourceforge.phpdt.core.IJavaElement;
18 import net.sourceforge.phpdt.core.IJavaProject;
19 import net.sourceforge.phpdt.core.IOpenable;
20 import net.sourceforge.phpdt.core.ISourceRange;
21 import net.sourceforge.phpdt.core.ISourceReference;
22 import net.sourceforge.phpdt.core.JavaModelException;
23
24 import org.eclipse.core.resources.IResource;
25 import org.eclipse.core.runtime.IPath;
26 import org.eclipse.core.runtime.IProgressMonitor;
27 import net.sourceforge.phpdt.internal.core.JavaElementInfo;
28 import net.sourceforge.phpdt.internal.core.JavaModelManager;
29 import net.sourceforge.phpdt.internal.core.Openable;
30
31 import net.sourceforge.phpdt.internal.core.JavaElement;
32
33
34 /**
35  * Abstract class for Java elements which implement ISourceReference.
36  */
37 /* package */ abstract class SourceRefElement extends JavaElement implements ISourceReference {
38         protected SourceRefElement(JavaElement parent, String name) {
39                 super(parent, name);
40         }
41 /**
42  * This element is being closed.  Do any necessary cleanup.
43  */
44 protected void closing(Object info) throws JavaModelException {
45         // Do any necessary cleanup
46 }
47 /**
48  * Returns a new element info for this element.
49  */
50 protected Object createElementInfo() {
51         return null; // not used for source ref elements
52 }
53 /**
54  * @see ISourceManipulation
55  */
56 //public void copy(IJavaElement container, IJavaElement sibling, String rename, boolean force, IProgressMonitor monitor) throws JavaModelException {
57 //      if (container == null) {
58 //              throw new IllegalArgumentException(Util.bind("operation.nullContainer")); //$NON-NLS-1$
59 //      }
60 //      IJavaElement[] elements= new IJavaElement[] {this};
61 //      IJavaElement[] containers= new IJavaElement[] {container};
62 //      IJavaElement[] siblings= null;
63 //      if (sibling != null) {
64 //              siblings= new IJavaElement[] {sibling};
65 //      }
66 //      String[] renamings= null;
67 //      if (rename != null) {
68 //              renamings= new String[] {rename};
69 //      }
70 //      getJavaModel().copy(elements, containers, siblings, renamings, force, monitor);
71 //}
72 /**
73  * @see ISourceManipulation
74  */
75 //public void delete(boolean force, IProgressMonitor monitor) throws JavaModelException {
76 //      IJavaElement[] elements = new IJavaElement[] {this};
77 //      getJavaModel().delete(elements, force, monitor);
78 //}
79 /*
80  * @see JavaElement#generateInfos
81  */
82 protected void generateInfos(Object info, HashMap newElements, IProgressMonitor pm) throws JavaModelException {
83         Openable openableParent = (Openable)getOpenableParent();
84         if (openableParent == null) return;
85
86         JavaElementInfo openableParentInfo = (JavaElementInfo) JavaModelManager.getJavaModelManager().getInfo(openableParent);
87         if (openableParentInfo == null) {
88                 openableParent.generateInfos(openableParent.createElementInfo(), newElements, pm);
89         }
90 }
91 /**
92  * @see IMember
93  */
94 public ICompilationUnit getCompilationUnit() {
95         return ((JavaElement)getParent()).getCompilationUnit();
96 }
97 /**
98  * Elements within compilation units and class files have no
99  * corresponding resource.
100  *
101  * @see IJavaElement
102  */
103 public IResource getCorrespondingResource() throws JavaModelException {
104         if (!exists()) throw newNotPresentException();
105         return null;
106 }
107 /**
108  * Return the first instance of IOpenable in the hierarchy of this
109  * type (going up the hierarchy from this type);
110  */
111 public IOpenable getOpenableParent() {
112         IJavaElement current = getParent();
113         while (current != null){
114                 if (current instanceof IOpenable){
115                         return (IOpenable) current;
116                 }
117                 current = current.getParent();
118         }
119         return null;
120 }
121 /*
122  * @see IJavaElement
123  */
124 public IPath getPath() {
125         return this.getParent().getPath();
126 }
127 /*
128  * @see IJavaElement
129  */
130 public IResource getResource() {
131         return this.getParent().getResource();
132 }
133 /**
134  * @see ISourceReference
135  */
136 public String getSource() throws JavaModelException {
137         IOpenable openable = getOpenableParent();
138         IBuffer buffer = openable.getBuffer();
139         if (buffer == null) {
140                 return null;
141         }
142         ISourceRange range = getSourceRange();
143         int offset = range.getOffset();
144         int length = range.getLength();
145         if (offset == -1 || length == 0 ) {
146                 return null;
147         }
148         try {
149           return buffer.getText(offset, length);
150           // jsurfer insert start
151         } catch (ArrayIndexOutOfBoundsException e) {
152                 
153         }
154         return null;
155 //       jsurfer insert end
156 }
157 /**
158  * @see ISourceReference
159  */
160 public ISourceRange getSourceRange() throws JavaModelException {
161         SourceRefElementInfo info = (SourceRefElementInfo) getElementInfo();
162         return info.getSourceRange();
163 }
164 /**
165  * @see IJavaElement
166  */
167 public IResource getUnderlyingResource() throws JavaModelException {
168         if (!exists()) throw newNotPresentException();
169         return getParent().getUnderlyingResource();
170 }
171 /**
172  * @see ISourceManipulation
173  */
174 //public void move(IJavaElement container, IJavaElement sibling, String rename, boolean force, IProgressMonitor monitor) throws JavaModelException {
175 //      if (container == null) {
176 //              throw new IllegalArgumentException(Util.bind("operation.nullContainer")); //$NON-NLS-1$
177 //      }
178 //      IJavaElement[] elements= new IJavaElement[] {this};
179 //      IJavaElement[] containers= new IJavaElement[] {container};
180 //      IJavaElement[] siblings= null;
181 //      if (sibling != null) {
182 //              siblings= new IJavaElement[] {sibling};
183 //      }
184 //      String[] renamings= null;
185 //      if (rename != null) {
186 //              renamings= new String[] {rename};
187 //      }
188 //      getJavaModel().move(elements, containers, siblings, renamings, force, monitor);
189 //}
190 /**
191  * @see ISourceManipulation
192  */
193 //public void rename(String name, boolean force, IProgressMonitor monitor) throws JavaModelException {
194 //      if (name == null) {
195 //              throw new IllegalArgumentException(Util.bind("element.nullName")); //$NON-NLS-1$
196 //      }
197 //      IJavaElement[] elements= new IJavaElement[] {this};
198 //      IJavaElement[] dests= new IJavaElement[] {this.getParent()};
199 //      String[] renamings= new String[] {name};
200 //      getJavaModel().rename(elements, dests, renamings, force, monitor);
201 //}
202 /*
203  * @see JavaElement#rootedAt(IJavaProject)
204  */
205 public IJavaElement rootedAt(IJavaProject project) {
206         // not needed
207         return null;
208 }
209 }