Download
Getting Started
Members
Projects
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
More
Community
Marketplace
Events
Planet Eclipse
Newsletter
Videos
Participate
Report a Bug
Forums
Mailing Lists
Wiki
IRC
How to Contribute
Working Groups
Automotive
Internet of Things
LocationTech
Long-Term Support
PolarSys
Science
OpenMDM
Toggle navigation
Bugzilla – Attachment 52107 Details for
Bug 125504
[API] common supertype for ICompilationUnit and IClassFile
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
Updated patch
IJavaFile-patch.txt (text/plain), 51.09 KB, created by
Martin Aeschlimann
on 2006-10-17 09:29:56 EDT
(
hide
)
Description:
Updated patch
Filename:
MIME Type:
Creator:
Martin Aeschlimann
Created:
2006-10-17 09:29:56 EDT
Size:
51.09 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.core >Index: model/org/eclipse/jdt/core/IWorkingCopy.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IWorkingCopy.java,v >retrieving revision 1.41 >diff -u -r1.41 IWorkingCopy.java >--- model/org/eclipse/jdt/core/IWorkingCopy.java 29 Sep 2006 17:13:57 -0000 1.41 >+++ model/org/eclipse/jdt/core/IWorkingCopy.java 17 Oct 2006 13:24:51 -0000 >@@ -277,7 +277,7 @@ > * the buffer, or this element if this element is already a working copy > * @since 2.0 > * >- * @deprecated Use {@link ICompilationUnit#getWorkingCopy(WorkingCopyOwner, IProblemRequestor, IProgressMonitor)} instead. >+ * @deprecated Use {@link IJavaFile#getWorkingCopy(WorkingCopyOwner, IProgressMonitor)} instead. > */ > IJavaElement getWorkingCopy( > IProgressMonitor monitor, >@@ -330,7 +330,7 @@ > * </ul> > * @return <code>null</code> > * >- * @deprecated Use {@link ICompilationUnit#reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)} instead. >+ * @deprecated Use {@link ICompilationUnit#reconcile(boolean, WorkingCopyOwner, IProgressMonitor)} instead. > */ > IMarker[] reconcile() throws JavaModelException; > >@@ -361,7 +361,7 @@ > * </ul> > * @since 2.0 > * >- * @deprecated Use {@link ICompilationUnit#reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor)} instead. >+ * @deprecated Use {@link ICompilationUnit#reconcile(boolean, WorkingCopyOwner, IProgressMonitor)} instead. > */ > void reconcile(boolean forceProblemDetection, IProgressMonitor monitor) throws JavaModelException; > >Index: model/org/eclipse/jdt/core/WorkingCopyOwner.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/WorkingCopyOwner.java,v >retrieving revision 1.20 >diff -u -r1.20 WorkingCopyOwner.java >--- model/org/eclipse/jdt/core/WorkingCopyOwner.java 13 Jul 2006 11:23:22 -0000 1.20 >+++ model/org/eclipse/jdt/core/WorkingCopyOwner.java 17 Oct 2006 13:24:51 -0000 >@@ -12,6 +12,8 @@ > > import org.eclipse.core.runtime.IProgressMonitor; > import org.eclipse.core.runtime.Path; >+import org.eclipse.jdt.core.dom.AST; >+import org.eclipse.jdt.core.dom.ASTParser; > import org.eclipse.jdt.internal.core.BufferManager; > import org.eclipse.jdt.internal.core.CompilationUnit; > import org.eclipse.jdt.internal.core.DefaultWorkingCopyOwner; >@@ -19,7 +21,7 @@ > import org.eclipse.jdt.internal.core.PackageFragment; > > /** >- * The owner of an <code>ICompilationUnit</code> handle in working copy mode. >+ * The owner of an {@link ICompilationUnit} handle in working copy mode. > * An owner is used to identify a working copy and to create its buffer. > * <p> > * Clients should subclass this class to instantiate a working copy owner that is specific to their need and that >@@ -29,14 +31,18 @@ > * Note: even though this class has no abstract method, which means that it provides functional default behavior, > * it is still an abstract class, as clients are intended to own their owner implementation. > * </p> >- * @see ICompilationUnit#becomeWorkingCopy(IProblemRequestor, org.eclipse.core.runtime.IProgressMonitor) >- * @see ICompilationUnit#discardWorkingCopy() >- * @see ICompilationUnit#getWorkingCopy(org.eclipse.core.runtime.IProgressMonitor) >+ * @see ICompilationUnit#getWorkingCopy(WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor) > * @since 3.0 > */ > public abstract class WorkingCopyOwner { > > /** >+ * Constant used by {@link #getReconcileASTKind()} to specify that the reconcile operation should not return an AST. >+ * @since 3.3 >+ */ >+ public static final int NO_AST = 0; >+ >+ /** > * Sets the buffer provider of the primary working copy owner. Note that even if the > * buffer provider is a working copy owner, only its <code>createBuffer(ICompilationUnit)</code> > * method is used by the primary working copy owner. It doesn't replace the internal primary >@@ -109,15 +115,151 @@ > * @throws JavaModelException if the contents of this working copy can > * not be determined. > * @return a new working copy >- * @see ICompilationUnit#becomeWorkingCopy(IProblemRequestor, IProgressMonitor) >+ * @see ICompilationUnit#becomeWorkingCopy(IProgressMonitor) > * @since 3.2 >+ * >+ * @deprecated Use {@link #newWorkingCopy(String, IClasspathEntry[], IProgressMonitor)} instead to make sure the >+ * woking copy owners problem requestor. > */ > public final ICompilationUnit newWorkingCopy(String name, IClasspathEntry[] classpath, IProblemRequestor problemRequestor, IProgressMonitor monitor) throws JavaModelException { > ExternalJavaProject project = new ExternalJavaProject(classpath); > IPackageFragment parent = project.getPackageFragmentRoot(Path.EMPTY).getPackageFragment(IPackageFragment.DEFAULT_PACKAGE_NAME); > CompilationUnit result = new CompilationUnit((PackageFragment) parent, name, this); > result.becomeWorkingCopy(problemRequestor, monitor); >+ // TODO decide if also the default problem requestor (getProblemRequestor) should be notified. > return result; > } >- >+ >+ /** >+ * Returns a new working copy with the given name using this working copy owner to >+ * create its buffer. >+ * <p> >+ * This working copy always belongs to the default package in a package >+ * fragment root that corresponds to its Java project, and this Java project never exists. >+ * However this Java project has the given classpath that is used when resolving names >+ * in this working copy. >+ * </p><p> >+ * A DOM AST created using this working copy will have bindings resolved using the given >+ * classpath, and problem are reported to the given problem requestor. >+ * <p></p> >+ * <code>JavaCore#getOptions()</code> is used to create the DOM AST as it is not >+ * possible to set the options on the non-existing Java project. >+ * </p><p> >+ * When the working copy instance is created, an {@link IJavaElementDelta#ADDED added delta} is >+ * reported on this working copy. >+ * </p><p> >+ * Once done with the working copy, users of this method must discard it using >+ * {@link ICompilationUnit#discardWorkingCopy()}. >+ * </p><p> >+ * Note that when such working copy is committed, only its buffer is saved (see >+ * {@link IBuffer#save(IProgressMonitor, boolean)}) but no resource is created. >+ * </p><p> >+ * This method is not intended to be overriden by clients. >+ * </p> >+ * >+ * @param name the name of the working copy (e.g. "X.java") >+ * @param classpath the classpath used to resolve names in this working copy >+ * @param monitor a progress monitor used to report progress while opening the working copy >+ * or <code>null</code> if no progress should be reported >+ * @throws JavaModelException if the contents of this working copy can >+ * not be determined. >+ * @return a new working copy >+ * @see ICompilationUnit#becomeWorkingCopy(IProgressMonitor) >+ * >+ * @since 3.3 >+ */ >+ public final ICompilationUnit newWorkingCopy(String name, IClasspathEntry[] classpath, IProgressMonitor monitor) throws JavaModelException { >+ ExternalJavaProject project = new ExternalJavaProject(classpath); >+ IPackageFragment parent = project.getPackageFragmentRoot(Path.EMPTY).getPackageFragment(IPackageFragment.DEFAULT_PACKAGE_NAME); >+ CompilationUnit result = new CompilationUnit((PackageFragment) parent, name, this); >+ result.becomeWorkingCopy(getProblemRequestor(), monitor); >+ return result; >+ } >+ >+ /** >+ * Returns the problem requestor used on reconcile (see {@link ICompilationUnit#reconcile(boolean, WorkingCopyOwner, IProgressMonitor)} >+ * by working copies of this working copy owner. <code>null</code> is returned if no problem requestor needs to be informed. >+ * <p> >+ * By default, no problem requestor is configured. Clients can override this method to provide a requestor. >+ * </p> >+ * >+ * @return the problem requestor to be used by working copies of this working copy owner or <code>null</code> >+ * if no problem requestor is configured. >+ * >+ * @since 3.3 >+ */ >+ public IProblemRequestor getProblemRequestor() { >+ return null; >+ } >+ >+ /** >+ * Returns if and what kind of AST should be created on reconcile of a working copy of this working copy owner. >+ * If {@link #NO_AST} is returned, no AST will be created. Use the AST level constants on {@link AST} (for example >+ * {@link AST#JLS3}) to create an AST of given level. >+ * >+ * @return returns {@link #NO_AST} if no AST should be created on reconcile or the AST level of the AST to create. >+ * @see #getReconcileASTRecoverStatements() >+ * @see #getReconcileASTResolveBindings() >+ * @see ASTParser#newParser(int) >+ * >+ * @since 3.3 >+ */ >+ public int getReconcileASTKind() { >+ return NO_AST; >+ } >+ >+ /** >+ * Specifies if an AST created on reconcile should contain resolved bindings or not. >+ * Note, ASTs are only created on reconcile if {@link #getReconcileASTKind()} does not return {@link #NO_AST}. >+ * >+ * @return <code>true</code> is returned if AST created on reconcile should also contain resolved bindings. >+ * @see ASTParser#setResolveBindings(boolean) >+ * >+ * @since 3.3 >+ */ >+ public boolean getReconcileASTResolveBindings() { >+ return false; >+ } >+ >+ /** >+ * Specifies if an AST created on reconcile should try to recover statements or not. >+ * Note, ASTs are only created on reconcile if {@link #getReconcileASTKind()} does not return {@link #NO_AST}. >+ * >+ * @return <code>true</code> is returned if AST created on reconcile should also try to recover statements. >+ * @see ASTParser#setStatementsRecovery(boolean) >+ * >+ * @since 3.3 >+ */ >+ public boolean getReconcileASTRecoverStatements() { >+ return false; >+ } >+ >+ /** >+ * Returns a new non primary owner using the built-in buffer management and the given settings. >+ * >+ * @param requestor the problem requestor to use >+ * @param astKind the AST level to use or {@link #NO_AST} to not provide an AST on reconcile >+ * @param resolveBindings specifies if ASTs created on reconcile should contain resolved bindings >+ * @param recoverStatements specifies if ASTs created on reconcile should try to recover statements >+ * >+ * @return the new working copy owner >+ * >+ * @since 3.3 >+ */ >+ public WorkingCopyOwner createNonPrimaryOwner(final IProblemRequestor requestor, final int astKind, final boolean resolveBindings, final boolean recoverStatements) { >+ return new WorkingCopyOwner() { >+ public IProblemRequestor getProblemRequestor() { >+ return requestor; >+ } >+ public int getReconcileASTKind() { >+ return astKind; >+ } >+ public boolean getReconcileASTResolveBindings() { >+ return resolveBindings; >+ } >+ public boolean getReconcileASTRecoverStatements() { >+ return recoverStatements; >+ } >+ }; >+ } > } >Index: model/org/eclipse/jdt/core/IMember.java >=================================================================== >RCS file: /home/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 17 Oct 2006 13:24:51 -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 <code>null</code> > * 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: /home/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ICompilationUnit.java,v >retrieving revision 1.57 >diff -u -r1.57 ICompilationUnit.java >--- model/org/eclipse/jdt/core/ICompilationUnit.java 29 Mar 2006 03:08:46 -0000 1.57 >+++ model/org/eclipse/jdt/core/ICompilationUnit.java 17 Oct 2006 13:24:51 -0000 >@@ -30,10 +30,12 @@ > * This interface is not intended to be implemented by clients. > * </p> > */ >-public interface ICompilationUnit extends IJavaElement, ISourceReference, IParent, IOpenable, IWorkingCopy, ISourceManipulation, ICodeAssist { >+public interface ICompilationUnit extends IJavaFile, IWorkingCopy, ISourceManipulation { > /** > * Constant indicating that a reconcile operation should not return an AST. > * @since 3.0 >+ * >+ * @deprecated > */ > public static final int NO_AST = 0; > >@@ -67,8 +69,43 @@ > * @throws JavaModelException if this compilation unit could not become a working copy. > * @see #discardWorkingCopy() > * @since 3.0 >+ * >+ * @deprecated Use {@link #becomeWorkingCopy(IProgressMonitor)} instead which uses the >+ * {@IProblemRequestor problem requestor} defined by this compilation units working copy owner >+ * (see {@link WorkingCopyOwner#getProblemRequestor()}). > */ > void becomeWorkingCopy(IProblemRequestor problemRequestor, IProgressMonitor monitor) throws JavaModelException; >+ >+/** >+ * Makes sure this compilation unit handle is in a working copy mode, say an {@link IBuffer} is >+ * created using this compilation units working copy owner. >+ * This method only has an effect if the compilation is a primary compilation unit ({@link ICompilationUnit#isPrimary()} >+ * as only primary working copies can be in a non-working copy state. >+ * <p> >+ * For each call to this API, regardless if this compilation unit was already a working copy or not, >+ * an internal reference counter is incremented. As long as this reference counter is not 0, the buffer is kept in memory. >+ * </p> >+ * <p> >+ * To bring this compilation unit back into the original mode (where it reflects the underlying resource) and to >+ * to release the buffer, {@link #discardWorkingCopy} must be called as many >+ * times as {@link #becomeWorkingCopy(IProgressMonitor)}. >+ * </p> >+ * <p> >+ * Once in working copy mode, changes to this compilation unit or its children are done in memory. >+ * Only the buffer is affected. Using {@link #commitWorkingCopy(boolean, IProgressMonitor)} >+ * will bring the underlying resource in sync with this compilation unit. {@link #commitWorkingCopy(boolean, IProgressMonitor)} >+ * does not modify the internal reference counter. >+ * </p> >+ * >+ * @param monitor a progress monitor used to report progress while opening this compilation unit >+ * or <code>null</code> if no progress should be reported >+ * @throws JavaModelException if this compilation unit could not become a working copy. >+ * @see #discardWorkingCopy() >+ * >+ * @since 3.3 >+ */ >+void becomeWorkingCopy(IProgressMonitor monitor) throws JavaModelException; >+ > /** > * Commits the contents of this working copy to its underlying resource. > * >@@ -223,13 +260,17 @@ > * This has no effect if this compilation unit was not in working copy mode. > * </p> > * <p> >- * If {@link #becomeWorkingCopy} was called several times on this >+ * If {@link #becomeWorkingCopy(IProgressMonitor)} was called several times on this > * compilation unit, {@link #discardWorkingCopy} must be called as > * many times before it switches back to the original mode. > * </p> >+ * <p>{@link #discardWorkingCopy} also has to be called on each compilation unit returned by >+ * {@link #getWorkingCopy(WorkingCopyOwner, IProgressMonitor)}. >+ * </p> > * > * @throws JavaModelException if this working copy could not return in its original mode. >- * @see #becomeWorkingCopy(IProblemRequestor, IProgressMonitor) >+ * @see #becomeWorkingCopy(IProgressMonitor) >+ * @see #getWorkingCopy(WorkingCopyOwner, IProgressMonitor) > * @since 3.0 > */ > void discardWorkingCopy() throws JavaModelException; >@@ -286,20 +327,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 >- * <code>null</code> 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 <code>null</code> >- * 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 >@@ -344,8 +371,8 @@ > */ > ICompilationUnit getPrimary(); > /** >- * Returns the working copy owner of this working copy. >- * Returns null if it is not a working copy or if it has no owner. >+ * Returns the working copy owner of this working copy or <code>null</code> if this compilation unit is managed by the >+ * primary owner. > * > * @return WorkingCopyOwner the owner of this working copy or <code>null</code> > * @since 3.0 >@@ -415,6 +442,9 @@ > * @return a new working copy of this element if this element is not > * a working copy, or this element if this element is already a working copy > * @since 3.0 >+ * >+ * @deprecated use {@link #getWorkingCopy(WorkingCopyOwner, IProgressMonitor)} instead with a own instance of a working copy >+ * owner. > */ > ICompilationUnit getWorkingCopy(IProgressMonitor monitor) throws JavaModelException; > /** >@@ -457,6 +487,8 @@ > * @return a new working copy of this element using the given factory to create > * the buffer, or this element if this element is already a working copy > * @since 3.0 >+ * >+ * @deprecated Use {@link IJavaFile#getWorkingCopy(WorkingCopyOwner, IProgressMonitor)} instead > */ > ICompilationUnit getWorkingCopy(WorkingCopyOwner owner, IProblemRequestor problemRequestor, IProgressMonitor monitor) throws JavaModelException; > /** >@@ -469,7 +501,19 @@ > */ > public boolean hasResourceChanged(); > /** >- * Returns whether this element is a working copy. >+ * Returns true if this compilation is managed by the primary owner. The primary owner >+ * typically contains the elements as seen in the file system or by the shared buffer. >+ * All non-primary files belong to a custom woking copy ower that typically contains some >+ * selected elements in a working state and inherits all other elements from the primary buffer. >+ * >+ * @return returns true if this compilation is managed by the primary owner >+ * >+ * @since 3.3 >+ */ >+boolean isPrimary(); >+/** >+ * Returns whether this element is a working copy. A woking copy is either a compilation unit with a non-primary >+ * woking copy woner, or a primary compilation unit in buffered state. > * > * @return true if this element is a working copy, false otherwise > * @since 3.0 >@@ -536,6 +580,10 @@ > * <li> The original Java element does not exist (ELEMENT_DOES_NOT_EXIST)</li> > * </ul> > * @since 3.0 >+ * >+ * @deprecated use {@link #reconcile(boolean, WorkingCopyOwner, IProgressMonitor)} instead and use the AST as specified by >+ * {@link WorkingCopyOwner}. Using this API can result in performance degradation if the requested AST is >+ * incompatible to the one configured in the {@link WorkingCopyOwner}. > */ > CompilationUnit reconcile(int astLevel, boolean forceProblemDetection, WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException; > >@@ -601,10 +649,66 @@ > * <li> The original Java element does not exist (ELEMENT_DOES_NOT_EXIST)</li> > * </ul> > * @since 3.2 >+ * >+ * @deprecated Use {@link #reconcile(boolean, WorkingCopyOwner, IProgressMonitor)} instead and use the AST as specified by >+ * {@link WorkingCopyOwner}. Using this API can result in performance degradation if the requested AST is >+ * incompatible to the one configured in the {@link WorkingCopyOwner}. > */ > CompilationUnit reconcile(int astLevel, boolean forceProblemDetection, boolean enableStatementsRecovery, WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException; > > /** >+ * Reconciles the contents of this working copy, sends out a Java delta >+ * notification indicating the nature of the change of the working copy since >+ * the last time it was either reconciled or made consistent >+ * ({@link IOpenable#makeConsistent(IProgressMonitor)}), and returns a >+ * compilation unit AST if requested. >+ * <p> >+ * It performs the reconciliation by locally caching the contents of >+ * the working copy, updating the contents, then creating a delta >+ * over the cached contents and the new contents, and finally firing >+ * this delta. >+ * <p> >+ * The boolean argument allows to force problem detection even if the >+ * working copy is already consistent. >+ * </p> >+ * <p> >+ * This functionality allows to specify a working copy owner which is used >+ * during problem detection. All references contained in the working copy are >+ * resolved against other units; for which corresponding owned working copies >+ * are going to take precedence over their original compilation units. If >+ * <code>null</code> is passed in, then the primary working copy owner is used. >+ * </p> >+ * <p> >+ * If the working copy owner defines a problem requestor (see {@link WorkingCopyOwner#getProblemRequestor()}) >+ * all compilation problems found in the new contents are reported to the requestor. >+ * </p> >+ * <p> >+ * If the working copy owner defines that an AST should be build (see {@link WorkingCopyOwner#getReconcileASTKind()}) >+ * the created AST using the given parameters (see {@link WorkingCopyOwner#getReconcileASTRecoverStatements()}, {@link WorkingCopyOwner#getReconcileASTResolveBindings()}) >+ * is returned by this method and also reported in the Java delta notification (see {@link IJavaElementDelta#getCompilationUnitAST()}). >+ * </p> >+ * <p> >+ * Note: Since 3.0, added/removed/changed inner types generate change deltas. >+ * </p> >+ * @param forceProblemDetection boolean indicating whether problem should be >+ * recomputed even if the source hasn't changed >+ * @param owner the owner of working copies that take precedence over the >+ * original compilation units, or <code>null</code> if the primary working >+ * copy owner should be used >+ * @param monitor a progress monitor >+ * @return the compilation unit AST as configured by the {@link WorkingCopyOwner} or <code>null</code> >+ * or the working copy did not request an AST. >+ * @throws JavaModelException if the contents of the original element >+ * cannot be accessed. Reasons include: >+ * <ul> >+ * <li> The original Java element does not exist (ELEMENT_DOES_NOT_EXIST)</li> >+ * </ul> >+ * >+ * @since 3.3 >+ */ >+CompilationUnit reconcile(boolean forceProblemDetection, WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException; >+ >+/** > * Restores the contents of this working copy to the current contents of > * this working copy's original element. Has no effect if this element > * is not a working copy. >Index: model/org/eclipse/jdt/core/IJavaElementDelta.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaElementDelta.java,v >retrieving revision 1.34 >diff -u -r1.34 IJavaElementDelta.java >--- model/org/eclipse/jdt/core/IJavaElementDelta.java 29 Sep 2006 17:13:57 -0000 1.34 >+++ model/org/eclipse/jdt/core/IJavaElementDelta.java 17 Oct 2006 13:24:51 -0000 >@@ -297,12 +297,14 @@ > * Returns the compilation unit AST created by the last reconcile operation on this delta's element. > * This returns a non-null value if and only if: > * <ul> >- * <li>the last reconcile operation on this working copy requested an AST</li> >+ * <li>the last reconcile operation on this working copy requested an AST. Note: Since 3.3 the >+ * working copy owner can specify if and what AST will be returned on reconcile</li> > * <li>this delta's element is an <code>ICompilationUnit</code> in working copy mode</li> > * <li>the delta comes from a <code>POST_RECONCILE</code> event > * </ul> >+ * > * @return the AST created during the last reconcile operation >- * @see ICompilationUnit#reconcile(int, boolean, WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor) >+ * @see ICompilationUnit#reconcile(boolean, WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor) > * @see #F_AST_AFFECTED > * @since 3.2 > */ >Index: model/org/eclipse/jdt/core/IClassFile.java >=================================================================== >RCS file: /home/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 17 Oct 2006 13:24:50 -0000 >@@ -32,69 +32,16 @@ > * @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 >- * created using the given owner. Uses the primary owner if <code>null</code> is >- * specified. >- * <p> >- * When switching to working copy mode, problems are reported to the given >- * {@link IProblemRequestor}. Note that once in working copy mode, the given >- * {@link IProblemRequestor} is ignored. Only the original {@link IProblemRequestor} >- * is used to report subsequent problems. >- * </p> >- * <p> >- * Once in working copy mode, changes to this working copy or its children are done in memory. >- * Only the new buffer is affected. >- * </p> >- * <p> >- * Using {@link ICompilationUnit#commitWorkingCopy(boolean, IProgressMonitor)} on the working copy >- * will throw a <code>JavaModelException</code> as a class file is implicetly read-only. >- * </p> >- * <p> >- * If this class file was already in working copy mode, an internal counter is incremented and no >- * other action is taken on this working copy. To bring this working copy back into the original mode >- * (where it reflects the underlying resource), {@link ICompilationUnit#discardWorkingCopy} must be call as many >- * times as {@link #becomeWorkingCopy(IProblemRequestor, WorkingCopyOwner, IProgressMonitor)}. >- * </p> >- * <p> >- * The primary compilation unit of a class file's working copy does not exist if the class file is not >- * in working copy mode (<code>classFileWorkingCopy.getPrimary().exists() == false</code>). >- * </p> >- * <p> >- * The resource of a class file's working copy is <code>null</code> if the class file is in an external jar file. >- * </p> >- * >- * @param problemRequestor a requestor which will get notified of problems detected during >- * reconciling as they are discovered. The requestor can be set to <code>null</code> indicating >- * that the client is not interested in problems. >- * @param owner the given {@link WorkingCopyOwner}, or <code>null</code> for the primary owner >- * @param monitor a progress monitor used to report progress while opening this compilation unit >- * or <code>null</code> if no progress should be reported >- * @return a working copy for this class file >- * @throws JavaModelException if this compilation unit could not become a working copy. >- * @see ICompilationUnit#discardWorkingCopy() > * @since 3.2 >+ * >+ * @deprecated use {@link IJavaFile#getWorkingCopy(WorkingCopyOwner, IProgressMonitor)} > */ > 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 >- * <code>null</code> 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 <code>null</code> >- * 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 +52,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 <code>null</code> if there is no source associated >- * with the class file. >- * <p> >- * The buffer will be automatically initialized with the source of the class file >- * upon creation. >- * <p> >- * The only valid operations on this working copy are <code>getBuffer()</code> or <code>getPrimary()</code>. >- * >- * @param owner the owner that creates a buffer that is used to get the content of the working copy >- * or <code>null</code> if the primary owner should be used >- * @param monitor a progress monitor used to report progress while opening this compilation unit >- * or <code>null</code> 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: >- * <ul> >- * <li> This class file does not exist (ELEMENT_DOES_NOT_EXIST)</li> >- * </ul> >- * @since 3.0 >- */ >-ICompilationUnit getWorkingCopy(WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException; >-/** >- * Returns a working copy on the source associated with this class file using the given > * factory to create the buffer, or <code>null</code> if there is no source associated > * with the class file. > * <p> >@@ -147,7 +71,7 @@ > * <li> This class file does not exist (ELEMENT_DOES_NOT_EXIST)</li> > * </ul> > * @since 2.0 >- * @deprecated Use {@link #getWorkingCopy(WorkingCopyOwner, IProgressMonitor)} instead >+ * @deprecated Use {@link IJavaFile#getWorkingCopy(WorkingCopyOwner, IProgressMonitor)} instead > */ > IJavaElement getWorkingCopy(IProgressMonitor monitor, IBufferFactory factory) throws JavaModelException; > /** >Index: model/org/eclipse/jdt/internal/core/SourceRefElement.java >=================================================================== >RCS file: /home/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 17 Oct 2006 13:24:52 -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/CompilationUnit.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/CompilationUnit.java,v >retrieving revision 1.233 >diff -u -r1.233 CompilationUnit.java >--- model/org/eclipse/jdt/internal/core/CompilationUnit.java 17 Jul 2006 11:40:27 -0000 1.233 >+++ model/org/eclipse/jdt/internal/core/CompilationUnit.java 17 Oct 2006 13:24:52 -0000 >@@ -586,6 +586,12 @@ > return this; > } > /** >+ * @see IMember#getJavaFile() >+ */ >+public IJavaFile getJavaFile() { >+ return this; >+} >+/** > * @see org.eclipse.jdt.internal.compiler.env.ICompilationUnit#getContents() > */ > public char[] getContents() { >@@ -873,6 +879,7 @@ > } > /** > * @see ICompilationUnit#getWorkingCopy(IProgressMonitor) >+ * @deprecated > */ > public ICompilationUnit getWorkingCopy(IProgressMonitor monitor) throws JavaModelException { > return getWorkingCopy(new WorkingCopyOwner() {/*non shared working copy*/}, null/*no problem requestor*/, monitor); >@@ -886,6 +893,7 @@ > } > /** > * @see ICompilationUnit#getWorkingCopy(WorkingCopyOwner, IProblemRequestor, IProgressMonitor) >+ * @deprecated > */ > public ICompilationUnit getWorkingCopy(WorkingCopyOwner workingCopyOwner, IProblemRequestor problemRequestor, IProgressMonitor monitor) throws JavaModelException { > if (!isPrimary()) return this; >@@ -1086,6 +1094,7 @@ > } > /** > * @see ICompilationUnit#reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor) >+ * @deprecated > */ > public void reconcile(boolean forceProblemDetection, IProgressMonitor monitor) throws JavaModelException { > reconcile(NO_AST, forceProblemDetection, false, null/*use primary owner*/, monitor); >@@ -1094,6 +1103,7 @@ > /** > * @see ICompilationUnit#reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor) > * @since 3.0 >+ * @deprecated > */ > public org.eclipse.jdt.core.dom.CompilationUnit reconcile( > int astLevel, >@@ -1107,6 +1117,7 @@ > /** > * @see ICompilationUnit#reconcile(int, boolean, WorkingCopyOwner, IProgressMonitor) > * @since 3.0 >+ * @deprecated > */ > public org.eclipse.jdt.core.dom.CompilationUnit reconcile( > int astLevel, >@@ -1211,5 +1222,26 @@ > } > ((CompilationUnitElementInfo) getElementInfo()).timestamp = timeStamp; > } >+/* (non-Javadoc) >+ * @see org.eclipse.jdt.core.ICompilationUnit#becomeWorkingCopy(org.eclipse.core.runtime.IProgressMonitor) >+ */ >+public void becomeWorkingCopy(IProgressMonitor monitor) throws JavaModelException { >+ becomeWorkingCopy(this.owner.getProblemRequestor(), monitor); >+} >+/* (non-Javadoc) >+ * @see org.eclipse.jdt.core.ICompilationUnit#reconcile(boolean, org.eclipse.jdt.core.WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor) >+ */ >+public org.eclipse.jdt.core.dom.CompilationUnit reconcile(boolean forceProblemDetection, WorkingCopyOwner workingCopyOwner, IProgressMonitor monitor) throws JavaModelException { >+ int astLevel= workingCopyOwner.getReconcileASTKind(); >+ boolean statementRecovery= workingCopyOwner.getReconcileASTRecoverStatements(); >+ boolean resolveBindings= workingCopyOwner.getReconcileASTResolveBindings(); // TODO: new API to pass in 'resolveBindings' >+ return reconcile(astLevel, forceProblemDetection, statementRecovery, workingCopyOwner, monitor); >+} >+/* (non-Javadoc) >+ * @see org.eclipse.jdt.core.IJavaFile#getWorkingCopy(org.eclipse.jdt.core.WorkingCopyOwner, org.eclipse.core.runtime.IProgressMonitor) >+ */ >+public ICompilationUnit getWorkingCopy(WorkingCopyOwner workingCopyOwner, IProgressMonitor monitor) throws JavaModelException { >+ return getWorkingCopy(workingCopyOwner, workingCopyOwner.getProblemRequestor(), monitor); >+} > > } >Index: model/org/eclipse/jdt/internal/core/ClassFile.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClassFile.java,v >retrieving revision 1.127 >diff -u -r1.127 ClassFile.java >--- model/org/eclipse/jdt/internal/core/ClassFile.java 23 Jun 2006 11:16:24 -0000 1.127 >+++ model/org/eclipse/jdt/internal/core/ClassFile.java 17 Oct 2006 13:24:52 -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: /home/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaElement.java,v >retrieving revision 1.122 >diff -u -r1.122 JavaElement.java >--- model/org/eclipse/jdt/internal/core/JavaElement.java 10 May 2006 17:05:15 -0000 1.122 >+++ model/org/eclipse/jdt/internal/core/JavaElement.java 17 Oct 2006 13:24:52 -0000 >@@ -294,6 +294,12 @@ > */ > protected abstract char getHandleMementoDelimiter(); > /** >+ * @see IMember >+ */ >+ public IJavaFile getJavaFile() { >+ return null; >+ } >+ /** > * @see IJavaElement > */ > public IJavaModel getJavaModel() { >Index: dom/org/eclipse/jdt/core/dom/ASTParser.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/ASTParser.java,v >retrieving revision 1.65 >diff -u -r1.65 ASTParser.java >--- dom/org/eclipse/jdt/core/dom/ASTParser.java 23 Jun 2006 13:44:54 -0000 1.65 >+++ dom/org/eclipse/jdt/core/dom/ASTParser.java 17 Oct 2006 13:24:50 -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 <code>null</code> 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; >- } >+ setSource((IJavaFile) source); > } > > /** >@@ -491,10 +476,25 @@ > * is to be parsed, or <code>null</code> if none > */ > public void setSource(IClassFile source) { >- this.classFileSource = source; >- // clear the others >+ setSource((IJavaFile) source); >+ } >+ >+ /** >+ * Sets the source code to be parsed. >+ * <p>This method automatically sets the project (and compiler >+ * options) based on the given compilation unit of class file, in a manner >+ * equivalent to <code>setProject(source.getJavaProject())</code>.</p> >+ * <p>If source is a class file has without source attachment, the creation of the >+ * ast will fail with an IllegalStateException.</p> >+ * >+ * @param source the Java model compilation unit or class file whose corresponding source code >+ * is to be parsed, or <code>null</code> if none >+ * @since 3.3 >+ */ >+ public void setSource(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); >@@ -623,8 +623,7 @@ > if (monitor != null) monitor.beginTask("", 1); //$NON-NLS-1$ > try { > if ((this.rawSource == null) >- && (this.compilationUnitSource == null) >- && (this.classFileSource == null)) { >+ && (this.javaFileSource == null)) { > throw new IllegalStateException("source not specified"); //$NON-NLS-1$ > } > result = internalCreateAST(monitor); >@@ -782,22 +781,22 @@ > try { > NodeSearcher searcher = null; > org.eclipse.jdt.internal.compiler.env.ICompilationUnit sourceUnit = null; >- IJavaElement element = null; >- if (this.compilationUnitSource != null) { >- sourceUnit = (org.eclipse.jdt.internal.compiler.env.ICompilationUnit) this.compilationUnitSource; >- // use a BasicCompilation that caches the source instead of using the compilationUnitSource directly >+ IJavaFile javaFile = null; >+ if (this.javaFileSource instanceof ICompilationUnit) { >+ sourceUnit = (org.eclipse.jdt.internal.compiler.env.ICompilationUnit) this.javaFileSource; >+ // use a BasicCompilation that caches the source instead of using the javaFileSource 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) { >+ javaFile = this.javaFileSource; >+ } else if (this.javaFileSource instanceof IClassFile) { > try { >- String sourceString = this.classFileSource.getSource(); >+ String sourceString = this.javaFileSource.getSource(); > if (sourceString == null) { > throw new IllegalStateException(); > } >- PackageFragment packageFragment = (PackageFragment) this.classFileSource.getParent(); >- BinaryType type = (BinaryType) this.classFileSource.getType(); >+ 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(); >@@ -811,7 +810,7 @@ > fileName = newFileName; > } > sourceUnit = new BasicCompilationUnit(sourceString.toCharArray(), Util.toCharArrays(packageFragment.names), new String(fileName), this.project); >- element = this.classFileSource; >+ javaFile = this.javaFileSource; > } catch(JavaModelException e) { > // an error occured accessing the java element > throw new IllegalStateException(); >@@ -859,10 +858,10 @@ > this.apiLevel, > this.compilerOptions, > needToResolveBindings, >- this.compilationUnitSource == null ? this.workingCopyOwner : this.compilationUnitSource.getOwner(), >+ ! (this.javaFileSource instanceof ICompilationUnit) ? this.workingCopyOwner : ((ICompilationUnit) this.javaFileSource).getOwner(), > needToResolveBindings ? new DefaultBindingResolver.BindingTables() : null, > monitor); >- result.setJavaElement(element); >+ result.setJavaElement(javaFile); > return result; > } finally { > if (compilationUnitDeclaration != null && this.resolveBindings) { >Index: dom/org/eclipse/jdt/core/dom/CompilationUnit.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.core/dom/org/eclipse/jdt/core/dom/CompilationUnit.java,v >retrieving revision 1.83 >diff -u -r1.83 CompilationUnit.java >--- dom/org/eclipse/jdt/core/dom/CompilationUnit.java 23 Jun 2006 13:44:54 -0000 1.83 >+++ dom/org/eclipse/jdt/core/dom/CompilationUnit.java 17 Oct 2006 13:24:50 -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,11 @@ > private DefaultCommentMapper commentMapper = null; > > /** >- * The Java element (an <code>org.eclipse.jdt.core.ICompilationUnit</code> or an <code>org.eclipse.jdt.core.IClassFile</code>) >- * this compilation unit was created from, or <code>null</code> if it was not created from a Java element. >+ * The Java file (an <code>org.eclipse.jdt.core.ICompilationUnit</code> or an <code>org.eclipse.jdt.core.IClassFile</code>) >+ * this compilation unit was created from, or <code>null</code> if it was not created from a Java file. > * @since 3.1 > */ >- private IJavaElement element = null; >+ private IJavaFile javaFile = null; > > /** > * The list of import declarations in textual order order; >@@ -492,7 +493,18 @@ > * @since 3.1 > */ > public IJavaElement getJavaElement() { >- return this.element; >+ return this.javaFile; >+ } >+ >+ /** >+ * The Java file (an <code>org.eclipse.jdt.core.ICompilationUnit</code> or an <code>org.eclipse.jdt.core.IClassFile</code>) >+ * this compilation unit was created from, or <code>null</code> if it was not created from a Java file. >+ * >+ * @return the Java file this compilation unit was created from, or <code>null</code> if none >+ * @since 3.3 >+ */ >+ public IJavaFile getJavaFile() { >+ return this.javaFile; > } > > /** >@@ -936,11 +948,12 @@ > * Sets the Java element (an <code>org.eclipse.jdt.core.ICompilationUnit</code> or an <code>org.eclipse.jdt.core.IClassFile</code>) > * this compilation unit was created from, or <code>null</code> if it was not created from a Java element. > * >- * @param element the Java element this compilation unit was created from >+ * @param javaFile the Java file this compilation unit was created from > * @since 3.1 > */ >- void setJavaElement(IJavaElement element) { >- this.element = element; >+ //TODO: rename to setJavaFile(..) >+ void setJavaElement(IJavaFile javaFile) { >+ this.javaFile = javaFile; > } > > /** >Index: model/org/eclipse/jdt/core/IJavaFile.java >=================================================================== >RCS file: model/org/eclipse/jdt/core/IJavaFile.java >diff -N model/org/eclipse/jdt/core/IJavaFile.java >--- /dev/null 1 Jan 1970 00:00:00 -0000 >+++ model/org/eclipse/jdt/core/IJavaFile.java 1 Jan 1970 00:00:00 -0000 >@@ -0,0 +1,96 @@ >+/******************************************************************************* >+ * Copyright (c) 2006 IBM Corporation and others. >+ * All rights reserved. This program and the accompanying materials >+ * are made available under the terms of the Common Public License v1.0 >+ * which accompanies this distribution, and is available at >+ * http://www.eclipse.org/legal/cpl-v10.html >+ * >+ * Contributors: >+ * IBM Corporation - initial API and implementation >+ *******************************************************************************/ >+package org.eclipse.jdt.core; >+ >+import org.eclipse.core.runtime.IProgressMonitor; >+ >+ >+/** >+ * Represents an entire Java type container (either an <code>ICompilationUnit</code> >+ * or an <code>IClassFile</code>). >+ * >+ * <p> >+ * This interface is not intended to be implemented by clients. >+ * </p> >+ * >+ * @see ICompilationUnit >+ * @see IClassFile >+ * @since 3.3 >+ */ >+public interface IJavaFile extends IJavaElement, IParent, IOpenable, ISourceReference, ICodeAssist { >+ >+/** >+ * 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 compilation unit AND was using the same working copy owner (that is, as defined by {@link Object#equals}). >+ * <p> >+ * The life time of a shared working copy is as follows: >+ * <ul> >+ * <li>The first call to {@link #getWorkingCopy(WorkingCopyOwner, IProgressMonitor)} >+ * creates a new working copy for this element</li> >+ * <li>Subsequent calls increment an internal counter.</li> >+ * <li>A call to {@link ICompilationUnit#discardWorkingCopy()} decrements the internal counter.</li> >+ * <li>When this counter is 0, the working copy is discarded. >+ * </ul> >+ * So users of this method must discard exactly once the working copy. >+ * <p> >+ * Note that the working copy owner will be used for the life time of this 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 compilation unit content >+ * upon creation. >+ * <p> >+ * When the shared working copy instance is created, an ADDED IJavaElementDelta is reported on this >+ * working copy. >+ * </p><p> >+ * 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. >+ * </p><p> >+ * The problems of this working copy are reported to the {@link IProblemRequestor} configured by the >+ * {@link WorkingCopyOwner}. >+ * </p> >+ * >+ * @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 >+ * or <code>null</code> 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 element using the given factory to create >+ * the buffer, or this element if this element is already a working copy >+ */ >+ICompilationUnit getWorkingCopy(WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException; >+ >+/** >+ * Returns the smallest element within this java file that >+ * includes the given source position (that is, a method, field, etc.), or >+ * <code>null</code> 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 this compilation unit. >+ * >+ * @param position a source position inside the java file >+ * @return the innermost Java element enclosing a given source position or <code>null</code> >+ * 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; >+ >+/** >+ * 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), or <code>null</code> if no such a type exists. >+ * >+ * @return the found primary type of this java file, or <code>null</code> if no such a type exists >+ */ >+IType findPrimaryType(); >+ >+}
You cannot view the attachment while viewing its details because your browser does not support IFRAMEs.
View the attachment on a separate page
.
View Attachment As Diff
View Attachment As Raw
Actions:
View
|
Diff
Attachments on
bug 125504
:
46389
|
52107
|
52318
|
53826
|
54332
|
54351
|
54476