A massive organize imports and formatting of the sources using default Eclipse code...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / core / JavaCore.java
index 3797518..47e6e39 100644 (file)
@@ -38,12 +38,12 @@ import org.eclipse.core.runtime.Preferences;
 
 public class JavaCore {
 
-       //  public static HashSet OptionNames = new HashSet(20);
+       // public static HashSet OptionNames = new HashSet(20);
        /**
         * The plug-in identifier of the Java core support (value
         * <code>"net.sourceforge.phpeclipse"</code>)
         */
-       //  public static final String PLUGIN_ID = "net.sourceforge.phpeclipse.core";
+       // public static final String PLUGIN_ID = "net.sourceforge.phpeclipse.core";
        // //$NON-NLS-1$
        public static final String PLUGIN_ID = PHPeclipsePlugin.PLUGIN_ID;
 
@@ -287,25 +287,24 @@ public class JavaCore {
         * @see #getDefaultOptions
         */
        public static final String COMPILER_PB_PHP_VAR_DEPRECATED = CompilerOptions.OPTION_PHPVarDeprecatedWarning; //$NON-NLS-1$
-       
+
        public static final String COMPILER_PB_PHP_KEYWORD = CompilerOptions.OPTION_PHPBadStyleKeywordWarning; //$NON-NLS-1$
-       
+
        public static final String COMPILER_PB_PHP_UPPERCASE_IDENTIFIER = CompilerOptions.OPTION_PHPBadStyleUppercaseIdentifierWarning; //$NON-NLS-1$
-       
+
        public static final String COMPILER_PB_PHP_FILE_NOT_EXIST = CompilerOptions.OPTION_PHPIncludeNotExistWarning; //$NON-NLS-1$
-       
+
        public static final String COMPILER_PB_UNINITIALIZED_LOCAL_VARIABLE = CompilerOptions.OPTION_UninitializedLocalVariableWarning; //$NON-NLS-1$
-       
+
        public static final String COMPILER_PB_UNREACHABLE_CODE = CompilerOptions.OPTION_CodeCannotBeReachedWarning; //$NON-NLS-1$
-       
+
        /**
         * Possible configurable option ID.
         * 
         * @see #getDefaultOptions
         */
-//     public static final String COMPILER_PB_UNREACHABLE_CODE = PLUGIN_ID
-//                     + ".compiler.problem.unreachableCode"; //$NON-NLS-1$
-
+       // public static final String COMPILER_PB_UNREACHABLE_CODE = PLUGIN_ID
+       // + ".compiler.problem.unreachableCode"; //$NON-NLS-1$
        /**
         * Possible configurable option ID.
         * 
@@ -837,417 +836,417 @@ public class JavaCore {
         * Note: more options might be added in further releases.
         * 
         * <pre>
-        * 
-        *  RECOGNIZED OPTIONS:
-        *  COMPILER / Generating Local Variable Debug Attribute
-        *     When generated, this attribute will enable local variable names 
-        *     to be displayed in debugger, only in place where variables are 
-        *     definitely assigned (.class file is then bigger)
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.debug.localVariable&quot;
-        *      - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
-        *      - default:           &quot;generate&quot;
-        * 
-        *  COMPILER / Generating Line Number Debug Attribute 
-        *     When generated, this attribute will enable source code highlighting in debugger 
-        *     (.class file is then bigger).
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.debug.lineNumber&quot;
-        *      - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
-        *      - default:           &quot;generate&quot;
-        *     
-        *  COMPILER / Generating Source Debug Attribute 
-        *     When generated, this attribute will enable the debugger to present the 
-        *     corresponding source code.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.debug.sourceFile&quot;
-        *      - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
-        *      - default:           &quot;generate&quot;
-        *     
-        *  COMPILER / Preserving Unused Local Variables
-        *     Unless requested to preserve unused local variables (i.e. never read), the 
-        *     compiler will optimize them out, potentially altering debugging
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.codegen.unusedLocal&quot;
-        *      - possible values:   { &quot;preserve&quot;, &quot;optimize out&quot; }
-        *      - default:           &quot;preserve&quot;
-        *  
-        *  COMPILER / Defining Target Java Platform
-        *     For binary compatibility reason, .class files can be tagged to with certain VM versions and later.
-        *     Note that &quot;1.4&quot; target require to toggle compliance mode to &quot;1.4&quot; too.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.codegen.targetPlatform&quot;
-        *      - possible values:   { &quot;1.1&quot;, &quot;1.2&quot;, &quot;1.3&quot;, &quot;1.4&quot; }
-        *      - default:           &quot;1.1&quot;
-        * 
-        *  COMPILER / Reporting Unreachable Code
-        *     Unreachable code can optionally be reported as an error, warning or simply 
-        *     ignored. The bytecode generation will always optimized it out.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.unreachableCode&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;error&quot;
-        * 
-        *  COMPILER / Reporting Invalid Import
-        *     An import statement that cannot be resolved might optionally be reported 
-        *     as an error, as a warning or ignored.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.invalidImport&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;error&quot;
-        * 
-        *  COMPILER / Reporting Attempt to Override Package-Default Method
-        *     A package default method is not visible in a different package, and thus 
-        *     cannot be overridden. When enabling this option, the compiler will signal 
-        *     such scenarii either as an error or a warning.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.overridingPackageDefaultMethod&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        * 
-        *  COMPILER / Reporting Method With Constructor Name
-        *     Naming a method with a constructor name is generally considered poor 
-        *     style programming. When enabling this option, the compiler will signal such 
-        *     scenarii either as an error or a warning.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.methodWithConstructorName&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        * 
-        *  COMPILER / Reporting Deprecation
-        *     When enabled, the compiler will signal use of deprecated API either as an 
-        *     error or a warning.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.deprecation&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        * 
-        *  COMPILER / Reporting Deprecation Inside Deprecated Code
-        *     When enabled, the compiler will signal use of deprecated API inside deprecated code.
-        *     The severity of the problem is controlled with option &quot;org.phpeclipse.phpdt.core.compiler.problem.deprecation&quot;.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.deprecationInDeprecatedCode&quot;
-        *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
-        *      - default:           &quot;disabled&quot;
-        * 
-        *  COMPILER / Reporting Hidden Catch Block
-        *     Locally to a try statement, some catch blocks may hide others , e.g.
-        *       try {  throw new java.io.CharConversionException();
-        *       } catch (java.io.CharConversionException e) {
-        *       } catch (java.io.IOException e) {}. 
-        *     When enabling this option, the compiler will issue an error or a warning for hidden 
-        *     catch blocks corresponding to checked exceptions
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.hiddenCatchBlock&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        * 
-        *  COMPILER / Reporting Unused Local
-        *     When enabled, the compiler will issue an error or a warning for unused local 
-        *     variables (i.e. variables never read from)
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.unusedLocal&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        * 
-        *  COMPILER / Reporting Unused Parameter
-        *     When enabled, the compiler will issue an error or a warning for unused method 
-        *     parameters (i.e. parameters never read from)
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.unusedParameter&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        * 
-        *  COMPILER / Reporting Unused Import
-        *     When enabled, the compiler will issue an error or a warning for unused import 
-        *     reference 
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.unusedImport&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        * 
-        *  COMPILER / Reporting Synthetic Access Emulation
-        *     When enabled, the compiler will issue an error or a warning whenever it emulates 
-        *     access to a non-accessible member of an enclosing type. Such access can have
-        *     performance implications.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.syntheticAccessEmulation&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        * 
-        *  COMPILER / Reporting Non-Externalized String Literal
-        *     When enabled, the compiler will issue an error or a warning for non externalized 
-        *     String literal (i.e. non tagged with //$NON-NLS-&lt;n&gt;$). 
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.nonExternalizedStringLiteral&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        *  
-        *  COMPILER / Reporting Usage of 'assert' Identifier
-        *     When enabled, the compiler will issue an error or a warning whenever 'assert' is 
-        *     used as an identifier (reserved keyword in 1.4)
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.assertIdentifier&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        *  
-        *  COMPILER / Reporting Usage of expression receiver on static invocation/field access
-        *     When enabled, the compiler will issue an error or a warning whenever a static field
-        *     or method is accessed with an expression receiver.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.staticAccessReceiver&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        *  
-        *  COMPILER / Reporting Assignment with no effect
-        *     When enabled, the compiler will issue an error or a warning whenever an assignment
-        *     has no effect (e.g 'x = x').
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.noEffectAssignment&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        *  
-        *  COMPILER / Setting Source Compatibility Mode
-        *     Specify whether source is 1.3 or 1.4 compatible. From 1.4 on, 'assert' is a keyword
-        *     reserved for assertion support. Also note, than when toggling to 1.4 mode, the target VM
-        *    level should be set to &quot;1.4&quot; and the compliance mode should be &quot;1.4&quot;.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.source&quot;
-        *      - possible values:   { &quot;1.3&quot;, &quot;1.4&quot; }
-        *      - default:           &quot;1.3&quot;
-        *  
-        *  COMPILER / Setting Compliance Level
-        *     Select the compliance level for the compiler. In &quot;1.3&quot; mode, source and target settings
-        *     should not go beyond &quot;1.3&quot; level.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.compliance&quot;
-        *      - possible values:   { &quot;1.3&quot;, &quot;1.4&quot; }
-        *      - default:           &quot;1.3&quot;
-        *  
-        *  COMPILER / Maximum number of problems reported per compilation unit
-        *     Specify the maximum number of problems reported on each compilation unit.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.maxProblemPerUnit&quot;
-        *      - possible values:      &quot;&lt;n&gt;&quot; where &lt;n&gt; is zero or a positive integer (if zero then all problems are reported).
-        *      - default:           &quot;100&quot;
-        *  
-        *  COMPILER / Define the Automatic Task Tags
-        *     When the tag is non empty, the compiler will issue a task marker whenever it encounters
-        *     one of the corresponding tag inside any comment in Java source code.
-        *     Generated task messages will include the tag, and range until the next line separator or comment ending, and will be trimmed.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.taskTags&quot;
-        *      - possible values:   { &quot;&lt;tag&gt;[,&lt;tag&gt;]*&quot; } where &lt;tag&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  COMPILER / Define the Automatic Task Priorities
-        *     In parallel with the Automatic Task Tags, this list defines the priorities (high, normal or low)
-        *     of the task markers issued by the compiler.
-        *     If the default is specified, the priority of each task marker is &quot;NORMAL&quot;.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.compiler.taskPriorities&quot;
-        *      - possible values:   { &quot;&lt;priority&gt;[,&lt;priority&gt;]*&quot; } where &lt;priority&gt; is one of &quot;HIGH&quot;, &quot;NORMAL&quot; or &quot;LOW&quot;
-        *      - default:           &quot;&quot;
-        *  
-        *  BUILDER / Specifying Filters for Resource Copying Control
-        *     Allow to specify some filters to control the resource copy process.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.builder.resourceCopyExclusionFilter&quot;
-        *      - possible values:   { &quot;&lt;name&gt;[,&lt;name&gt;]* } where &lt;name&gt; is a file name pattern (* and ? wild-cards allowed)
-        *        or the name of a folder which ends with '/'
-        *      - default:           &quot;&quot;
-        *  
-        *  BUILDER / Abort if Invalid Classpath
-        *     Allow to toggle the builder to abort if the classpath is invalid
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.builder.invalidClasspath&quot;
-        *      - possible values:   { &quot;abort&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        *  
-        *  BUILDER / Cleaning Output Folder(s)
-        *     Indicate whether the JavaBuilder is allowed to clean the output folders
-        *     when performing full build operations.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.builder.cleanOutputFolder&quot;
-        *      - possible values:   { &quot;clean&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;clean&quot;
-        *  
-        *  JAVACORE / Computing Project Build Order
-        *     Indicate whether JavaCore should enforce the project build order to be based on
-        *     the classpath prerequisite chain. When requesting to compute, this takes over
-        *     the platform default order (based on project references).
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.computeJavaBuildOrder&quot;
-        *      - possible values:   { &quot;compute&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;  
-        *  
-        *  JAVACORE / Specify Default Source Encoding Format
-        *     Get the encoding format for compiled sources. This setting is read-only, it is equivalent
-        *     to 'ResourcesPlugin.getEncoding()'.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.encoding&quot;
-        *      - possible values:   { any of the supported encoding name}.
-        *      - default:           &lt;platform default&gt;
-        *  
-        *  JAVACORE / Reporting Incomplete Classpath
-        *     An entry on the classpath doesn't exist or is not visible (e.g. a referenced project is closed).
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.incompleteClasspath&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;}
-        *      - default:           &quot;error&quot;
-        *  
-        *  JAVACORE / Reporting Classpath Cycle
-        *     A project is involved in a cycle.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.circularClasspath&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot; }
-        *      - default:           &quot;error&quot;
-        *  
-        *      FORMATTER / Inserting New Line Before Opening Brace
-        *     When Insert, a new line is inserted before an opening brace, otherwise nothing
-        *     is inserted
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.formatter.newline.openingBrace&quot;
-        *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
-        *      - default:           &quot;do not insert&quot;
         *  
-        *      FORMATTER / Inserting New Line Inside Control Statement
-        *     When Insert, a new line is inserted between } and following else, catch, finally
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.formatter.newline.controlStatement&quot;
-        *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
-        *      - default:           &quot;do not insert&quot;
+        *   RECOGNIZED OPTIONS:
+        *   COMPILER / Generating Local Variable Debug Attribute
+        *      When generated, this attribute will enable local variable names 
+        *      to be displayed in debugger, only in place where variables are 
+        *      definitely assigned (.class file is then bigger)
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.debug.localVariable&quot;
+        *       - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
+        *       - default:           &quot;generate&quot;
         *  
-        *      FORMATTER / Clearing Blank Lines
-        *     When Clear all, all blank lines are removed. When Preserve one, only one is kept
-        *     and all others removed.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.formatter.newline.clearAll&quot;
-        *      - possible values:   { &quot;clear all&quot;, &quot;preserve one&quot; }
-        *      - default:           &quot;preserve one&quot;
+        *   COMPILER / Generating Line Number Debug Attribute 
+        *      When generated, this attribute will enable source code highlighting in debugger 
+        *      (.class file is then bigger).
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.debug.lineNumber&quot;
+        *       - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
+        *       - default:           &quot;generate&quot;
+        *      
+        *   COMPILER / Generating Source Debug Attribute 
+        *      When generated, this attribute will enable the debugger to present the 
+        *      corresponding source code.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.debug.sourceFile&quot;
+        *       - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
+        *       - default:           &quot;generate&quot;
+        *      
+        *   COMPILER / Preserving Unused Local Variables
+        *      Unless requested to preserve unused local variables (i.e. never read), the 
+        *      compiler will optimize them out, potentially altering debugging
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.codegen.unusedLocal&quot;
+        *       - possible values:   { &quot;preserve&quot;, &quot;optimize out&quot; }
+        *       - default:           &quot;preserve&quot;
+        *   
+        *   COMPILER / Defining Target Java Platform
+        *      For binary compatibility reason, .class files can be tagged to with certain VM versions and later.
+        *      Note that &quot;1.4&quot; target require to toggle compliance mode to &quot;1.4&quot; too.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.codegen.targetPlatform&quot;
+        *       - possible values:   { &quot;1.1&quot;, &quot;1.2&quot;, &quot;1.3&quot;, &quot;1.4&quot; }
+        *       - default:           &quot;1.1&quot;
         *  
-        *      FORMATTER / Inserting New Line Between Else/If 
-        *     When Insert, a blank line is inserted between an else and an if when they are 
-        *     contiguous. When choosing to not insert, else-if will be kept on the same
-        *     line when possible.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.formatter.newline.elseIf&quot;
-        *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
-        *      - default:           &quot;do not insert&quot;
+        *   COMPILER / Reporting Unreachable Code
+        *      Unreachable code can optionally be reported as an error, warning or simply 
+        *      ignored. The bytecode generation will always optimized it out.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.unreachableCode&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;error&quot;
         *  
-        *      FORMATTER / Inserting New Line In Empty Block
-        *     When insert, a line break is inserted between contiguous { and }, if } is not followed
-        *     by a keyword.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.formatter.newline.emptyBlock&quot;
-        *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
-        *      - default:           &quot;insert&quot;
+        *   COMPILER / Reporting Invalid Import
+        *      An import statement that cannot be resolved might optionally be reported 
+        *      as an error, as a warning or ignored.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.invalidImport&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;error&quot;
         *  
-        *      FORMATTER / Splitting Lines Exceeding Length
-        *     Enable splitting of long lines (exceeding the configurable length). Length of 0 will
-        *     disable line splitting
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.formatter.lineSplit&quot;
-        *      - possible values:      &quot;&lt;n&gt;&quot;, where n is zero or a positive integer
-        *      - default:           &quot;80&quot;
+        *   COMPILER / Reporting Attempt to Override Package-Default Method
+        *      A package default method is not visible in a different package, and thus 
+        *      cannot be overridden. When enabling this option, the compiler will signal 
+        *      such scenarii either as an error or a warning.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.overridingPackageDefaultMethod&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
         *  
-        *      FORMATTER / Compacting Assignment
-        *     Assignments can be formatted asymmetrically, e.g. 'int x= 2;', when Normal, a space
-        *     is inserted before the assignment operator
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.formatter.style.assignment&quot;
-        *      - possible values:   { &quot;compact&quot;, &quot;normal&quot; }
-        *      - default:           &quot;normal&quot;
+        *   COMPILER / Reporting Method With Constructor Name
+        *      Naming a method with a constructor name is generally considered poor 
+        *      style programming. When enabling this option, the compiler will signal such 
+        *      scenarii either as an error or a warning.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.methodWithConstructorName&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
         *  
-        *      FORMATTER / Defining Indentation Character
-        *     Either choose to indent with tab characters or spaces
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.formatter.tabulation.char&quot;
-        *      - possible values:   { &quot;tab&quot;, &quot;space&quot; }
-        *      - default:           &quot;tab&quot;
+        *   COMPILER / Reporting Deprecation
+        *      When enabled, the compiler will signal use of deprecated API either as an 
+        *      error or a warning.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.deprecation&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
         *  
-        *      FORMATTER / Defining Space Indentation Length
-        *     When using spaces, set the amount of space characters to use for each 
-        *     indentation mark.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.formatter.tabulation.size&quot;
-        *      - possible values:      &quot;&lt;n&gt;&quot;, where n is a positive integer
-        *      - default:           &quot;4&quot;
+        *   COMPILER / Reporting Deprecation Inside Deprecated Code
+        *      When enabled, the compiler will signal use of deprecated API inside deprecated code.
+        *      The severity of the problem is controlled with option &quot;org.phpeclipse.phpdt.core.compiler.problem.deprecation&quot;.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.deprecationInDeprecatedCode&quot;
+        *       - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
+        *       - default:           &quot;disabled&quot;
         *  
-        *      CODEASSIST / Activate Visibility Sensitive Completion
-        *     When active, completion doesn't show that you can not see
-        *     (e.g. you can not see private methods of a super class).
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.visibilityCheck&quot;
-        *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
-        *      - default:           &quot;disabled&quot;
+        *   COMPILER / Reporting Hidden Catch Block
+        *      Locally to a try statement, some catch blocks may hide others , e.g.
+        *        try {  throw new java.io.CharConversionException();
+        *        } catch (java.io.CharConversionException e) {
+        *        } catch (java.io.IOException e) {}. 
+        *      When enabling this option, the compiler will issue an error or a warning for hidden 
+        *      catch blocks corresponding to checked exceptions
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.hiddenCatchBlock&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
         *  
-        *      CODEASSIST / Automatic Qualification of Implicit Members
-        *     When active, completion automatically qualifies completion on implicit
-        *     field references and message expressions.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.forceImplicitQualification&quot;
-        *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
-        *      - default:           &quot;disabled&quot;
+        *   COMPILER / Reporting Unused Local
+        *      When enabled, the compiler will issue an error or a warning for unused local 
+        *      variables (i.e. variables never read from)
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.unusedLocal&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
         *  
-        *   CODEASSIST / Define the Prefixes for Field Name
-        *     When the prefixes is non empty, completion for field name will begin with
-        *     one of the proposed prefixes.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.fieldPrefixes&quot;
-        *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
+        *   COMPILER / Reporting Unused Parameter
+        *      When enabled, the compiler will issue an error or a warning for unused method 
+        *      parameters (i.e. parameters never read from)
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.unusedParameter&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
         *  
-        *   CODEASSIST / Define the Prefixes for Static Field Name
-        *     When the prefixes is non empty, completion for static field name will begin with
-        *     one of the proposed prefixes.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.staticFieldPrefixes&quot;
-        *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
+        *   COMPILER / Reporting Unused Import
+        *      When enabled, the compiler will issue an error or a warning for unused import 
+        *      reference 
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.unusedImport&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
         *  
-        *   CODEASSIST / Define the Prefixes for Local Variable Name
-        *     When the prefixes is non empty, completion for local variable name will begin with
-        *     one of the proposed prefixes.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.localPrefixes&quot;
-        *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
+        *   COMPILER / Reporting Synthetic Access Emulation
+        *      When enabled, the compiler will issue an error or a warning whenever it emulates 
+        *      access to a non-accessible member of an enclosing type. Such access can have
+        *      performance implications.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.syntheticAccessEmulation&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
         *  
-        *   CODEASSIST / Define the Prefixes for Argument Name
-        *     When the prefixes is non empty, completion for argument name will begin with
-        *     one of the proposed prefixes.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.argumentPrefixes&quot;
-        *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  
-        *   CODEASSIST / Define the Suffixes for Field Name
-        *     When the suffixes is non empty, completion for field name will end with
-        *     one of the proposed suffixes.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.fieldSuffixes&quot;
-        *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  
-        *   CODEASSIST / Define the Suffixes for Static Field Name
-        *     When the suffixes is non empty, completion for static field name will end with
-        *     one of the proposed suffixes.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.staticFieldSuffixes&quot;
-        *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  
-        *   CODEASSIST / Define the Suffixes for Local Variable Name
-        *     When the suffixes is non empty, completion for local variable name will end with
-        *     one of the proposed suffixes.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.localSuffixes&quot;
-        *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  
-        *   CODEASSIST / Define the Suffixes for Argument Name
-        *     When the suffixes is non empty, completion for argument name will end with
-        *     one of the proposed suffixes.
-        *      - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.argumentSuffixes&quot;
-        *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  &lt;/pre&gt;
-        *  
-        *  @return a mutable table containing the default settings of all known options
-        *    (key type: 
+        *   COMPILER / Reporting Non-Externalized String Literal
+        *      When enabled, the compiler will issue an error or a warning for non externalized 
+        *      String literal (i.e. non tagged with //$NON-NLS-&lt;n&gt;$). 
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.nonExternalizedStringLiteral&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
+        *   
+        *   COMPILER / Reporting Usage of 'assert' Identifier
+        *      When enabled, the compiler will issue an error or a warning whenever 'assert' is 
+        *      used as an identifier (reserved keyword in 1.4)
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.assertIdentifier&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
+        *   
+        *   COMPILER / Reporting Usage of expression receiver on static invocation/field access
+        *      When enabled, the compiler will issue an error or a warning whenever a static field
+        *      or method is accessed with an expression receiver.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.staticAccessReceiver&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
+        *   
+        *   COMPILER / Reporting Assignment with no effect
+        *      When enabled, the compiler will issue an error or a warning whenever an assignment
+        *      has no effect (e.g 'x = x').
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.problem.noEffectAssignment&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
+        *   
+        *   COMPILER / Setting Source Compatibility Mode
+        *      Specify whether source is 1.3 or 1.4 compatible. From 1.4 on, 'assert' is a keyword
+        *      reserved for assertion support. Also note, than when toggling to 1.4 mode, the target VM
+        *     level should be set to &quot;1.4&quot; and the compliance mode should be &quot;1.4&quot;.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.source&quot;
+        *       - possible values:   { &quot;1.3&quot;, &quot;1.4&quot; }
+        *       - default:           &quot;1.3&quot;
+        *   
+        *   COMPILER / Setting Compliance Level
+        *      Select the compliance level for the compiler. In &quot;1.3&quot; mode, source and target settings
+        *      should not go beyond &quot;1.3&quot; level.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.compliance&quot;
+        *       - possible values:   { &quot;1.3&quot;, &quot;1.4&quot; }
+        *       - default:           &quot;1.3&quot;
+        *   
+        *   COMPILER / Maximum number of problems reported per compilation unit
+        *      Specify the maximum number of problems reported on each compilation unit.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.maxProblemPerUnit&quot;
+        *       - possible values:     &quot;&lt;n&gt;&quot; where &lt;n&gt; is zero or a positive integer (if zero then all problems are reported).
+        *       - default:           &quot;100&quot;
+        *   
+        *   COMPILER / Define the Automatic Task Tags
+        *      When the tag is non empty, the compiler will issue a task marker whenever it encounters
+        *      one of the corresponding tag inside any comment in Java source code.
+        *      Generated task messages will include the tag, and range until the next line separator or comment ending, and will be trimmed.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.taskTags&quot;
+        *       - possible values:   { &quot;&lt;tag&gt;[,&lt;tag&gt;]*&quot; } where &lt;tag&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   COMPILER / Define the Automatic Task Priorities
+        *      In parallel with the Automatic Task Tags, this list defines the priorities (high, normal or low)
+        *      of the task markers issued by the compiler.
+        *      If the default is specified, the priority of each task marker is &quot;NORMAL&quot;.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.compiler.taskPriorities&quot;
+        *       - possible values:   { &quot;&lt;priority&gt;[,&lt;priority&gt;]*&quot; } where &lt;priority&gt; is one of &quot;HIGH&quot;, &quot;NORMAL&quot; or &quot;LOW&quot;
+        *       - default:           &quot;&quot;
+        *   
+        *   BUILDER / Specifying Filters for Resource Copying Control
+        *      Allow to specify some filters to control the resource copy process.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.builder.resourceCopyExclusionFilter&quot;
+        *       - possible values:   { &quot;&lt;name&gt;[,&lt;name&gt;]* } where &lt;name&gt; is a file name pattern (* and ? wild-cards allowed)
+        *         or the name of a folder which ends with '/'
+        *       - default:           &quot;&quot;
+        *   
+        *   BUILDER / Abort if Invalid Classpath
+        *      Allow to toggle the builder to abort if the classpath is invalid
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.builder.invalidClasspath&quot;
+        *       - possible values:   { &quot;abort&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
+        *   
+        *   BUILDER / Cleaning Output Folder(s)
+        *      Indicate whether the JavaBuilder is allowed to clean the output folders
+        *      when performing full build operations.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.builder.cleanOutputFolder&quot;
+        *       - possible values:   { &quot;clean&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;clean&quot;
+        *   
+        *   JAVACORE / Computing Project Build Order
+        *      Indicate whether JavaCore should enforce the project build order to be based on
+        *      the classpath prerequisite chain. When requesting to compute, this takes over
+        *      the platform default order (based on project references).
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.computeJavaBuildOrder&quot;
+        *       - possible values:   { &quot;compute&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;         
+        *   
+        *   JAVACORE / Specify Default Source Encoding Format
+        *      Get the encoding format for compiled sources. This setting is read-only, it is equivalent
+        *      to 'ResourcesPlugin.getEncoding()'.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.encoding&quot;
+        *       - possible values:   { any of the supported encoding name}.
+        *       - default:           &lt;platform default&gt;
+        *   
+        *   JAVACORE / Reporting Incomplete Classpath
+        *      An entry on the classpath doesn't exist or is not visible (e.g. a referenced project is closed).
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.incompleteClasspath&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;}
+        *       - default:           &quot;error&quot;
+        *   
+        *   JAVACORE / Reporting Classpath Cycle
+        *      A project is involved in a cycle.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.circularClasspath&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot; }
+        *       - default:           &quot;error&quot;
+        *   
+        *      FORMATTER / Inserting New Line Before Opening Brace
+        *      When Insert, a new line is inserted before an opening brace, otherwise nothing
+        *      is inserted
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.formatter.newline.openingBrace&quot;
+        *       - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
+        *       - default:           &quot;do not insert&quot;
+        *   
+        *      FORMATTER / Inserting New Line Inside Control Statement
+        *      When Insert, a new line is inserted between } and following else, catch, finally
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.formatter.newline.controlStatement&quot;
+        *       - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
+        *       - default:           &quot;do not insert&quot;
+        *   
+        *      FORMATTER / Clearing Blank Lines
+        *      When Clear all, all blank lines are removed. When Preserve one, only one is kept
+        *      and all others removed.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.formatter.newline.clearAll&quot;
+        *       - possible values:   { &quot;clear all&quot;, &quot;preserve one&quot; }
+        *       - default:           &quot;preserve one&quot;
+        *   
+        *      FORMATTER / Inserting New Line Between Else/If 
+        *      When Insert, a blank line is inserted between an else and an if when they are 
+        *      contiguous. When choosing to not insert, else-if will be kept on the same
+        *      line when possible.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.formatter.newline.elseIf&quot;
+        *       - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
+        *       - default:           &quot;do not insert&quot;
+        *   
+        *      FORMATTER / Inserting New Line In Empty Block
+        *      When insert, a line break is inserted between contiguous { and }, if } is not followed
+        *      by a keyword.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.formatter.newline.emptyBlock&quot;
+        *       - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
+        *       - default:           &quot;insert&quot;
+        *   
+        *      FORMATTER / Splitting Lines Exceeding Length
+        *      Enable splitting of long lines (exceeding the configurable length). Length of 0 will
+        *      disable line splitting
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.formatter.lineSplit&quot;
+        *       - possible values:     &quot;&lt;n&gt;&quot;, where n is zero or a positive integer
+        *       - default:           &quot;80&quot;
+        *   
+        *      FORMATTER / Compacting Assignment
+        *      Assignments can be formatted asymmetrically, e.g. 'int x= 2;', when Normal, a space
+        *      is inserted before the assignment operator
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.formatter.style.assignment&quot;
+        *       - possible values:   { &quot;compact&quot;, &quot;normal&quot; }
+        *       - default:           &quot;normal&quot;
+        *   
+        *      FORMATTER / Defining Indentation Character
+        *      Either choose to indent with tab characters or spaces
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.formatter.tabulation.char&quot;
+        *       - possible values:   { &quot;tab&quot;, &quot;space&quot; }
+        *       - default:           &quot;tab&quot;
+        *   
+        *      FORMATTER / Defining Space Indentation Length
+        *      When using spaces, set the amount of space characters to use for each 
+        *      indentation mark.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.formatter.tabulation.size&quot;
+        *       - possible values:     &quot;&lt;n&gt;&quot;, where n is a positive integer
+        *       - default:           &quot;4&quot;
+        *   
+        *      CODEASSIST / Activate Visibility Sensitive Completion
+        *      When active, completion doesn't show that you can not see
+        *      (e.g. you can not see private methods of a super class).
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.visibilityCheck&quot;
+        *       - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
+        *       - default:           &quot;disabled&quot;
+        *   
+        *      CODEASSIST / Automatic Qualification of Implicit Members
+        *      When active, completion automatically qualifies completion on implicit
+        *      field references and message expressions.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.forceImplicitQualification&quot;
+        *       - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
+        *       - default:           &quot;disabled&quot;
+        *   
+        *    CODEASSIST / Define the Prefixes for Field Name
+        *      When the prefixes is non empty, completion for field name will begin with
+        *      one of the proposed prefixes.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.fieldPrefixes&quot;
+        *       - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Prefixes for Static Field Name
+        *      When the prefixes is non empty, completion for static field name will begin with
+        *      one of the proposed prefixes.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.staticFieldPrefixes&quot;
+        *       - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Prefixes for Local Variable Name
+        *      When the prefixes is non empty, completion for local variable name will begin with
+        *      one of the proposed prefixes.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.localPrefixes&quot;
+        *       - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Prefixes for Argument Name
+        *      When the prefixes is non empty, completion for argument name will begin with
+        *      one of the proposed prefixes.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.argumentPrefixes&quot;
+        *       - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Suffixes for Field Name
+        *      When the suffixes is non empty, completion for field name will end with
+        *      one of the proposed suffixes.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.fieldSuffixes&quot;
+        *       - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Suffixes for Static Field Name
+        *      When the suffixes is non empty, completion for static field name will end with
+        *      one of the proposed suffixes.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.staticFieldSuffixes&quot;
+        *       - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Suffixes for Local Variable Name
+        *      When the suffixes is non empty, completion for local variable name will end with
+        *      one of the proposed suffixes.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.localSuffixes&quot;
+        *       - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Suffixes for Argument Name
+        *      When the suffixes is non empty, completion for argument name will end with
+        *      one of the proposed suffixes.
+        *       - option id:         &quot;org.phpeclipse.phpdt.core.codeComplete.argumentSuffixes&quot;
+        *       - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   &lt;/pre&gt;
+        *   
+        *   @return a mutable table containing the default settings of all known options
+        *     (key type: 
         * <code>
         * String
         * </code>
-        * ; value type: 
+        *  ; value type: 
         * <code>
         * String
         * </code>
-        * )
-        *  @see #setOptions
+        *  )
+        *   @see #setOptions
         * 
         */
-       //  public static Hashtable getDefaultOptions() {
+       // public static Hashtable getDefaultOptions() {
        //
-       //    Hashtable defaultOptions = new Hashtable(10);
+       // Hashtable defaultOptions = new Hashtable(10);
        //
-       //    // see #initializeDefaultPluginPreferences() for changing default
+       // // see #initializeDefaultPluginPreferences() for changing default
        // settings
-       //    Preferences preferences = getPlugin().getPluginPreferences();
-       //    HashSet optionNames = OptionNames;
+       // Preferences preferences = getPlugin().getPluginPreferences();
+       // HashSet optionNames = OptionNames;
        //
-       //    // get preferences set to their default
-       //    String[] defaultPropertyNames = preferences.defaultPropertyNames();
-       //    for (int i = 0; i < defaultPropertyNames.length; i++) {
-       //      String propertyName = defaultPropertyNames[i];
-       //      if (optionNames.contains(propertyName)) {
-       //        defaultOptions.put(propertyName,
+       // // get preferences set to their default
+       // String[] defaultPropertyNames = preferences.defaultPropertyNames();
+       // for (int i = 0; i < defaultPropertyNames.length; i++) {
+       // String propertyName = defaultPropertyNames[i];
+       // if (optionNames.contains(propertyName)) {
+       // defaultOptions.put(propertyName,
        // preferences.getDefaultString(propertyName));
-       //      }
-       //    }
-       //    // get preferences not set to their default
-       //    String[] propertyNames = preferences.propertyNames();
-       //    for (int i = 0; i < propertyNames.length; i++) {
-       //      String propertyName = propertyNames[i];
-       //      if (optionNames.contains(propertyName)) {
-       //        defaultOptions.put(propertyName,
+       // }
+       // }
+       // // get preferences not set to their default
+       // String[] propertyNames = preferences.propertyNames();
+       // for (int i = 0; i < propertyNames.length; i++) {
+       // String propertyName = propertyNames[i];
+       // if (optionNames.contains(propertyName)) {
+       // defaultOptions.put(propertyName,
        // preferences.getDefaultString(propertyName));
-       //      }
-       //    }
-       //    // get encoding through resource plugin
-       //    defaultOptions.put(CORE_ENCODING, ResourcesPlugin.getEncoding());
+       // }
+       // }
+       // // get encoding through resource plugin
+       // defaultOptions.put(CORE_ENCODING, ResourcesPlugin.getEncoding());
        //
-       //    return defaultOptions;
-       //  }
+       // return defaultOptions;
+       // }
        /**
         * Helper method for returning one option value only. Equivalent to
         * <code>(String)JavaCore.getOptions().get(optionName)</code> Note that it
@@ -1263,17 +1262,17 @@ public class JavaCore {
         * @see JavaCore#getDefaultOptions
         * @since 2.0
         */
-       //  public static String getOption(String optionName) {
+       // public static String getOption(String optionName) {
        //
-       //    if (CORE_ENCODING.equals(optionName)) {
-       //      return ResourcesPlugin.getEncoding();
-       //    }
-       //    if (OptionNames.contains(optionName)) {
-       //      Preferences preferences = getPlugin().getPluginPreferences();
-       //      return preferences.getString(optionName).trim();
-       //    }
-       //    return null;
-       //  }
+       // if (CORE_ENCODING.equals(optionName)) {
+       // return ResourcesPlugin.getEncoding();
+       // }
+       // if (OptionNames.contains(optionName)) {
+       // Preferences preferences = getPlugin().getPluginPreferences();
+       // return preferences.getString(optionName).trim();
+       // }
+       // return null;
+       // }
        /**
         * Returns the table of the current options. Initially, all options have
         * their default values, and this method returns a table that includes all
@@ -1287,38 +1286,38 @@ public class JavaCore {
         *         <code>String</code>; value type: <code>String</code>)
         * @see JavaCore#getDefaultOptions
         */
-       //  public static Hashtable getOptions() {
+       // public static Hashtable getOptions() {
        //
-       //    Hashtable options = new Hashtable(10);
+       // Hashtable options = new Hashtable(10);
        //
-       //    // see #initializeDefaultPluginPreferences() for changing default
+       // // see #initializeDefaultPluginPreferences() for changing default
        // settings
-       //    Plugin plugin = getPlugin();
-       //    if (plugin != null) {
-       //      Preferences preferences = getPlugin().getPluginPreferences();
-       //      HashSet optionNames = OptionNames;
+       // Plugin plugin = getPlugin();
+       // if (plugin != null) {
+       // Preferences preferences = getPlugin().getPluginPreferences();
+       // HashSet optionNames = OptionNames;
        //
-       //      // get preferences set to their default
-       //      String[] defaultPropertyNames = preferences.defaultPropertyNames();
-       //      for (int i = 0; i < defaultPropertyNames.length; i++) {
-       //        String propertyName = defaultPropertyNames[i];
-       //        if (optionNames.contains(propertyName)) {
-       //          options.put(propertyName, preferences.getDefaultString(propertyName));
-       //        }
-       //      }
-       //      // get preferences not set to their default
-       //      String[] propertyNames = preferences.propertyNames();
-       //      for (int i = 0; i < propertyNames.length; i++) {
-       //        String propertyName = propertyNames[i];
-       //        if (optionNames.contains(propertyName)) {
-       //          options.put(propertyName, preferences.getString(propertyName).trim());
-       //        }
-       //      }
-       //      // get encoding through resource plugin
-       //      options.put(CORE_ENCODING, ResourcesPlugin.getEncoding());
-       //    }
-       //    return options;
-       //  }
+       // // get preferences set to their default
+       // String[] defaultPropertyNames = preferences.defaultPropertyNames();
+       // for (int i = 0; i < defaultPropertyNames.length; i++) {
+       // String propertyName = defaultPropertyNames[i];
+       // if (optionNames.contains(propertyName)) {
+       // options.put(propertyName, preferences.getDefaultString(propertyName));
+       // }
+       // }
+       // // get preferences not set to their default
+       // String[] propertyNames = preferences.propertyNames();
+       // for (int i = 0; i < propertyNames.length; i++) {
+       // String propertyName = propertyNames[i];
+       // if (optionNames.contains(propertyName)) {
+       // options.put(propertyName, preferences.getString(propertyName).trim());
+       // }
+       // }
+       // // get encoding through resource plugin
+       // options.put(CORE_ENCODING, ResourcesPlugin.getEncoding());
+       // }
+       // return options;
+       // }
        /**
         * Sets the current table of options. All and only the options explicitly
         * included in the given table are remembered; all previous option settings
@@ -1334,29 +1333,29 @@ public class JavaCore {
         *            options to their default values
         * @see JavaCore#getDefaultOptions
         */
-       //  public static void setOptions(Hashtable newOptions) {
+       // public static void setOptions(Hashtable newOptions) {
        //
-       //    // see #initializeDefaultPluginPreferences() for changing default
+       // // see #initializeDefaultPluginPreferences() for changing default
        // settings
-       //    Preferences preferences = getPlugin().getPluginPreferences();
+       // Preferences preferences = getPlugin().getPluginPreferences();
        //
-       //    if (newOptions == null) {
-       //      newOptions = getDefaultOptions();
-       //    }
-       //    Enumeration keys = newOptions.keys();
-       //    while (keys.hasMoreElements()) {
-       //      String key = (String) keys.nextElement();
-       //      if (!OptionNames.contains(key))
-       //        continue; // unrecognized option
-       //      if (key.equals(CORE_ENCODING))
-       //        continue; // skipped, contributed by resource prefs
-       //      String value = (String) newOptions.get(key);
-       //      preferences.setValue(key, value);
-       //    }
+       // if (newOptions == null) {
+       // newOptions = getDefaultOptions();
+       // }
+       // Enumeration keys = newOptions.keys();
+       // while (keys.hasMoreElements()) {
+       // String key = (String) keys.nextElement();
+       // if (!OptionNames.contains(key))
+       // continue; // unrecognized option
+       // if (key.equals(CORE_ENCODING))
+       // continue; // skipped, contributed by resource prefs
+       // String value = (String) newOptions.get(key);
+       // preferences.setValue(key, value);
+       // }
        //
-       //    // persist options
-       //    getPlugin().savePluginPreferences();
-       //  }
+       // // persist options
+       // getPlugin().savePluginPreferences();
+       // }
        public static IProject[] getPHPProjects() {
                List phpProjectsList = new ArrayList();
                IProject[] workspaceProjects = PHPeclipsePlugin.getWorkspace()
@@ -1372,16 +1371,16 @@ public class JavaCore {
                return (IProject[]) phpProjectsList.toArray(phpProjects);
        }
 
-       //  public static PHPProject getPHPProject(String name) {
-       //    IProject aProject =
+       // public static PHPProject getPHPProject(String name) {
+       // IProject aProject =
        // PHPeclipsePlugin.getWorkspace().getRoot().getProject(name);
-       //    if (isPHPProject(aProject)) {
-       //      PHPProject thePHPProject = new PHPProject();
-       //      thePHPProject.setProject(aProject);
-       //      return thePHPProject;
-       //    }
-       //    return null;
-       //  }
+       // if (isPHPProject(aProject)) {
+       // PHPProject thePHPProject = new PHPProject();
+       // thePHPProject.setProject(aProject);
+       // return thePHPProject;
+       // }
+       // return null;
+       // }
 
        public static boolean isPHPProject(IProject aProject) {
                try {
@@ -1392,38 +1391,38 @@ public class JavaCore {
                return false;
        }
 
-       //  public static PHPFile create(IFile aFile) {
-       //    if (PHPFile.EXTENSION.equalsIgnoreCase(aFile.getFileExtension()))
-       //      return new PHPFile(aFile);
-       //    if (PHPFile.EXTENSION1.equalsIgnoreCase(aFile.getFileExtension()))
-       //      return new PHPFile(aFile);
-       //    if (PHPFile.EXTENSION2.equalsIgnoreCase(aFile.getFileExtension()))
-       //      return new PHPFile(aFile);
-       //    if (PHPFile.EXTENSION3.equalsIgnoreCase(aFile.getFileExtension()))
-       //      return new PHPFile(aFile);
-       //    if (PHPFile.EXTENSION4.equalsIgnoreCase(aFile.getFileExtension()))
-       //      return new PHPFile(aFile);
-       //    if (PHPFile.EXTENSION5.equalsIgnoreCase(aFile.getFileExtension()))
-       //      return new PHPFile(aFile);
+       // public static PHPFile create(IFile aFile) {
+       // if (PHPFile.EXTENSION.equalsIgnoreCase(aFile.getFileExtension()))
+       // return new PHPFile(aFile);
+       // if (PHPFile.EXTENSION1.equalsIgnoreCase(aFile.getFileExtension()))
+       // return new PHPFile(aFile);
+       // if (PHPFile.EXTENSION2.equalsIgnoreCase(aFile.getFileExtension()))
+       // return new PHPFile(aFile);
+       // if (PHPFile.EXTENSION3.equalsIgnoreCase(aFile.getFileExtension()))
+       // return new PHPFile(aFile);
+       // if (PHPFile.EXTENSION4.equalsIgnoreCase(aFile.getFileExtension()))
+       // return new PHPFile(aFile);
+       // if (PHPFile.EXTENSION5.equalsIgnoreCase(aFile.getFileExtension()))
+       // return new PHPFile(aFile);
        //
-       //    return null;
-       //  }
+       // return null;
+       // }
 
-       //  public static PHPProject create(IProject aProject) {
+       // public static PHPProject create(IProject aProject) {
        //      
-       //    try {
-       //      if (aProject.hasNature(PHPeclipsePlugin.PHP_NATURE_ID)) {
-       //        PHPProject project = new PHPProject();
-       //        project.setProject(aProject);
-       //        return project;
-       //      }
-       //    } catch (CoreException e) {
-       //      System.err.println("Exception occurred in PHPCore#create(IProject): " +
+       // try {
+       // if (aProject.hasNature(PHPeclipsePlugin.PHP_NATURE_ID)) {
+       // PHPProject project = new PHPProject();
+       // project.setProject(aProject);
+       // return project;
+       // }
+       // } catch (CoreException e) {
+       // System.err.println("Exception occurred in PHPCore#create(IProject): " +
        // e.toString());
-       //    }
+       // }
        //
-       //    return null;
-       //  }
+       // return null;
+       // }
 
        public static void addPHPNature(IProject project, IProgressMonitor monitor)
                        throws CoreException {
@@ -1476,10 +1475,10 @@ public class JavaCore {
         *                if the operation failed.
         * @since 2.1
         */
-       //      public static void run(IWorkspaceRunnable action, IProgressMonitor
+       // public static void run(IWorkspaceRunnable action, IProgressMonitor
        // monitor) throws CoreException {
-       //              run(action, ResourcesPlugin.getWorkspace().getRoot(), monitor);
-       //      }
+       // run(action, ResourcesPlugin.getWorkspace().getRoot(), monitor);
+       // }
        /**
         * Runs the given action as an atomic Java model operation.
         * <p>
@@ -1518,19 +1517,18 @@ public class JavaCore {
         *                if the operation failed.
         * @since 3.0
         */
-       //      public static void run(IWorkspaceRunnable action, ISchedulingRule rule,
+       // public static void run(IWorkspaceRunnable action, ISchedulingRule rule,
        // IProgressMonitor monitor) throws CoreException {
-       //              IWorkspace workspace = ResourcesPlugin.getWorkspace();
-       //              if (workspace.isTreeLocked()) {
-       //                      new BatchOperation(action).run(monitor);
-       //              } else {
-       //                      // use IWorkspace.run(...) to ensure that a build will be done in
+       // IWorkspace workspace = ResourcesPlugin.getWorkspace();
+       // if (workspace.isTreeLocked()) {
+       // new BatchOperation(action).run(monitor);
+       // } else {
+       // // use IWorkspace.run(...) to ensure that a build will be done in
        // autobuild mode
-       //                      workspace.run(new BatchOperation(action), rule, IWorkspace.AVOID_UPDATE,
+       // workspace.run(new BatchOperation(action), rule, IWorkspace.AVOID_UPDATE,
        // monitor);
-       //              }
-       //      }
-
+       // }
+       // }
        /**
         * Adds the given listener for changes to Java elements. Has no effect if an
         * identical listener is already registered.
@@ -1598,27 +1596,32 @@ public class JavaCore {
         */
        public static void addJavaElementMarkerAttributes(Map attributes,
                        IJavaElement element) {
-               //      if (element instanceof IMember)
-               //              element = ((IMember) element).getClassFile();
+               // if (element instanceof IMember)
+               // element = ((IMember) element).getClassFile();
                if (attributes != null && element != null)
                        attributes.put(ATT_HANDLE_ID, element.getHandleIdentifier());
        }
 
        /**
-        * Adds the given listener for POST_CHANGE resource change events to the Java core. 
-        * The listener is guarantied to be notified of the POST_CHANGE resource change event before
-        * the Java core starts processing the resource change event itself.
+        * Adds the given listener for POST_CHANGE resource change events to the
+        * Java core. The listener is guarantied to be notified of the POST_CHANGE
+        * resource change event before the Java core starts processing the resource
+        * change event itself.
         * <p>
         * Has no effect if an identical listener is already registered.
         * </p>
         * 
-        * @param listener the listener
+        * @param listener
+        *            the listener
         * @see #removePreProcessingResourceChangedListener(IResourceChangeListener)
         * @since 3.0
         */
-       public static void addPreProcessingResourceChangedListener(IResourceChangeListener listener) {
-               JavaModelManager.getJavaModelManager().deltaState.addPreResourceChangedListener(listener);
+       public static void addPreProcessingResourceChangedListener(
+                       IResourceChangeListener listener) {
+               JavaModelManager.getJavaModelManager().deltaState
+                               .addPreResourceChangedListener(listener);
        }
+
        /**
         * Configures the given marker for the given Java element. Used for markers,
         * which denote a Java element rather than a resource.
@@ -1633,8 +1636,8 @@ public class JavaCore {
         */
        public void configureJavaElementMarker(IMarker marker, IJavaElement element)
                        throws CoreException {
-               //      if (element instanceof IMember)
-               //              element = ((IMember) element).getClassFile();
+               // if (element instanceof IMember)
+               // element = ((IMember) element).getClassFile();
                if (marker != null && element != null)
                        marker.setAttribute(ATT_HANDLE_ID, element.getHandleIdentifier());
        }
@@ -1657,28 +1660,31 @@ public class JavaCore {
        }
 
        /**
-        * Returns the Java model element corresponding to the given handle identifier
-        * generated by <code>IJavaElement.getHandleIdentifier()</code>, or
-        * <code>null</code> if unable to create the associated element.
-        * If the returned Java element is an <code>ICompilationUnit</code>, its owner
-        * is the given owner if such a working copy exists, otherwise the compilation unit 
-        * is a primary compilation unit.
-        * 
-        * @param handleIdentifier the given handle identifier
-        * @param owner the owner of the returned compilation unit, ignored if the returned
-        *   element is not a compilation unit
+        * Returns the Java model element corresponding to the given handle
+        * identifier generated by <code>IJavaElement.getHandleIdentifier()</code>,
+        * or <code>null</code> if unable to create the associated element. If the
+        * returned Java element is an <code>ICompilationUnit</code>, its owner
+        * is the given owner if such a working copy exists, otherwise the
+        * compilation unit is a primary compilation unit.
+        * 
+        * @param handleIdentifier
+        *            the given handle identifier
+        * @param owner
+        *            the owner of the returned compilation unit, ignored if the
+        *            returned element is not a compilation unit
         * @return the Java element corresponding to the handle identifier
         * @since 3.0
         */
-       public static IJavaElement create(String handleIdentifier, WorkingCopyOwner owner) {
+       public static IJavaElement create(String handleIdentifier,
+                       WorkingCopyOwner owner) {
                if (handleIdentifier == null) {
                        return null;
                }
                MementoTokenizer memento = new MementoTokenizer(handleIdentifier);
                JavaModel model = JavaModelManager.getJavaModelManager().getJavaModel();
                return model.getHandleFromMemento(memento, owner);
-       } 
-       
+       }
+
        /**
         * Returns the Java element corresponding to the given file, or
         * <code>null</code> if unable to associate the given file with a Java
@@ -1811,9 +1817,9 @@ public class JavaCore {
         * @return a class file element for the given <code>.class</code> file, or
         *         <code>null</code> if unable to recognize the class file
         */
-       //public static IClassFile createClassFileFrom(IFile file) {
-       //      return JavaModelManager.createClassFileFrom(file, null);
-       //}
+       // public static IClassFile createClassFileFrom(IFile file) {
+       // return JavaModelManager.createClassFileFrom(file, null);
+       // }
        /**
         * Creates and returns a compilation unit element for the given
         * <code>.java</code> file. Returns <code>null</code> if unable to
@@ -1839,10 +1845,10 @@ public class JavaCore {
         *         to create a JAR package fragment root. (for example, if the JAR
         *         file represents a non-Java resource)
         */
-       //public static IPackageFragmentRoot createJarPackageFragmentRootFrom(IFile
+       // public static IPackageFragmentRoot createJarPackageFragmentRootFrom(IFile
        // file) {
-       //      return JavaModelManager.createJarPackageFragmentRootFrom(file, null);
-       //}
+       // return JavaModelManager.createJarPackageFragmentRootFrom(file, null);
+       // }
        /**
         * Answers the project specific value for a given classpath container. In
         * case this container path could not be resolved, then will answer
@@ -1887,86 +1893,87 @@ public class JavaCore {
         *      IProgressMonitor)
         * @since 2.0
         */
-       //public static IClasspathContainer getClasspathContainer(final IPath
+       // public static IClasspathContainer getClasspathContainer(final IPath
        // containerPath, final IJavaProject project) throws JavaModelException {
        //
-       //      IClasspathContainer container = JavaModelManager.containerGet(project,
+       // IClasspathContainer container = JavaModelManager.containerGet(project,
        // containerPath);
-       //      if (container == JavaModelManager.ContainerInitializationInProgress)
+       // if (container == JavaModelManager.ContainerInitializationInProgress)
        // return null; // break cycle
        //
-       //      if (container == null){
-       //              final ClasspathContainerInitializer initializer =
+       // if (container == null){
+       // final ClasspathContainerInitializer initializer =
        // JavaCore.getClasspathContainerInitializer(containerPath.segment(0));
-       //              if (initializer != null){
-       //                      if (JavaModelManager.CP_RESOLVE_VERBOSE){
-       //                              System.out.println("CPContainer INIT - triggering initialization of:
+       // if (initializer != null){
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+       // System.out.println("CPContainer INIT - triggering initialization of:
        // ["+project.getElementName()+"] " + containerPath + " using initializer:
        // "+ initializer); //$NON-NLS-1$ //$NON-NLS-2$//$NON-NLS-3$
-       //                              new Exception("FAKE exception for dumping current CPContainer
+       // new Exception("FAKE exception for dumping current CPContainer
        // (["+project.getElementName()+"] "+ containerPath+ ")INIT invocation stack
        // trace").printStackTrace(); //$NON-NLS-1$//$NON-NLS-2$//$NON-NLS-3$
-       //                      }
-       //                      JavaModelManager.containerPut(project, containerPath,
+       // }
+       // JavaModelManager.containerPut(project, containerPath,
        // JavaModelManager.ContainerInitializationInProgress); // avoid
        // initialization cycles
-       //                      boolean ok = false;
-       //                      try {
-       //                              // wrap initializer call with Safe runnable in case initializer would be
+       // boolean ok = false;
+       // try {
+       // // wrap initializer call with Safe runnable in case initializer would be
        // causing some grief
-       //                              Platform.run(new ISafeRunnable() {
-       //                                      public void handleException(Throwable exception) {
-       //                                              ProjectPrefUtil.log(exception, "Exception occurred in classpath container
+       // Platform.run(new ISafeRunnable() {
+       // public void handleException(Throwable exception) {
+       // ProjectPrefUtil.log(exception, "Exception occurred in classpath container
        // initializer: "+initializer); //$NON-NLS-1$
-       //                                      }
-       //                                      public void run() throws Exception {
-       //                                              initializer.initialize(containerPath, project);
-       //                                      }
-       //                              });
+       // }
+       // public void run() throws Exception {
+       // initializer.initialize(containerPath, project);
+       // }
+       // });
        //                                      
-       //                              // retrieve value (if initialization was successful)
-       //                              container = JavaModelManager.containerGet(project, containerPath);
-       //                              if (container == JavaModelManager.ContainerInitializationInProgress)
+       // // retrieve value (if initialization was successful)
+       // container = JavaModelManager.containerGet(project, containerPath);
+       // if (container == JavaModelManager.ContainerInitializationInProgress)
        // return null; // break cycle
-       //                              ok = true;
-       //                      } finally {
-       //                              if (!ok) JavaModelManager.containerPut(project, containerPath, null); //
+       // ok = true;
+       // } finally {
+       // if (!ok) JavaModelManager.containerPut(project, containerPath, null); //
        // flush cache
-       //                      }
-       //                      if (JavaModelManager.CP_RESOLVE_VERBOSE){
-       //                              System.out.print("CPContainer INIT - after resolution:
+       // }
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+       // System.out.print("CPContainer INIT - after resolution:
        // ["+project.getElementName()+"] " + containerPath + " --> ");
        // //$NON-NLS-2$//$NON-NLS-1$//$NON-NLS-3$
-       //                              if (container != null){
-       //                                      System.out.print("container: "+container.getDescription()+" {");
+       // if (container != null){
+       // System.out.print("container: "+container.getDescription()+" {");
        // //$NON-NLS-2$//$NON-NLS-1$
-       //                                      IClasspathEntry[] entries = container.getClasspathEntries();
-       //                                      if (entries != null){
-       //                                              for (int i = 0; i < entries.length; i++){
-       //                                                      if (i > 0) System.out.println(", ");//$NON-NLS-1$
-       //                                                      System.out.println(entries[i]);
-       //                                              }
-       //                                      }
-       //                                      System.out.println("}");//$NON-NLS-1$
-       //                              } else {
-       //                                      System.out.println("{unbound}");//$NON-NLS-1$
-       //                              }
-       //                      }
-       //              } else {
-       //                      if (JavaModelManager.CP_RESOLVE_VERBOSE){
-       //                              System.out.println("CPContainer INIT - no initializer found for:
+       // IClasspathEntry[] entries = container.getClasspathEntries();
+       // if (entries != null){
+       // for (int i = 0; i < entries.length; i++){
+       // if (i > 0) System.out.println(", ");//$NON-NLS-1$
+       // System.out.println(entries[i]);
+       // }
+       // }
+       // System.out.println("}");//$NON-NLS-1$
+       // } else {
+       // System.out.println("{unbound}");//$NON-NLS-1$
+       // }
+       // }
+       // } else {
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+       // System.out.println("CPContainer INIT - no initializer found for:
        // "+project.getElementName()+"] " + containerPath); //$NON-NLS-1$
        // //$NON-NLS-2$
-       //                      }
-       //              }
-       //      }
-       //      return container;
-       //}
+       // }
+       // }
+       // }
+       // return container;
+       // }
        /**
         * Helper method finding the classpath container initializer registered for
         * a given classpath container ID or <code>null</code> if none was found
         * while iterating over the contributions to extension point to the
-        * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
+        * extension point
+        * "net.sourceforge.phpdt.core.classpathContainerInitializer".
         * <p>
         * A containerID is the first segment of any container path, used to
         * identify the registered container initializer.
@@ -1978,42 +1985,42 @@ public class JavaCore {
         *         container initializer or <code>null</code> if none was found.
         * @since 2.1
         */
-       //public static ClasspathContainerInitializer
+       // public static ClasspathContainerInitializer
        // getClasspathContainerInitializer(String containerID){
        //              
-       //      Plugin jdtCorePlugin = JavaCore.getPlugin();
-       //      if (jdtCorePlugin == null) return null;
+       // Plugin jdtCorePlugin = JavaCore.getPlugin();
+       // if (jdtCorePlugin == null) return null;
        //
-       //      IExtensionPoint extension =
+       // IExtensionPoint extension =
        // jdtCorePlugin.getDescriptor().getExtensionPoint(JavaModelManager.CPCONTAINER_INITIALIZER_EXTPOINT_ID);
-       //      if (extension != null) {
-       //              IExtension[] extensions = extension.getExtensions();
-       //              for(int i = 0; i < extensions.length; i++){
-       //                      IConfigurationElement [] configElements =
+       // if (extension != null) {
+       // IExtension[] extensions = extension.getExtensions();
+       // for(int i = 0; i < extensions.length; i++){
+       // IConfigurationElement [] configElements =
        // extensions[i].getConfigurationElements();
-       //                      for(int j = 0; j < configElements.length; j++){
-       //                              String initializerID = configElements[j].getAttribute("id");
+       // for(int j = 0; j < configElements.length; j++){
+       // String initializerID = configElements[j].getAttribute("id");
        // //$NON-NLS-1$
-       //                              if (initializerID != null && initializerID.equals(containerID)){
-       //                                      if (JavaModelManager.CP_RESOLVE_VERBOSE) {
-       //                                              System.out.println("CPContainer INIT - found initializer: "+containerID
+       // if (initializerID != null && initializerID.equals(containerID)){
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE) {
+       // System.out.println("CPContainer INIT - found initializer: "+containerID
        // +" --> " +
        // configElements[j].getAttribute("class"));//$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$
-       //                                      }
-       //                                      try {
-       //                                              Object execExt = configElements[j].createExecutableExtension("class");
+       // }
+       // try {
+       // Object execExt = configElements[j].createExecutableExtension("class");
        // //$NON-NLS-1$
-       //                                              if (execExt instanceof ClasspathContainerInitializer){
-       //                                                      return (ClasspathContainerInitializer)execExt;
-       //                                              }
-       //                                      } catch(CoreException e) {
-       //                                      }
-       //                              }
-       //                      }
-       //              }
-       //      }
-       //      return null;
-       //}
+       // if (execExt instanceof ClasspathContainerInitializer){
+       // return (ClasspathContainerInitializer)execExt;
+       // }
+       // } catch(CoreException e) {
+       // }
+       // }
+       // }
+       // }
+       // }
+       // return null;
+       // }
        /**
         * Returns the path held in the given classpath variable. Returns <node>null
         * </code> if unable to bind.
@@ -2023,10 +2030,10 @@ public class JavaCore {
         * <p>
         * Note that classpath variables can be contributed registered initializers
         * for, using the extension point
-        * "net.sourceforge.phpdt.core.classpathVariableInitializer". If an initializer is
-        * registered for a variable, its persisted value will be ignored: its
-        * initializer will thus get the opportunity to rebind the variable
-        * differently on each session.
+        * "net.sourceforge.phpdt.core.classpathVariableInitializer". If an
+        * initializer is registered for a variable, its persisted value will be
+        * ignored: its initializer will thus get the opportunity to rebind the
+        * variable differently on each session.
         * 
         * @param variableName
         *            the name of the classpath variable
@@ -2045,54 +2052,55 @@ public class JavaCore {
 
                // even if persisted value exists, initializer is given priority, only
                // if no initializer is found the persisted value is reused
-               //      final ClasspathVariableInitializer initializer =
+               // final ClasspathVariableInitializer initializer =
                // PHPCore.getClasspathVariableInitializer(variableName);
-               //      if (initializer != null){
-               //              if (JavaModelManager.CP_RESOLVE_VERBOSE){
-               //                      System.out.println("CPVariable INIT - triggering initialization of: "
+               // if (initializer != null){
+               // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+               // System.out.println("CPVariable INIT - triggering initialization of: "
                // + variableName+ " using initializer: "+ initializer); //$NON-NLS-1$
                // //$NON-NLS-2$
-               //                      new Exception("FAKE exception for dumping current CPVariable
+               // new Exception("FAKE exception for dumping current CPVariable
                // ("+variableName+ ")INIT invocation stack trace").printStackTrace();
                // //$NON-NLS-1$//$NON-NLS-2$
-               //              }
-               //              JavaModelManager.variablePut(variableName,
+               // }
+               // JavaModelManager.variablePut(variableName,
                // JavaModelManager.VariableInitializationInProgress); // avoid
                // initialization cycles
-               //              boolean ok = false;
-               //              try {
-               //                      // wrap initializer call with Safe runnable in case initializer would
+               // boolean ok = false;
+               // try {
+               // // wrap initializer call with Safe runnable in case initializer would
                // be causing some grief
-               //                      Platform.run(new ISafeRunnable() {
-               //                              public void handleException(Throwable exception) {
-               //                                      ProjectPrefUtil.log(exception, "Exception occurred in classpath variable
+               // Platform.run(new ISafeRunnable() {
+               // public void handleException(Throwable exception) {
+               // ProjectPrefUtil.log(exception, "Exception occurred in classpath
+               // variable
                // initializer: "+initializer+" while initializing variable:
                // "+variableName); //$NON-NLS-1$ //$NON-NLS-2$
-               //                              }
-               //                              public void run() throws Exception {
-               //                                      initializer.initialize(variableName);
-               //                              }
-               //                      });
-               //                      variablePath = (IPath) JavaModelManager.variableGet(variableName); //
+               // }
+               // public void run() throws Exception {
+               // initializer.initialize(variableName);
+               // }
+               // });
+               // variablePath = (IPath) JavaModelManager.variableGet(variableName); //
                // initializer should have performed side-effect
-               //                      if (variablePath ==
+               // if (variablePath ==
                // JavaModelManager.VariableInitializationInProgress) return null; //
                // break cycle (initializer did not init or reentering call)
-               //                      if (JavaModelManager.CP_RESOLVE_VERBOSE){
-               //                              System.out.println("CPVariable INIT - after initialization: " +
+               // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+               // System.out.println("CPVariable INIT - after initialization: " +
                // variableName + " --> " + variablePath); //$NON-NLS-2$//$NON-NLS-1$
-               //                      }
-               //                      ok = true;
-               //              } finally {
-               //                      if (!ok) JavaModelManager.variablePut(variableName, null); // flush
+               // }
+               // ok = true;
+               // } finally {
+               // if (!ok) JavaModelManager.variablePut(variableName, null); // flush
                // cache
-               //              }
-               //      } else {
-               //              if (JavaModelManager.CP_RESOLVE_VERBOSE){
-               //                      System.out.println("CPVariable INIT - no initializer found for: " +
+               // }
+               // } else {
+               // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+               // System.out.println("CPVariable INIT - no initializer found for: " +
                // variableName); //$NON-NLS-1$
-               //              }
-               //      }
+               // }
+               // }
                return variablePath;
        }
 
@@ -2100,7 +2108,8 @@ public class JavaCore {
         * Helper method finding the classpath variable initializer registered for a
         * given classpath variable name or <code>null</code> if none was found
         * while iterating over the contributions to extension point to the
-        * extension point "net.sourceforge.phpdt.core.classpathVariableInitializer".
+        * extension point
+        * "net.sourceforge.phpdt.core.classpathVariableInitializer".
         * <p>
         * 
         * @param the
@@ -2116,34 +2125,34 @@ public class JavaCore {
                if (jdtCorePlugin == null)
                        return null;
 
-               //      IExtensionPoint extension =
+               // IExtensionPoint extension =
                // jdtCorePlugin.getDescriptor().getExtensionPoint(JavaModelManager.CPVARIABLE_INITIALIZER_EXTPOINT_ID);
-               //      if (extension != null) {
-               //              IExtension[] extensions = extension.getExtensions();
-               //              for(int i = 0; i < extensions.length; i++){
-               //                      IConfigurationElement [] configElements =
+               // if (extension != null) {
+               // IExtension[] extensions = extension.getExtensions();
+               // for(int i = 0; i < extensions.length; i++){
+               // IConfigurationElement [] configElements =
                // extensions[i].getConfigurationElements();
-               //                      for(int j = 0; j < configElements.length; j++){
-               //                              try {
-               //                                      String varAttribute = configElements[j].getAttribute("variable");
+               // for(int j = 0; j < configElements.length; j++){
+               // try {
+               // String varAttribute = configElements[j].getAttribute("variable");
                // //$NON-NLS-1$
-               //                                      if (variable.equals(varAttribute)) {
-               //                                              if (JavaModelManager.CP_RESOLVE_VERBOSE) {
-               //                                                      System.out.println("CPVariable INIT - found initializer: "+variable+"
+               // if (variable.equals(varAttribute)) {
+               // if (JavaModelManager.CP_RESOLVE_VERBOSE) {
+               // System.out.println("CPVariable INIT - found initializer: "+variable+"
                // --> " +
                // configElements[j].getAttribute("class"));//$NON-NLS-3$//$NON-NLS-2$//$NON-NLS-1$
-               //                                              }
-               //                                              Object execExt =
+               // }
+               // Object execExt =
                // configElements[j].createExecutableExtension("class"); //$NON-NLS-1$
-               //                                              if (execExt instanceof ClasspathVariableInitializer){
-               //                                                      return (ClasspathVariableInitializer)execExt;
-               //                                              }
-               //                                      }
-               //                              } catch(CoreException e){
-               //                              }
-               //                              }
-               //              }
-               //      }
+               // if (execExt instanceof ClasspathVariableInitializer){
+               // return (ClasspathVariableInitializer)execExt;
+               // }
+               // }
+               // } catch(CoreException e){
+               // }
+               // }
+               // }
+               // }
                return null;
        }
 
@@ -2157,9 +2166,9 @@ public class JavaCore {
         * @return the list of classpath variable names
         * @see #setClasspathVariable
         */
-       //public static String[] getClasspathVariableNames() {
-       //      return JavaModelManager.variableNames();
-       //}
+       // public static String[] getClasspathVariableNames() {
+       // return JavaModelManager.variableNames();
+       // }
        /**
         * Returns a table of all known configurable options with their default
         * values. These options allow to configure the behaviour of the underlying
@@ -2172,453 +2181,453 @@ public class JavaCore {
         * Note: more options might be added in further releases.
         * 
         * <pre>
-        * 
-        *  RECOGNIZED OPTIONS:
-        *  COMPILER / Generating Local Variable Debug Attribute
-        *     When generated, this attribute will enable local variable names 
-        *     to be displayed in debugger, only in place where variables are 
-        *     definitely assigned (.class file is then bigger)
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.debug.localVariable&quot;
-        *      - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
-        *      - default:           &quot;generate&quot;
-        * 
-        *  COMPILER / Generating Line Number Debug Attribute 
-        *     When generated, this attribute will enable source code highlighting in debugger 
-        *     (.class file is then bigger).
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.debug.lineNumber&quot;
-        *      - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
-        *      - default:           &quot;generate&quot;
-        *     
-        *  COMPILER / Generating Source Debug Attribute 
-        *     When generated, this attribute will enable the debugger to present the 
-        *     corresponding source code.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.debug.sourceFile&quot;
-        *      - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
-        *      - default:           &quot;generate&quot;
-        *     
-        *  COMPILER / Preserving Unused Local Variables
-        *     Unless requested to preserve unused local variables (that is, never read), the 
-        *     compiler will optimize them out, potentially altering debugging
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.codegen.unusedLocal&quot;
-        *      - possible values:   { &quot;preserve&quot;, &quot;optimize out&quot; }
-        *      - default:           &quot;preserve&quot;
-        *  
-        *  COMPILER / Defining Target Java Platform
-        *     For binary compatibility reason, .class files can be tagged to with certain VM versions and later.
-        *     Note that &quot;1.4&quot; target require to toggle compliance mode to &quot;1.4&quot; too.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.codegen.targetPlatform&quot;
-        *      - possible values:   { &quot;1.1&quot;, &quot;1.2&quot;, &quot;1.3&quot;, &quot;1.4&quot; }
-        *      - default:           &quot;1.1&quot;
-        * 
-        *  COMPILER / Reporting Unreachable Code
-        *     Unreachable code can optionally be reported as an error, warning or simply 
-        *     ignored. The bytecode generation will always optimized it out.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unreachableCode&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;error&quot;
-        * 
-        *  COMPILER / Reporting Invalid Import
-        *     An import statement that cannot be resolved might optionally be reported 
-        *     as an error, as a warning or ignored.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.invalidImport&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;error&quot;
-        * 
-        *  COMPILER / Reporting Attempt to Override Package-Default Method
-        *     A package default method is not visible in a different package, and thus 
-        *     cannot be overridden. When enabling this option, the compiler will signal 
-        *     such scenarii either as an error or a warning.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.overridingPackageDefaultMethod&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        * 
-        *  COMPILER / Reporting Method With Constructor Name
-        *     Naming a method with a constructor name is generally considered poor 
-        *     style programming. When enabling this option, the compiler will signal such 
-        *     scenarii either as an error or a warning.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.methodWithConstructorName&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        * 
-        *  COMPILER / Reporting Deprecation
-        *     When enabled, the compiler will signal use of deprecated API either as an 
-        *     error or a warning.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.deprecation&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        * 
-        *  COMPILER / Reporting Deprecation Inside Deprecated Code
-        *     When enabled, the compiler will signal use of deprecated API inside deprecated code.
-        *     The severity of the problem is controlled with option &quot;net.sourceforge.phpdt.core.compiler.problem.deprecation&quot;.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.deprecationInDeprecatedCode&quot;
-        *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
-        *      - default:           &quot;disabled&quot;
-        * 
-        *  COMPILER / Reporting Hidden Catch Block
-        *     Locally to a try statement, some catch blocks may hide others . For example,
-        *       try {  throw new java.io.CharConversionException();
-        *       } catch (java.io.CharConversionException e) {
-        *       } catch (java.io.IOException e) {}. 
-        *     When enabling this option, the compiler will issue an error or a warning for hidden 
-        *     catch blocks corresponding to checked exceptions
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.hiddenCatchBlock&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        * 
-        *  COMPILER / Reporting Unused Local
-        *     When enabled, the compiler will issue an error or a warning for unused local 
-        *     variables (that is, variables never read from)
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedLocal&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        * 
-        *  COMPILER / Reporting Unused Parameter
-        *     When enabled, the compiler will issue an error or a warning for unused method 
-        *     parameters (that is, parameters never read from)
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameter&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        * 
-        *  COMPILER / Reporting Unused Parameter if Implementing Abstract Method
-        *     When enabled, the compiler will signal unused parameters in abstract method implementations.
-        *     The severity of the problem is controlled with option &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameter&quot;.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameterWhenImplementingAbstract&quot;
-        *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
-        *      - default:           &quot;disabled&quot;
-        * 
-        *  COMPILER / Reporting Unused Parameter if Overriding Concrete Method
-        *     When enabled, the compiler will signal unused parameters in methods overriding concrete ones.
-        *     The severity of the problem is controlled with option &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameter&quot;.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameterWhenOverridingConcrete&quot;
-        *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
-        *      - default:           &quot;disabled&quot;
-        * 
-        *  COMPILER / Reporting Unused Import
-        *     When enabled, the compiler will issue an error or a warning for unused import 
-        *     reference 
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedImport&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        * 
-        *  COMPILER / Reporting Unused Private Members
-        *     When enabled, the compiler will issue an error or a warning whenever a private 
-        *     method or field is declared but never used within the same unit.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedPrivateMember&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        * 
-        *  COMPILER / Reporting Synthetic Access Emulation
-        *     When enabled, the compiler will issue an error or a warning whenever it emulates 
-        *     access to a non-accessible member of an enclosing type. Such access can have
-        *     performance implications.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.syntheticAccessEmulation&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        * 
-        *  COMPILER / Reporting Non-Externalized String Literal
-        *     When enabled, the compiler will issue an error or a warning for non externalized 
-        *     String literal (that is, not tagged with //$NON-NLS-&lt;n&gt;$). 
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.nonExternalizedStringLiteral&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        *  
-        *  COMPILER / Reporting Usage of 'assert' Identifier
-        *     When enabled, the compiler will issue an error or a warning whenever 'assert' is 
-        *     used as an identifier (reserved keyword in 1.4)
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.assertIdentifier&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;
-        *  
-        *  COMPILER / Reporting Non-Static Reference to a Static Member
-        *     When enabled, the compiler will issue an error or a warning whenever a static field
-        *     or method is accessed with an expression receiver. A reference to a static member should
-        *     be qualified with a type name.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.staticAccessReceiver&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        *  
-        *  COMPILER / Reporting Assignment with no Effect
-        *     When enabled, the compiler will issue an error or a warning whenever an assignment
-        *     has no effect (e.g 'x = x').
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.noEffectAssignment&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        *  
-        *  COMPILER / Reporting Interface Method not Compatible with non-Inherited Methods
-        *     When enabled, the compiler will issue an error or a warning whenever an interface
-        *     defines a method incompatible with a non-inherited Object method. Until this conflict
-        *     is resolved, such an interface cannot be implemented, For example, 
-        *       interface I { 
-        *          int clone();
-        *       } 
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        *  
-        *  COMPILER / Reporting Usage of char[] Expressions in String Concatenations
-        *     When enabled, the compiler will issue an error or a warning whenever a char[] expression
-        *     is used in String concatenations (for example, &quot;hello&quot; + new char[]{'w','o','r','l','d'}).
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.noImplicitStringConversion&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;warning&quot;
-        * 
-        *  COMPILER / Setting Source Compatibility Mode
-        *     Specify whether source is 1.3 or 1.4 compatible. From 1.4 on, 'assert' is a keyword
-        *     reserved for assertion support. Also note, than when toggling to 1.4 mode, the target VM
-        *    level should be set to &quot;1.4&quot; and the compliance mode should be &quot;1.4&quot;.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.source&quot;
-        *      - possible values:   { &quot;1.3&quot;, &quot;1.4&quot; }
-        *      - default:           &quot;1.3&quot;
-        *  
-        *  COMPILER / Setting Compliance Level
-        *     Select the compliance level for the compiler. In &quot;1.3&quot; mode, source and target settings
-        *     should not go beyond &quot;1.3&quot; level.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.compliance&quot;
-        *      - possible values:   { &quot;1.3&quot;, &quot;1.4&quot; }
-        *      - default:           &quot;1.3&quot;
-        *  
-        *  COMPILER / Maximum number of problems reported per compilation unit
-        *     Specify the maximum number of problems reported on each compilation unit.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.maxProblemPerUnit&quot;
-        *      - possible values:      &quot;&lt;n&gt;&quot; where &lt;n&gt; is zero or a positive integer (if zero then all problems are reported).
-        *      - default:           &quot;100&quot;
         *  
-        *  COMPILER / Define the Automatic Task Tags
-        *     When the tag list is not empty, the compiler will issue a task marker whenever it encounters
-        *     one of the corresponding tag inside any comment in Java source code.
-        *     Generated task messages will include the tag, and range until the next line separator or comment ending.
-        *     Note that tasks messages are trimmed.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.taskTags&quot;
-        *      - possible values:   { &quot;&lt;tag&gt;[,&lt;tag&gt;]*&quot; } where &lt;tag&gt; is a String without any wild-card or leading/trailing spaces 
-        *      - default:           &quot;&quot;
+        *   RECOGNIZED OPTIONS:
+        *   COMPILER / Generating Local Variable Debug Attribute
+        *      When generated, this attribute will enable local variable names 
+        *      to be displayed in debugger, only in place where variables are 
+        *      definitely assigned (.class file is then bigger)
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.debug.localVariable&quot;
+        *       - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
+        *       - default:           &quot;generate&quot;
         *  
-        *  COMPILER / Define the Automatic Task Priorities
-        *     In parallel with the Automatic Task Tags, this list defines the priorities (high, normal or low)
-        *     of the task markers issued by the compiler.
-        *     If the default is specified, the priority of each task marker is &quot;NORMAL&quot;.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.compiler.taskPriorities&quot;
-        *      - possible values:   { &quot;&lt;priority&gt;[,&lt;priority&gt;]*&quot; } where &lt;priority&gt; is one of &quot;HIGH&quot;, &quot;NORMAL&quot; or &quot;LOW&quot;
-        *      - default:           &quot;&quot;
-        * 
-        *  BUILDER / Specifying Filters for Resource Copying Control
-        *     Allow to specify some filters to control the resource copy process.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.builder.resourceCopyExclusionFilter&quot;
-        *      - possible values:   { &quot;&lt;name&gt;[,&lt;name&gt;]* } where &lt;name&gt; is a file name pattern (* and ? wild-cards allowed)
-        *        or the name of a folder which ends with '/'
-        *      - default:           &quot;&quot;
+        *   COMPILER / Generating Line Number Debug Attribute 
+        *      When generated, this attribute will enable source code highlighting in debugger 
+        *      (.class file is then bigger).
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.debug.lineNumber&quot;
+        *       - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
+        *       - default:           &quot;generate&quot;
+        *      
+        *   COMPILER / Generating Source Debug Attribute 
+        *      When generated, this attribute will enable the debugger to present the 
+        *      corresponding source code.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.debug.sourceFile&quot;
+        *       - possible values:   { &quot;generate&quot;, &quot;do not generate&quot; }
+        *       - default:           &quot;generate&quot;
+        *      
+        *   COMPILER / Preserving Unused Local Variables
+        *      Unless requested to preserve unused local variables (that is, never read), the 
+        *      compiler will optimize them out, potentially altering debugging
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.codegen.unusedLocal&quot;
+        *       - possible values:   { &quot;preserve&quot;, &quot;optimize out&quot; }
+        *       - default:           &quot;preserve&quot;
+        *   
+        *   COMPILER / Defining Target Java Platform
+        *      For binary compatibility reason, .class files can be tagged to with certain VM versions and later.
+        *      Note that &quot;1.4&quot; target require to toggle compliance mode to &quot;1.4&quot; too.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.codegen.targetPlatform&quot;
+        *       - possible values:   { &quot;1.1&quot;, &quot;1.2&quot;, &quot;1.3&quot;, &quot;1.4&quot; }
+        *       - default:           &quot;1.1&quot;
         *  
-        *  BUILDER / Abort if Invalid Classpath
-        *     Allow to toggle the builder to abort if the classpath is invalid
-        *      - option id:         &quot;net.sourceforge.phpdt.core.builder.invalidClasspath&quot;
-        *      - possible values:   { &quot;abort&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;abort&quot;
+        *   COMPILER / Reporting Unreachable Code
+        *      Unreachable code can optionally be reported as an error, warning or simply 
+        *      ignored. The bytecode generation will always optimized it out.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unreachableCode&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;error&quot;
         *  
-        *  BUILDER / Cleaning Output Folder(s)
-        *     Indicate whether the JavaBuilder is allowed to clean the output folders
-        *     when performing full build operations.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.builder.cleanOutputFolder&quot;
-        *      - possible values:   { &quot;clean&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;clean&quot;
+        *   COMPILER / Reporting Invalid Import
+        *      An import statement that cannot be resolved might optionally be reported 
+        *      as an error, as a warning or ignored.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.invalidImport&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;error&quot;
         *  
-        *  BUILDER / Reporting Duplicate Resources
-        *     Indicate the severity of the problem reported when more than one occurrence
-        *     of a resource is to be copied into the output location.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.builder.duplicateResourceTask&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot; }
-        *      - default:           &quot;warning&quot;
+        *   COMPILER / Reporting Attempt to Override Package-Default Method
+        *      A package default method is not visible in a different package, and thus 
+        *      cannot be overridden. When enabling this option, the compiler will signal 
+        *      such scenarii either as an error or a warning.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.overridingPackageDefaultMethod&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
         *  
-        *  JAVACORE / Computing Project Build Order
-        *     Indicate whether JavaCore should enforce the project build order to be based on
-        *     the classpath prerequisite chain. When requesting to compute, this takes over
-        *     the platform default order (based on project references).
-        *      - option id:         &quot;net.sourceforge.phpdt.core.computeJavaBuildOrder&quot;
-        *      - possible values:   { &quot;compute&quot;, &quot;ignore&quot; }
-        *      - default:           &quot;ignore&quot;  
+        *   COMPILER / Reporting Method With Constructor Name
+        *      Naming a method with a constructor name is generally considered poor 
+        *      style programming. When enabling this option, the compiler will signal such 
+        *      scenarii either as an error or a warning.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.methodWithConstructorName&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
         *  
-        *  JAVACORE / Specify Default Source Encoding Format
-        *     Get the encoding format for compiled sources. This setting is read-only, it is equivalent
-        *     to 'ResourcesPlugin.getEncoding()'.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.encoding&quot;
-        *      - possible values:   { any of the supported encoding name}.
-        *      - default:           &lt;platform default&gt;
+        *   COMPILER / Reporting Deprecation
+        *      When enabled, the compiler will signal use of deprecated API either as an 
+        *      error or a warning.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.deprecation&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
         *  
-        *  JAVACORE / Reporting Incomplete Classpath
-        *     Indicate the severity of the problem reported when an entry on the classpath does not exist, 
-        *     is not legite or is not visible (for example, a referenced project is closed).
-        *      - option id:         &quot;net.sourceforge.phpdt.core.incompleteClasspath&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot;}
-        *      - default:           &quot;error&quot;
+        *   COMPILER / Reporting Deprecation Inside Deprecated Code
+        *      When enabled, the compiler will signal use of deprecated API inside deprecated code.
+        *      The severity of the problem is controlled with option &quot;net.sourceforge.phpdt.core.compiler.problem.deprecation&quot;.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.deprecationInDeprecatedCode&quot;
+        *       - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
+        *       - default:           &quot;disabled&quot;
         *  
-        *  JAVACORE / Reporting Classpath Cycle
-        *     Indicate the severity of the problem reported when a project is involved in a cycle.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.circularClasspath&quot;
-        *      - possible values:   { &quot;error&quot;, &quot;warning&quot; }
-        *      - default:           &quot;error&quot;
+        *   COMPILER / Reporting Hidden Catch Block
+        *      Locally to a try statement, some catch blocks may hide others . For example,
+        *        try {  throw new java.io.CharConversionException();
+        *        } catch (java.io.CharConversionException e) {
+        *        } catch (java.io.IOException e) {}. 
+        *      When enabling this option, the compiler will issue an error or a warning for hidden 
+        *      catch blocks corresponding to checked exceptions
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.hiddenCatchBlock&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
         *  
-        *  JAVACORE / Enabling Usage of Classpath Exclusion Patterns
-        *     When disabled, no entry on a project classpath can be associated with
-        *     an exclusion pattern.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.classpath.exclusionPatterns&quot;
-        *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
-        *      - default:           &quot;enabled&quot;
+        *   COMPILER / Reporting Unused Local
+        *      When enabled, the compiler will issue an error or a warning for unused local 
+        *      variables (that is, variables never read from)
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedLocal&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
         *  
-        *  JAVACORE / Enabling Usage of Classpath Multiple Output Locations
-        *     When disabled, no entry on a project classpath can be associated with
-        *     a specific output location, preventing thus usage of multiple output locations.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.classpath.multipleOutputLocations&quot;
-        *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
-        *      - default:           &quot;enabled&quot;
+        *   COMPILER / Reporting Unused Parameter
+        *      When enabled, the compiler will issue an error or a warning for unused method 
+        *      parameters (that is, parameters never read from)
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameter&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
         *  
-        *      FORMATTER / Inserting New Line Before Opening Brace
-        *     When Insert, a new line is inserted before an opening brace, otherwise nothing
-        *     is inserted
-        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.openingBrace&quot;
-        *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
-        *      - default:           &quot;do not insert&quot;
+        *   COMPILER / Reporting Unused Parameter if Implementing Abstract Method
+        *      When enabled, the compiler will signal unused parameters in abstract method implementations.
+        *      The severity of the problem is controlled with option &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameter&quot;.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameterWhenImplementingAbstract&quot;
+        *       - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
+        *       - default:           &quot;disabled&quot;
         *  
-        *      FORMATTER / Inserting New Line Inside Control Statement
-        *     When Insert, a new line is inserted between } and following else, catch, finally
-        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.controlStatement&quot;
-        *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
-        *      - default:           &quot;do not insert&quot;
+        *   COMPILER / Reporting Unused Parameter if Overriding Concrete Method
+        *      When enabled, the compiler will signal unused parameters in methods overriding concrete ones.
+        *      The severity of the problem is controlled with option &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameter&quot;.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedParameterWhenOverridingConcrete&quot;
+        *       - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
+        *       - default:           &quot;disabled&quot;
         *  
-        *      FORMATTER / Clearing Blank Lines
-        *     When Clear all, all blank lines are removed. When Preserve one, only one is kept
-        *     and all others removed.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.clearAll&quot;
-        *      - possible values:   { &quot;clear all&quot;, &quot;preserve one&quot; }
-        *      - default:           &quot;preserve one&quot;
+        *   COMPILER / Reporting Unused Import
+        *      When enabled, the compiler will issue an error or a warning for unused import 
+        *      reference 
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedImport&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
         *  
-        *      FORMATTER / Inserting New Line Between Else/If 
-        *     When Insert, a blank line is inserted between an else and an if when they are 
-        *     contiguous. When choosing to not insert, else-if will be kept on the same
-        *     line when possible.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.elseIf&quot;
-        *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
-        *      - default:           &quot;do not insert&quot;
+        *   COMPILER / Reporting Unused Private Members
+        *      When enabled, the compiler will issue an error or a warning whenever a private 
+        *      method or field is declared but never used within the same unit.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.unusedPrivateMember&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
         *  
-        *      FORMATTER / Inserting New Line In Empty Block
-        *     When insert, a line break is inserted between contiguous { and }, if } is not followed
-        *     by a keyword.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.emptyBlock&quot;
-        *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
-        *      - default:           &quot;insert&quot;
+        *   COMPILER / Reporting Synthetic Access Emulation
+        *      When enabled, the compiler will issue an error or a warning whenever it emulates 
+        *      access to a non-accessible member of an enclosing type. Such access can have
+        *      performance implications.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.syntheticAccessEmulation&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
         *  
-        *      FORMATTER / Splitting Lines Exceeding Length
-        *     Enable splitting of long lines (exceeding the configurable length). Length of 0 will
-        *     disable line splitting
-        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.lineSplit&quot;
-        *      - possible values:      &quot;&lt;n&gt;&quot;, where n is zero or a positive integer
-        *      - default:           &quot;80&quot;
+        *   COMPILER / Reporting Non-Externalized String Literal
+        *      When enabled, the compiler will issue an error or a warning for non externalized 
+        *      String literal (that is, not tagged with //$NON-NLS-&lt;n&gt;$). 
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.nonExternalizedStringLiteral&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
+        *   
+        *   COMPILER / Reporting Usage of 'assert' Identifier
+        *      When enabled, the compiler will issue an error or a warning whenever 'assert' is 
+        *      used as an identifier (reserved keyword in 1.4)
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.assertIdentifier&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;
+        *   
+        *   COMPILER / Reporting Non-Static Reference to a Static Member
+        *      When enabled, the compiler will issue an error or a warning whenever a static field
+        *      or method is accessed with an expression receiver. A reference to a static member should
+        *      be qualified with a type name.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.staticAccessReceiver&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
+        *   
+        *   COMPILER / Reporting Assignment with no Effect
+        *      When enabled, the compiler will issue an error or a warning whenever an assignment
+        *      has no effect (e.g 'x = x').
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.noEffectAssignment&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
+        *   
+        *   COMPILER / Reporting Interface Method not Compatible with non-Inherited Methods
+        *      When enabled, the compiler will issue an error or a warning whenever an interface
+        *      defines a method incompatible with a non-inherited Object method. Until this conflict
+        *      is resolved, such an interface cannot be implemented, For example, 
+        *        interface I { 
+        *           int clone();
+        *        } 
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
+        *   
+        *   COMPILER / Reporting Usage of char[] Expressions in String Concatenations
+        *      When enabled, the compiler will issue an error or a warning whenever a char[] expression
+        *      is used in String concatenations (for example, &quot;hello&quot; + new char[]{'w','o','r','l','d'}).
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.problem.noImplicitStringConversion&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;warning&quot;
         *  
-        *      FORMATTER / Compacting Assignment
-        *     Assignments can be formatted asymmetrically, for example 'int x= 2;', when Normal, a space
-        *     is inserted before the assignment operator
-        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.style.assignment&quot;
-        *      - possible values:   { &quot;compact&quot;, &quot;normal&quot; }
-        *      - default:           &quot;normal&quot;
+        *   COMPILER / Setting Source Compatibility Mode
+        *      Specify whether source is 1.3 or 1.4 compatible. From 1.4 on, 'assert' is a keyword
+        *      reserved for assertion support. Also note, than when toggling to 1.4 mode, the target VM
+        *     level should be set to &quot;1.4&quot; and the compliance mode should be &quot;1.4&quot;.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.source&quot;
+        *       - possible values:   { &quot;1.3&quot;, &quot;1.4&quot; }
+        *       - default:           &quot;1.3&quot;
+        *   
+        *   COMPILER / Setting Compliance Level
+        *      Select the compliance level for the compiler. In &quot;1.3&quot; mode, source and target settings
+        *      should not go beyond &quot;1.3&quot; level.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.compliance&quot;
+        *       - possible values:   { &quot;1.3&quot;, &quot;1.4&quot; }
+        *       - default:           &quot;1.3&quot;
+        *   
+        *   COMPILER / Maximum number of problems reported per compilation unit
+        *      Specify the maximum number of problems reported on each compilation unit.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.maxProblemPerUnit&quot;
+        *       - possible values:     &quot;&lt;n&gt;&quot; where &lt;n&gt; is zero or a positive integer (if zero then all problems are reported).
+        *       - default:           &quot;100&quot;
+        *   
+        *   COMPILER / Define the Automatic Task Tags
+        *      When the tag list is not empty, the compiler will issue a task marker whenever it encounters
+        *      one of the corresponding tag inside any comment in Java source code.
+        *      Generated task messages will include the tag, and range until the next line separator or comment ending.
+        *      Note that tasks messages are trimmed.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.taskTags&quot;
+        *       - possible values:   { &quot;&lt;tag&gt;[,&lt;tag&gt;]*&quot; } where &lt;tag&gt; is a String without any wild-card or leading/trailing spaces 
+        *       - default:           &quot;&quot;
+        *   
+        *   COMPILER / Define the Automatic Task Priorities
+        *      In parallel with the Automatic Task Tags, this list defines the priorities (high, normal or low)
+        *      of the task markers issued by the compiler.
+        *      If the default is specified, the priority of each task marker is &quot;NORMAL&quot;.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.compiler.taskPriorities&quot;
+        *       - possible values:   { &quot;&lt;priority&gt;[,&lt;priority&gt;]*&quot; } where &lt;priority&gt; is one of &quot;HIGH&quot;, &quot;NORMAL&quot; or &quot;LOW&quot;
+        *       - default:           &quot;&quot;
         *  
-        *      FORMATTER / Defining Indentation Character
-        *     Either choose to indent with tab characters or spaces
-        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.tabulation.char&quot;
-        *      - possible values:   { &quot;tab&quot;, &quot;space&quot; }
-        *      - default:           &quot;tab&quot;
-        *  
-        *      FORMATTER / Defining Space Indentation Length
-        *     When using spaces, set the amount of space characters to use for each 
-        *     indentation mark.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.tabulation.size&quot;
-        *      - possible values:      &quot;&lt;n&gt;&quot;, where n is a positive integer
-        *      - default:           &quot;4&quot;
-        *  
-        *      FORMATTER / Inserting space in cast expression
-        *     When Insert, a space is added between the type and the expression in a cast expression.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.formatter.space.castexpression&quot;
-        *      - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
-        *      - default:           &quot;insert&quot;
-        *  
-        *      CODEASSIST / Activate Visibility Sensitive Completion
-        *     When active, completion doesn't show that you can not see
-        *     (for example, you can not see private methods of a super class).
-        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.visibilityCheck&quot;
-        *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
-        *      - default:           &quot;disabled&quot;
-        *  
-        *      CODEASSIST / Automatic Qualification of Implicit Members
-        *     When active, completion automatically qualifies completion on implicit
-        *     field references and message expressions.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.forceImplicitQualification&quot;
-        *      - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
-        *      - default:           &quot;disabled&quot;
-        *  
-        *   CODEASSIST / Define the Prefixes for Field Name
-        *     When the prefixes is non empty, completion for field name will begin with
-        *     one of the proposed prefixes.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.fieldPrefixes&quot;
-        *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  
-        *   CODEASSIST / Define the Prefixes for Static Field Name
-        *     When the prefixes is non empty, completion for static field name will begin with
-        *     one of the proposed prefixes.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.staticFieldPrefixes&quot;
-        *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  
-        *   CODEASSIST / Define the Prefixes for Local Variable Name
-        *     When the prefixes is non empty, completion for local variable name will begin with
-        *     one of the proposed prefixes.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.localPrefixes&quot;
-        *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  
-        *   CODEASSIST / Define the Prefixes for Argument Name
-        *     When the prefixes is non empty, completion for argument name will begin with
-        *     one of the proposed prefixes.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.argumentPrefixes&quot;
-        *      - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  
-        *   CODEASSIST / Define the Suffixes for Field Name
-        *     When the suffixes is non empty, completion for field name will end with
-        *     one of the proposed suffixes.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.fieldSuffixes&quot;
-        *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  
-        *   CODEASSIST / Define the Suffixes for Static Field Name
-        *     When the suffixes is non empty, completion for static field name will end with
-        *     one of the proposed suffixes.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.staticFieldSuffixes&quot;
-        *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  
-        *   CODEASSIST / Define the Suffixes for Local Variable Name
-        *     When the suffixes is non empty, completion for local variable name will end with
-        *     one of the proposed suffixes.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.localSuffixes&quot;
-        *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  
-        *   CODEASSIST / Define the Suffixes for Argument Name
-        *     When the suffixes is non empty, completion for argument name will end with
-        *     one of the proposed suffixes.
-        *      - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.argumentSuffixes&quot;
-        *      - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
-        *      - default:           &quot;&quot;
-        *  &lt;/pre&gt;
-        *  
-        *  @return a mutable table containing the default settings of all known options
-        *    (key type: 
+        *   BUILDER / Specifying Filters for Resource Copying Control
+        *      Allow to specify some filters to control the resource copy process.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.builder.resourceCopyExclusionFilter&quot;
+        *       - possible values:   { &quot;&lt;name&gt;[,&lt;name&gt;]* } where &lt;name&gt; is a file name pattern (* and ? wild-cards allowed)
+        *         or the name of a folder which ends with '/'
+        *       - default:           &quot;&quot;
+        *   
+        *   BUILDER / Abort if Invalid Classpath
+        *      Allow to toggle the builder to abort if the classpath is invalid
+        *       - option id:         &quot;net.sourceforge.phpdt.core.builder.invalidClasspath&quot;
+        *       - possible values:   { &quot;abort&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;abort&quot;
+        *   
+        *   BUILDER / Cleaning Output Folder(s)
+        *      Indicate whether the JavaBuilder is allowed to clean the output folders
+        *      when performing full build operations.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.builder.cleanOutputFolder&quot;
+        *       - possible values:   { &quot;clean&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;clean&quot;
+        *   
+        *   BUILDER / Reporting Duplicate Resources
+        *      Indicate the severity of the problem reported when more than one occurrence
+        *      of a resource is to be copied into the output location.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.builder.duplicateResourceTask&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot; }
+        *       - default:           &quot;warning&quot;
+        *   
+        *   JAVACORE / Computing Project Build Order
+        *      Indicate whether JavaCore should enforce the project build order to be based on
+        *      the classpath prerequisite chain. When requesting to compute, this takes over
+        *      the platform default order (based on project references).
+        *       - option id:         &quot;net.sourceforge.phpdt.core.computeJavaBuildOrder&quot;
+        *       - possible values:   { &quot;compute&quot;, &quot;ignore&quot; }
+        *       - default:           &quot;ignore&quot;         
+        *   
+        *   JAVACORE / Specify Default Source Encoding Format
+        *      Get the encoding format for compiled sources. This setting is read-only, it is equivalent
+        *      to 'ResourcesPlugin.getEncoding()'.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.encoding&quot;
+        *       - possible values:   { any of the supported encoding name}.
+        *       - default:           &lt;platform default&gt;
+        *   
+        *   JAVACORE / Reporting Incomplete Classpath
+        *      Indicate the severity of the problem reported when an entry on the classpath does not exist, 
+        *      is not legite or is not visible (for example, a referenced project is closed).
+        *       - option id:         &quot;net.sourceforge.phpdt.core.incompleteClasspath&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot;}
+        *       - default:           &quot;error&quot;
+        *   
+        *   JAVACORE / Reporting Classpath Cycle
+        *      Indicate the severity of the problem reported when a project is involved in a cycle.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.circularClasspath&quot;
+        *       - possible values:   { &quot;error&quot;, &quot;warning&quot; }
+        *       - default:           &quot;error&quot;
+        *   
+        *   JAVACORE / Enabling Usage of Classpath Exclusion Patterns
+        *      When disabled, no entry on a project classpath can be associated with
+        *      an exclusion pattern.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.classpath.exclusionPatterns&quot;
+        *       - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
+        *       - default:           &quot;enabled&quot;
+        *   
+        *   JAVACORE / Enabling Usage of Classpath Multiple Output Locations
+        *      When disabled, no entry on a project classpath can be associated with
+        *      a specific output location, preventing thus usage of multiple output locations.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.classpath.multipleOutputLocations&quot;
+        *       - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
+        *       - default:           &quot;enabled&quot;
+        *   
+        *      FORMATTER / Inserting New Line Before Opening Brace
+        *      When Insert, a new line is inserted before an opening brace, otherwise nothing
+        *      is inserted
+        *       - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.openingBrace&quot;
+        *       - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
+        *       - default:           &quot;do not insert&quot;
+        *   
+        *      FORMATTER / Inserting New Line Inside Control Statement
+        *      When Insert, a new line is inserted between } and following else, catch, finally
+        *       - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.controlStatement&quot;
+        *       - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
+        *       - default:           &quot;do not insert&quot;
+        *   
+        *      FORMATTER / Clearing Blank Lines
+        *      When Clear all, all blank lines are removed. When Preserve one, only one is kept
+        *      and all others removed.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.clearAll&quot;
+        *       - possible values:   { &quot;clear all&quot;, &quot;preserve one&quot; }
+        *       - default:           &quot;preserve one&quot;
+        *   
+        *      FORMATTER / Inserting New Line Between Else/If 
+        *      When Insert, a blank line is inserted between an else and an if when they are 
+        *      contiguous. When choosing to not insert, else-if will be kept on the same
+        *      line when possible.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.elseIf&quot;
+        *       - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
+        *       - default:           &quot;do not insert&quot;
+        *   
+        *      FORMATTER / Inserting New Line In Empty Block
+        *      When insert, a line break is inserted between contiguous { and }, if } is not followed
+        *      by a keyword.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.formatter.newline.emptyBlock&quot;
+        *       - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
+        *       - default:           &quot;insert&quot;
+        *   
+        *      FORMATTER / Splitting Lines Exceeding Length
+        *      Enable splitting of long lines (exceeding the configurable length). Length of 0 will
+        *      disable line splitting
+        *       - option id:         &quot;net.sourceforge.phpdt.core.formatter.lineSplit&quot;
+        *       - possible values:     &quot;&lt;n&gt;&quot;, where n is zero or a positive integer
+        *       - default:           &quot;80&quot;
+        *   
+        *      FORMATTER / Compacting Assignment
+        *      Assignments can be formatted asymmetrically, for example 'int x= 2;', when Normal, a space
+        *      is inserted before the assignment operator
+        *       - option id:         &quot;net.sourceforge.phpdt.core.formatter.style.assignment&quot;
+        *       - possible values:   { &quot;compact&quot;, &quot;normal&quot; }
+        *       - default:           &quot;normal&quot;
+        *   
+        *      FORMATTER / Defining Indentation Character
+        *      Either choose to indent with tab characters or spaces
+        *       - option id:         &quot;net.sourceforge.phpdt.core.formatter.tabulation.char&quot;
+        *       - possible values:   { &quot;tab&quot;, &quot;space&quot; }
+        *       - default:           &quot;tab&quot;
+        *   
+        *      FORMATTER / Defining Space Indentation Length
+        *      When using spaces, set the amount of space characters to use for each 
+        *      indentation mark.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.formatter.tabulation.size&quot;
+        *       - possible values:     &quot;&lt;n&gt;&quot;, where n is a positive integer
+        *       - default:           &quot;4&quot;
+        *   
+        *      FORMATTER / Inserting space in cast expression
+        *      When Insert, a space is added between the type and the expression in a cast expression.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.formatter.space.castexpression&quot;
+        *       - possible values:   { &quot;insert&quot;, &quot;do not insert&quot; }
+        *       - default:           &quot;insert&quot;
+        *   
+        *      CODEASSIST / Activate Visibility Sensitive Completion
+        *      When active, completion doesn't show that you can not see
+        *      (for example, you can not see private methods of a super class).
+        *       - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.visibilityCheck&quot;
+        *       - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
+        *       - default:           &quot;disabled&quot;
+        *   
+        *      CODEASSIST / Automatic Qualification of Implicit Members
+        *      When active, completion automatically qualifies completion on implicit
+        *      field references and message expressions.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.forceImplicitQualification&quot;
+        *       - possible values:   { &quot;enabled&quot;, &quot;disabled&quot; }
+        *       - default:           &quot;disabled&quot;
+        *   
+        *    CODEASSIST / Define the Prefixes for Field Name
+        *      When the prefixes is non empty, completion for field name will begin with
+        *      one of the proposed prefixes.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.fieldPrefixes&quot;
+        *       - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Prefixes for Static Field Name
+        *      When the prefixes is non empty, completion for static field name will begin with
+        *      one of the proposed prefixes.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.staticFieldPrefixes&quot;
+        *       - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Prefixes for Local Variable Name
+        *      When the prefixes is non empty, completion for local variable name will begin with
+        *      one of the proposed prefixes.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.localPrefixes&quot;
+        *       - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Prefixes for Argument Name
+        *      When the prefixes is non empty, completion for argument name will begin with
+        *      one of the proposed prefixes.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.argumentPrefixes&quot;
+        *       - possible values:   { &quot;&lt;prefix&gt;[,&lt;prefix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Suffixes for Field Name
+        *      When the suffixes is non empty, completion for field name will end with
+        *      one of the proposed suffixes.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.fieldSuffixes&quot;
+        *       - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Suffixes for Static Field Name
+        *      When the suffixes is non empty, completion for static field name will end with
+        *      one of the proposed suffixes.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.staticFieldSuffixes&quot;
+        *       - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Suffixes for Local Variable Name
+        *      When the suffixes is non empty, completion for local variable name will end with
+        *      one of the proposed suffixes.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.localSuffixes&quot;
+        *       - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;suffix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   
+        *    CODEASSIST / Define the Suffixes for Argument Name
+        *      When the suffixes is non empty, completion for argument name will end with
+        *      one of the proposed suffixes.
+        *       - option id:         &quot;net.sourceforge.phpdt.core.codeComplete.argumentSuffixes&quot;
+        *       - possible values:   { &quot;&lt;suffix&gt;[,&lt;suffix&gt;]*&quot; } where &lt;prefix&gt; is a String without any wild-card 
+        *       - default:           &quot;&quot;
+        *   &lt;/pre&gt;
+        *   
+        *   @return a mutable table containing the default settings of all known options
+        *     (key type: 
         * <code>
         * String
         * </code>
-        * ; value type: 
+        *  ; value type: 
         * <code>
         * String
         * </code>
-        * )
-        *  @see #setOptions
+        *  )
+        *   @see #setOptions
         * 
         */
        public static Hashtable getDefaultOptions() {
@@ -2795,23 +2804,25 @@ public class JavaCore {
                                                        .isExported());
 
                                case IResource.FILE:
-                                       //                                      if (ProjectPrefUtil.isArchiveFileName(resolvedResource.getName())) {
-                                       //                                              // internal binary archive
-                                       //                                              return JavaCore.newLibraryEntry(
-                                       //                                                              resolvedPath,
-                                       //                                                              getResolvedVariablePath(entry.getSourceAttachmentPath()),
-                                       //                                                              getResolvedVariablePath(entry.getSourceAttachmentRootPath()),
-                                       //                                                              entry.isExported());
-                                       //                                      }
+                                       // if
+                                       // (ProjectPrefUtil.isArchiveFileName(resolvedResource.getName()))
+                                       // {
+                                       // // internal binary archive
+                                       // return JavaCore.newLibraryEntry(
+                                       // resolvedPath,
+                                       // getResolvedVariablePath(entry.getSourceAttachmentPath()),
+                                       // getResolvedVariablePath(entry.getSourceAttachmentRootPath()),
+                                       // entry.isExported());
+                                       // }
                                        break;
 
                                case IResource.FOLDER:
                                        // internal binary folder
-                                       //                                      return JavaCore.newLibraryEntry(
-                                       //                                                      resolvedPath,
-                                       //                                                      getResolvedVariablePath(entry.getSourceAttachmentPath()),
-                                       //                                                      getResolvedVariablePath(entry.getSourceAttachmentRootPath()),
-                                       //                                                      entry.isExported());
+                                       // return JavaCore.newLibraryEntry(
+                                       // resolvedPath,
+                                       // getResolvedVariablePath(entry.getSourceAttachmentPath()),
+                                       // getResolvedVariablePath(entry.getSourceAttachmentRootPath()),
+                                       // entry.isExported());
                                        break;
                                }
                        }
@@ -2821,22 +2832,22 @@ public class JavaCore {
                        File externalFile = (File) target;
                        if (externalFile.isFile()) {
                                String fileName = externalFile.getName().toLowerCase();
-                               //                      if (fileName.endsWith(".jar" //$NON-NLS-1$
-                               //                              ) || fileName.endsWith(".zip" //$NON-NLS-1$
-                               //                              )) { // external binary archive
-                               //                              return JavaCore.newLibraryEntry(
-                               //                                              resolvedPath,
-                               //                                              getResolvedVariablePath(entry.getSourceAttachmentPath()),
-                               //                                              getResolvedVariablePath(entry.getSourceAttachmentRootPath()),
-                               //                                              entry.isExported());
-                               //                      }
+                               // if (fileName.endsWith(".jar" //$NON-NLS-1$
+                               // ) || fileName.endsWith(".zip" //$NON-NLS-1$
+                               // )) { // external binary archive
+                               // return JavaCore.newLibraryEntry(
+                               // resolvedPath,
+                               // getResolvedVariablePath(entry.getSourceAttachmentPath()),
+                               // getResolvedVariablePath(entry.getSourceAttachmentRootPath()),
+                               // entry.isExported());
+                               // }
                        } else { // external binary folder
                                if (resolvedPath.isAbsolute()) {
-                                       //                              return JavaCore.newLibraryEntry(
-                                       //                                              resolvedPath,
-                                       //                                              getResolvedVariablePath(entry.getSourceAttachmentPath()),
-                                       //                                              getResolvedVariablePath(entry.getSourceAttachmentRootPath()),
-                                       //                                              entry.isExported());
+                                       // return JavaCore.newLibraryEntry(
+                                       // resolvedPath,
+                                       // getResolvedVariablePath(entry.getSourceAttachmentPath()),
+                                       // getResolvedVariablePath(entry.getSourceAttachmentRootPath()),
+                                       // entry.isExported());
                                }
                        }
                }
@@ -2923,7 +2934,7 @@ public class JavaCore {
                optionNames.add(COMPILER_CODEGEN_UNUSED_LOCAL);
 
                preferences.setDefault(COMPILER_CODEGEN_TARGET_PLATFORM, VERSION_1_1);
-               optionNames.add(COMPILER_CODEGEN_TARGET_PLATFORM); 
+               optionNames.add(COMPILER_CODEGEN_TARGET_PLATFORM);
 
                preferences.setDefault(COMPILER_PB_PHP_VAR_DEPRECATED, IGNORE);
                optionNames.add(COMPILER_PB_PHP_VAR_DEPRECATED);
@@ -2935,9 +2946,10 @@ public class JavaCore {
                optionNames.add(COMPILER_PB_PHP_FILE_NOT_EXIST);
                preferences.setDefault(COMPILER_PB_UNREACHABLE_CODE, WARNING);
                optionNames.add(COMPILER_PB_UNREACHABLE_CODE);
-               preferences.setDefault(COMPILER_PB_UNINITIALIZED_LOCAL_VARIABLE, WARNING);
+               preferences.setDefault(COMPILER_PB_UNINITIALIZED_LOCAL_VARIABLE,
+                               WARNING);
                optionNames.add(COMPILER_PB_UNINITIALIZED_LOCAL_VARIABLE);
-               
+
                preferences.setDefault(COMPILER_PB_INVALID_IMPORT, ERROR);
                optionNames.add(COMPILER_PB_INVALID_IMPORT);
 
@@ -3141,7 +3153,7 @@ public class JavaCore {
                if (element instanceof IMember) {
                        IMember member = (IMember) element;
                        if (member.isBinary()) {
-                               element = null; //member.getClassFile();
+                               element = null; // member.getClassFile();
                        } else {
                                element = member.getCompilationUnit();
                        }
@@ -3156,24 +3168,25 @@ public class JavaCore {
                        return false;
 
                IJavaElement markerElement = JavaCore.create(markerHandleId);
-               //      while (true){
+               // while (true){
                if (element.equals(markerElement))
-                       return true; // external elements may still be equal with different
-                                                // handleIDs.
+                       return true; // external elements may still be equal with
+                                                       // different
+               // handleIDs.
 
                // cycle through enclosing types in case marker is associated with a
                // classfile (15568)
-               //              if (markerElement instanceof IClassFile){
-               //                      IType enclosingType =
+               // if (markerElement instanceof IClassFile){
+               // IType enclosingType =
                // ((IClassFile)markerElement).getType().getDeclaringType();
-               //                      if (enclosingType != null){
-               //                              markerElement = enclosingType.getClassFile(); // retry with immediate
+               // if (enclosingType != null){
+               // markerElement = enclosingType.getClassFile(); // retry with immediate
                // enclosing classfile
-               //                              continue;
-               //                      }
-               //              }
-               //              break;
-               //      }
+               // continue;
+               // }
+               // }
+               // break;
+               // }
                return false;
        }
 
@@ -3198,7 +3211,7 @@ public class JavaCore {
                if (element instanceof IMember) {
                        IMember member = (IMember) element;
                        if (member.isBinary()) {
-                               element = null; //member.getClassFile();
+                               element = null; // member.getClassFile();
                        } else {
                                element = member.getCompilationUnit();
                        }
@@ -3214,24 +3227,25 @@ public class JavaCore {
                        return false;
 
                IJavaElement markerElement = JavaCore.create(markerDeltarHandleId);
-               //      while (true){
+               // while (true){
                if (element.equals(markerElement))
-                       return true; // external elements may still be equal with different
-                                                // handleIDs.
+                       return true; // external elements may still be equal with
+                                                       // different
+               // handleIDs.
 
                // cycle through enclosing types in case marker is associated with a
                // classfile (15568)
-               //              if (markerElement instanceof IClassFile){
-               //                      IType enclosingType =
+               // if (markerElement instanceof IClassFile){
+               // IType enclosingType =
                // ((IClassFile)markerElement).getType().getDeclaringType();
-               //                      if (enclosingType != null){
-               //                              markerElement = enclosingType.getClassFile(); // retry with immediate
+               // if (enclosingType != null){
+               // markerElement = enclosingType.getClassFile(); // retry with immediate
                // enclosing classfile
-               //                              continue;
-               //                      }
-               //              }
-               //              break;
-               //      }
+               // continue;
+               // }
+               // }
+               // break;
+               // }
                return false;
        }
 
@@ -3250,14 +3264,15 @@ public class JavaCore {
         * <p>
         * A container is exclusively resolved by a
         * <code>ClasspathContainerInitializer</code> registered onto the
-        * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
+        * extension point
+        * "net.sourceforge.phpdt.core.classpathContainerInitializer".
         * <p>
         * A container path must be formed of at least one segment, where:
         * <ul>
         * <li>the first segment is a unique ID identifying the target container,
         * there must be a container initializer registered onto this ID through the
-        * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
-        * </li>
+        * extension point
+        * "net.sourceforge.phpdt.core.classpathContainerInitializer". </li>
         * <li>the remaining segments will be passed onto the initializer, and can
         * be used as additional hints during the initialization phase.</li>
         * </ul>
@@ -3268,7 +3283,8 @@ public class JavaCore {
         * containerEntry = JavaCore.newContainerEntry(new
         * Path("MyProvidedJDK/default"));
         * 
-        * <extension point="net.sourceforge.phpdt.core.classpathContainerInitializer">
+        * <extension
+        * point="net.sourceforge.phpdt.core.classpathContainerInitializer">
         * <containerInitializer id="MyProvidedJDK"
         * class="com.example.MyInitializer"/>
         * <p>
@@ -3290,354 +3306,371 @@ public class JavaCore {
         */
        public static IClasspathEntry newContainerEntry(IPath containerPath) {
 
-    return newContainerEntry(containerPath, false);
-  }
-
-  /**
-   * Creates and returns a new classpath entry of kind
-   * <code>CPE_CONTAINER</code> for the given path. The path of the
-   * container will be used during resolution so as to map this container
-   * entry to a set of other classpath entries the container is acting for.
-   * <p>
-   * A container entry allows to express indirect references to a set of
-   * libraries, projects and variable entries, which can be interpreted
-   * differently for each Java project where it is used. A classpath container
-   * entry can be resolved using
-   * <code>JavaCore.getResolvedClasspathContainer</code>, and updated with
-   * <code>JavaCore.classpathContainerChanged</code>
-   * <p>
-   * A container is exclusively resolved by a
-   * <code>ClasspathContainerInitializer</code> registered onto the
-   * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
-   * <p>
-   * A container path must be formed of at least one segment, where:
-   * <ul>
-   * <li>the first segment is a unique ID identifying the target container,
-   * there must be a container initializer registered onto this ID through the
-   * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
-   * </li>
-   * <li>the remaining segments will be passed onto the initializer, and can
-   * be used as additional hints during the initialization phase.</li>
-   * </ul>
-   * <p>
-   * Example of an ClasspathContainerInitializer for a classpath container
-   * denoting a default JDK container:
-   * 
-   * containerEntry = JavaCore.newContainerEntry(new
-   * Path("MyProvidedJDK/default"));
-   * 
-   * <extension point="net.sourceforge.phpdt.core.classpathContainerInitializer">
-   * <containerInitializer id="MyProvidedJDK"
-   * class="com.example.MyInitializer"/>
-   * <p>
-   * Note that this operation does not attempt to validate classpath
-   * containers or access the resources at the given paths.
-   * <p>
-   * 
-   * @param containerPath
-   *            the path identifying the container, it must be formed of at
-   *            least one segment (ID+hints)
-   * @param isExported
-   *            a boolean indicating whether this entry is contributed to
-   *            dependent projects in addition to the output location
-   * @return a new container classpath entry
-   * 
-   * @see JavaCore#getClasspathContainer(IPath, IJavaProject)
-   * @see JavaCore#setClasspathContainer(IPath, IJavaProject[],
-   *      IClasspathContainer[], IProgressMonitor)
-   * @see JavaCore#newContainerEntry(IPath, boolean)
-   * @since 2.0
-   */
-       
-       public static IClasspathEntry newContainerEntry(IPath containerPath, boolean isExported) {
-               
-       if (containerPath == null) Assert.isTrue(false, "Container path cannot be null"); //$NON-NLS-1$
-       if (containerPath.segmentCount() < 1) {
-               Assert.isTrue(
-                       false,
-                       "Illegal classpath container path: \'" + containerPath.makeRelative().toString() + "\', must have at least one segment (containerID+hints)"); //$NON-NLS-1$//$NON-NLS-2$
+               return newContainerEntry(containerPath, false);
        }
-       return new ClasspathEntry(
-               IPackageFragmentRoot.K_SOURCE,
-               IClasspathEntry.CPE_CONTAINER,
-               containerPath,
-               ClasspathEntry.INCLUDE_ALL,
-               ClasspathEntry.EXCLUDE_NONE, 
-               null, // source attachment
-               null, // source attachment root
-               null, // specific output folder
-               isExported);
-}
-
-  /**
-   * Creates and returns a new non-exported classpath entry of kind
-   * <code>CPE_LIBRARY</code> for the JAR or folder identified by the given
-   * absolute path. This specifies that all package fragments within the root
-   * will have children of type <code>IClassFile</code>.
-   * <p>
-   * A library entry is used to denote a prerequisite JAR or root folder
-   * containing binaries. The target JAR or folder can either be defined
-   * internally to the workspace (absolute path relative to the workspace
-   * root) or externally to the workspace (absolute path in the file system).
-   * <p>
-   * e.g. Here are some examples of binary path usage
-   * <ul>
-   * <li><code> "c:/jdk1.2.2/jre/lib/rt.jar" </code>- reference to an
-   * external JAR</li>
-   * <li><code> "/Project/someLib.jar" </code>- reference to an internal JAR
-   * </li>
-   * <li><code> "c:/classes/" </code>- reference to an external binary
-   * folder</li>
-   * </ul>
-   * Note that this operation does not attempt to validate or access the
-   * resources at the given paths.
-   * <p>
-   * The resulting entry is not exported to dependent projects. This method is
-   * equivalent to <code>newLibraryEntry(-,-,-,false)</code>.
-   * <p>
-   * 
-   * @param path
-   *            the absolute path of the binary archive
-   * @param sourceAttachmentPath
-   *            the absolute path of the corresponding source archive or
-   *            folder, or <code>null</code> if none
-   * @param sourceAttachmentRootPath
-   *            the location of the root within the source archive or folder
-   *            or <code>null</code> if this location should be
-   *            automatically detected.
-   * @return a new library classpath entry
-   * 
-   * @see #newLibraryEntry(IPath, IPath, IPath, boolean)
-   */
-  //public static IClasspathEntry newLibraryEntry(
-  //   IPath path,
-  //   IPath sourceAttachmentPath,
-  //   IPath sourceAttachmentRootPath) {
-  //                   
-  //   return newLibraryEntry(path, sourceAttachmentPath,
-  // sourceAttachmentRootPath, false);
-  //}
-  /**
-   * Creates and returns a new classpath entry of kind
-   * <code>CPE_LIBRARY</code> for the JAR or folder identified by the given
-   * absolute path. This specifies that all package fragments within the root
-   * will have children of type <code>IClassFile</code>.
-   * <p>
-   * A library entry is used to denote a prerequisite JAR or root folder
-   * containing binaries. The target JAR or folder can either be defined
-   * internally to the workspace (absolute path relative to the workspace
-   * root) or externally to the workspace (absolute path in the file system).
-   * <p>
-   * e.g. Here are some examples of binary path usage
-   * <ul>
-   * <li><code> "c:/jdk1.2.2/jre/lib/rt.jar" </code>- reference to an
-   * external JAR</li>
-   * <li><code> "/Project/someLib.jar" </code>- reference to an internal JAR
-   * </li>
-   * <li><code> "c:/classes/" </code>- reference to an external binary
-   * folder</li>
-   * </ul>
-   * Note that this operation does not attempt to validate or access the
-   * resources at the given paths.
-   * <p>
-   * 
-   * @param path
-   *            the absolute path of the binary archive
-   * @param sourceAttachmentPath
-   *            the absolute path of the corresponding source archive or
-   *            folder, or <code>null</code> if none
-   * @param sourceAttachmentRootPath
-   *            the location of the root within the source archive or folder
-   *            or <code>null</code> if this location should be
-   *            automatically detected.
-   * @param isExported
-   *            indicates whether this entry is contributed to dependent
-   *            projects in addition to the output location
-   * @return a new library classpath entry
-   * @since 2.0
-   */
-  //public static IClasspathEntry newLibraryEntry(
-  //   IPath path,
-  //   IPath sourceAttachmentPath,
-  //   IPath sourceAttachmentRootPath,
-  //   boolean isExported) {
-  //                   
-  //   if (!path.isAbsolute()) Assert.isTrue(false, "Path for IClasspathEntry
-  // must be absolute"); //$NON-NLS-1$
-  //
-  //   return new ClasspathEntry(
-  //           IPackageFragmentRoot.K_BINARY,
-  //           IClasspathEntry.CPE_LIBRARY,
-  //           JavaProject.canonicalizedPath(path),
-  //           ClasspathEntry.NO_EXCLUSION_PATTERNS,
-  //           sourceAttachmentPath,
-  //           sourceAttachmentRootPath,
-  //           null, // specific output folder
-  //           isExported);
-  //}
-  /**
-   * Creates and returns a new non-exported classpath entry of kind
-   * <code>CPE_PROJECT</code> for the project identified by the given
-   * absolute path.
-   * <p>
-   * A project entry is used to denote a prerequisite project on a classpath.
-   * The referenced project will be contributed as a whole, either as sources
-   * (in the Java Model, it contributes all its package fragment roots) or as
-   * binaries (when building, it contributes its whole output location).
-   * <p>
-   * A project reference allows to indirect through another project,
-   * independently from its internal layout.
-   * <p>
-   * The prerequisite project is referred to using an absolute path relative
-   * to the workspace root.
-   * <p>
-   * The resulting entry is not exported to dependent projects. This method is
-   * equivalent to <code>newProjectEntry(_,false)</code>.
-   * <p>
-   * 
-   * @param path
-   *            the absolute path of the binary archive
-   * @return a new project classpath entry
-   * 
-   * @see JavaCore#newProjectEntry(IPath, boolean)
-   */
-  public static IClasspathEntry newProjectEntry(IPath path) {
-    return newProjectEntry(path, false);
-  }
-
-  /**
-   * Creates and returns a new classpath entry of kind
-   * <code>CPE_PROJECT</code> for the project identified by the given
-   * absolute path.
-   * <p>
-   * A project entry is used to denote a prerequisite project on a classpath.
-   * The referenced project will be contributed as a whole, either as sources
-   * (in the Java Model, it contributes all its package fragment roots) or as
-   * binaries (when building, it contributes its whole output location).
-   * <p>
-   * A project reference allows to indirect through another project,
-   * independently from its internal layout.
-   * <p>
-   * The prerequisite project is referred to using an absolute path relative
-   * to the workspace root.
-   * <p>
-   * 
-   * @param path
-   *            the absolute path of the prerequisite project
-   * @param isExported
-   *            indicates whether this entry is contributed to dependent
-   *            projects in addition to the output location
-   * @return a new project classpath entry
-   * @since 2.0
-   */
-  public static IClasspathEntry newProjectEntry(IPath path, boolean isExported) {
-       
-       if (!path.isAbsolute()) Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$
-       
-       return new ClasspathEntry(
-               IPackageFragmentRoot.K_SOURCE,
-               IClasspathEntry.CPE_PROJECT,
-               path,
-               ClasspathEntry.INCLUDE_ALL, 
-               ClasspathEntry.EXCLUDE_NONE, 
-               null, // source attachment
-               null, // source attachment root
-               null, // specific output folder
-               isExported);
-}
-  
-
-  /**
-   * Returns a new empty region.
-   * 
-   * @return a new empty region
-   */
-  public static IRegion newRegion() {
-    return new Region();
-  }
-
-  /**
+
+       /**
+        * Creates and returns a new classpath entry of kind
+        * <code>CPE_CONTAINER</code> for the given path. The path of the
+        * container will be used during resolution so as to map this container
+        * entry to a set of other classpath entries the container is acting for.
+        * <p>
+        * A container entry allows to express indirect references to a set of
+        * libraries, projects and variable entries, which can be interpreted
+        * differently for each Java project where it is used. A classpath container
+        * entry can be resolved using
+        * <code>JavaCore.getResolvedClasspathContainer</code>, and updated with
+        * <code>JavaCore.classpathContainerChanged</code>
+        * <p>
+        * A container is exclusively resolved by a
+        * <code>ClasspathContainerInitializer</code> registered onto the
+        * extension point
+        * "net.sourceforge.phpdt.core.classpathContainerInitializer".
+        * <p>
+        * A container path must be formed of at least one segment, where:
+        * <ul>
+        * <li>the first segment is a unique ID identifying the target container,
+        * there must be a container initializer registered onto this ID through the
+        * extension point
+        * "net.sourceforge.phpdt.core.classpathContainerInitializer". </li>
+        * <li>the remaining segments will be passed onto the initializer, and can
+        * be used as additional hints during the initialization phase.</li>
+        * </ul>
+        * <p>
+        * Example of an ClasspathContainerInitializer for a classpath container
+        * denoting a default JDK container:
+        * 
+        * containerEntry = JavaCore.newContainerEntry(new
+        * Path("MyProvidedJDK/default"));
+        * 
+        * <extension
+        * point="net.sourceforge.phpdt.core.classpathContainerInitializer">
+        * <containerInitializer id="MyProvidedJDK"
+        * class="com.example.MyInitializer"/>
+        * <p>
+        * Note that this operation does not attempt to validate classpath
+        * containers or access the resources at the given paths.
+        * <p>
+        * 
+        * @param containerPath
+        *            the path identifying the container, it must be formed of at
+        *            least one segment (ID+hints)
+        * @param isExported
+        *            a boolean indicating whether this entry is contributed to
+        *            dependent projects in addition to the output location
+        * @return a new container classpath entry
+        * 
+        * @see JavaCore#getClasspathContainer(IPath, IJavaProject)
+        * @see JavaCore#setClasspathContainer(IPath, IJavaProject[],
+        *      IClasspathContainer[], IProgressMonitor)
+        * @see JavaCore#newContainerEntry(IPath, boolean)
+        * @since 2.0
+        */
+
+       public static IClasspathEntry newContainerEntry(IPath containerPath,
+                       boolean isExported) {
+
+               if (containerPath == null)
+                       Assert.isTrue(false, "Container path cannot be null"); //$NON-NLS-1$
+               if (containerPath.segmentCount() < 1) {
+                       Assert
+                                       .isTrue(
+                                                       false,
+                                                       "Illegal classpath container path: \'" + containerPath.makeRelative().toString() + "\', must have at least one segment (containerID+hints)"); //$NON-NLS-1$//$NON-NLS-2$
+               }
+               return new ClasspathEntry(IPackageFragmentRoot.K_SOURCE,
+                               IClasspathEntry.CPE_CONTAINER, containerPath,
+                               ClasspathEntry.INCLUDE_ALL, ClasspathEntry.EXCLUDE_NONE, null, // source
+                                                                                                                                                               // attachment
+                               null, // source attachment root
+                               null, // specific output folder
+                               isExported);
+       }
+
+       /**
+        * Creates and returns a new non-exported classpath entry of kind
+        * <code>CPE_LIBRARY</code> for the JAR or folder identified by the given
+        * absolute path. This specifies that all package fragments within the root
+        * will have children of type <code>IClassFile</code>.
+        * <p>
+        * A library entry is used to denote a prerequisite JAR or root folder
+        * containing binaries. The target JAR or folder can either be defined
+        * internally to the workspace (absolute path relative to the workspace
+        * root) or externally to the workspace (absolute path in the file system).
+        * <p>
+        * e.g. Here are some examples of binary path usage
+        * <ul>
+        * <li><code> "c:/jdk1.2.2/jre/lib/rt.jar" </code>- reference to an
+        * external JAR</li>
+        * <li><code> "/Project/someLib.jar" </code>- reference to an internal JAR
+        * </li>
+        * <li><code> "c:/classes/" </code>- reference to an external binary
+        * folder</li>
+        * </ul>
+        * Note that this operation does not attempt to validate or access the
+        * resources at the given paths.
+        * <p>
+        * The resulting entry is not exported to dependent projects. This method is
+        * equivalent to <code>newLibraryEntry(-,-,-,false)</code>.
+        * <p>
+        * 
+        * @param path
+        *            the absolute path of the binary archive
+        * @param sourceAttachmentPath
+        *            the absolute path of the corresponding source archive or
+        *            folder, or <code>null</code> if none
+        * @param sourceAttachmentRootPath
+        *            the location of the root within the source archive or folder
+        *            or <code>null</code> if this location should be
+        *            automatically detected.
+        * @return a new library classpath entry
+        * 
+        * @see #newLibraryEntry(IPath, IPath, IPath, boolean)
+        */
+       // public static IClasspathEntry newLibraryEntry(
+       // IPath path,
+       // IPath sourceAttachmentPath,
+       // IPath sourceAttachmentRootPath) {
+       //                      
+       // return newLibraryEntry(path, sourceAttachmentPath,
+       // sourceAttachmentRootPath, false);
+       // }
+       /**
+        * Creates and returns a new classpath entry of kind
+        * <code>CPE_LIBRARY</code> for the JAR or folder identified by the given
+        * absolute path. This specifies that all package fragments within the root
+        * will have children of type <code>IClassFile</code>.
+        * <p>
+        * A library entry is used to denote a prerequisite JAR or root folder
+        * containing binaries. The target JAR or folder can either be defined
+        * internally to the workspace (absolute path relative to the workspace
+        * root) or externally to the workspace (absolute path in the file system).
+        * <p>
+        * e.g. Here are some examples of binary path usage
+        * <ul>
+        * <li><code> "c:/jdk1.2.2/jre/lib/rt.jar" </code>- reference to an
+        * external JAR</li>
+        * <li><code> "/Project/someLib.jar" </code>- reference to an internal JAR
+        * </li>
+        * <li><code> "c:/classes/" </code>- reference to an external binary
+        * folder</li>
+        * </ul>
+        * Note that this operation does not attempt to validate or access the
+        * resources at the given paths.
+        * <p>
+        * 
+        * @param path
+        *            the absolute path of the binary archive
+        * @param sourceAttachmentPath
+        *            the absolute path of the corresponding source archive or
+        *            folder, or <code>null</code> if none
+        * @param sourceAttachmentRootPath
+        *            the location of the root within the source archive or folder
+        *            or <code>null</code> if this location should be
+        *            automatically detected.
+        * @param isExported
+        *            indicates whether this entry is contributed to dependent
+        *            projects in addition to the output location
+        * @return a new library classpath entry
+        * @since 2.0
+        */
+       // public static IClasspathEntry newLibraryEntry(
+       // IPath path,
+       // IPath sourceAttachmentPath,
+       // IPath sourceAttachmentRootPath,
+       // boolean isExported) {
+       //                      
+       // if (!path.isAbsolute()) Assert.isTrue(false, "Path for IClasspathEntry
+       // must be absolute"); //$NON-NLS-1$
+       //
+       // return new ClasspathEntry(
+       // IPackageFragmentRoot.K_BINARY,
+       // IClasspathEntry.CPE_LIBRARY,
+       // JavaProject.canonicalizedPath(path),
+       // ClasspathEntry.NO_EXCLUSION_PATTERNS,
+       // sourceAttachmentPath,
+       // sourceAttachmentRootPath,
+       // null, // specific output folder
+       // isExported);
+       // }
+       /**
+        * Creates and returns a new non-exported classpath entry of kind
+        * <code>CPE_PROJECT</code> for the project identified by the given
+        * absolute path.
+        * <p>
+        * A project entry is used to denote a prerequisite project on a classpath.
+        * The referenced project will be contributed as a whole, either as sources
+        * (in the Java Model, it contributes all its package fragment roots) or as
+        * binaries (when building, it contributes its whole output location).
+        * <p>
+        * A project reference allows to indirect through another project,
+        * independently from its internal layout.
+        * <p>
+        * The prerequisite project is referred to using an absolute path relative
+        * to the workspace root.
+        * <p>
+        * The resulting entry is not exported to dependent projects. This method is
+        * equivalent to <code>newProjectEntry(_,false)</code>.
+        * <p>
+        * 
+        * @param path
+        *            the absolute path of the binary archive
+        * @return a new project classpath entry
+        * 
+        * @see JavaCore#newProjectEntry(IPath, boolean)
+        */
+       public static IClasspathEntry newProjectEntry(IPath path) {
+               return newProjectEntry(path, false);
+       }
+
+       /**
+        * Creates and returns a new classpath entry of kind
+        * <code>CPE_PROJECT</code> for the project identified by the given
+        * absolute path.
+        * <p>
+        * A project entry is used to denote a prerequisite project on a classpath.
+        * The referenced project will be contributed as a whole, either as sources
+        * (in the Java Model, it contributes all its package fragment roots) or as
+        * binaries (when building, it contributes its whole output location).
+        * <p>
+        * A project reference allows to indirect through another project,
+        * independently from its internal layout.
+        * <p>
+        * The prerequisite project is referred to using an absolute path relative
+        * to the workspace root.
+        * <p>
+        * 
+        * @param path
+        *            the absolute path of the prerequisite project
+        * @param isExported
+        *            indicates whether this entry is contributed to dependent
+        *            projects in addition to the output location
+        * @return a new project classpath entry
+        * @since 2.0
+        */
+       public static IClasspathEntry newProjectEntry(IPath path, boolean isExported) {
+
+               if (!path.isAbsolute())
+                       Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$
+
+               return new ClasspathEntry(IPackageFragmentRoot.K_SOURCE,
+                               IClasspathEntry.CPE_PROJECT, path, ClasspathEntry.INCLUDE_ALL,
+                               ClasspathEntry.EXCLUDE_NONE, null, // source attachment
+                               null, // source attachment root
+                               null, // specific output folder
+                               isExported);
+       }
+
+       /**
+        * Returns a new empty region.
+        * 
+        * @return a new empty region
+        */
+       public static IRegion newRegion() {
+               return new Region();
+       }
+
+       /**
         * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code>
         * for all files in the project's source folder identified by the given
         * absolute workspace-relative path.
         * <p>
         * The convenience method is fully equivalent to:
+        * 
         * <pre>
         * newSourceEntry(path, new IPath[] {}, new IPath[] {}, null);
         * </pre>
+        * 
         * </p>
         * 
-        * @param path the absolute workspace-relative path of a source folder
+        * @param path
+        *            the absolute workspace-relative path of a source folder
         * @return a new source classpath entry
         * @see #newSourceEntry(IPath, IPath[], IPath[], IPath)
         */
        public static IClasspathEntry newSourceEntry(IPath path) {
 
-               return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL, ClasspathEntry.EXCLUDE_NONE, null /*output location*/);
+               return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL,
+                               ClasspathEntry.EXCLUDE_NONE, null /* output location */);
        }
-       
+
        /**
         * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code>
-        * for the project's source folder identified by the given absolute 
+        * for the project's source folder identified by the given absolute
         * workspace-relative path but excluding all source files with paths
         * matching any of the given patterns.
         * <p>
         * The convenience method is fully equivalent to:
+        * 
         * <pre>
         * newSourceEntry(path, new IPath[] {}, exclusionPatterns, null);
         * </pre>
+        * 
         * </p>
-        *
-        * @param path the absolute workspace-relative path of a source folder
-        * @param exclusionPatterns the possibly empty list of exclusion patterns
-        *    represented as relative paths
+        * 
+        * @param path
+        *            the absolute workspace-relative path of a source folder
+        * @param exclusionPatterns
+        *            the possibly empty list of exclusion patterns represented as
+        *            relative paths
         * @return a new source classpath entry
         * @see #newSourceEntry(IPath, IPath[], IPath[], IPath)
         * @since 2.1
         */
-       public static IClasspathEntry newSourceEntry(IPath path, IPath[] exclusionPatterns) {
+       public static IClasspathEntry newSourceEntry(IPath path,
+                       IPath[] exclusionPatterns) {
 
-               return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL, exclusionPatterns, null /*output location*/); 
+               return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL,
+                               exclusionPatterns, null /* output location */);
        }
 
        /**
         * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code>
-        * for the project's source folder identified by the given absolute 
+        * for the project's source folder identified by the given absolute
         * workspace-relative path but excluding all source files with paths
-        * matching any of the given patterns, and associated with a specific output location
-        * (that is, ".class" files are not going to the project default output location). 
+        * matching any of the given patterns, and associated with a specific output
+        * location (that is, ".class" files are not going to the project default
+        * output location).
         * <p>
         * The convenience method is fully equivalent to:
+        * 
         * <pre>
         * newSourceEntry(path, new IPath[] {}, exclusionPatterns, specificOutputLocation);
         * </pre>
+        * 
         * </p>
-        *
-        * @param path the absolute workspace-relative path of a source folder
-        * @param exclusionPatterns the possibly empty list of exclusion patterns
-        *    represented as relative paths
-        * @param specificOutputLocation the specific output location for this source entry (<code>null</code> if using project default ouput location)
+        * 
+        * @param path
+        *            the absolute workspace-relative path of a source folder
+        * @param exclusionPatterns
+        *            the possibly empty list of exclusion patterns represented as
+        *            relative paths
+        * @param specificOutputLocation
+        *            the specific output location for this source entry (<code>null</code>
+        *            if using project default ouput location)
         * @return a new source classpath entry
         * @see #newSourceEntry(IPath, IPath[], IPath[], IPath)
         * @since 2.1
         */
-       public static IClasspathEntry newSourceEntry(IPath path, IPath[] exclusionPatterns, IPath specificOutputLocation) {
+       public static IClasspathEntry newSourceEntry(IPath path,
+                       IPath[] exclusionPatterns, IPath specificOutputLocation) {
 
-           return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL, exclusionPatterns, specificOutputLocation);
+               return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL,
+                               exclusionPatterns, specificOutputLocation);
        }
-               
+
        /**
         * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code>
-        * for the project's source folder identified by the given absolute 
+        * for the project's source folder identified by the given absolute
         * workspace-relative path using the given inclusion and exclusion patterns
         * to determine which source files are included, and the given output path
         * to control the output location of generated files.
         * <p>
         * The source folder is referred to using an absolute path relative to the
-        * workspace root, e.g. <code>/Project/src</code>. A project's source 
-        * folders are located with that project. That is, a source classpath
-        * entry specifying the path <code>/P1/src</code> is only usable for
-        * project <code>P1</code>.
+        * workspace root, e.g. <code>/Project/src</code>. A project's source
+        * folders are located with that project. That is, a source classpath entry
+        * specifying the path <code>/P1/src</code> is only usable for project
+        * <code>P1</code>.
         * </p>
         * <p>
         * The inclusion patterns determines the initial set of source files that
@@ -3646,11 +3679,11 @@ public class JavaCore {
         * includes all relevent files in the resource tree rooted at the source
         * entry's path. On the other hand, specifying one or more inclusion
         * patterns means that all <b>and only</b> files matching at least one of
-        * the specified patterns are to be included. If exclusion patterns are 
+        * the specified patterns are to be included. If exclusion patterns are
         * specified, the initial set of files is then reduced by eliminating files
         * matched by at least one of the exclusion patterns. Inclusion and
         * exclusion patterns look like relative file paths with wildcards and are
-        * interpreted relative to the source entry's path. File patterns are 
+        * interpreted relative to the source entry's path. File patterns are
         * case-sensitive can contain '**', '*' or '?' wildcards (see
         * {@link IClasspathEntry#getExclusionPatterns()} for the full description
         * of their syntax and semantics). The resulting set of files are included
@@ -3658,925 +3691,934 @@ public class JavaCore {
         * the root will have children of type <code>ICompilationUnit</code>.
         * </p>
         * <p>
-        * For example, if the source folder path is 
-        * <code>/Project/src</code>, there are no inclusion filters, and the
-        * exclusion pattern is 
-        * <code>com/xyz/tests/&#42;&#42;</code>, then source files
-        * like <code>/Project/src/com/xyz/Foo.java</code>
-        * and <code>/Project/src/com/xyz/utils/Bar.java</code> would be included,
-        * whereas <code>/Project/src/com/xyz/tests/T1.java</code>
-        * and <code>/Project/src/com/xyz/tests/quick/T2.java</code> would be
-        * excluded. 
+        * For example, if the source folder path is <code>/Project/src</code>,
+        * there are no inclusion filters, and the exclusion pattern is
+        * <code>com/xyz/tests/&#42;&#42;</code>, then source files like
+        * <code>/Project/src/com/xyz/Foo.java</code> and
+        * <code>/Project/src/com/xyz/utils/Bar.java</code> would be included,
+        * whereas <code>/Project/src/com/xyz/tests/T1.java</code> and
+        * <code>/Project/src/com/xyz/tests/quick/T2.java</code> would be
+        * excluded.
         * </p>
         * <p>
-        * Additionally, a source entry can be associated with a specific output location. 
-        * By doing so, the Java builder will ensure that the generated ".class" files will 
-        * be issued inside this output location, as opposed to be generated into the 
-        * project default output location (when output location is <code>null</code>). 
-        * Note that multiple source entries may target the same output location.
-        * The output location is referred to using an absolute path relative to the 
-        * workspace root, e.g. <code>"/Project/bin"</code>, it must be located inside 
-        * the same project as the source folder.
+        * Additionally, a source entry can be associated with a specific output
+        * location. By doing so, the Java builder will ensure that the generated
+        * ".class" files will be issued inside this output location, as opposed to
+        * be generated into the project default output location (when output
+        * location is <code>null</code>). Note that multiple source entries may
+        * target the same output location. The output location is referred to using
+        * an absolute path relative to the workspace root, e.g.
+        * <code>"/Project/bin"</code>, it must be located inside the same
+        * project as the source folder.
         * </p>
         * <p>
-        * Also note that all sources/binaries inside a project are contributed as
-        * a whole through a project entry
-        * (see <code>JavaCore.newProjectEntry</code>). Particular source entries
-        * cannot be selectively exported.
+        * Also note that all sources/binaries inside a project are contributed as a
+        * whole through a project entry (see <code>JavaCore.newProjectEntry</code>).
+        * Particular source entries cannot be selectively exported.
         * </p>
-        *
-        * @param path the absolute workspace-relative path of a source folder
-        * @param inclusionPatterns the possibly empty list of inclusion patterns
-        *    represented as relative paths
-        * @param exclusionPatterns the possibly empty list of exclusion patterns
-        *    represented as relative paths
-        * @param specificOutputLocation the specific output location for this source entry (<code>null</code> if using project default ouput location)
+        * 
+        * @param path
+        *            the absolute workspace-relative path of a source folder
+        * @param inclusionPatterns
+        *            the possibly empty list of inclusion patterns represented as
+        *            relative paths
+        * @param exclusionPatterns
+        *            the possibly empty list of exclusion patterns represented as
+        *            relative paths
+        * @param specificOutputLocation
+        *            the specific output location for this source entry (<code>null</code>
+        *            if using project default ouput location)
         * @return a new source classpath entry with the given exclusion patterns
         * @see IClasspathEntry#getInclusionPatterns()
         * @see IClasspathEntry#getExclusionPatterns()
         * @see IClasspathEntry#getOutputLocation()
         * @since 3.0
         */
-       public static IClasspathEntry newSourceEntry(IPath path, IPath[] inclusionPatterns, IPath[] exclusionPatterns, IPath specificOutputLocation) {
-
-               if (path == null) Assert.isTrue(false, "Source path cannot be null"); //$NON-NLS-1$
-               if (!path.isAbsolute()) Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$
-               if (exclusionPatterns == null) Assert.isTrue(false, "Exclusion pattern set cannot be null"); //$NON-NLS-1$
-               if (inclusionPatterns == null) Assert.isTrue(false, "Inclusion pattern set cannot be null"); //$NON-NLS-1$
-
-               return new ClasspathEntry(
-                       IPackageFragmentRoot.K_SOURCE,
-                       IClasspathEntry.CPE_SOURCE,
-                       path,
-                       inclusionPatterns,
-                       exclusionPatterns,
-                       null, // source attachment
-                       null, // source attachment root
-                       specificOutputLocation, // custom output location
-                       false);
+       public static IClasspathEntry newSourceEntry(IPath path,
+                       IPath[] inclusionPatterns, IPath[] exclusionPatterns,
+                       IPath specificOutputLocation) {
+
+               if (path == null)
+                       Assert.isTrue(false, "Source path cannot be null"); //$NON-NLS-1$
+               if (!path.isAbsolute())
+                       Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$
+               if (exclusionPatterns == null)
+                       Assert.isTrue(false, "Exclusion pattern set cannot be null"); //$NON-NLS-1$
+               if (inclusionPatterns == null)
+                       Assert.isTrue(false, "Inclusion pattern set cannot be null"); //$NON-NLS-1$
+
+               return new ClasspathEntry(IPackageFragmentRoot.K_SOURCE,
+                               IClasspathEntry.CPE_SOURCE, path, inclusionPatterns,
+                               exclusionPatterns, null, // source attachment
+                               null, // source attachment root
+                               specificOutputLocation, // custom output location
+                               false);
        }
 
-  /**
-   * Creates and returns a new non-exported classpath entry of kind
-   * <code>CPE_VARIABLE</code> for the given path. The first segment of the
-   * path is the name of a classpath variable. The trailing segments of the
-   * path will be appended to resolved variable path.
-   * <p>
-   * A variable entry allows to express indirect references on a classpath to
-   * other projects or libraries, depending on what the classpath variable is
-   * referring.
-   * <p>
-   * It is possible to register an automatic initializer (
-   * <code>ClasspathVariableInitializer</code>), which will be invoked
-   * through the extension point
-   * "net.sourceforge.phpdt.core.classpathVariableInitializer". After resolution, a
-   * classpath variable entry may either correspond to a project or a library
-   * entry.</li>
-   * <p>
-   * e.g. Here are some examples of variable path usage
-   * <ul>
-   * <li>"JDTCORE" where variable <code>JDTCORE</code> is bound to
-   * "c:/jars/jdtcore.jar". The resolved classpath entry is denoting the
-   * library "c:\jars\jdtcore.jar"</li>
-   * <li>"JDTCORE" where variable <code>JDTCORE</code> is bound to
-   * "/Project_JDTCORE". The resolved classpath entry is denoting the project
-   * "/Project_JDTCORE"</li>
-   * <li>"PLUGINS/com.example/example.jar" where variable
-   * <code>PLUGINS</code> is bound to "c:/eclipse/plugins". The resolved
-   * classpath entry is denoting the library
-   * "c:/eclipse/plugins/com.example/example.jar"</li>
-   * </ul>
-   * Note that this operation does not attempt to validate classpath variables
-   * or access the resources at the given paths.
-   * <p>
-   * The resulting entry is not exported to dependent projects. This method is
-   * equivalent to <code>newVariableEntry(-,-,-,false)</code>.
-   * <p>
-   * 
-   * @param variablePath
-   *            the path of the binary archive; first segment is the name of a
-   *            classpath variable
-   * @param variableSourceAttachmentPath
-   *            the path of the corresponding source archive, or
-   *            <code>null</code> if none; if present, the first segment is
-   *            the name of a classpath variable (not necessarily the same
-   *            variable as the one that begins <code>variablePath</code>)
-   * @param sourceAttachmentRootPath
-   *            the location of the root within the source archive or
-   *            <code>null</code> if <code>archivePath</code> is also
-   *            <code>null</code>
-   * @return a new library classpath entry
-   * 
-   * @see JavaCore#newVariableEntry(IPath, IPath, IPath, boolean)
-   */
-  //public static IClasspathEntry newVariableEntry(
-  //   IPath variablePath,
-  //   IPath variableSourceAttachmentPath,
-  //   IPath sourceAttachmentRootPath) {
-  //
-  //   return newVariableEntry(variablePath, variableSourceAttachmentPath,
-  // sourceAttachmentRootPath, false);
-  //}
-  /**
-   * Creates and returns a new non-exported classpath entry of kind
-   * <code>CPE_VARIABLE</code> for the given path. The first segment of the
-   * path is the name of a classpath variable. The trailing segments of the
-   * path will be appended to resolved variable path.
-   * <p>
-   * A variable entry allows to express indirect references on a classpath to
-   * other projects or libraries, depending on what the classpath variable is
-   * referring.
-   * <p>
-   * It is possible to register an automatic initializer (
-   * <code>ClasspathVariableInitializer</code>), which will be invoked
-   * through the extension point
-   * "net.sourceforge.phpdt.core.classpathVariableInitializer". After resolution, a
-   * classpath variable entry may either correspond to a project or a library
-   * entry.</li>
-   * <p>
-   * e.g. Here are some examples of variable path usage
-   * <ul>
-   * <li>"JDTCORE" where variable <code>JDTCORE</code> is bound to
-   * "c:/jars/jdtcore.jar". The resolved classpath entry is denoting the
-   * library "c:\jars\jdtcore.jar"</li>
-   * <li>"JDTCORE" where variable <code>JDTCORE</code> is bound to
-   * "/Project_JDTCORE". The resolved classpath entry is denoting the project
-   * "/Project_JDTCORE"</li>
-   * <li>"PLUGINS/com.example/example.jar" where variable
-   * <code>PLUGINS</code> is bound to "c:/eclipse/plugins". The resolved
-   * classpath entry is denoting the library
-   * "c:/eclipse/plugins/com.example/example.jar"</li>
-   * </ul>
-   * Note that this operation does not attempt to validate classpath variables
-   * or access the resources at the given paths.
-   * <p>
-   * 
-   * @param variablePath
-   *            the path of the binary archive; first segment is the name of a
-   *            classpath variable
-   * @param variableSourceAttachmentPath
-   *            the path of the corresponding source archive, or
-   *            <code>null</code> if none; if present, the first segment is
-   *            the name of a classpath variable (not necessarily the same
-   *            variable as the one that begins <code>variablePath</code>)
-   * @param sourceAttachmentRootPath
-   *            the location of the root within the source archive or
-   *            <code>null</code> if <code>archivePath</code> is also
-   *            <code>null</code>
-   * @param isExported
-   *            indicates whether this entry is contributed to dependent
-   *            projects in addition to the output location
-   * @return a new variable classpath entry
-   * @since 2.0
-   */
-  //public static IClasspathEntry newVariableEntry(
-  //   IPath variablePath,
-  //   IPath variableSourceAttachmentPath,
-  //   IPath variableSourceAttachmentRootPath,
-  //   boolean isExported) {
-  //                   
-  //   if (variablePath == null || variablePath.segmentCount() < 1) {
-  //           Assert.isTrue(
-  //                   false,
-  //                   "Illegal classpath variable path: \'" +
-  // variablePath.makeRelative().toString() + "\', must have at least one
-  // segment"); //$NON-NLS-1$//$NON-NLS-2$
-  //   }
-  //   
-  //   return new ClasspathEntry(
-  //           IPackageFragmentRoot.K_SOURCE,
-  //           IClasspathEntry.CPE_VARIABLE,
-  //           variablePath,
-  //           ClasspathEntry.NO_EXCLUSION_PATTERNS,
-  //           variableSourceAttachmentPath, // source attachment
-  //           variableSourceAttachmentRootPath, // source attachment root
-  //           null, // specific output folder
-  //           isExported);
-  //}
-  /**
-   * Removed the given classpath variable. Does nothing if no value was set
-   * for this classpath variable.
-   * <p>
-   * This functionality cannot be used while the resource tree is locked.
-   * <p>
-   * Classpath variable values are persisted locally to the workspace, and are
-   * preserved from session to session.
-   * <p>
-   * 
-   * @param variableName
-   *            the name of the classpath variable
-   * @see #setClasspathVariable
-   * 
-   * @deprecated - use version with extra IProgressMonitor
-   */
-  //public static void removeClasspathVariable(String variableName) {
-  //   removeClasspathVariable(variableName, null);
-  //}
-  /**
-   * Removed the given classpath variable. Does nothing if no value was set
-   * for this classpath variable.
-   * <p>
-   * This functionality cannot be used while the resource tree is locked.
-   * <p>
-   * Classpath variable values are persisted locally to the workspace, and are
-   * preserved from session to session.
-   * <p>
-   * 
-   * @param variableName
-   *            the name of the classpath variable
-   * @param monitor
-   *            the progress monitor to report progress
-   * @see #setClasspathVariable
-   */
-  //public static void removeClasspathVariable(
-  //   String variableName,
-  //   IProgressMonitor monitor) {
-  //
-  //   try {
-  //           updateVariableValues(new String[]{ variableName}, new IPath[]{ null },
-  // monitor);
-  //   } catch (JavaModelException e) {
-  //   }
-  //}
-  /**
-   * Removes the given element changed listener. Has no affect if an identical
-   * listener is not registered.
-   * 
-   * @param listener
-   *            the listener
-   */
-  public static void removeElementChangedListener(
-      IElementChangedListener listener) {
-    JavaModelManager.getJavaModelManager().removeElementChangedListener(
-        listener);
-  }
-
-  /**
-   * Bind a container reference path to some actual containers (
-   * <code>IClasspathContainer</code>). This API must be invoked whenever
-   * changes in container need to be reflected onto the JavaModel. Containers
-   * can have distinct values in different projects, therefore this API
-   * considers a set of projects with their respective containers.
-   * <p>
-   * <code>containerPath</code> is the path under which these values can be
-   * referenced through container classpath entries (
-   * <code>IClasspathEntry#CPE_CONTAINER</code>). A container path is
-   * formed by a first ID segment followed with extra segments, which can be
-   * used as additional hints for the resolution. The container ID is used to
-   * identify a <code>ClasspathContainerInitializer</code> registered on the
-   * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer".
-   * <p>
-   * There is no assumption that each individual container value passed in
-   * argument (<code>respectiveContainers</code>) must answer the exact
-   * same path when requested <code>IClasspathContainer#getPath</code>.
-   * Indeed, the containerPath is just an indication for resolving it to an
-   * actual container object. It can be delegated to a
-   * <code>ClasspathContainerInitializer</code>, which can be activated
-   * through the extension point
-   * "net.sourceforge.phpdt.core.ClasspathContainerInitializer").
-   * <p>
-   * In reaction to changing container values, the JavaModel will be updated
-   * to reflect the new state of the updated container.
-   * <p>
-   * This functionality cannot be used while the resource tree is locked.
-   * <p>
-   * Classpath container values are persisted locally to the workspace, but
-   * are not preserved from a session to another. It is thus highly
-   * recommended to register a <code>ClasspathContainerInitializer</code>
-   * for each referenced container (through the extension point
-   * "net.sourceforge.phpdt.core.ClasspathContainerInitializer").
-   * <p>
-   * Note: setting a container to <code>null</code> will cause it to be
-   * lazily resolved again whenever its value is required. In particular, this
-   * will cause a registered initializer to be invoked again.
-   * <p>
-   * 
-   * @param containerPath -
-   *            the name of the container reference, which is being updated
-   * @param affectedProjects -
-   *            the set of projects for which this container is being bound
-   * @param respectiveContainers -
-   *            the set of respective containers for the affected projects
-   * @param monitor
-   *            a monitor to report progress
-   * 
-   * @see ClasspathContainerInitializer
-   * @see #getClasspathContainer(IPath, IJavaProject)
-   * @see IClasspathContainer
-   * @since 2.0
-   */
-  //public static void setClasspathContainer(final IPath containerPath,
-  // IJavaProject[] affectedProjects, IClasspathContainer[]
-  // respectiveContainers, IProgressMonitor monitor) throws JavaModelException
-  // {
-  //
-  //   if (affectedProjects.length != respectiveContainers.length)
-  // Assert.isTrue(false, "Projects and containers collections should have the
-  // same size"); //$NON-NLS-1$
-  //   
-  //   if (monitor != null && monitor.isCanceled()) return;
-  //   
-  //   if (JavaModelManager.CP_RESOLVE_VERBOSE){
-  //           System.out.println("CPContainer SET - setting container:
-  // ["+containerPath+"] for projects: {" //$NON-NLS-1$ //$NON-NLS-2$
-  //                   + (ProjectPrefUtil.toString(affectedProjects,
-  //                                   new ProjectPrefUtil.Displayable(){
-  //                                           public String displayString(Object o) { return ((IJavaProject)
-  // o).getElementName(); }
-  //                                   }))
-  //                   + "} with values: " //$NON-NLS-1$
-  //                   + (ProjectPrefUtil.toString(respectiveContainers,
-  //                                   new ProjectPrefUtil.Displayable(){
-  //                                           public String displayString(Object o) { return ((IClasspathContainer)
-  // o).getDescription(); }
-  //                                   }))
-  //                           );
-  //   }
-  //
-  //   final int projectLength = affectedProjects.length;
-  //   final IJavaProject[] modifiedProjects;
-  //   System.arraycopy(affectedProjects, 0, modifiedProjects = new
-  // IJavaProject[projectLength], 0, projectLength);
-  //   final IClasspathEntry[][] oldResolvedPaths = new
-  // IClasspathEntry[projectLength][];
-  //                   
-  //   // filter out unmodified project containers
-  //   int remaining = 0;
-  //   for (int i = 0; i < projectLength; i++){
-  //   
-  //           if (monitor != null && monitor.isCanceled()) return;
-  //   
-  //           IJavaProject affectedProject = affectedProjects[i];
-  //           IClasspathContainer newContainer = respectiveContainers[i];
-  //           if (newContainer == null) newContainer =
-  // JavaModelManager.ContainerInitializationInProgress; // 30920 - prevent
-  // infinite loop
-  //           boolean found = false;
-  //           if (JavaProject.hasJavaNature(affectedProject.getProject())){
-  //                   IClasspathEntry[] rawClasspath = affectedProject.getRawClasspath();
-  //                   for (int j = 0, cpLength = rawClasspath.length; j <cpLength; j++) {
-  //                           IClasspathEntry entry = rawClasspath[j];
-  //                           if (entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER &&
-  // entry.getPath().equals(containerPath)){
-  //                                   found = true;
-  //                                   break;
-  //                           }
-  //                   }
-  //           }
-  //           if (!found){
-  //                   modifiedProjects[i] = null; // filter out this project - does not
-  // reference the container path, or isnt't yet Java project
-  //                   JavaModelManager.containerPut(affectedProject, containerPath,
-  // newContainer);
-  //                   continue;
-  //           }
-  //           IClasspathContainer oldContainer =
-  // JavaModelManager.containerGet(affectedProject, containerPath);
-  //           if (oldContainer == JavaModelManager.ContainerInitializationInProgress) {
-  //                   Map previousContainerValues =
-  // (Map)JavaModelManager.PreviousSessionContainers.get(affectedProject);
-  //                   if (previousContainerValues != null){
-  //                           IClasspathContainer previousContainer =
-  // (IClasspathContainer)previousContainerValues.get(containerPath);
-  //                           if (previousContainer != null) {
-  //                                   if (JavaModelManager.CP_RESOLVE_VERBOSE){
-  //                                           System.out.println("CPContainer INIT - reentering access to project
-  // container: ["+affectedProject.getElementName()+"] " + containerPath + "
-  // during its initialization, will see previous value: "+
-  // previousContainer.getDescription()); //$NON-NLS-1$ //$NON-NLS-2$
-  // //$NON-NLS-3$
-  //                                   }
-  //                                   JavaModelManager.containerPut(affectedProject, containerPath,
-  // previousContainer);
-  //                           }
-  //                           oldContainer = null; //33695 - cannot filter out restored container, must
-  // update affected project to reset cached CP
-  //                   } else {
-  //                           oldContainer = null;
-  //                   }
-  //           }
-  //           if (oldContainer != null &&
-  // oldContainer.equals(respectiveContainers[i])){// TODO: could improve to
-  // only compare entries
-  //                   modifiedProjects[i] = null; // filter out this project - container did
-  // not change
-  //                   continue;
-  //           }
-  //           remaining++;
-  //           oldResolvedPaths[i] = affectedProject.getResolvedClasspath(true);
-  //           JavaModelManager.containerPut(affectedProject, containerPath,
-  // newContainer);
-  //   }
-  //           
-  //   if (remaining == 0) return;
-  //           
-  //   // trigger model refresh
-  //   try {
-  //           JavaCore.run(new IWorkspaceRunnable() {
-  //                   public void run(IProgressMonitor monitor) throws CoreException {
-  //                           for(int i = 0; i < projectLength; i++){
-  //           
-  //                                   if (monitor != null && monitor.isCanceled()) return;
-  //           
-  //                                   JavaProject affectedProject = (JavaProject)modifiedProjects[i];
-  //                                   if (affectedProject == null) continue; // was filtered out
-  //                                           
-  //                                   if (JavaModelManager.CP_RESOLVE_VERBOSE){
-  //                                           System.out.println("CPContainer SET - updating affected project:
-  // ["+affectedProject.getElementName()+"] due to setting container: " +
-  // containerPath); //$NON-NLS-1$ //$NON-NLS-2$
-  //                                   }
-  //
-  //                                   // force a refresh of the affected project (will compute deltas)
-  //                                   affectedProject.setRawClasspath(
-  //                                                   affectedProject.getRawClasspath(),
-  //                                                   SetClasspathOperation.ReuseOutputLocation,
-  //                                                   monitor,
-  //                                                   !ResourcesPlugin.getWorkspace().isTreeLocked(), // can save resources
-  //                                                   oldResolvedPaths[i],
-  //                                                   false, // updating - no validation
-  //                                                   false); // updating - no need to save
-  //                           }
-  //                   }
-  //           },
-  //           monitor);
-  //   } catch(CoreException e) {
-  //           if (JavaModelManager.CP_RESOLVE_VERBOSE){
-  //                   System.out.println("CPContainer SET - FAILED DUE TO EXCEPTION:
-  // "+containerPath); //$NON-NLS-1$
-  //                   e.printStackTrace();
-  //           }
-  //           if (e instanceof JavaModelException) {
-  //                   throw (JavaModelException)e;
-  //           } else {
-  //                   throw new JavaModelException(e);
-  //           }
-  //   } finally {
-  //           for (int i = 0; i < projectLength; i++) {
-  //                   if (respectiveContainers[i] == null) {
-  //                           JavaModelManager.containerPut(affectedProjects[i], containerPath, null);
-  // // reset init in progress marker
-  //                   }
-  //           }
-  //   }
-  //                                   
-  //}
-  /**
-   * Sets the value of the given classpath variable. The path must have at
-   * least one segment.
-   * <p>
-   * This functionality cannot be used while the resource tree is locked.
-   * <p>
-   * Classpath variable values are persisted locally to the workspace, and are
-   * preserved from session to session.
-   * <p>
-   * 
-   * @param variableName
-   *            the name of the classpath variable
-   * @param path
-   *            the path
-   * @see #getClasspathVariable
-   * 
-   * @deprecated - use API with IProgressMonitor
-   */
-  //public static void setClasspathVariable(String variableName, IPath path)
-  //   throws JavaModelException {
-  //
-  //   setClasspathVariable(variableName, path, null);
-  //}
-  /**
-   * Sets the value of the given classpath variable. The path must not be
-   * null.
-   * <p>
-   * This functionality cannot be used while the resource tree is locked.
-   * <p>
-   * Classpath variable values are persisted locally to the workspace, and are
-   * preserved from session to session.
-   * <p>
-   * Updating a variable with the same value has no effect.
-   * 
-   * @param variableName
-   *            the name of the classpath variable
-   * @param path
-   *            the path
-   * @param monitor
-   *            a monitor to report progress
-   * @see #getClasspathVariable
-   */
-  //public static void setClasspathVariable(
-  //   String variableName,
-  //   IPath path,
-  //   IProgressMonitor monitor)
-  //   throws JavaModelException {
-  //
-  //   if (path == null) Assert.isTrue(false, "Variable path cannot be null");
-  // //$NON-NLS-1$
-  //   setClasspathVariables(new String[]{variableName}, new IPath[]{ path },
-  // monitor);
-  //}
-  /**
-   * Sets the values of all the given classpath variables at once. Null paths
-   * can be used to request corresponding variable removal.
-   * <p>
-   * This functionality cannot be used while the resource tree is locked.
-   * <p>
-   * Classpath variable values are persisted locally to the workspace, and are
-   * preserved from session to session.
-   * <p>
-   * Updating a variable with the same value has no effect.
-   * 
-   * @param variableNames
-   *            an array of names for the updated classpath variables
-   * @param paths
-   *            an array of path updates for the modified classpath variables
-   *            (null meaning that the corresponding value will be removed
-   * @param monitor
-   *            a monitor to report progress
-   * @see #getClasspathVariable
-   * @since 2.0
-   */
-  //public static void setClasspathVariables(
-  //   String[] variableNames,
-  //   IPath[] paths,
-  //   IProgressMonitor monitor)
-  //   throws JavaModelException {
-  //
-  //   if (variableNames.length != paths.length) Assert.isTrue(false, "Variable
-  // names and paths collections should have the same size"); //$NON-NLS-1$
-  //   //TODO: should check that null cannot be used as variable paths
-  //   updateVariableValues(variableNames, paths, monitor);
-  //}
-  /*
-   * (non-Javadoc) Method declared on IExecutableExtension. Record any
-   * necessary initialization data from the plugin.
-   */
-  public void setInitializationData(IConfigurationElement cfig,
-      String propertyName, Object data) throws CoreException {
-  }
-
-  /**
-   * Sets the current table of options. All and only the options explicitly
-   * included in the given table are remembered; all previous option settings
-   * are forgotten, including ones not explicitly mentioned.
-   * <p>
-   * For a complete description of the configurable options, see
-   * <code>getDefaultOptions</code>.
-   * </p>
-   * 
-   * @param newOptions
-   *            the new options (key type: <code>String</code>; value type:
-   *            <code>String</code>), or <code>null</code> to reset all
-   *            options to their default values
-   * @see JavaCore#getDefaultOptions
-   */
-  public static void setOptions(Hashtable newOptions) {
-
-    // see #initializeDefaultPluginPreferences() for changing default
-    // settings
-    Preferences preferences = getPlugin().getPluginPreferences();
-
-    if (newOptions == null) {
-      newOptions = JavaCore.getDefaultOptions();
-    }
-    Enumeration keys = newOptions.keys();
-    while (keys.hasMoreElements()) {
-      String key = (String) keys.nextElement();
-      if (!JavaModelManager.OptionNames.contains(key))
-        continue; // unrecognized option
-      if (key.equals(CORE_ENCODING))
-        continue; // skipped, contributed by resource prefs
-      String value = (String) newOptions.get(key);
-      preferences.setValue(key, value);
-    }
-
-    // persist options
-    getPlugin().savePluginPreferences();
-  }
-
-  /**
-   * Shutdown the JavaCore plug-in.
-   * <p>
-   * De-registers the JavaModelManager as a resource changed listener and save
-   * participant.
-   * <p>
-   * 
-   * @see org.eclipse.core.runtime.Plugin#shutdown()
-   */
-  // moved to PHPeclipsePlugin#shutdown()
-  //public void shutdown() {
-  //
-  //   //savePluginPreferences();
-  //   getPlugin().savePluginPreferences();
-  //   IWorkspace workspace = ResourcesPlugin.getWorkspace();
-  //   workspace.removeResourceChangeListener(JavaModelManager.getJavaModelManager().deltaProcessor);
-  //   workspace.removeSaveParticipant(PHPeclipsePlugin.getDefault());
-  //
-  //   ((JavaModelManager) JavaModelManager.getJavaModelManager()).shutdown();
-  //}
-  /**
-   * Initiate the background indexing process. This should be deferred after
-   * the plugin activation.
-   */
-  //private void startIndexing() {
-  //
-  //   JavaModelManager.getJavaModelManager().getIndexManager().reset();
-  //}
-  /**
-   * Startup of the JavaCore plug-in.
-   * <p>
-   * Registers the JavaModelManager as a resource changed listener and save
-   * participant. Starts the background indexing, and restore saved classpath
-   * variable values.
-   * <p>
-   * 
-   * @see org.eclipse.core.runtime.Plugin#startup()
-   */
-
-  // moved to PHPeclipsePlugin#startup()
-  //public void startup() {
-  //           
-  //   JavaModelManager manager = JavaModelManager.getJavaModelManager();
-  //   try {
-  //           manager.configurePluginDebugOptions();
-  //
-  //           // request state folder creation (workaround 19885)
-  //           JavaCore.getPlugin().getStateLocation();
-  //
-  //           // retrieve variable values
-  //           JavaCore.getPlugin().getPluginPreferences().addPropertyChangeListener(new
-  // JavaModelManager.PluginPreferencesListener());
-  //// TODO : jsurfer temp-del
-  //// manager.loadVariablesAndContainers();
-  //
-  //           IWorkspace workspace = ResourcesPlugin.getWorkspace();
-  //           workspace.addResourceChangeListener(
-  //                   manager.deltaProcessor,
-  //                   IResourceChangeEvent.PRE_AUTO_BUILD
-  //                           | IResourceChangeEvent.POST_AUTO_BUILD
-  //                           | IResourceChangeEvent.POST_CHANGE
-  //                           | IResourceChangeEvent.PRE_DELETE
-  //                           | IResourceChangeEvent.PRE_CLOSE);
-  //
-  //// startIndexing();
-  //           workspace.addSaveParticipant(PHPeclipsePlugin.getDefault(), manager);
-  //                   
-  //   } catch (CoreException e) {
-  //   } catch (RuntimeException e) {
-  //           manager.shutdown();
-  //           throw e;
-  //   }
-  //}
-  /**
-   * Internal updating of a variable values (null path meaning removal),
-   * allowing to change multiple variable values at once.
-   */
-  //private static void updateVariableValues(
-  //   String[] variableNames,
-  //   IPath[] variablePaths,
-  //   IProgressMonitor monitor) throws JavaModelException {
-  //   
-  //   if (monitor != null && monitor.isCanceled()) return;
-  //           
-  //   if (JavaModelManager.CP_RESOLVE_VERBOSE){
-  //           System.out.println("CPVariable SET - setting variables: {" +
-  // ProjectPrefUtil.toString(variableNames) //$NON-NLS-1$
-  //                   + "} with values: " + ProjectPrefUtil.toString(variablePaths)); //$NON-NLS-1$
-  //   }
-  //
-  //   int varLength = variableNames.length;
-  //           
-  //   // gather classpath information for updating
-  //   final HashMap affectedProjects = new HashMap(5);
-  //   JavaModelManager manager = JavaModelManager.getJavaModelManager();
-  //   IJavaModel model = manager.getJavaModel();
-  //   
-  //   // filter out unmodified variables
-  //   int discardCount = 0;
-  //   for (int i = 0; i < varLength; i++){
-  //           String variableName = variableNames[i];
-  //           IPath oldPath = (IPath)JavaModelManager.variableGet(variableName); // if
-  // reentering will provide previous session value
-  //           if (oldPath == JavaModelManager.VariableInitializationInProgress){
-  //                   IPath previousPath =
-  // (IPath)JavaModelManager.PreviousSessionVariables.get(variableName);
-  //                   if (previousPath != null){
-  //                           if (JavaModelManager.CP_RESOLVE_VERBOSE){
-  //                                   System.out.println("CPVariable INIT - reentering access to variable: " +
-  // variableName+ " during its initialization, will see previous value: "+
-  // previousPath); //$NON-NLS-1$ //$NON-NLS-2$
-  //                           }
-  //                           JavaModelManager.variablePut(variableName, previousPath); // replace
-  // value so reentering calls are seeing old value
-  //                   }
-  //                   oldPath = null; //33695 - cannot filter out restored variable, must
-  // update affected project to reset cached CP
-  //           }
-  //           if (oldPath != null && oldPath.equals(variablePaths[i])){
-  //                   variableNames[i] = null;
-  //                   discardCount++;
-  //           }
-  //   }
-  //   if (discardCount > 0){
-  //           if (discardCount == varLength) return;
-  //           int changedLength = varLength - discardCount;
-  //           String[] changedVariableNames = new String[changedLength];
-  //           IPath[] changedVariablePaths = new IPath[changedLength];
-  //           for (int i = 0, index = 0; i < varLength; i++){
-  //                   if (variableNames[i] != null){
-  //                           changedVariableNames[index] = variableNames[i];
-  //                           changedVariablePaths[index] = variablePaths[i];
-  //                           index++;
-  //                   }
-  //           }
-  //           variableNames = changedVariableNames;
-  //           variablePaths = changedVariablePaths;
-  //           varLength = changedLength;
-  //   }
-  //           
-  //   if (monitor != null && monitor.isCanceled()) return;
-  //
-  //   if (model != null) {
-  //           IJavaProject[] projects = model.getJavaProjects();
-  //           nextProject : for (int i = 0, projectLength = projects.length; i <
-  // projectLength; i++){
-  //                   IJavaProject project = projects[i];
-  //                                           
-  //                   // check to see if any of the modified variables is present on the
-  // classpath
-  //                   IClasspathEntry[] classpath = project.getRawClasspath();
-  //                   for (int j = 0, cpLength = classpath.length; j < cpLength; j++){
-  //                                   
-  //                           IClasspathEntry entry = classpath[j];
-  //                           for (int k = 0; k < varLength; k++){
-  //   
-  //                                   String variableName = variableNames[k];
-  //                                   if (entry.getEntryKind() == IClasspathEntry.CPE_VARIABLE){
-  //   
-  //                                           if (variableName.equals(entry.getPath().segment(0))){
-  //                                                   affectedProjects.put(project, project.getResolvedClasspath(true));
-  //                                                   continue nextProject;
-  //                                           }
-  //                                           IPath sourcePath, sourceRootPath;
-  //                                           if (((sourcePath = entry.getSourceAttachmentPath()) != null &&
-  // variableName.equals(sourcePath.segment(0)))
-  //                                                   || ((sourceRootPath = entry.getSourceAttachmentRootPath()) != null &&
-  // variableName.equals(sourceRootPath.segment(0)))) {
-  //   
-  //                                                   affectedProjects.put(project, project.getResolvedClasspath(true));
-  //                                                   continue nextProject;
-  //                                           }
-  //                                   }
-  //                           }
-  //                   }
-  //           }
-  //   }
-  //   // update variables
-  //   for (int i = 0; i < varLength; i++){
-  //           JavaModelManager.variablePut(variableNames[i], variablePaths[i]);
-  //   }
-  //   final String[] dbgVariableNames = variableNames;
-  //                           
-  //   // update affected project classpaths
-  //   if (!affectedProjects.isEmpty()) {
-  //           try {
-  //                   JavaCore_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt.run(
-  //                           new IWorkspaceRunnable() {
-  //                                   public void run(IProgressMonitor monitor) throws CoreException {
-  //                                           // propagate classpath change
-  //                                           Iterator projectsToUpdate = affectedProjects.keySet().iterator();
-  //                                           while (projectsToUpdate.hasNext()) {
-  //                   
-  //                                                   if (monitor != null && monitor.isCanceled()) return;
-  //                   
-  //                                                   JavaProject project = (JavaProject) projectsToUpdate.next();
-  //
-  //                                                   if (JavaModelManager.CP_RESOLVE_VERBOSE){
-  //                                                           System.out.println("CPVariable SET - updating affected project:
-  // ["+project.getElementName()+"] due to setting variables: "+
-  // ProjectPrefUtil.toString(dbgVariableNames)); //$NON-NLS-1$ //$NON-NLS-2$
-  //                                                   }
-  //                                                           
-  //                                                   project
-  //                                                           .setRawClasspath(
-  //                                                                   project.getRawClasspath(),
-  //                                                                   SetClasspathOperation.ReuseOutputLocation,
-  //                                                                   null, // don't call beginTask on the monitor (see
-  // http://bugs.eclipse.org/bugs/show_bug.cgi?id=3717)
-  //                                                                   !ResourcesPlugin.getWorkspace().isTreeLocked(), // can change resources
-  //                                                                   (IClasspathEntry[]) affectedProjects.get(project),
-  //                                                                   false, // updating - no validation
-  //                                                                   false); // updating - no need to save
-  //                                           }
-  //                                   }
-  //                           },
-  //                           monitor);
-  //           } catch (CoreException e) {
-  //                   if (JavaModelManager.CP_RESOLVE_VERBOSE){
-  //                           System.out.println("CPVariable SET - FAILED DUE TO EXCEPTION:
-  // "+ProjectPrefUtil.toString(dbgVariableNames)); //$NON-NLS-1$
-  //                           e.printStackTrace();
-  //                   }
-  //                   if (e instanceof JavaModelException) {
-  //                           throw (JavaModelException)e;
-  //                   } else {
-  //                           throw new JavaModelException(e);
-  //                   }
-  //           }
-  //   }
-  //}
-  /*
-   * (non-Javadoc) Startup the JavaCore plug-in. <p> Registers the
-   * JavaModelManager as a resource changed listener and save participant.
-   * Starts the background indexing, and restore saved classpath variable
-   * values. <p> @throws Exception
-   * 
-   * @see org.eclipse.core.runtime.Plugin#start(BundleContext)
-   */
-  //public static void start(final Plugin plugin, BundleContext context)
-  // throws Exception {
-  //// super.start(context);
-  //   
-  //   final JavaModelManager manager = JavaModelManager.getJavaModelManager();
-  //   try {
-  //           manager.configurePluginDebugOptions();
-  //
-  //           // request state folder creation (workaround 19885)
-  //           JavaCore.getPlugin().getStateLocation();
-  //
-  //           // retrieve variable values
-  //           //JavaCore.getPlugin().getPluginPreferences().addPropertyChangeListener(new
-  // JavaModelManager.PluginPreferencesListener());
-  //// manager.loadVariablesAndContainers();
-  //
-  //           final IWorkspace workspace = ResourcesPlugin.getWorkspace();
-  //           workspace.addResourceChangeListener(
-  //                   manager.deltaState,
-  //                   IResourceChangeEvent.PRE_BUILD
-  //                           | IResourceChangeEvent.POST_BUILD
-  //                           | IResourceChangeEvent.POST_CHANGE
-  //                           | IResourceChangeEvent.PRE_DELETE
-  //                           | IResourceChangeEvent.PRE_CLOSE);
-  //
-  //// startIndexing();
-  //           
-  //           // process deltas since last activated in indexer thread so that indexes
-  // are up-to-date.
-  //           // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=38658
-  //           Job processSavedState = new Job(ProjectPrefUtil.bind("savedState.jobName")) {
-  // //$NON-NLS-1$
-  //                   protected IStatus run(IProgressMonitor monitor) {
-  //                           try {
-  //                                   // add save participant and process delta atomically
-  //                                   // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=59937
-  //                                   workspace.run(
-  //                                           new IWorkspaceRunnable() {
-  //                                                   public void run(IProgressMonitor progress) throws CoreException {
-  //// ISavedState savedState = workspace.addSaveParticipant(JavaCore.this,
-  // manager);
-  //                                                           ISavedState savedState = workspace.addSaveParticipant(plugin, manager);
-  //                                                           if (savedState != null) {
-  //                                                                   // the event type coming from the saved state is always POST_AUTO_BUILD
-  //                                                                   // force it to be POST_CHANGE so that the delta processor can handle it
-  //                                                                   manager.deltaState.getDeltaProcessor().overridenEventType =
-  // IResourceChangeEvent.POST_CHANGE;
-  //                                                                   savedState.processResourceChangeEvents(manager.deltaState);
-  //                                                           }
-  //                                                   }
-  //                                           },
-  //                                           monitor);
-  //                           } catch (CoreException e) {
-  //                                   return e.getStatus();
-  //                           }
-  //                           return Status.OK_STATUS;
-  //                   }
-  //           };
-  //           processSavedState.setSystem(true);
-  //           processSavedState.setPriority(Job.SHORT); // process asap
-  //           processSavedState.schedule();
-  //   } catch (RuntimeException e) {
-  //           manager.shutdown();
-  //           throw e;
-  //   }
-  //}
-  /*
-   * (non-Javadoc) Shutdown the JavaCore plug-in. <p> De-registers the
-   * JavaModelManager as a resource changed listener and save participant. <p>
-   * 
-   * @see org.eclipse.core.runtime.Plugin#stop(BundleContext)
-   */
-//  public static void stop(Plugin plugin, BundleContext context)
-//      throws Exception {
-//    try {
-//      plugin.savePluginPreferences();
-//      IWorkspace workspace = ResourcesPlugin.getWorkspace();
-//      workspace.removeResourceChangeListener(JavaModelManager
-//          .getJavaModelManager().deltaState);
-//      workspace.removeSaveParticipant(plugin);
-//
-//      JavaModelManager.getJavaModelManager().shutdown();
-//    } finally {
-//      // ensure we call super.stop as the last thing
-//      //             super.stop(context);
-//    }
-//  }
+       /**
+        * Creates and returns a new non-exported classpath entry of kind
+        * <code>CPE_VARIABLE</code> for the given path. The first segment of the
+        * path is the name of a classpath variable. The trailing segments of the
+        * path will be appended to resolved variable path.
+        * <p>
+        * A variable entry allows to express indirect references on a classpath to
+        * other projects or libraries, depending on what the classpath variable is
+        * referring.
+        * <p>
+        * It is possible to register an automatic initializer (
+        * <code>ClasspathVariableInitializer</code>), which will be invoked
+        * through the extension point
+        * "net.sourceforge.phpdt.core.classpathVariableInitializer". After
+        * resolution, a classpath variable entry may either correspond to a project
+        * or a library entry.</li>
+        * <p>
+        * e.g. Here are some examples of variable path usage
+        * <ul>
+        * <li>"JDTCORE" where variable <code>JDTCORE</code> is bound to
+        * "c:/jars/jdtcore.jar". The resolved classpath entry is denoting the
+        * library "c:\jars\jdtcore.jar"</li>
+        * <li>"JDTCORE" where variable <code>JDTCORE</code> is bound to
+        * "/Project_JDTCORE". The resolved classpath entry is denoting the project
+        * "/Project_JDTCORE"</li>
+        * <li>"PLUGINS/com.example/example.jar" where variable
+        * <code>PLUGINS</code> is bound to "c:/eclipse/plugins". The resolved
+        * classpath entry is denoting the library
+        * "c:/eclipse/plugins/com.example/example.jar"</li>
+        * </ul>
+        * Note that this operation does not attempt to validate classpath variables
+        * or access the resources at the given paths.
+        * <p>
+        * The resulting entry is not exported to dependent projects. This method is
+        * equivalent to <code>newVariableEntry(-,-,-,false)</code>.
+        * <p>
+        * 
+        * @param variablePath
+        *            the path of the binary archive; first segment is the name of a
+        *            classpath variable
+        * @param variableSourceAttachmentPath
+        *            the path of the corresponding source archive, or
+        *            <code>null</code> if none; if present, the first segment is
+        *            the name of a classpath variable (not necessarily the same
+        *            variable as the one that begins <code>variablePath</code>)
+        * @param sourceAttachmentRootPath
+        *            the location of the root within the source archive or
+        *            <code>null</code> if <code>archivePath</code> is also
+        *            <code>null</code>
+        * @return a new library classpath entry
+        * 
+        * @see JavaCore#newVariableEntry(IPath, IPath, IPath, boolean)
+        */
+       // public static IClasspathEntry newVariableEntry(
+       // IPath variablePath,
+       // IPath variableSourceAttachmentPath,
+       // IPath sourceAttachmentRootPath) {
+       //
+       // return newVariableEntry(variablePath, variableSourceAttachmentPath,
+       // sourceAttachmentRootPath, false);
+       // }
+       /**
+        * Creates and returns a new non-exported classpath entry of kind
+        * <code>CPE_VARIABLE</code> for the given path. The first segment of the
+        * path is the name of a classpath variable. The trailing segments of the
+        * path will be appended to resolved variable path.
+        * <p>
+        * A variable entry allows to express indirect references on a classpath to
+        * other projects or libraries, depending on what the classpath variable is
+        * referring.
+        * <p>
+        * It is possible to register an automatic initializer (
+        * <code>ClasspathVariableInitializer</code>), which will be invoked
+        * through the extension point
+        * "net.sourceforge.phpdt.core.classpathVariableInitializer". After
+        * resolution, a classpath variable entry may either correspond to a project
+        * or a library entry.</li>
+        * <p>
+        * e.g. Here are some examples of variable path usage
+        * <ul>
+        * <li>"JDTCORE" where variable <code>JDTCORE</code> is bound to
+        * "c:/jars/jdtcore.jar". The resolved classpath entry is denoting the
+        * library "c:\jars\jdtcore.jar"</li>
+        * <li>"JDTCORE" where variable <code>JDTCORE</code> is bound to
+        * "/Project_JDTCORE". The resolved classpath entry is denoting the project
+        * "/Project_JDTCORE"</li>
+        * <li>"PLUGINS/com.example/example.jar" where variable
+        * <code>PLUGINS</code> is bound to "c:/eclipse/plugins". The resolved
+        * classpath entry is denoting the library
+        * "c:/eclipse/plugins/com.example/example.jar"</li>
+        * </ul>
+        * Note that this operation does not attempt to validate classpath variables
+        * or access the resources at the given paths.
+        * <p>
+        * 
+        * @param variablePath
+        *            the path of the binary archive; first segment is the name of a
+        *            classpath variable
+        * @param variableSourceAttachmentPath
+        *            the path of the corresponding source archive, or
+        *            <code>null</code> if none; if present, the first segment is
+        *            the name of a classpath variable (not necessarily the same
+        *            variable as the one that begins <code>variablePath</code>)
+        * @param sourceAttachmentRootPath
+        *            the location of the root within the source archive or
+        *            <code>null</code> if <code>archivePath</code> is also
+        *            <code>null</code>
+        * @param isExported
+        *            indicates whether this entry is contributed to dependent
+        *            projects in addition to the output location
+        * @return a new variable classpath entry
+        * @since 2.0
+        */
+       // public static IClasspathEntry newVariableEntry(
+       // IPath variablePath,
+       // IPath variableSourceAttachmentPath,
+       // IPath variableSourceAttachmentRootPath,
+       // boolean isExported) {
+       //                      
+       // if (variablePath == null || variablePath.segmentCount() < 1) {
+       // Assert.isTrue(
+       // false,
+       // "Illegal classpath variable path: \'" +
+       // variablePath.makeRelative().toString() + "\', must have at least one
+       // segment"); //$NON-NLS-1$//$NON-NLS-2$
+       // }
+       //      
+       // return new ClasspathEntry(
+       // IPackageFragmentRoot.K_SOURCE,
+       // IClasspathEntry.CPE_VARIABLE,
+       // variablePath,
+       // ClasspathEntry.NO_EXCLUSION_PATTERNS,
+       // variableSourceAttachmentPath, // source attachment
+       // variableSourceAttachmentRootPath, // source attachment root
+       // null, // specific output folder
+       // isExported);
+       // }
+       /**
+        * Removed the given classpath variable. Does nothing if no value was set
+        * for this classpath variable.
+        * <p>
+        * This functionality cannot be used while the resource tree is locked.
+        * <p>
+        * Classpath variable values are persisted locally to the workspace, and are
+        * preserved from session to session.
+        * <p>
+        * 
+        * @param variableName
+        *            the name of the classpath variable
+        * @see #setClasspathVariable
+        * 
+        * @deprecated - use version with extra IProgressMonitor
+        */
+       // public static void removeClasspathVariable(String variableName) {
+       // removeClasspathVariable(variableName, null);
+       // }
+       /**
+        * Removed the given classpath variable. Does nothing if no value was set
+        * for this classpath variable.
+        * <p>
+        * This functionality cannot be used while the resource tree is locked.
+        * <p>
+        * Classpath variable values are persisted locally to the workspace, and are
+        * preserved from session to session.
+        * <p>
+        * 
+        * @param variableName
+        *            the name of the classpath variable
+        * @param monitor
+        *            the progress monitor to report progress
+        * @see #setClasspathVariable
+        */
+       // public static void removeClasspathVariable(
+       // String variableName,
+       // IProgressMonitor monitor) {
+       //
+       // try {
+       // updateVariableValues(new String[]{ variableName}, new IPath[]{ null },
+       // monitor);
+       // } catch (JavaModelException e) {
+       // }
+       // }
+       /**
+        * Removes the given element changed listener. Has no affect if an identical
+        * listener is not registered.
+        * 
+        * @param listener
+        *            the listener
+        */
+       public static void removeElementChangedListener(
+                       IElementChangedListener listener) {
+               JavaModelManager.getJavaModelManager().removeElementChangedListener(
+                               listener);
+       }
+
+       /**
+        * Bind a container reference path to some actual containers (
+        * <code>IClasspathContainer</code>). This API must be invoked whenever
+        * changes in container need to be reflected onto the JavaModel. Containers
+        * can have distinct values in different projects, therefore this API
+        * considers a set of projects with their respective containers.
+        * <p>
+        * <code>containerPath</code> is the path under which these values can be
+        * referenced through container classpath entries (
+        * <code>IClasspathEntry#CPE_CONTAINER</code>). A container path is
+        * formed by a first ID segment followed with extra segments, which can be
+        * used as additional hints for the resolution. The container ID is used to
+        * identify a <code>ClasspathContainerInitializer</code> registered on the
+        * extension point
+        * "net.sourceforge.phpdt.core.classpathContainerInitializer".
+        * <p>
+        * There is no assumption that each individual container value passed in
+        * argument (<code>respectiveContainers</code>) must answer the exact
+        * same path when requested <code>IClasspathContainer#getPath</code>.
+        * Indeed, the containerPath is just an indication for resolving it to an
+        * actual container object. It can be delegated to a
+        * <code>ClasspathContainerInitializer</code>, which can be activated
+        * through the extension point
+        * "net.sourceforge.phpdt.core.ClasspathContainerInitializer").
+        * <p>
+        * In reaction to changing container values, the JavaModel will be updated
+        * to reflect the new state of the updated container.
+        * <p>
+        * This functionality cannot be used while the resource tree is locked.
+        * <p>
+        * Classpath container values are persisted locally to the workspace, but
+        * are not preserved from a session to another. It is thus highly
+        * recommended to register a <code>ClasspathContainerInitializer</code>
+        * for each referenced container (through the extension point
+        * "net.sourceforge.phpdt.core.ClasspathContainerInitializer").
+        * <p>
+        * Note: setting a container to <code>null</code> will cause it to be
+        * lazily resolved again whenever its value is required. In particular, this
+        * will cause a registered initializer to be invoked again.
+        * <p>
+        * 
+        * @param containerPath -
+        *            the name of the container reference, which is being updated
+        * @param affectedProjects -
+        *            the set of projects for which this container is being bound
+        * @param respectiveContainers -
+        *            the set of respective containers for the affected projects
+        * @param monitor
+        *            a monitor to report progress
+        * 
+        * @see ClasspathContainerInitializer
+        * @see #getClasspathContainer(IPath, IJavaProject)
+        * @see IClasspathContainer
+        * @since 2.0
+        */
+       // public static void setClasspathContainer(final IPath containerPath,
+       // IJavaProject[] affectedProjects, IClasspathContainer[]
+       // respectiveContainers, IProgressMonitor monitor) throws JavaModelException
+       // {
+       //
+       // if (affectedProjects.length != respectiveContainers.length)
+       // Assert.isTrue(false, "Projects and containers collections should have the
+       // same size"); //$NON-NLS-1$
+       //      
+       // if (monitor != null && monitor.isCanceled()) return;
+       //      
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+       // System.out.println("CPContainer SET - setting container:
+       // ["+containerPath+"] for projects: {" //$NON-NLS-1$ //$NON-NLS-2$
+       // + (ProjectPrefUtil.toString(affectedProjects,
+       // new ProjectPrefUtil.Displayable(){
+       // public String displayString(Object o) { return ((IJavaProject)
+       // o).getElementName(); }
+       // }))
+       // + "} with values: " //$NON-NLS-1$
+       // + (ProjectPrefUtil.toString(respectiveContainers,
+       // new ProjectPrefUtil.Displayable(){
+       // public String displayString(Object o) { return ((IClasspathContainer)
+       // o).getDescription(); }
+       // }))
+       // );
+       // }
+       //
+       // final int projectLength = affectedProjects.length;
+       // final IJavaProject[] modifiedProjects;
+       // System.arraycopy(affectedProjects, 0, modifiedProjects = new
+       // IJavaProject[projectLength], 0, projectLength);
+       // final IClasspathEntry[][] oldResolvedPaths = new
+       // IClasspathEntry[projectLength][];
+       //                      
+       // // filter out unmodified project containers
+       // int remaining = 0;
+       // for (int i = 0; i < projectLength; i++){
+       //      
+       // if (monitor != null && monitor.isCanceled()) return;
+       //      
+       // IJavaProject affectedProject = affectedProjects[i];
+       // IClasspathContainer newContainer = respectiveContainers[i];
+       // if (newContainer == null) newContainer =
+       // JavaModelManager.ContainerInitializationInProgress; // 30920 - prevent
+       // infinite loop
+       // boolean found = false;
+       // if (JavaProject.hasJavaNature(affectedProject.getProject())){
+       // IClasspathEntry[] rawClasspath = affectedProject.getRawClasspath();
+       // for (int j = 0, cpLength = rawClasspath.length; j <cpLength; j++) {
+       // IClasspathEntry entry = rawClasspath[j];
+       // if (entry.getEntryKind() == IClasspathEntry.CPE_CONTAINER &&
+       // entry.getPath().equals(containerPath)){
+       // found = true;
+       // break;
+       // }
+       // }
+       // }
+       // if (!found){
+       // modifiedProjects[i] = null; // filter out this project - does not
+       // reference the container path, or isnt't yet Java project
+       // JavaModelManager.containerPut(affectedProject, containerPath,
+       // newContainer);
+       // continue;
+       // }
+       // IClasspathContainer oldContainer =
+       // JavaModelManager.containerGet(affectedProject, containerPath);
+       // if (oldContainer == JavaModelManager.ContainerInitializationInProgress) {
+       // Map previousContainerValues =
+       // (Map)JavaModelManager.PreviousSessionContainers.get(affectedProject);
+       // if (previousContainerValues != null){
+       // IClasspathContainer previousContainer =
+       // (IClasspathContainer)previousContainerValues.get(containerPath);
+       // if (previousContainer != null) {
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+       // System.out.println("CPContainer INIT - reentering access to project
+       // container: ["+affectedProject.getElementName()+"] " + containerPath + "
+       // during its initialization, will see previous value: "+
+       // previousContainer.getDescription()); //$NON-NLS-1$ //$NON-NLS-2$
+       // //$NON-NLS-3$
+       // }
+       // JavaModelManager.containerPut(affectedProject, containerPath,
+       // previousContainer);
+       // }
+       // oldContainer = null; //33695 - cannot filter out restored container, must
+       // update affected project to reset cached CP
+       // } else {
+       // oldContainer = null;
+       // }
+       // }
+       // if (oldContainer != null &&
+       // oldContainer.equals(respectiveContainers[i])){// TODO: could improve to
+       // only compare entries
+       // modifiedProjects[i] = null; // filter out this project - container did
+       // not change
+       // continue;
+       // }
+       // remaining++;
+       // oldResolvedPaths[i] = affectedProject.getResolvedClasspath(true);
+       // JavaModelManager.containerPut(affectedProject, containerPath,
+       // newContainer);
+       // }
+       //              
+       // if (remaining == 0) return;
+       //              
+       // // trigger model refresh
+       // try {
+       // JavaCore.run(new IWorkspaceRunnable() {
+       // public void run(IProgressMonitor monitor) throws CoreException {
+       // for(int i = 0; i < projectLength; i++){
+       //              
+       // if (monitor != null && monitor.isCanceled()) return;
+       //              
+       // JavaProject affectedProject = (JavaProject)modifiedProjects[i];
+       // if (affectedProject == null) continue; // was filtered out
+       //                                              
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+       // System.out.println("CPContainer SET - updating affected project:
+       // ["+affectedProject.getElementName()+"] due to setting container: " +
+       // containerPath); //$NON-NLS-1$ //$NON-NLS-2$
+       // }
+       //
+       // // force a refresh of the affected project (will compute deltas)
+       // affectedProject.setRawClasspath(
+       // affectedProject.getRawClasspath(),
+       // SetClasspathOperation.ReuseOutputLocation,
+       // monitor,
+       // !ResourcesPlugin.getWorkspace().isTreeLocked(), // can save resources
+       // oldResolvedPaths[i],
+       // false, // updating - no validation
+       // false); // updating - no need to save
+       // }
+       // }
+       // },
+       // monitor);
+       // } catch(CoreException e) {
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+       // System.out.println("CPContainer SET - FAILED DUE TO EXCEPTION:
+       // "+containerPath); //$NON-NLS-1$
+       // e.printStackTrace();
+       // }
+       // if (e instanceof JavaModelException) {
+       // throw (JavaModelException)e;
+       // } else {
+       // throw new JavaModelException(e);
+       // }
+       // } finally {
+       // for (int i = 0; i < projectLength; i++) {
+       // if (respectiveContainers[i] == null) {
+       // JavaModelManager.containerPut(affectedProjects[i], containerPath, null);
+       // // reset init in progress marker
+       // }
+       // }
+       // }
+       //                                      
+       // }
+       /**
+        * Sets the value of the given classpath variable. The path must have at
+        * least one segment.
+        * <p>
+        * This functionality cannot be used while the resource tree is locked.
+        * <p>
+        * Classpath variable values are persisted locally to the workspace, and are
+        * preserved from session to session.
+        * <p>
+        * 
+        * @param variableName
+        *            the name of the classpath variable
+        * @param path
+        *            the path
+        * @see #getClasspathVariable
+        * 
+        * @deprecated - use API with IProgressMonitor
+        */
+       // public static void setClasspathVariable(String variableName, IPath path)
+       // throws JavaModelException {
+       //
+       // setClasspathVariable(variableName, path, null);
+       // }
+       /**
+        * Sets the value of the given classpath variable. The path must not be
+        * null.
+        * <p>
+        * This functionality cannot be used while the resource tree is locked.
+        * <p>
+        * Classpath variable values are persisted locally to the workspace, and are
+        * preserved from session to session.
+        * <p>
+        * Updating a variable with the same value has no effect.
+        * 
+        * @param variableName
+        *            the name of the classpath variable
+        * @param path
+        *            the path
+        * @param monitor
+        *            a monitor to report progress
+        * @see #getClasspathVariable
+        */
+       // public static void setClasspathVariable(
+       // String variableName,
+       // IPath path,
+       // IProgressMonitor monitor)
+       // throws JavaModelException {
+       //
+       // if (path == null) Assert.isTrue(false, "Variable path cannot be null");
+       // //$NON-NLS-1$
+       // setClasspathVariables(new String[]{variableName}, new IPath[]{ path },
+       // monitor);
+       // }
+       /**
+        * Sets the values of all the given classpath variables at once. Null paths
+        * can be used to request corresponding variable removal.
+        * <p>
+        * This functionality cannot be used while the resource tree is locked.
+        * <p>
+        * Classpath variable values are persisted locally to the workspace, and are
+        * preserved from session to session.
+        * <p>
+        * Updating a variable with the same value has no effect.
+        * 
+        * @param variableNames
+        *            an array of names for the updated classpath variables
+        * @param paths
+        *            an array of path updates for the modified classpath variables
+        *            (null meaning that the corresponding value will be removed
+        * @param monitor
+        *            a monitor to report progress
+        * @see #getClasspathVariable
+        * @since 2.0
+        */
+       // public static void setClasspathVariables(
+       // String[] variableNames,
+       // IPath[] paths,
+       // IProgressMonitor monitor)
+       // throws JavaModelException {
+       //
+       // if (variableNames.length != paths.length) Assert.isTrue(false, "Variable
+       // names and paths collections should have the same size"); //$NON-NLS-1$
+       // //TODO: should check that null cannot be used as variable paths
+       // updateVariableValues(variableNames, paths, monitor);
+       // }
+       /*
+        * (non-Javadoc) Method declared on IExecutableExtension. Record any
+        * necessary initialization data from the plugin.
+        */
+       public void setInitializationData(IConfigurationElement cfig,
+                       String propertyName, Object data) throws CoreException {
+       }
+
+       /**
+        * Sets the current table of options. All and only the options explicitly
+        * included in the given table are remembered; all previous option settings
+        * are forgotten, including ones not explicitly mentioned.
+        * <p>
+        * For a complete description of the configurable options, see
+        * <code>getDefaultOptions</code>.
+        * </p>
+        * 
+        * @param newOptions
+        *            the new options (key type: <code>String</code>; value type:
+        *            <code>String</code>), or <code>null</code> to reset all
+        *            options to their default values
+        * @see JavaCore#getDefaultOptions
+        */
+       public static void setOptions(Hashtable newOptions) {
+
+               // see #initializeDefaultPluginPreferences() for changing default
+               // settings
+               Preferences preferences = getPlugin().getPluginPreferences();
+
+               if (newOptions == null) {
+                       newOptions = JavaCore.getDefaultOptions();
+               }
+               Enumeration keys = newOptions.keys();
+               while (keys.hasMoreElements()) {
+                       String key = (String) keys.nextElement();
+                       if (!JavaModelManager.OptionNames.contains(key))
+                               continue; // unrecognized option
+                       if (key.equals(CORE_ENCODING))
+                               continue; // skipped, contributed by resource prefs
+                       String value = (String) newOptions.get(key);
+                       preferences.setValue(key, value);
+               }
+
+               // persist options
+               getPlugin().savePluginPreferences();
+       }
+
+       /**
+        * Shutdown the JavaCore plug-in.
+        * <p>
+        * De-registers the JavaModelManager as a resource changed listener and save
+        * participant.
+        * <p>
+        * 
+        * @see org.eclipse.core.runtime.Plugin#shutdown()
+        */
+       // moved to PHPeclipsePlugin#shutdown()
+       // public void shutdown() {
+       //
+       // //savePluginPreferences();
+       // getPlugin().savePluginPreferences();
+       // IWorkspace workspace = ResourcesPlugin.getWorkspace();
+       // workspace.removeResourceChangeListener(JavaModelManager.getJavaModelManager().deltaProcessor);
+       // workspace.removeSaveParticipant(PHPeclipsePlugin.getDefault());
+       //
+       // ((JavaModelManager) JavaModelManager.getJavaModelManager()).shutdown();
+       // }
+       /**
+        * Initiate the background indexing process. This should be deferred after
+        * the plugin activation.
+        */
+       // private void startIndexing() {
+       //
+       // JavaModelManager.getJavaModelManager().getIndexManager().reset();
+       // }
+       /**
+        * Startup of the JavaCore plug-in.
+        * <p>
+        * Registers the JavaModelManager as a resource changed listener and save
+        * participant. Starts the background indexing, and restore saved classpath
+        * variable values.
+        * <p>
+        * 
+        * @see org.eclipse.core.runtime.Plugin#startup()
+        */
+
+       // moved to PHPeclipsePlugin#startup()
+       // public void startup() {
+       //              
+       // JavaModelManager manager = JavaModelManager.getJavaModelManager();
+       // try {
+       // manager.configurePluginDebugOptions();
+       //
+       // // request state folder creation (workaround 19885)
+       // JavaCore.getPlugin().getStateLocation();
+       //
+       // // retrieve variable values
+       // JavaCore.getPlugin().getPluginPreferences().addPropertyChangeListener(new
+       // JavaModelManager.PluginPreferencesListener());
+       // // TODO : jsurfer temp-del
+       // // manager.loadVariablesAndContainers();
+       //
+       // IWorkspace workspace = ResourcesPlugin.getWorkspace();
+       // workspace.addResourceChangeListener(
+       // manager.deltaProcessor,
+       // IResourceChangeEvent.PRE_AUTO_BUILD
+       // | IResourceChangeEvent.POST_AUTO_BUILD
+       // | IResourceChangeEvent.POST_CHANGE
+       // | IResourceChangeEvent.PRE_DELETE
+       // | IResourceChangeEvent.PRE_CLOSE);
+       //
+       // // startIndexing();
+       // workspace.addSaveParticipant(PHPeclipsePlugin.getDefault(), manager);
+       //                      
+       // } catch (CoreException e) {
+       // } catch (RuntimeException e) {
+       // manager.shutdown();
+       // throw e;
+       // }
+       // }
+       /**
+        * Internal updating of a variable values (null path meaning removal),
+        * allowing to change multiple variable values at once.
+        */
+       // private static void updateVariableValues(
+       // String[] variableNames,
+       // IPath[] variablePaths,
+       // IProgressMonitor monitor) throws JavaModelException {
+       //      
+       // if (monitor != null && monitor.isCanceled()) return;
+       //              
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+       // System.out.println("CPVariable SET - setting variables: {" +
+       // ProjectPrefUtil.toString(variableNames) //$NON-NLS-1$
+       // + "} with values: " + ProjectPrefUtil.toString(variablePaths));
+       // //$NON-NLS-1$
+       // }
+       //
+       // int varLength = variableNames.length;
+       //              
+       // // gather classpath information for updating
+       // final HashMap affectedProjects = new HashMap(5);
+       // JavaModelManager manager = JavaModelManager.getJavaModelManager();
+       // IJavaModel model = manager.getJavaModel();
+       //      
+       // // filter out unmodified variables
+       // int discardCount = 0;
+       // for (int i = 0; i < varLength; i++){
+       // String variableName = variableNames[i];
+       // IPath oldPath = (IPath)JavaModelManager.variableGet(variableName); // if
+       // reentering will provide previous session value
+       // if (oldPath == JavaModelManager.VariableInitializationInProgress){
+       // IPath previousPath =
+       // (IPath)JavaModelManager.PreviousSessionVariables.get(variableName);
+       // if (previousPath != null){
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+       // System.out.println("CPVariable INIT - reentering access to variable: " +
+       // variableName+ " during its initialization, will see previous value: "+
+       // previousPath); //$NON-NLS-1$ //$NON-NLS-2$
+       // }
+       // JavaModelManager.variablePut(variableName, previousPath); // replace
+       // value so reentering calls are seeing old value
+       // }
+       // oldPath = null; //33695 - cannot filter out restored variable, must
+       // update affected project to reset cached CP
+       // }
+       // if (oldPath != null && oldPath.equals(variablePaths[i])){
+       // variableNames[i] = null;
+       // discardCount++;
+       // }
+       // }
+       // if (discardCount > 0){
+       // if (discardCount == varLength) return;
+       // int changedLength = varLength - discardCount;
+       // String[] changedVariableNames = new String[changedLength];
+       // IPath[] changedVariablePaths = new IPath[changedLength];
+       // for (int i = 0, index = 0; i < varLength; i++){
+       // if (variableNames[i] != null){
+       // changedVariableNames[index] = variableNames[i];
+       // changedVariablePaths[index] = variablePaths[i];
+       // index++;
+       // }
+       // }
+       // variableNames = changedVariableNames;
+       // variablePaths = changedVariablePaths;
+       // varLength = changedLength;
+       // }
+       //              
+       // if (monitor != null && monitor.isCanceled()) return;
+       //
+       // if (model != null) {
+       // IJavaProject[] projects = model.getJavaProjects();
+       // nextProject : for (int i = 0, projectLength = projects.length; i <
+       // projectLength; i++){
+       // IJavaProject project = projects[i];
+       //                                              
+       // // check to see if any of the modified variables is present on the
+       // classpath
+       // IClasspathEntry[] classpath = project.getRawClasspath();
+       // for (int j = 0, cpLength = classpath.length; j < cpLength; j++){
+       //                                      
+       // IClasspathEntry entry = classpath[j];
+       // for (int k = 0; k < varLength; k++){
+       //      
+       // String variableName = variableNames[k];
+       // if (entry.getEntryKind() == IClasspathEntry.CPE_VARIABLE){
+       //      
+       // if (variableName.equals(entry.getPath().segment(0))){
+       // affectedProjects.put(project, project.getResolvedClasspath(true));
+       // continue nextProject;
+       // }
+       // IPath sourcePath, sourceRootPath;
+       // if (((sourcePath = entry.getSourceAttachmentPath()) != null &&
+       // variableName.equals(sourcePath.segment(0)))
+       // || ((sourceRootPath = entry.getSourceAttachmentRootPath()) != null &&
+       // variableName.equals(sourceRootPath.segment(0)))) {
+       //      
+       // affectedProjects.put(project, project.getResolvedClasspath(true));
+       // continue nextProject;
+       // }
+       // }
+       // }
+       // }
+       // }
+       // }
+       // // update variables
+       // for (int i = 0; i < varLength; i++){
+       // JavaModelManager.variablePut(variableNames[i], variablePaths[i]);
+       // }
+       // final String[] dbgVariableNames = variableNames;
+       //                              
+       // // update affected project classpaths
+       // if (!affectedProjects.isEmpty()) {
+       // try {
+       // JavaCore_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt_DeleteIt.run(
+       // new IWorkspaceRunnable() {
+       // public void run(IProgressMonitor monitor) throws CoreException {
+       // // propagate classpath change
+       // Iterator projectsToUpdate = affectedProjects.keySet().iterator();
+       // while (projectsToUpdate.hasNext()) {
+       //                      
+       // if (monitor != null && monitor.isCanceled()) return;
+       //                      
+       // JavaProject project = (JavaProject) projectsToUpdate.next();
+       //
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+       // System.out.println("CPVariable SET - updating affected project:
+       // ["+project.getElementName()+"] due to setting variables: "+
+       // ProjectPrefUtil.toString(dbgVariableNames)); //$NON-NLS-1$ //$NON-NLS-2$
+       // }
+       //                                                              
+       // project
+       // .setRawClasspath(
+       // project.getRawClasspath(),
+       // SetClasspathOperation.ReuseOutputLocation,
+       // null, // don't call beginTask on the monitor (see
+       // http://bugs.eclipse.org/bugs/show_bug.cgi?id=3717)
+       // !ResourcesPlugin.getWorkspace().isTreeLocked(), // can change resources
+       // (IClasspathEntry[]) affectedProjects.get(project),
+       // false, // updating - no validation
+       // false); // updating - no need to save
+       // }
+       // }
+       // },
+       // monitor);
+       // } catch (CoreException e) {
+       // if (JavaModelManager.CP_RESOLVE_VERBOSE){
+       // System.out.println("CPVariable SET - FAILED DUE TO EXCEPTION:
+       // "+ProjectPrefUtil.toString(dbgVariableNames)); //$NON-NLS-1$
+       // e.printStackTrace();
+       // }
+       // if (e instanceof JavaModelException) {
+       // throw (JavaModelException)e;
+       // } else {
+       // throw new JavaModelException(e);
+       // }
+       // }
+       // }
+       // }
+       /*
+        * (non-Javadoc) Startup the JavaCore plug-in. <p> Registers the
+        * JavaModelManager as a resource changed listener and save participant.
+        * Starts the background indexing, and restore saved classpath variable
+        * values. <p> @throws Exception
+        * 
+        * @see org.eclipse.core.runtime.Plugin#start(BundleContext)
+        */
+       // public static void start(final Plugin plugin, BundleContext context)
+       // throws Exception {
+       // // super.start(context);
+       //      
+       // final JavaModelManager manager = JavaModelManager.getJavaModelManager();
+       // try {
+       // manager.configurePluginDebugOptions();
+       //
+       // // request state folder creation (workaround 19885)
+       // JavaCore.getPlugin().getStateLocation();
+       //
+       // // retrieve variable values
+       // //JavaCore.getPlugin().getPluginPreferences().addPropertyChangeListener(new
+       // JavaModelManager.PluginPreferencesListener());
+       // // manager.loadVariablesAndContainers();
+       //
+       // final IWorkspace workspace = ResourcesPlugin.getWorkspace();
+       // workspace.addResourceChangeListener(
+       // manager.deltaState,
+       // IResourceChangeEvent.PRE_BUILD
+       // | IResourceChangeEvent.POST_BUILD
+       // | IResourceChangeEvent.POST_CHANGE
+       // | IResourceChangeEvent.PRE_DELETE
+       // | IResourceChangeEvent.PRE_CLOSE);
+       //
+       // // startIndexing();
+       //              
+       // // process deltas since last activated in indexer thread so that indexes
+       // are up-to-date.
+       // // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=38658
+       // Job processSavedState = new
+       // Job(ProjectPrefUtil.bind("savedState.jobName")) {
+       // //$NON-NLS-1$
+       // protected IStatus run(IProgressMonitor monitor) {
+       // try {
+       // // add save participant and process delta atomically
+       // // see https://bugs.eclipse.org/bugs/show_bug.cgi?id=59937
+       // workspace.run(
+       // new IWorkspaceRunnable() {
+       // public void run(IProgressMonitor progress) throws CoreException {
+       // // ISavedState savedState = workspace.addSaveParticipant(JavaCore.this,
+       // manager);
+       // ISavedState savedState = workspace.addSaveParticipant(plugin, manager);
+       // if (savedState != null) {
+       // // the event type coming from the saved state is always POST_AUTO_BUILD
+       // // force it to be POST_CHANGE so that the delta processor can handle it
+       // manager.deltaState.getDeltaProcessor().overridenEventType =
+       // IResourceChangeEvent.POST_CHANGE;
+       // savedState.processResourceChangeEvents(manager.deltaState);
+       // }
+       // }
+       // },
+       // monitor);
+       // } catch (CoreException e) {
+       // return e.getStatus();
+       // }
+       // return Status.OK_STATUS;
+       // }
+       // };
+       // processSavedState.setSystem(true);
+       // processSavedState.setPriority(Job.SHORT); // process asap
+       // processSavedState.schedule();
+       // } catch (RuntimeException e) {
+       // manager.shutdown();
+       // throw e;
+       // }
+       // }
+       /*
+        * (non-Javadoc) Shutdown the JavaCore plug-in. <p> De-registers the
+        * JavaModelManager as a resource changed listener and save participant. <p>
+        * 
+        * @see org.eclipse.core.runtime.Plugin#stop(BundleContext)
+        */
+       // public static void stop(Plugin plugin, BundleContext context)
+       // throws Exception {
+       // try {
+       // plugin.savePluginPreferences();
+       // IWorkspace workspace = ResourcesPlugin.getWorkspace();
+       // workspace.removeResourceChangeListener(JavaModelManager
+       // .getJavaModelManager().deltaState);
+       // workspace.removeSaveParticipant(plugin);
+       //
+       // JavaModelManager.getJavaModelManager().shutdown();
+       // } finally {
+       // // ensure we call super.stop as the last thing
+       // // super.stop(context);
+       // }
+       // }
 }
\ No newline at end of file