### 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 18:08:58 -0000
@@ -151,6 +151,12 @@
String token = memento.nextToken();
return getHandleFromMemento(token, memento, owner);
}
+/**
+ * @see IMember
+ */
+public ISourceUnit getSourceUnit() {
+ return ((JavaElement)getParent()).getSourceUnit();
+}
/*
* @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 18:08:58 -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 ISourceUnit getSourceUnit() {
+ 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 18:08:58 -0000
@@ -294,6 +294,12 @@
*/
protected abstract char getHandleMementoDelimiter();
/**
+ * @see IMember
+ */
+ public ISourceUnit getSourceUnit() {
+ return null;
+ }
+ /**
* @see IJavaElement
*/
public IJavaModel getJavaModel() {
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 18:08:58 -0000
@@ -715,6 +715,12 @@
System.arraycopy(elements, 0, imports, 0, length);
return imports;
}
+/*
+ * @see IMember
+ */
+public ISourceUnit getSourceUnit() {
+ 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 ISourceUnit#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 18:08:56 -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.ISourceUnit;
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 ISourceUnit sourceUnit = 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.sourceUnit = 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.sourceUnit = 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;
- }
+ setSourceUnit(source);
}
/**
@@ -491,10 +476,16 @@
* is to be parsed, or null
if none
*/
public void setSource(IClassFile source) {
- this.classFileSource = source;
- // clear the others
+ setSourceUnit(source);
+ }
+
+ /* (non-Javadoc)
+ * Sets the source code to be parsed.
+ */
+ void setSourceUnit(ISourceUnit source) {
+ this.sourceUnit = 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.sourceUnit == null) {
throw new IllegalStateException("source not specified"); //$NON-NLS-1$
}
result = internalCreateAST(monitor);
@@ -781,29 +770,29 @@
CompilationUnitDeclaration compilationUnitDeclaration = null;
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) {
+ org.eclipse.jdt.internal.compiler.env.ICompilationUnit basicCompilUnit = null;
+ WorkingCopyOwner wcOwner = this.workingCopyOwner;
+ if (this.sourceUnit instanceof ICompilationUnit) {
+ /*
+ * 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
+ */
+ basicCompilUnit = (org.eclipse.jdt.internal.compiler.env.ICompilationUnit) this.sourceUnit;
+ /*
+ * 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)
+ */
+ basicCompilUnit = new BasicCompilationUnit(basicCompilUnit.getContents(), basicCompilUnit.getPackageName(), new String(basicCompilUnit.getFileName()), this.project);
+ wcOwner = ((ICompilationUnit) this.sourceUnit).getOwner();
+ } else if (this.sourceUnit instanceof IClassFile) {
try {
- String sourceString = this.classFileSource.getSource();
+ String sourceString = this.sourceUnit.getSource();
if (sourceString == null) {
throw new IllegalStateException();
}
- PackageFragment packageFragment = (PackageFragment) this.classFileSource.getParent();
- BinaryType type = (BinaryType) this.classFileSource.getType();
+ PackageFragment packageFragment = (PackageFragment) this.sourceUnit.getParent();
+ BinaryType type = (BinaryType) this.sourceUnit.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();
@@ -816,15 +805,14 @@
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;
+ basicCompilUnit = new BasicCompilationUnit(sourceString.toCharArray(), Util.toCharArrays(packageFragment.names), new String(fileName), this.project);
} 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;
- sourceUnit = new BasicCompilationUnit(this.rawSource, null, this.unitName == null ? "" : this.unitName, this.project); //$NON-NLS-1$
+ basicCompilUnit = new BasicCompilationUnit(this.rawSource, null, this.unitName == null ? "" : this.unitName, this.project); //$NON-NLS-1$
} else {
throw new IllegalStateException();
}
@@ -836,7 +824,7 @@
// parse and resolve
compilationUnitDeclaration =
CompilationUnitResolver.resolve(
- sourceUnit,
+ basicCompilUnit,
this.project,
searcher,
this.compilerOptions,
@@ -845,7 +833,7 @@
monitor);
} catch (JavaModelException e) {
compilationUnitDeclaration = CompilationUnitResolver.parse(
- sourceUnit,
+ basicCompilUnit,
searcher,
this.compilerOptions,
this.statementsRecovery);
@@ -853,7 +841,7 @@
}
} else {
compilationUnitDeclaration = CompilationUnitResolver.parse(
- sourceUnit,
+ basicCompilUnit,
searcher,
this.compilerOptions,
this.statementsRecovery);
@@ -861,14 +849,14 @@
}
CompilationUnit result = CompilationUnitResolver.convert(
compilationUnitDeclaration,
- sourceUnit.getContents(),
+ basicCompilUnit.getContents(),
this.apiLevel,
this.compilerOptions,
needToResolveBindings,
- this.compilationUnitSource == null ? this.workingCopyOwner : this.compilationUnitSource.getOwner(),
+ wcOwner,
needToResolveBindings ? new DefaultBindingResolver.BindingTables() : null,
monitor);
- result.setJavaElement(element);
+ result.setSourceUnit(this.sourceUnit);
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 18:08:57 -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.setSourceUnit(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.setSourceUnit(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 18:08:55 -0000
@@ -269,7 +269,7 @@
CompilationUnit unit = converter.convert(compilationUnitDeclaration, source);
unit.setLineEndTable(compilationUnitDeclaration.compilationResult.getLineSeparatorPositions());
- unit.setJavaElement(workingCopy);
+ unit.setSourceUnit(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 18:08:56 -0000
@@ -18,6 +18,7 @@
import java.util.Map;
import org.eclipse.jdt.core.IJavaElement;
+import org.eclipse.jdt.core.ISourceUnit;
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 source unit (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 source unit.
*/
- private IJavaElement element = null;
+ private ISourceUnit sourceUnit = null;
/**
* The list of import declarations in textual order order;
@@ -492,7 +492,7 @@
* @since 3.1
*/
public IJavaElement getJavaElement() {
- return this.element;
+ return this.sourceUnit;
}
/**
@@ -610,6 +610,17 @@
public IProblem[] getProblems() {
return this.problems;
}
+
+ /**
+ * The Java source unit (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 source unit.
+ *
+ * @return the Java source unit this compilation unit was created from, or null
if none
+ * @since 3.3
+ */
+ public ISourceUnit getSourceUnit() {
+ return this.sourceUnit;
+ }
/**
* Returns the live list of nodes for the import declarations of this
@@ -931,16 +942,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 source unit (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 source unit.
*
- * @param element the Java element this compilation unit was created from
- * @since 3.1
+ * @param sourceUnit the Java source unit this compilation unit was created from
*/
- void setJavaElement(IJavaElement element) {
- this.element = element;
+ void setSourceUnit(ISourceUnit sourceUnit) {
+ this.sourceUnit = sourceUnit;
}
/**
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 18:08:57 -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.ISourceUnit;
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)) {
+ ISourceUnit sourceUnit = astRoot.getSourceUnit();
+ if (!(sourceUnit instanceof ICompilationUnit)) {
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) sourceUnit, 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 18:08:57 -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.ISourceUnit;
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)) {
+ ISourceUnit sourceUnit = astRoot.getSourceUnit();
+ if (!(sourceUnit instanceof ICompilationUnit)) {
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) sourceUnit;
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 18:08:58 -0000
@@ -124,6 +124,14 @@
*/
int getOccurrenceCount();
/**
+ * Returns the Java source unit in which this member is declared.
+ * This is a handle-only method.
+ *
+ * @return the Java source unit in which this member is declared.
+ * @since 3.3
+ */
+ISourceUnit getSourceUnit();
+/**
* Returns the local or anonymous type declared in this source member with the given simple name and/or
* with the specified position relative to the order they are defined in the source.
* The name is empty if it is an anonymous type.
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 18:08:58 -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 18:08:57 -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 ISourceUnit {
/**
* 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 ISourceUnit extends IJavaElement, IParent, IOpenable, ISourceReference, ICodeAssist { + +/** + * Finds the primary type of this Java source unit (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 source unit, or null
if no such a type exists
+ */
+IType findPrimaryType();
+
+/**
+ * Returns the smallest element within this Java source unit that
+ * includes the given source position (that is, a method, field, etc.), or
+ * null
if there is no element other than the Java source unit
+ * itself at the given position, or if the given position is not
+ * within the source range of the source of this Java source unit.
+ *
+ * @param position a source position inside the Java source unit
+ * @return the innermost Java element enclosing a given source position or null
+ * if none (excluding the Java source unit).
+ * @throws JavaModelException if the Java source unit 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 source unit 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 source unit 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 source unit using the given owner to create
+ * the buffer, or this Java source unit if it is already a working copy
+ */
+ICompilationUnit getWorkingCopy(WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException;
+
+}