### Eclipse Workspace Patch 1.0
#P org.eclipse.jdt.core
Index: model/org/eclipse/jdt/internal/core/SourceRefElement.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/SourceRefElement.java,v
retrieving revision 1.46
diff -u -r1.46 SourceRefElement.java
--- model/org/eclipse/jdt/internal/core/SourceRefElement.java 24 Nov 2005 12:14:48 -0000 1.46
+++ model/org/eclipse/jdt/internal/core/SourceRefElement.java 22 Nov 2006 13:56:43 -0000
@@ -151,6 +151,12 @@
String token = memento.nextToken();
return getHandleFromMemento(token, memento, owner);
}
+/**
+ * @see IMember
+ */
+public IJavaFile getJavaFile() {
+ return ((JavaElement)getParent()).getJavaFile();
+}
/*
* @see IMember#getOccurrenceCount()
*/
Index: model/org/eclipse/jdt/internal/core/ClassFile.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFile.java,v
retrieving revision 1.128
diff -u -r1.128 ClassFile.java
--- model/org/eclipse/jdt/internal/core/ClassFile.java 6 Nov 2006 14:13:45 -0000 1.128
+++ model/org/eclipse/jdt/internal/core/ClassFile.java 22 Nov 2006 13:56:43 -0000
@@ -239,6 +239,9 @@
}
return elt;
}
+public IType findPrimaryType() {
+ return getType();
+}
public String getAttachedJavadoc(IProgressMonitor monitor) throws JavaModelException {
return this.getType().getAttachedJavadoc(monitor);
}
@@ -327,6 +330,12 @@
return this;
}
/**
+ * @see IMember
+ */
+public IJavaFile getJavaFile() {
+ return this;
+}
+/**
* A class file has a corresponding resource unless it is contained
* in a jar.
*
Index: model/org/eclipse/jdt/internal/core/JavaElement.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaElement.java,v
retrieving revision 1.123
diff -u -r1.123 JavaElement.java
--- model/org/eclipse/jdt/internal/core/JavaElement.java 20 Oct 2006 18:10:51 -0000 1.123
+++ model/org/eclipse/jdt/internal/core/JavaElement.java 22 Nov 2006 13:56:43 -0000
@@ -293,6 +293,12 @@
* contribution to a memento.
*/
protected abstract char getHandleMementoDelimiter();
+ /* (non-Javadoc)
+ * @see IMember#getJavaFile()
+ */
+ public IJavaFile getJavaFile() {
+ return null;
+ }
/**
* @see IJavaElement
*/
Index: model/org/eclipse/jdt/internal/core/CompilationUnit.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnit.java,v
retrieving revision 1.235
diff -u -r1.235 CompilationUnit.java
--- model/org/eclipse/jdt/internal/core/CompilationUnit.java 14 Nov 2006 16:38:47 -0000 1.235
+++ model/org/eclipse/jdt/internal/core/CompilationUnit.java 22 Nov 2006 13:56:43 -0000
@@ -715,6 +715,12 @@
System.arraycopy(elements, 0, imports, 0, length);
return imports;
}
+/*
+ * @see IMember
+ */
+public IJavaFile getJavaFile() {
+ return this;
+}
/**
* @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getMainTypeName()
*/
@@ -880,6 +886,12 @@
return getWorkingCopy(new WorkingCopyOwner() {/*non shared working copy*/}, null/*no problem requestor*/, monitor);
}
/**
+ * @see IJavaFile#getWorkingCopy(WorkingCopyOwner, IProgressMonitor)
+ */
+public ICompilationUnit getWorkingCopy(WorkingCopyOwner workingCopyOwner, IProgressMonitor monitor) throws JavaModelException {
+ return getWorkingCopy(workingCopyOwner, null, monitor);
+}
+/**
* @see IWorkingCopy#getWorkingCopy(IProgressMonitor, IBufferFactory, IProblemRequestor)
* @deprecated
*/
Index: dom/org/eclipse/jdt/core/dom/ASTParser.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java,v
retrieving revision 1.68
diff -u -r1.68 ASTParser.java
--- dom/org/eclipse/jdt/core/dom/ASTParser.java 16 Nov 2006 17:43:52 -0000 1.68
+++ dom/org/eclipse/jdt/core/dom/ASTParser.java 22 Nov 2006 13:56:41 -0000
@@ -17,6 +17,7 @@
import org.eclipse.jdt.core.IClassFile;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaFile;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
@@ -154,14 +155,9 @@
private char[] rawSource = null;
/**
- * Java mode compilation unit supplying the source.
+ * Java model class file or compilation unit supplying the source.
*/
- private ICompilationUnit compilationUnitSource = null;
-
- /**
- * Java model class file supplying the source.
- */
- private IClassFile classFileSource = null;
+ private IJavaFile javaFileSource = null;
/**
* Character-based offset into the source string where parsing is to
@@ -218,8 +214,7 @@
private void initializeDefaults() {
this.astKind = K_COMPILATION_UNIT;
this.rawSource = null;
- this.classFileSource = null;
- this.compilationUnitSource = null;
+ this.javaFileSource = null;
this.resolveBindings = false;
this.sourceLength = -1;
this.sourceOffset = 0;
@@ -452,9 +447,8 @@
*/
public void setSource(char[] source) {
this.rawSource = source;
- // clear the others
- this.compilationUnitSource = null;
- this.classFileSource = null;
+ // clear the other
+ this.javaFileSource = null;
}
/**
@@ -467,16 +461,7 @@
* is to be parsed, or null
if none
*/
public void setSource(ICompilationUnit source) {
- this.compilationUnitSource = source;
- // clear the others
- this.rawSource = null;
- this.classFileSource = null;
- if (source != null) {
- this.project = source.getJavaProject();
- Map options = this.project.getOptions(true);
- options.remove(JavaCore.COMPILER_TASK_TAGS); // no need to parse task tags
- this.compilerOptions = options;
- }
+ setJavaFile(source);
}
/**
@@ -491,10 +476,16 @@
* is to be parsed, or null
if none
*/
public void setSource(IClassFile source) {
- this.classFileSource = source;
- // clear the others
+ setJavaFile(source);
+ }
+
+ /* (non-Javadoc)
+ * Sets the source code to be parsed.
+ */
+ void setJavaFile(IJavaFile source) {
+ this.javaFileSource = source;
+ // clear the other
this.rawSource = null;
- this.compilationUnitSource = null;
if (source != null) {
this.project = source.getJavaProject();
Map options = this.project.getOptions(true);
@@ -622,9 +613,7 @@
ASTNode result = null;
if (monitor != null) monitor.beginTask("", 1); //$NON-NLS-1$
try {
- if ((this.rawSource == null)
- && (this.compilationUnitSource == null)
- && (this.classFileSource == null)) {
+ if (this.rawSource == null && this.javaFileSource == null) {
throw new IllegalStateException("source not specified"); //$NON-NLS-1$
}
result = internalCreateAST(monitor);
@@ -782,45 +771,54 @@
try {
NodeSearcher searcher = null;
org.eclipse.jdt.internal.compiler.env.ICompilationUnit sourceUnit = null;
- IJavaElement element = null;
- if (this.compilationUnitSource != null) {
- /*
- * this.compilationUnitSource is an instance of org.eclipse.jdt.internal.core.CompilationUnit that implements
- * both org.eclipse.jdt.core.ICompilationUnit and org.eclipse.jdt.internal.compiler.env.ICompilationUnit
- */
- sourceUnit = (org.eclipse.jdt.internal.compiler.env.ICompilationUnit) this.compilationUnitSource;
- /*
- * use a BasicCompilation that caches the source instead of using the compilationUnitSource directly
- * (if it is a working copy, the source can change between the parse and the AST convertion)
- * (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=75632)
- */
- sourceUnit = new BasicCompilationUnit(sourceUnit.getContents(), sourceUnit.getPackageName(), new String(sourceUnit.getFileName()), this.project);
- element = this.compilationUnitSource;
- } else if (this.classFileSource != null) {
- try {
- String sourceString = this.classFileSource.getSource();
- if (sourceString == null) {
+ IJavaFile javaFile = null;
+ WorkingCopyOwner wcOwner = this.workingCopyOwner;
+ if (this.javaFileSource != null) {
+ switch (this.javaFileSource.getElementType()) {
+ case IJavaElement.COMPILATION_UNIT:
+ /*
+ * this.compilationUnitSource is an instance of org.eclipse.jdt.internal.core.CompilationUnit that implements
+ * both org.eclipse.jdt.core.ICompilationUnit and org.eclipse.jdt.internal.compiler.env.ICompilationUnit
+ */
+ sourceUnit = (org.eclipse.jdt.internal.compiler.env.ICompilationUnit) this.javaFileSource;
+ /*
+ * use a BasicCompilation that caches the source instead of using the compilationUnitSource directly
+ * (if it is a working copy, the source can change between the parse and the AST convertion)
+ * (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=75632)
+ */
+ sourceUnit = new BasicCompilationUnit(sourceUnit.getContents(), sourceUnit.getPackageName(), new String(sourceUnit.getFileName()), this.project);
+ javaFile = this.javaFileSource;
+ wcOwner = ((ICompilationUnit) this.javaFileSource).getOwner();
+ break;
+ case IJavaElement.CLASS_FILE:
+ try {
+ String sourceString = this.javaFileSource.getSource();
+ if (sourceString == null) {
+ throw new IllegalStateException();
+ }
+ PackageFragment packageFragment = (PackageFragment) this.javaFileSource.getParent();
+ BinaryType type = (BinaryType) this.javaFileSource.findPrimaryType();
+ IBinaryType binaryType = (IBinaryType) type.getElementInfo();
+ // file name is used to recreate the Java element, so it has to be the toplevel .class file name
+ char[] fileName = binaryType.getFileName();
+ int firstDollar = CharOperation.indexOf('$', fileName);
+ if (firstDollar != -1) {
+ char[] suffix = SuffixConstants.SUFFIX_class;
+ int suffixLength = suffix.length;
+ char[] newFileName = new char[firstDollar + suffixLength];
+ System.arraycopy(fileName, 0, newFileName, 0, firstDollar);
+ System.arraycopy(suffix, 0, newFileName, firstDollar, suffixLength);
+ fileName = newFileName;
+ }
+ sourceUnit = new BasicCompilationUnit(sourceString.toCharArray(), Util.toCharArrays(packageFragment.names), new String(fileName), this.project);
+ javaFile = this.javaFileSource;
+ } catch(JavaModelException e) {
+ // an error occured accessing the java element
+ throw new IllegalStateException();
+ }
+ break;
+ default:
throw new IllegalStateException();
- }
- PackageFragment packageFragment = (PackageFragment) this.classFileSource.getParent();
- BinaryType type = (BinaryType) this.classFileSource.getType();
- IBinaryType binaryType = (IBinaryType) type.getElementInfo();
- // file name is used to recreate the Java element, so it has to be the toplevel .class file name
- char[] fileName = binaryType.getFileName();
- int firstDollar = CharOperation.indexOf('$', fileName);
- if (firstDollar != -1) {
- char[] suffix = SuffixConstants.SUFFIX_class;
- int suffixLength = suffix.length;
- char[] newFileName = new char[firstDollar + suffixLength];
- System.arraycopy(fileName, 0, newFileName, 0, firstDollar);
- System.arraycopy(suffix, 0, newFileName, firstDollar, suffixLength);
- fileName = newFileName;
- }
- sourceUnit = new BasicCompilationUnit(sourceString.toCharArray(), Util.toCharArrays(packageFragment.names), new String(fileName), this.project);
- element = this.classFileSource;
- } catch(JavaModelException e) {
- // an error occured accessing the java element
- throw new IllegalStateException();
}
} else if (this.rawSource != null) {
needToResolveBindings = this.resolveBindings && this.unitName != null && this.project != null && this.compilerOptions != null;
@@ -865,10 +863,10 @@
this.apiLevel,
this.compilerOptions,
needToResolveBindings,
- this.compilationUnitSource == null ? this.workingCopyOwner : this.compilationUnitSource.getOwner(),
+ wcOwner,
needToResolveBindings ? new DefaultBindingResolver.BindingTables() : null,
monitor);
- result.setJavaElement(element);
+ result.setJavaFile(javaFile);
return result;
} finally {
if (compilationUnitDeclaration != null && this.resolveBindings) {
Index: dom/org/eclipse/jdt/core/dom/CompilationUnitResolver.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnitResolver.java,v
retrieving revision 1.121
diff -u -r1.121 CompilationUnitResolver.java
--- dom/org/eclipse/jdt/core/dom/CompilationUnitResolver.java 17 Jul 2006 11:40:18 -0000 1.121
+++ dom/org/eclipse/jdt/core/dom/CompilationUnitResolver.java 22 Nov 2006 13:56:41 -0000
@@ -362,7 +362,7 @@
// convert AST
CompilationUnit node = convert(compilationUnitDeclaration, parser.scanner.getSource(), apiLevel, options, false/*don't resolve binding*/, null/*no owner needed*/, null/*no binding table needed*/, monitor);
- node.setJavaElement(compilationUnits[i]);
+ node.setJavaFile(compilationUnits[i]);
// accept AST
astRequestor.acceptAST(compilationUnits[i], node);
@@ -703,7 +703,7 @@
ast.setBindingResolver(resolver);
converter.setAST(ast);
CompilationUnit compilationUnit = converter.convert(unit, contents);
- compilationUnit.setJavaElement(source);
+ compilationUnit.setJavaFile(source);
compilationUnit.setLineEndTable(compilationResult.getLineSeparatorPositions());
ast.setDefaultNodeFlag(0);
ast.setOriginalModificationCount(ast.modificationCount());
Index: dom/org/eclipse/jdt/core/dom/AST.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/AST.java,v
retrieving revision 1.151
diff -u -r1.151 AST.java
--- dom/org/eclipse/jdt/core/dom/AST.java 15 Aug 2006 15:59:12 -0000 1.151
+++ dom/org/eclipse/jdt/core/dom/AST.java 22 Nov 2006 13:56:41 -0000
@@ -269,7 +269,7 @@
CompilationUnit unit = converter.convert(compilationUnitDeclaration, source);
unit.setLineEndTable(compilationUnitDeclaration.compilationResult.getLineSeparatorPositions());
- unit.setJavaElement(workingCopy);
+ unit.setJavaFile(workingCopy);
ast.setDefaultNodeFlag(savedDefaultNodeFlag);
return unit;
}
Index: dom/org/eclipse/jdt/core/dom/CompilationUnit.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnit.java,v
retrieving revision 1.84
diff -u -r1.84 CompilationUnit.java
--- dom/org/eclipse/jdt/core/dom/CompilationUnit.java 23 Oct 2006 16:43:55 -0000 1.84
+++ dom/org/eclipse/jdt/core/dom/CompilationUnit.java 22 Nov 2006 13:56:41 -0000
@@ -18,6 +18,7 @@
import java.util.Map;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaFile;
import org.eclipse.jdt.core.compiler.IProblem;
import org.eclipse.jdt.internal.compiler.parser.Scanner;
import org.eclipse.jface.text.IDocument;
@@ -123,11 +124,10 @@
private DefaultCommentMapper commentMapper = null;
/**
- * The Java element (an org.eclipse.jdt.core.ICompilationUnit
or an org.eclipse.jdt.core.IClassFile
)
- * this compilation unit was created from, or null
if it was not created from a Java element.
- * @since 3.1
+ * The Java file (an org.eclipse.jdt.core.ICompilationUnit
or an org.eclipse.jdt.core.IClassFile
)
+ * this compilation unit was created from, or null
if it was not created from a Java file.
*/
- private IJavaElement element = null;
+ private IJavaFile javaFile = null;
/**
* The list of import declarations in textual order order;
@@ -490,9 +490,21 @@
*
* @return the Java element this compilation unit was created from, or null
if none
* @since 3.1
+ * @deprecated Use {@link #getJavaFile()} instead.
*/
public IJavaElement getJavaElement() {
- return this.element;
+ return this.javaFile;
+ }
+
+ /**
+ * The Java file (a {@link org.eclipse.jdt.core.ICompilationUnit compilation unit} or a {@link org.eclipse.jdt.core.IClassFile class file})
+ * this compilation unit was created from, or null
if it was not created from a Java file.
+ *
+ * @return the Java file this compilation unit was created from, or null
if none
+ * @since 3.3
+ */
+ public IJavaFile getJavaFile() {
+ return this.javaFile;
}
/**
@@ -931,16 +943,15 @@
this.optionalCommentList = Collections.unmodifiableList(commentList);
}
}
-
+
/**
- * Sets the Java element (an org.eclipse.jdt.core.ICompilationUnit
or an org.eclipse.jdt.core.IClassFile
)
- * this compilation unit was created from, or null
if it was not created from a Java element.
+ * Sets the Java file (a {@link org.eclipse.jdt.core.ICompilationUnit compilation unit} or a {@link org.eclipse.jdt.core.IClassFile class file})
+ * this compilation unit was created from, or null
if it was not created from a Java file.
*
- * @param element the Java element this compilation unit was created from
- * @since 3.1
+ * @param javaFile the Java file this compilation unit was created from
*/
- void setJavaElement(IJavaElement element) {
- this.element = element;
+ void setJavaFile(IJavaFile javaFile) {
+ this.javaFile = javaFile;
}
/**
Index: dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java,v
retrieving revision 1.8
diff -u -r1.8 ImportRewrite.java
--- dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java 21 Nov 2006 10:17:55 -0000 1.8
+++ dom/org/eclipse/jdt/core/dom/rewrite/ImportRewrite.java 22 Nov 2006 13:56:42 -0000
@@ -21,6 +21,8 @@
import org.eclipse.jdt.core.Flags;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IImportDeclaration;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaFile;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.Signature;
import org.eclipse.jdt.core.dom.*;
@@ -182,7 +184,8 @@
if (astRoot == null) {
throw new IllegalArgumentException("AST must not be null"); //$NON-NLS-1$
}
- if (!(astRoot.getJavaElement() instanceof ICompilationUnit)) {
+ IJavaFile javaFile = astRoot.getJavaFile();
+ if (javaFile.getElementType() != IJavaElement.COMPILATION_UNIT) {
throw new IllegalArgumentException("AST must have been constructed from a Java element"); //$NON-NLS-1$
}
List existingImport= null;
@@ -201,7 +204,7 @@
existingImport.add(buf.toString());
}
}
- return new ImportRewrite((ICompilationUnit) astRoot.getJavaElement(), astRoot, existingImport);
+ return new ImportRewrite((ICompilationUnit) javaFile, astRoot, existingImport);
}
private ImportRewrite(ICompilationUnit cu, CompilationUnit astRoot, List existingImports) {
Index: dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java,v
retrieving revision 1.29
diff -u -r1.29 ASTRewrite.java
--- dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java 23 Jun 2006 13:44:54 -0000 1.29
+++ dom/org/eclipse/jdt/core/dom/rewrite/ASTRewrite.java 22 Nov 2006 13:56:42 -0000
@@ -15,6 +15,8 @@
import java.util.Map;
import org.eclipse.jdt.core.ICompilationUnit;
+import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.IJavaFile;
import org.eclipse.jdt.core.JavaCore;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.core.dom.AST;
@@ -231,10 +233,11 @@
throw new IllegalArgumentException("This API can only be used if the AST is created from a compilation unit"); //$NON-NLS-1$
}
CompilationUnit astRoot= (CompilationUnit) root;
- if (!(astRoot.getJavaElement() instanceof ICompilationUnit)) {
+ IJavaFile javaFile = astRoot.getJavaFile();
+ if (javaFile.getElementType() != IJavaElement.COMPILATION_UNIT) {
throw new IllegalArgumentException("This API can only be used if the AST is created from a compilation unit"); //$NON-NLS-1$
}
- ICompilationUnit cu= (ICompilationUnit) astRoot.getJavaElement();
+ ICompilationUnit cu= (ICompilationUnit) javaFile;
char[] content= cu.getBuffer().getCharacters();
LineInformation lineInfo= LineInformation.create(astRoot);
Index: model/org/eclipse/jdt/core/IMember.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IMember.java,v
retrieving revision 1.23
diff -u -r1.23 IMember.java
--- model/org/eclipse/jdt/core/IMember.java 10 May 2006 18:03:42 -0000 1.23
+++ model/org/eclipse/jdt/core/IMember.java 22 Nov 2006 13:56:42 -0000
@@ -49,6 +49,14 @@
*/
ICompilationUnit getCompilationUnit();
/**
+ * Returns the Java file in which this member is declared.
+ * This is a handle-only method.
+ *
+ * @return the Java file in which this member is declared.
+ * @since 3.3
+ */
+IJavaFile getJavaFile();
+/**
* Returns the type in which this member is declared, or null
* if this member is not declared in a type (for example, a top-level type).
* This is a handle-only method.
Index: model/org/eclipse/jdt/core/ICompilationUnit.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ICompilationUnit.java,v
retrieving revision 1.58
diff -u -r1.58 ICompilationUnit.java
--- model/org/eclipse/jdt/core/ICompilationUnit.java 6 Nov 2006 14:13:47 -0000 1.58
+++ model/org/eclipse/jdt/core/ICompilationUnit.java 22 Nov 2006 13:56:42 -0000
@@ -30,7 +30,7 @@
* This interface is not intended to be implemented by clients.
*
null
if no such a type exists.
- *
- * @return the found primary type of this compilation unit, or null
if no such a type exists
- * @since 3.0
- */
-IType findPrimaryType();
-/**
* Finds the working copy for this compilation unit, given a {@link WorkingCopyOwner}.
* If no working copy has been created for this compilation unit associated with this
* working copy owner, returns null
.
@@ -286,20 +278,6 @@
*/
IType[] getAllTypes() throws JavaModelException;
/**
- * Returns the smallest element within this compilation unit that
- * includes the given source position (that is, a method, field, etc.), or
- * null
if there is no element other than the compilation
- * unit itself at the given position, or if the given position is not
- * within the source range of this compilation unit.
- *
- * @param position a source position inside the compilation unit
- * @return the innermost Java element enclosing a given source position or null
- * if none (excluding the compilation unit).
- * @throws JavaModelException if the compilation unit does not exist or if an
- * exception occurs while accessing its corresponding resource
- */
-IJavaElement getElementAt(int position) throws JavaModelException;
-/**
* Returns the first import declaration in this compilation unit with the given name.
* This is a handle-only method. The import declaration may or may not exist. This
* is a convenience method - imports can also be accessed from a compilation unit's
Index: model/org/eclipse/jdt/core/IClassFile.java
===================================================================
RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IClassFile.java,v
retrieving revision 1.21
diff -u -r1.21 IClassFile.java
--- model/org/eclipse/jdt/core/IClassFile.java 29 Sep 2006 17:13:57 -0000 1.21
+++ model/org/eclipse/jdt/core/IClassFile.java 22 Nov 2006 13:56:42 -0000
@@ -32,7 +32,7 @@
* @see IPackageFragmentRoot#attachSource(org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IPath, IProgressMonitor)
*/
-public interface IClassFile extends IJavaElement, IParent, IOpenable, ISourceReference, ICodeAssist {
+public interface IClassFile extends IJavaFile {
/**
* Changes this class file handle into a working copy. A new {@link IBuffer} is
@@ -80,21 +80,6 @@
ICompilationUnit becomeWorkingCopy(IProblemRequestor problemRequestor, WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException;
/**
- * Returns the smallest element within this class file that
- * includes the given source position (a method, field, etc.), or
- * null
if there is no element other than the class file
- * itself at the given position, or if the given position is not
- * within the source range of this class file.
- *
- * @param position a source position inside the class file
- * @return the innermost Java element enclosing a given source position or null
- * if none (excluding the class file).
- *
- * @exception JavaModelException if this element does not exist or if an
- * exception occurs while accessing its corresponding resource
- */
-IJavaElement getElementAt(int position) throws JavaModelException;
-/**
* Returns the type contained in this class file.
*
* @return the type contained in this class file
@@ -105,29 +90,6 @@
IType getType() throws JavaModelException;
/**
* Returns a working copy on the source associated with this class file using the given
- * owner to create the buffer, or null
if there is no source associated
- * with the class file.
- * - * The buffer will be automatically initialized with the source of the class file - * upon creation. - *
- * The only valid operations on this working copy are getBuffer()
or getPrimary()
.
- *
- * @param owner the owner that creates a buffer that is used to get the content of the working copy
- * or null
if the primary owner should be used
- * @param monitor a progress monitor used to report progress while opening this compilation unit
- * or null
if no progress should be reported
- * @return a a working copy on the source associated with this class file
- * @exception JavaModelException if the source of this class file can
- * not be determined. Reasons include:
- *
null
if there is no source associated
* with the class file.
* @@ -147,7 +109,7 @@ *
ICompilationUnit
+ * or an IClassFile
).
+ *
+ * + * This interface is not intended to be implemented by clients. + *
+ * + * @see ICompilationUnit + * @see IClassFile + * @since 3.3 + */ +public interface IJavaFile extends IJavaElement, IParent, IOpenable, ISourceReference, ICodeAssist { + +/** + * Finds the primary type of this Java file (that is, the type with the same name as the + * compilation unit, or the type of a class file), ornull
if no such a type exists.
+ *
+ * @return the found primary type of this Java file, or null
if no such a type exists
+ */
+IType findPrimaryType();
+
+/**
+ * Returns the smallest element within this Java file that
+ * includes the given source position (that is, a method, field, etc.), or
+ * null
if there is no element other than the Java file
+ * itself at the given position, or if the given position is not
+ * within the source range of the source of this Java file.
+ *
+ * @param position a source position inside the Java file
+ * @return the innermost Java element enclosing a given source position or null
+ * if none (excluding the Java file).
+ * @throws JavaModelException if the Java file does not exist or if an
+ * exception occurs while accessing its corresponding resource
+ */
+IJavaElement getElementAt(int position) throws JavaModelException;
+
+/**
+ * Returns a shared working copy on this compilation unit or class file using the given working copy owner to create
+ * the buffer. If this is already a working copy of the given owner, the element itself is returned.
+ * This API can only answer an already existing working copy if it is based on the same
+ * original Java file AND was using the same working copy owner (that is, as defined by {@link Object#equals}).
+ * + * The life time of a shared working copy is as follows: + *
+ * Note that the working copy owner will be used for the life time of the shared working copy, that is if the + * working copy is closed then reopened, this owner will be used. + * The buffer will be automatically initialized with the original's Java file content upon creation. + *
+ * When the shared working copy instance is created, an ADDED IJavaElementDelta is reported on this + * working copy. + *
+ * Since 2.1, a working copy can be created on a not-yet existing compilation + * unit. In particular, such a working copy can then be committed in order to create + * the corresponding compilation unit. + *
+ * Note that possible problems of this working copy are not reported using this method. + *
+ * + * @param owner the working copy owner that creates a buffer that is used to get the content + * of the working copy + * @param monitor a progress monitor used to report progress while opening this compilation unit + * ornull
if no progress should be reported
+ * @throws JavaModelException if the contents of this element can
+ * not be determined.
+ * @return a new working copy of this Java file using the given owner to create
+ * the buffer, or this Java file if it is already a working copy
+ */
+ICompilationUnit getWorkingCopy(WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException;
+
+}