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 39509 Details for
Bug 137930
JavaPlugin#initializeAfterLoad should not check type history consistency
Home
|
New
|
Browse
|
Search
|
[?]
|
Reports
|
Requests
|
Help
|
Log In
[x]
|
Terms of Use
|
Copyright Agent
[patch]
A slightly improved patch
137930_V3.patch (text/plain), 12.94 KB, created by
Dirk Baeumer
on 2006-04-26 04:35:25 EDT
(
hide
)
Description:
A slightly improved patch
Filename:
MIME Type:
Creator:
Dirk Baeumer
Created:
2006-04-26 04:35:25 EDT
Size:
12.94 KB
patch
obsolete
>### Eclipse Workspace Patch 1.0 >#P org.eclipse.jdt.ui >Index: core extension/org/eclipse/jdt/internal/corext/util/TypeInfo.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/TypeInfo.java,v >retrieving revision 1.18 >diff -u -r1.18 TypeInfo.java >--- core extension/org/eclipse/jdt/internal/corext/util/TypeInfo.java 24 Nov 2005 16:00:52 -0000 1.18 >+++ core extension/org/eclipse/jdt/internal/corext/util/TypeInfo.java 26 Apr 2006 08:22:04 -0000 >@@ -278,5 +278,9 @@ > buf.append("; name= "); //$NON-NLS-1$ > buf.append(fName); > return buf.toString(); >- } >-} >+ } >+ >+ public abstract long getContainerTimestamp(); >+ >+ public abstract boolean isContainerDirty(); >+} >\ No newline at end of file >Index: core extension/org/eclipse/jdt/internal/corext/util/IFileTypeInfo.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/IFileTypeInfo.java,v >retrieving revision 1.16 >diff -u -r1.16 IFileTypeInfo.java >--- core extension/org/eclipse/jdt/internal/corext/util/IFileTypeInfo.java 29 Nov 2005 10:01:46 -0000 1.16 >+++ core extension/org/eclipse/jdt/internal/corext/util/IFileTypeInfo.java 26 Apr 2006 08:22:04 -0000 >@@ -10,11 +10,22 @@ > *******************************************************************************/ > package org.eclipse.jdt.internal.corext.util; > >+import java.net.URI; >+ >+import org.eclipse.core.filesystem.EFS; >+import org.eclipse.core.filesystem.IFileInfo; >+ >+import org.eclipse.core.runtime.CoreException; >+import org.eclipse.core.runtime.IPath; >+import org.eclipse.core.runtime.Path; >+ >+import org.eclipse.core.filebuffers.FileBuffers; >+import org.eclipse.core.filebuffers.ITextFileBuffer; >+import org.eclipse.core.filebuffers.ITextFileBufferManager; >+ > import org.eclipse.core.resources.IResource; > import org.eclipse.core.resources.IWorkspaceRoot; > import org.eclipse.core.resources.ResourcesPlugin; >-import org.eclipse.core.runtime.IPath; >-import org.eclipse.core.runtime.Path; > > import org.eclipse.jdt.core.IJavaElement; > import org.eclipse.jdt.core.JavaCore; >@@ -120,4 +131,36 @@ > public String getExtension() { > return fExtension; > } >-} >+ >+ public long getContainerTimestamp() { >+ IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot(); >+ IPath path= new Path(getPath()); >+ IResource resource= root.findMember(path); >+ if (resource != null) { >+ URI location= resource.getLocationURI(); >+ if (location != null) { >+ try { >+ IFileInfo info= EFS.getStore(location).fetchInfo(); >+ if (info.exists()) { >+ return info.getLastModified(); >+ } >+ } catch (CoreException e) { >+ // Fall through >+ } >+ } >+ } >+ return IResource.NULL_STAMP; >+ } >+ >+ public boolean isContainerDirty() { >+ IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot(); >+ IPath path= new Path(getPath()); >+ IResource resource= root.findMember(path); >+ ITextFileBufferManager manager= FileBuffers.getTextFileBufferManager(); >+ ITextFileBuffer textFileBuffer= manager.getTextFileBuffer(resource.getFullPath()); >+ if (textFileBuffer != null) { >+ return textFileBuffer.isDirty(); >+ } >+ return false; >+ } >+} >\ No newline at end of file >Index: core extension/org/eclipse/jdt/internal/corext/util/JarFileEntryTypeInfo.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/JarFileEntryTypeInfo.java,v >retrieving revision 1.14 >diff -u -r1.14 JarFileEntryTypeInfo.java >--- core extension/org/eclipse/jdt/internal/corext/util/JarFileEntryTypeInfo.java 18 Nov 2005 13:27:53 -0000 1.14 >+++ core extension/org/eclipse/jdt/internal/corext/util/JarFileEntryTypeInfo.java 26 Apr 2006 08:22:04 -0000 >@@ -10,12 +10,19 @@ > *******************************************************************************/ > package org.eclipse.jdt.internal.corext.util; > >+import java.net.URI; > import java.util.Arrays; > import java.util.List; > >+import org.eclipse.core.filesystem.EFS; >+import org.eclipse.core.filesystem.IFileInfo; >+ >+import org.eclipse.core.runtime.CoreException; > import org.eclipse.core.runtime.IPath; > import org.eclipse.core.runtime.Path; > >+import org.eclipse.core.resources.IResource; >+import org.eclipse.core.resources.IWorkspaceRoot; > import org.eclipse.core.resources.ResourcesPlugin; > > import org.eclipse.jdt.core.IJavaElement; >@@ -131,6 +138,34 @@ > getElementPath(result); > return result.toString(); > } >+ >+ public long getContainerTimestamp() { >+ // First try internal Jar >+ IWorkspaceRoot root= ResourcesPlugin.getWorkspace().getRoot(); >+ IPath path= new Path(fJar); >+ IResource resource= root.findMember(path); >+ IFileInfo info= null; >+ if (resource != null && resource.exists()) { >+ URI location= resource.getLocationURI(); >+ if (location != null) { >+ try { >+ info= EFS.getStore(location).fetchInfo(); >+ } catch (CoreException e) { >+ // Fall through >+ } >+ } >+ } else { >+ info= EFS.getLocalFileSystem().getStore(Path.fromOSString(fJar)).fetchInfo(); >+ } >+ if (info != null && info.exists()) { >+ return info.getLastModified(); >+ } >+ return IResource.NULL_STAMP; >+ } >+ >+ public boolean isContainerDirty() { >+ return false; >+ } > > private void getElementPath(StringBuffer result) { > String pack= getPackageName(); >@@ -142,4 +177,4 @@ > result.append('.'); > result.append(getExtension()); > } >-} >+} >\ No newline at end of file >Index: core extension/org/eclipse/jdt/internal/corext/util/UnresolvableTypeInfo.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/UnresolvableTypeInfo.java,v >retrieving revision 1.8 >diff -u -r1.8 UnresolvableTypeInfo.java >--- core extension/org/eclipse/jdt/internal/corext/util/UnresolvableTypeInfo.java 17 Jun 2005 15:51:52 -0000 1.8 >+++ core extension/org/eclipse/jdt/internal/corext/util/UnresolvableTypeInfo.java 26 Apr 2006 08:22:04 -0000 >@@ -13,6 +13,8 @@ > import org.eclipse.core.runtime.IPath; > import org.eclipse.core.runtime.Path; > >+import org.eclipse.core.resources.IResource; >+ > import org.eclipse.jdt.core.IJavaElement; > import org.eclipse.jdt.core.search.IJavaSearchScope; > >@@ -55,4 +57,12 @@ > protected IJavaElement getContainer(IJavaSearchScope scope) { > return null; > } >-} >+ >+ public long getContainerTimestamp() { >+ return IResource.NULL_STAMP; >+ } >+ >+ public boolean isContainerDirty() { >+ return false; >+ } >+} >\ No newline at end of file >Index: core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.ui/core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java,v >retrieving revision 1.5 >diff -u -r1.5 OpenTypeHistory.java >--- core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java 11 Apr 2006 18:03:34 -0000 1.5 >+++ core extension/org/eclipse/jdt/internal/corext/util/OpenTypeHistory.java 26 Apr 2006 08:22:04 -0000 >@@ -13,8 +13,10 @@ > import java.util.ArrayList; > import java.util.Collection; > import java.util.Collections; >+import java.util.HashMap; > import java.util.Iterator; > import java.util.List; >+import java.util.Map; > import java.util.StringTokenizer; > > import org.eclipse.core.runtime.IProgressMonitor; >@@ -24,6 +26,8 @@ > import org.eclipse.core.runtime.Status; > import org.eclipse.core.runtime.jobs.Job; > >+import org.eclipse.core.resources.IResource; >+ > import org.eclipse.jdt.core.ElementChangedEvent; > import org.eclipse.jdt.core.ICompilationUnit; > import org.eclipse.jdt.core.IElementChangedListener; >@@ -149,6 +153,8 @@ > > // Needs to be volatile since accesses aren't synchronized. > private volatile boolean fNeedsConsistencyCheck; >+ // Map of cached time stamps >+ private Map fTimestampMapping; > > private final IElementChangedListener fDeltaListener; > private final UpdateJob fUpdateJob; >@@ -162,6 +168,7 @@ > private static final String NODE_ENCLOSING_NAMES= "enclosingTypes"; //$NON-NLS-1$ > private static final String NODE_PATH= "path"; //$NON-NLS-1$ > private static final String NODE_MODIFIERS= "modifiers"; //$NON-NLS-1$ >+ private static final String NODE_TIMESTAMP= "timestamp"; //$NON-NLS-1$ > private static final char[][] EMPTY_ENCLOSING_NAMES= new char[0][0]; > > private static OpenTypeHistory fgInstance; >@@ -181,8 +188,9 @@ > private OpenTypeHistory() { > super(FILENAME, NODE_ROOT, NODE_TYPE_INFO); > fTypeInfoFactory= new TypeInfoFactory(); >- load(); >+ fTimestampMapping= new HashMap(); > fNeedsConsistencyCheck= true; >+ load(); > fDeltaListener= new TypeHistoryDeltaListener(); > JavaCore.addElementChangedListener(fDeltaListener); > fUpdateJob= new UpdateJob(); >@@ -229,10 +237,12 @@ > } > > public synchronized void accessed(TypeInfo info) { >+ fTimestampMapping.put(info, new Long(info.getContainerTimestamp())); > super.accessed(info); > } > > public synchronized TypeInfo remove(TypeInfo info) { >+ fTimestampMapping.remove(info); > return (TypeInfo)super.remove(info); > } > >@@ -270,11 +280,15 @@ > // markAsInconsistent isn't synchronized. > fNeedsConsistencyCheck= true; > IJavaSearchScope scope= SearchEngine.createWorkspaceScope(); >- List keys= new ArrayList(getKeys()); >- monitor.beginTask(CorextMessages.TypeInfoHistory_consistency_check, keys.size()); >+ List typesToCheck= new ArrayList(getKeys()); >+ monitor.beginTask(CorextMessages.TypeInfoHistory_consistency_check, typesToCheck.size()); > monitor.setTaskName(CorextMessages.TypeInfoHistory_consistency_check); >- for (Iterator iter= keys.iterator(); iter.hasNext();) { >+ for (Iterator iter= typesToCheck.iterator(); iter.hasNext();) { > TypeInfo type= (TypeInfo)iter.next(); >+ long currentTimestamp= type.getContainerTimestamp(); >+ Long lastTested= (Long)fTimestampMapping.get(type); >+ if (lastTested != null && currentTimestamp == lastTested.longValue() && !type.isContainerDirty()) >+ continue; > try { > IType jType= type.resolveType(scope); > if (jType == null || !jType.exists()) { >@@ -282,6 +296,7 @@ > } else { > // copy over the modifiers since they may have changed > type.setModifiers(jType.getFlags()); >+ fTimestampMapping.put(type, new Long(currentTimestamp)); > } > } catch (JavaModelException e) { > remove(type); >@@ -296,6 +311,7 @@ > > private void doShutdown() { > JavaCore.removeElementChangedListener(fDeltaListener); >+ save(); > } > > protected Object createFromElement(Element type) { >@@ -311,6 +327,19 @@ > } > TypeInfo info= fTypeInfoFactory.create( > pack.toCharArray(), name.toCharArray(), enclosingNames, modifiers, path); >+ long timestamp= IResource.NULL_STAMP; >+ String timestampValue= type.getAttribute(NODE_TIMESTAMP); >+ if (timestampValue != null && timestampValue.length() > 0) { >+ try { >+ timestamp= Long.parseLong(timestampValue); >+ } catch (NumberFormatException e) { >+ // take null stamp >+ } >+ } >+ long currentTimestamp= info.getContainerTimestamp(); >+ if (timestamp != IResource.NULL_STAMP && currentTimestamp != IResource.NULL_STAMP && timestamp == currentTimestamp) { >+ fTimestampMapping.put(info, new Long(currentTimestamp)); >+ } > return info; > } > >@@ -321,6 +350,7 @@ > typeElement.setAttribute(NODE_ENCLOSING_NAMES, type.getEnclosingName()); > typeElement.setAttribute(NODE_PATH, type.getPath()); > typeElement.setAttribute(NODE_MODIFIERS, Integer.toString(type.getModifiers())); >+ typeElement.setAttribute(NODE_TIMESTAMP, Long.toString(type.getContainerTimestamp())); > } > > private char[][] getEnclosingNames(Element type) { >Index: ui/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java >=================================================================== >RCS file: /home/eclipse/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java,v >retrieving revision 1.19 >diff -u -r1.19 TypeSelectionDialog2.java >--- ui/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java 28 Mar 2006 16:53:25 -0000 1.19 >+++ ui/org/eclipse/jdt/internal/ui/dialogs/TypeSelectionDialog2.java 26 Apr 2006 08:22:04 -0000 >@@ -260,14 +260,15 @@ > for (int i= 0; i < selected.length; i++) { > try { > TypeInfo typeInfo= selected[i]; >- history.accessed(typeInfo); > IType type= typeInfo.resolveType(fScope); > if (type == null) { > String title= JavaUIMessages.TypeSelectionDialog_errorTitle; > String message= Messages.format(JavaUIMessages.TypeSelectionDialog_dialogMessage, typeInfo.getPath()); > MessageDialog.openError(getShell(), title, message); >+ history.remove(typeInfo); > setResult(null); > } else { >+ history.accessed(typeInfo); > result.add(type); > } > } catch (JavaModelException e) {
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 137930
:
39488
| 39509