### Eclipse Workspace Patch 1.0 #P org.eclipse.jdt.core Index: model/org/eclipse/jdt/core/IJavaModelStatusConstants.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IJavaModelStatusConstants.java,v retrieving revision 1.37 diff -u -r1.37 IJavaModelStatusConstants.java --- model/org/eclipse/jdt/core/IJavaModelStatusConstants.java 10 May 2006 18:03:42 -0000 1.37 +++ model/org/eclipse/jdt/core/IJavaModelStatusConstants.java 10 Jan 2007 18:31:45 -0000 @@ -320,4 +320,16 @@ * @since 3.2 */ public static final int UNKNOWN_JAVADOC_FORMAT = 1009; + /** + *

Status constant indicating that the variable is deprecated.

+ * + * @since 3.3 + */ + public static final int DEPRECATED_VARIABLE = 1010; + /** + *

Status constant indicating that the variable is read-only.

+ * + * @since 3.3 + */ + public static final int READ_ONLY_VARIABLE = 1011; } Index: model/org/eclipse/jdt/core/IClasspathEntry.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/IClasspathEntry.java,v retrieving revision 1.59 diff -u -r1.59 IClasspathEntry.java --- model/org/eclipse/jdt/core/IClasspathEntry.java 29 Sep 2006 17:13:57 -0000 1.59 +++ model/org/eclipse/jdt/core/IClasspathEntry.java 10 Jan 2007 18:31:45 -0000 @@ -15,7 +15,7 @@ /** * An entry on a Java project classpath identifying one or more package fragment * roots. A classpath entry has a content kind (either source, - * K_SOURCE, or binary, K_BINARY), which is inherited + * {@link IPackageFragmentRoot#K_SOURCE}, or binary, {@link IPackageFragmentRoot#K_BINARY}), which is inherited * by each package fragment root and package fragment associated with the entry. *

* A classpath entry can refer to any of the following:

*

- * The result of IJavaProject#getResolvedClasspath will have all entries of type - * CPE_VARIABLE and CPE_CONTAINER resolved to a set of - * CPE_SOURCE, CPE_LIBRARY or CPE_PROJECT + * The result of {@link IJavaProject#getResolvedClasspath} will have all entries of type + * {@link #CPE_VARIABLE} and {@link #CPE_CONTAINER} resolved to a set of + * {@link #CPE_SOURCE}, {@link #CPE_LIBRARY} or {@link #CPE_PROJECT} * classpath entries. *

- * Any classpath entry other than a source folder (kind CPE_SOURCE) can + * Any classpath entry other than a source folder (kind {@link #CPE_SOURCE}) can * be marked as being exported. Exported entries are automatically contributed to * dependent projects, along with the project's default output folder, which is * implicitly exported, and any auxiliary output folders specified on source @@ -102,7 +102,7 @@ * followed by the any exported entries. *

* This interface is not intended to be implemented by clients. - * Classpath entries can be created via methods on JavaCore. + * Classpath entries can be created via methods on {@link JavaCore}. *

* * @see JavaCore#newLibraryEntry(org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IPath, org.eclipse.core.runtime.IPath) @@ -170,11 +170,11 @@ * Returns the kind of files found in the package fragments identified by this * classpath entry. * - * @return IPackageFragmentRoot.K_SOURCE for files containing - * source code, and IPackageFragmentRoot.K_BINARY for binary + * @return {@link IPackageFragmentRoot#K_SOURCE} for files containing + * source code, and {@link IPackageFragmentRoot#K_BINARY} for binary * class files. - * There is no specified value for an entry denoting a variable (CPE_VARIABLE) - * or a classpath container (CPE_CONTAINER). + * There is no specified value for an entry denoting a variable ({@link #CPE_VARIABLE}) + * or a classpath container ({@link #CPE_CONTAINER}). */ int getContentKind(); @@ -183,16 +183,16 @@ * * @return one of: * */ @@ -344,11 +344,11 @@ /** * Returns the full path to the specific location where the builder writes * .class files generated for this source entry - * (entry kind CPE_SOURCE). + * (entry kind {@link #CPE_SOURCE}). *

* Source entries can optionally be associated with a specific output location. * If none is provided, the source entry will be implicitly associated with its project - * default output location (see IJavaProject#getOutputLocation). + * default output location (see {@link IJavaProject#getOutputLocation}). *

* NOTE: A specific output location cannot coincidate with another source/library entry. *

@@ -364,24 +364,24 @@ * Returns the path of this classpath entry. * * The meaning of the path of a classpath entry depends on its entry kind: * @@ -410,7 +410,7 @@ * Returns the path within the source archive or folder where package fragments * are located. An empty path indicates that packages are located at * the root of the source archive or folder. Returns a non-null value - * if and only if getSourceAttachmentPath returns + * if and only if {@link #getSourceAttachmentPath} returns * a non-null value. * * @return the path within the source archive or folder, or null if @@ -421,7 +421,7 @@ /** * Returns whether this entry is exported to dependent projects. * Always returns false for source entries (kind - * CPE_SOURCE), which cannot be exported. + * {@link #CPE_SOURCE}), which cannot be exported. * * @return true if exported, and false otherwise * @since 2.0 Index: model/org/eclipse/jdt/core/ClasspathVariableInitializer.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/ClasspathVariableInitializer.java,v retrieving revision 1.12 diff -u -r1.12 ClasspathVariableInitializer.java --- model/org/eclipse/jdt/core/ClasspathVariableInitializer.java 10 May 2006 18:03:42 -0000 1.12 +++ model/org/eclipse/jdt/core/ClasspathVariableInitializer.java 10 Jan 2007 18:31:45 -0000 @@ -25,6 +25,13 @@ */ public abstract class ClasspathVariableInitializer { + /** + * Additional flags associated with the initializer + */ + int flags = 0; // no flag + final static int DEPRECATED = 0x01; + final static int READ_ONLY = 0x02; + /** * Creates a new classpath variable initializer. */ @@ -49,4 +56,24 @@ * @see JavaCore#setClasspathVariables(String[], org.eclipse.core.runtime.IPath[], org.eclipse.core.runtime.IProgressMonitor) */ public abstract void initialize(String variable); + + /** + * Return whether the associated variable is deprecated or not. + * + * @return true if the initialized variable is deprecated, + * false otherwise. + */ + public final boolean isDeprecated() { + return (this.flags & DEPRECATED) != 0; + } + + /** + * Return whether the initialized variable is read-only or not. + * + * @return true if the initialized variable is read-only, + * false otherwise. + */ + public final boolean isReadOnly() { + return (this.flags & READ_ONLY) != 0; + } } Index: model/org/eclipse/jdt/core/JavaCore.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/core/JavaCore.java,v retrieving revision 1.558 diff -u -r1.558 JavaCore.java --- model/org/eclipse/jdt/core/JavaCore.java 27 Nov 2006 20:58:17 -0000 1.558 +++ model/org/eclipse/jdt/core/JavaCore.java 10 Jan 2007 18:31:47 -0000 @@ -1612,6 +1612,10 @@ return variablePath; } + return initializeClasspathVariable(variableName, variablePath); + } + + static IPath initializeClasspathVariable(final String variableName, IPath variablePath) { // even if persisted value exists, initializer is given priority, only if no initializer is found the persisted value is reused final ClasspathVariableInitializer initializer = JavaCore.getClasspathVariableInitializer(variableName); if (initializer != null){ @@ -1623,6 +1627,7 @@ " invocation stack trace:"); //$NON-NLS-1$ new Exception("").printStackTrace(System.out); //$NON-NLS-1$ } + JavaModelManager manager = JavaModelManager.getJavaModelManager(); manager.variablePut(variableName, JavaModelManager.VARIABLE_INITIALIZATION_IN_PROGRESS); // avoid initialization cycles boolean ok = false; try { @@ -1638,7 +1643,7 @@ " variable: " + variableName +'\n' + //$NON-NLS-1$ " variable path: " + variablePath); //$NON-NLS-1$ } - manager.variablesWithInitializer.add(variableName); + manager.variablesWithInitializer.put(variableName, initializer.flags); ok = true; } catch (RuntimeException e) { if (JavaModelManager.CP_RESOLVE_VERBOSE) { @@ -1662,6 +1667,42 @@ } return variablePath; } + public static boolean isClasspathVariableDeprecated(final String variableName) { + JavaModelManager manager = JavaModelManager.getJavaModelManager(); + IPath variablePath = manager.variableGet(variableName); + if (variablePath == JavaModelManager.VARIABLE_INITIALIZATION_IN_PROGRESS){ + return false; // currently do not store previous session result + } + + if (variablePath != null) { + if (variablePath == JavaModelManager.CP_ENTRY_IGNORE_PATH) { + return false; + } + } else { + initializeClasspathVariable(variableName, variablePath); + } + + int flags = manager.variableFlagsGet(variableName); + return (flags & 0x01) != 0; + } + public static boolean isClasspathVariableReadOnly(final String variableName) { + JavaModelManager manager = JavaModelManager.getJavaModelManager(); + IPath variablePath = manager.variableGet(variableName); + if (variablePath == JavaModelManager.VARIABLE_INITIALIZATION_IN_PROGRESS){ + return false; // currently do not store previous session result + } + + if (variablePath != null) { + if (variablePath == JavaModelManager.CP_ENTRY_IGNORE_PATH) { + return false; + } + } else { + initializeClasspathVariable(variableName, variablePath); + } + + int flags = manager.variableFlagsGet(variableName); + return (flags & 0x02) != 0; + } /** * Helper method finding the classpath variable initializer registered for a given classpath variable name @@ -1685,7 +1726,8 @@ IConfigurationElement [] configElements = extensions[i].getConfigurationElements(); for(int j = 0; j < configElements.length; j++){ try { - String varAttribute = configElements[j].getAttribute("variable"); //$NON-NLS-1$ + IConfigurationElement configElement = configElements[j]; + String varAttribute = configElement.getAttribute("variable"); //$NON-NLS-1$ if (variable.equals(varAttribute)) { if (JavaModelManager.CP_RESOLVE_VERBOSE) { Util.verbose( @@ -1695,7 +1737,16 @@ } Object execExt = configElements[j].createExecutableExtension("class"); //$NON-NLS-1$ if (execExt instanceof ClasspathVariableInitializer){ - return (ClasspathVariableInitializer)execExt; + ClasspathVariableInitializer initializer = (ClasspathVariableInitializer)execExt; + String deprecatedAttribute = configElement.getAttribute("deprecated"); //$NON-NLS-1$ + if (deprecatedAttribute != null) { + initializer.flags |= ClasspathVariableInitializer.DEPRECATED; + } + String readOnlyAttribute = configElement.getAttribute("readOnly"); //$NON-NLS-1$ + if (JavaModelManager.TRUE.equals(readOnlyAttribute)) { + initializer.flags |= ClasspathVariableInitializer.READ_ONLY; + } + return initializer; } } } catch(CoreException e){ Index: model/org/eclipse/jdt/internal/core/JavaModelOperation.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelOperation.java,v retrieving revision 1.64 diff -u -r1.64 JavaModelOperation.java --- model/org/eclipse/jdt/internal/core/JavaModelOperation.java 23 Nov 2005 15:41:57 -0000 1.64 +++ model/org/eclipse/jdt/internal/core/JavaModelOperation.java 10 Jan 2007 18:31:49 -0000 @@ -61,7 +61,7 @@ protected HashMap attributes; public static final String HAS_MODIFIED_RESOURCE_ATTR = "hasModifiedResource"; //$NON-NLS-1$ - public static final String TRUE = "true"; //$NON-NLS-1$ + public static final String TRUE = JavaModelManager.TRUE; //public static final String FALSE = "false"; /** Index: model/org/eclipse/jdt/internal/core/JavaModelStatus.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelStatus.java,v retrieving revision 1.42 diff -u -r1.42 JavaModelStatus.java --- model/org/eclipse/jdt/internal/core/JavaModelStatus.java 29 Mar 2006 03:08:48 -0000 1.42 +++ model/org/eclipse/jdt/internal/core/JavaModelStatus.java 10 Jan 2007 18:31:49 -0000 @@ -126,7 +126,7 @@ this(code, new IJavaElement[]{element}); this.string = string; } - + /** * Constructs an Java model status with the given corresponding * element and path @@ -135,6 +135,17 @@ this(code, new IJavaElement[]{element}); this.path = path; } + + /** + * Constructs an Java model status with the given corresponding + * element and path + */ + public JavaModelStatus(int severity, int code, IJavaElement element, IPath path) { + super(severity, JavaCore.PLUGIN_ID, code, "JavaModelStatus", null); //$NON-NLS-1$ + this.elements= new IJavaElement[]{element}; + this.path = path; + } + /** * Constructs an Java model status with the given corresponding * element, path and string @@ -326,53 +337,63 @@ if (description == null) description = path.makeRelative().toString(); return Messages.bind(Messages.classpath_invalidContainer, new String[] {description, javaProject.getElementName()}); - case CP_VARIABLE_PATH_UNBOUND: - javaProject = (IJavaProject)elements[0]; - return Messages.bind(Messages.classpath_unboundVariablePath, new String[] {path.makeRelative().toString(), javaProject.getElementName()}); - - case CLASSPATH_CYCLE: - javaProject = (IJavaProject)elements[0]; - return Messages.bind(Messages.classpath_cycle, javaProject.getElementName()); - - case DISABLED_CP_EXCLUSION_PATTERNS: - javaProject = (IJavaProject)elements[0]; - String projectName = javaProject.getElementName(); - IPath newPath = path; - if (path.segment(0).toString().equals(projectName)) { - newPath = path.removeFirstSegments(1); - } - return Messages.bind(Messages.classpath_disabledInclusionExclusionPatterns, new String[] {newPath.makeRelative().toString(), projectName}); - - case DISABLED_CP_MULTIPLE_OUTPUT_LOCATIONS: - javaProject = (IJavaProject)elements[0]; - projectName = javaProject.getElementName(); - newPath = path; - if (path.segment(0).toString().equals(projectName)) { - newPath = path.removeFirstSegments(1); - } - return Messages.bind(Messages.classpath_disabledMultipleOutputLocations, new String[] {newPath.makeRelative().toString(), projectName}); + case CP_VARIABLE_PATH_UNBOUND: + javaProject = (IJavaProject)elements[0]; + return Messages.bind(Messages.classpath_unboundVariablePath, new String[] {path.makeRelative().toString(), javaProject.getElementName()}); - case INCOMPATIBLE_JDK_LEVEL: + case CLASSPATH_CYCLE: javaProject = (IJavaProject)elements[0]; - return Messages.bind(Messages.classpath_incompatibleLibraryJDKLevel, new String[]{ - javaProject.getElementName(), - javaProject.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true), - path.makeRelative().toString(), - string, - }); - case CANNOT_RETRIEVE_ATTACHED_JAVADOC : - if (elements != null && elements.length == 1) { + return Messages.bind(Messages.classpath_cycle, javaProject.getElementName()); + + case DISABLED_CP_EXCLUSION_PATTERNS: + javaProject = (IJavaProject)elements[0]; + String projectName = javaProject.getElementName(); + IPath newPath = path; + if (path.segment(0).toString().equals(projectName)) { + newPath = path.removeFirstSegments(1); + } + return Messages.bind(Messages.classpath_disabledInclusionExclusionPatterns, new String[] {newPath.makeRelative().toString(), projectName}); + + case DISABLED_CP_MULTIPLE_OUTPUT_LOCATIONS: + javaProject = (IJavaProject)elements[0]; + projectName = javaProject.getElementName(); + newPath = path; + if (path.segment(0).toString().equals(projectName)) { + newPath = path.removeFirstSegments(1); + } + return Messages.bind(Messages.classpath_disabledMultipleOutputLocations, new String[] {newPath.makeRelative().toString(), projectName}); + + case INCOMPATIBLE_JDK_LEVEL: + javaProject = (IJavaProject)elements[0]; + return Messages.bind(Messages.classpath_incompatibleLibraryJDKLevel, new String[]{ + javaProject.getElementName(), + javaProject.getOption(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, true), + path.makeRelative().toString(), + string, + }); + + case CANNOT_RETRIEVE_ATTACHED_JAVADOC : + if (elements != null && elements.length == 1) { + if (this.string != null) { + return Messages.bind(Messages.status_cannot_retrieve_attached_javadoc, ((JavaElement)elements[0]).toStringWithAncestors(), this.string); + } + return Messages.bind(Messages.status_cannot_retrieve_attached_javadoc, ((JavaElement)elements[0]).toStringWithAncestors(), ""); //$NON-NLS-1$ + } if (this.string != null) { - return Messages.bind(Messages.status_cannot_retrieve_attached_javadoc, ((JavaElement)elements[0]).toStringWithAncestors(), this.string); + return Messages.bind(Messages.status_cannot_retrieve_attached_javadoc, this.string, "");//$NON-NLS-1$ } - return Messages.bind(Messages.status_cannot_retrieve_attached_javadoc, ((JavaElement)elements[0]).toStringWithAncestors(), ""); //$NON-NLS-1$ - } - if (this.string != null) { - return Messages.bind(Messages.status_cannot_retrieve_attached_javadoc, this.string, "");//$NON-NLS-1$ - } - break; - case UNKNOWN_JAVADOC_FORMAT : - return Messages.bind(Messages.status_unknown_javadoc_format, ((JavaElement)elements[0]).toStringWithAncestors()); + break; + + case UNKNOWN_JAVADOC_FORMAT : + return Messages.bind(Messages.status_unknown_javadoc_format, ((JavaElement)elements[0]).toStringWithAncestors()); + + case DEPRECATED_VARIABLE : + javaProject = (IJavaProject)elements[0]; + return Messages.bind(Messages.classpath_deprecated_variable, new String[] {path.segment(0).toString(), javaProject.getElementName()}); + + case READ_ONLY_VARIABLE : + javaProject = (IJavaProject)elements[0]; + return Messages.bind(Messages.classpath_read_only_variable, new String[] {path.segment(0).toString(), javaProject.getElementName()}); } if (string != null) { return string; @@ -468,6 +489,14 @@ jms.children = children; return jms; } + public static IJavaModelStatus newMultiStatus(IJavaModelStatus status, IJavaModelStatus[] children) { + JavaModelStatus jmStatus = (JavaModelStatus) status; + JavaModelStatus jms = new JavaModelStatus(status.getSeverity(), status.getCode(), jmStatus.string); + jms.elements = jmStatus.elements; + jms.path = jmStatus.path; + jms.children = children; + return jms; + } /** * Returns a printable representation of this exception for debugging * purposes. Index: model/org/eclipse/jdt/internal/core/ClasspathEntry.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/ClasspathEntry.java,v retrieving revision 1.94 diff -u -r1.94 ClasspathEntry.java --- model/org/eclipse/jdt/internal/core/ClasspathEntry.java 3 Oct 2006 09:43:27 -0000 1.94 +++ model/org/eclipse/jdt/internal/core/ClasspathEntry.java 10 Jan 2007 18:31:47 -0000 @@ -26,6 +26,7 @@ import org.eclipse.core.runtime.AssertionFailedException; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IPath; +import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Path; import org.eclipse.jdt.core.IAccessRule; import org.eclipse.jdt.core.IClasspathAttribute; @@ -1627,7 +1628,25 @@ if (entry == null){ return new JavaModelStatus(IJavaModelStatusConstants.CP_VARIABLE_PATH_UNBOUND, project, path); } - return validateClasspathEntry(project, entry, checkSourceAttachment, recurseInContainers); + IJavaModelStatus status = validateClasspathEntry(project, entry, checkSourceAttachment, recurseInContainers); + + // variable may also be deprecated or read-only + String variableName = path.segment(0); + IJavaModelStatus[] children = new IJavaModelStatus[2]; + int size = 0; + if (JavaCore.isClasspathVariableDeprecated(variableName)) { + children[size++] = new JavaModelStatus(IStatus.WARNING, IJavaModelStatusConstants.DEPRECATED_VARIABLE, project, path); + } + if (JavaCore.isClasspathVariableReadOnly(variableName)) { + children[size++] = new JavaModelStatus(IStatus.WARNING, IJavaModelStatusConstants.READ_ONLY_VARIABLE, project, path); + } + if (size > 0) { + if (size == 1) { + children = new IJavaModelStatus[] { children[0] }; + } + status = JavaModelStatus.newMultiStatus(status, children); + } + return status; } else { return new JavaModelStatus(IJavaModelStatusConstants.INVALID_CLASSPATH, Messages.bind(Messages.classpath_illegalVariablePath, new String[] {entryPathMsg, projectName})); } Index: model/org/eclipse/jdt/internal/core/JavaModelManager.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/JavaModelManager.java,v retrieving revision 1.348 diff -u -r1.348 JavaModelManager.java --- model/org/eclipse/jdt/internal/core/JavaModelManager.java 27 Nov 2006 20:46:06 -0000 1.348 +++ model/org/eclipse/jdt/internal/core/JavaModelManager.java 10 Jan 2007 18:31:49 -0000 @@ -86,7 +86,7 @@ * Classpath variables pool */ public HashMap variables = new HashMap(5); - public HashSet variablesWithInitializer = new HashSet(5); + public HashtableOfObjectToInt variablesWithInitializer = new HashtableOfObjectToInt(5); public HashMap previousSessionVariables = new HashMap(5); private ThreadLocal variableInitializationInProgress = new ThreadLocal(); @@ -120,6 +120,7 @@ public final static String CP_CONTAINER_PREFERENCES_PREFIX = JavaCore.PLUGIN_ID+".classpathContainer."; //$NON-NLS-1$ public final static String CP_ENTRY_IGNORE = "####"; //$NON-NLS-1$ public final static IPath CP_ENTRY_IGNORE_PATH = new Path(CP_ENTRY_IGNORE); + public final static String TRUE = "true"; //$NON-NLS-1$ private final static int VARIABLES_AND_CONTAINERS_FILE_VERSION = 2; @@ -278,9 +279,9 @@ continue; } // add config element in the group it belongs to - if ("true".equals(configElement.getAttribute("modifiesEnvironment"))) //$NON-NLS-1$ //$NON-NLS-2$ + if (TRUE.equals(configElement.getAttribute("modifiesEnvironment"))) //$NON-NLS-1$ modifyingEnv.add(configElement); - else if ("true".equals(configElement.getAttribute("createsProblems"))) //$NON-NLS-1$ //$NON-NLS-2$ + else if (TRUE.equals(configElement.getAttribute("createsProblems"))) //$NON-NLS-1$ creatingProblems.add(configElement); else others.add(configElement); @@ -1124,12 +1125,12 @@ if (propertyName.startsWith(CP_VARIABLE_PREFERENCES_PREFIX)) { String varName = propertyName.substring(CP_VARIABLE_PREFERENCES_PREFIX.length()); JavaModelManager manager = getJavaModelManager(); - if (manager.variablesWithInitializer.contains(varName)) { + if (manager.variablesWithInitializer.containsKey(varName)) { // revert preference value as we will not apply it to JavaCore classpath variable String oldValue = (String) event.getOldValue(); if (oldValue == null) { // unexpected old value => remove variable from set - manager.variablesWithInitializer.remove(varName); + manager.variablesWithInitializer.removeKey(varName); } else { manager.getInstancePreferences().put(varName, oldValue); } @@ -1200,58 +1201,58 @@ public void configurePluginDebugOptions(){ if(JavaCore.getPlugin().isDebugging()){ String option = Platform.getDebugOption(BUFFER_MANAGER_DEBUG); - if(option != null) BufferManager.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) BufferManager.VERBOSE = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(BUILDER_DEBUG); - if(option != null) JavaBuilder.DEBUG = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) JavaBuilder.DEBUG = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(COMPILER_DEBUG); - if(option != null) Compiler.DEBUG = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) Compiler.DEBUG = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(COMPLETION_DEBUG); - if(option != null) CompletionEngine.DEBUG = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) CompletionEngine.DEBUG = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(CP_RESOLVE_DEBUG); - if(option != null) JavaModelManager.CP_RESOLVE_VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) JavaModelManager.CP_RESOLVE_VERBOSE = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(DELTA_DEBUG); - if(option != null) DeltaProcessor.DEBUG = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) DeltaProcessor.DEBUG = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(DELTA_DEBUG_VERBOSE); - if(option != null) DeltaProcessor.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) DeltaProcessor.VERBOSE = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(HIERARCHY_DEBUG); - if(option != null) TypeHierarchy.DEBUG = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) TypeHierarchy.DEBUG = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(INDEX_MANAGER_DEBUG); - if(option != null) JobManager.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) JobManager.VERBOSE = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(JAVAMODEL_DEBUG); - if(option != null) JavaModelManager.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) JavaModelManager.VERBOSE = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(JAVAMODELCACHE_DEBUG); - if(option != null) JavaModelCache.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) JavaModelCache.VERBOSE = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(POST_ACTION_DEBUG); - if(option != null) JavaModelOperation.POST_ACTION_VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) JavaModelOperation.POST_ACTION_VERBOSE = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(RESOLUTION_DEBUG); - if(option != null) NameLookup.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) NameLookup.VERBOSE = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(SEARCH_DEBUG); - if(option != null) BasicSearchEngine.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) BasicSearchEngine.VERBOSE = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(SELECTION_DEBUG); - if(option != null) SelectionEngine.DEBUG = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) SelectionEngine.DEBUG = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(ZIP_ACCESS_DEBUG); - if(option != null) JavaModelManager.ZIP_ACCESS_VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) JavaModelManager.ZIP_ACCESS_VERBOSE = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(SOURCE_MAPPER_DEBUG_VERBOSE); - if(option != null) SourceMapper.VERBOSE = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) SourceMapper.VERBOSE = option.equalsIgnoreCase(TRUE) ; option = Platform.getDebugOption(ENABLE_NEW_FORMATTER); - if(option != null) DefaultCodeFormatter.USE_NEW_FORMATTER = option.equalsIgnoreCase("true") ; //$NON-NLS-1$ + if(option != null) DefaultCodeFormatter.USE_NEW_FORMATTER = option.equalsIgnoreCase(TRUE) ; } // configure performance options @@ -3949,7 +3950,7 @@ // Note: no need to close the Java model as this just removes Java element infos from the Java model cache } - + public synchronized IPath variableGet(String variableName){ // check initialization in progress first HashSet initializations = variableInitializationInProgress(); @@ -3959,6 +3960,10 @@ return (IPath)this.variables.get(variableName); } + public synchronized int variableFlagsGet(String variableName){ + return this.variablesWithInitializer.get(variableName); + } + /* * Returns the set of variable names that are being initialized in the current thread. */ @@ -4010,7 +4015,7 @@ public void variablePreferencesPut(String variableName, IPath variablePath) { String variableKey = CP_VARIABLE_PREFERENCES_PREFIX+variableName; if (variablePath == null) { - this.variablesWithInitializer.remove(variableName); + this.variablesWithInitializer.removeKey(variableName); getInstancePreferences().remove(variableKey); } else { getInstancePreferences().put(variableKey, variablePath.toString()); Index: schema/classpathVariableInitializer.exsd =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/schema/classpathVariableInitializer.exsd,v retrieving revision 1.6 diff -u -r1.6 classpathVariableInitializer.exsd --- schema/classpathVariableInitializer.exsd 24 May 2005 14:25:21 -0000 1.6 +++ schema/classpathVariableInitializer.exsd 10 Jan 2007 18:31:49 -0000 @@ -63,6 +63,23 @@ + + + + String explaining the reason why the associated variable is deprecated + + + + + + + + + + Indicates that the associated variable cannot be modified + + + Index: model/org/eclipse/jdt/internal/core/util/messages.properties =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/messages.properties,v retrieving revision 1.62 diff -u -r1.62 messages.properties --- model/org/eclipse/jdt/internal/core/util/messages.properties 28 Jun 2006 08:52:07 -0000 1.62 +++ model/org/eclipse/jdt/internal/core/util/messages.properties 10 Jan 2007 18:31:49 -0000 @@ -167,6 +167,8 @@ classpath_disabledMultipleOutputLocations = Multiple output locations are disabled in project {1}, cannot associate entry: ''{0}'' with a specific output classpath_incompatibleLibraryJDKLevel = Incompatible .class files version in required binaries. Project ''{0}'' is targeting a {1} runtime, but is compiled against ''{2}'' which requires a {3} runtime classpath_duplicateEntryExtraAttribute = Duplicate extra attribute: ''{0}'' in classpath entry ''{1}'' for project {2} +classpath_deprecated_variable = Classpath variable ''{0}'' in project {1} is deprecated +classpath_read_only_variable = Classpath variable ''{0}'' in project {1} is read only ### miscellaneous file_notFound = File not found: ''{0}'' Index: model/org/eclipse/jdt/internal/core/util/Messages.java =================================================================== RCS file: /cvsroot/eclipse/org.eclipse.jdt.core/model/org/eclipse/jdt/internal/core/util/Messages.java,v retrieving revision 1.14 diff -u -r1.14 Messages.java --- model/org/eclipse/jdt/internal/core/util/Messages.java 28 Jun 2006 08:52:07 -0000 1.14 +++ model/org/eclipse/jdt/internal/core/util/Messages.java 10 Jan 2007 18:31:49 -0000 @@ -161,6 +161,8 @@ public static String classpath_disabledMultipleOutputLocations; public static String classpath_incompatibleLibraryJDKLevel; public static String classpath_duplicateEntryExtraAttribute; + public static String classpath_deprecated_variable; + public static String classpath_read_only_variable; public static String file_notFound; public static String file_badFormat; public static String path_nullPath;