X-Git-Url: http://git.phpeclipse.com diff --git a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaCore.java b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaCore.java index 3797518..47e6e39 100644 --- a/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaCore.java +++ b/net.sourceforge.phpeclipse/src/net/sourceforge/phpdt/core/JavaCore.java @@ -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 * "net.sourceforge.phpeclipse") */ - // 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. * *
-	 * 
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.debug.localVariable"
-	 *      - possible values:   { "generate", "do not generate" }
-	 *      - default:           "generate"
-	 * 
-	 *  COMPILER / Generating Line Number Debug Attribute 
-	 *     When generated, this attribute will enable source code highlighting in debugger 
-	 *     (.class file is then bigger).
-	 *      - option id:         "org.phpeclipse.phpdt.core.compiler.debug.lineNumber"
-	 *      - possible values:   { "generate", "do not generate" }
-	 *      - default:           "generate"
-	 *     
-	 *  COMPILER / Generating Source Debug Attribute 
-	 *     When generated, this attribute will enable the debugger to present the 
-	 *     corresponding source code.
-	 *      - option id:         "org.phpeclipse.phpdt.core.compiler.debug.sourceFile"
-	 *      - possible values:   { "generate", "do not generate" }
-	 *      - default:           "generate"
-	 *     
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.codegen.unusedLocal"
-	 *      - possible values:   { "preserve", "optimize out" }
-	 *      - default:           "preserve"
-	 *  
-	 *  COMPILER / Defining Target Java Platform
-	 *     For binary compatibility reason, .class files can be tagged to with certain VM versions and later.
-	 *     Note that "1.4" target require to toggle compliance mode to "1.4" too.
-	 *      - option id:         "org.phpeclipse.phpdt.core.compiler.codegen.targetPlatform"
-	 *      - possible values:   { "1.1", "1.2", "1.3", "1.4" }
-	 *      - default:           "1.1"
-	 * 
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.problem.unreachableCode"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "error"
-	 * 
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.problem.invalidImport"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "error"
-	 * 
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.problem.overridingPackageDefaultMethod"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 * 
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.problem.methodWithConstructorName"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 * 
-	 *  COMPILER / Reporting Deprecation
-	 *     When enabled, the compiler will signal use of deprecated API either as an 
-	 *     error or a warning.
-	 *      - option id:         "org.phpeclipse.phpdt.core.compiler.problem.deprecation"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 * 
-	 *  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 "org.phpeclipse.phpdt.core.compiler.problem.deprecation".
-	 *      - option id:         "org.phpeclipse.phpdt.core.compiler.problem.deprecationInDeprecatedCode"
-	 *      - possible values:   { "enabled", "disabled" }
-	 *      - default:           "disabled"
-	 * 
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.problem.hiddenCatchBlock"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 * 
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.problem.unusedLocal"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "ignore"
-	 * 
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.problem.unusedParameter"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "ignore"
-	 * 
-	 *  COMPILER / Reporting Unused Import
-	 *     When enabled, the compiler will issue an error or a warning for unused import 
-	 *     reference 
-	 *      - option id:         "org.phpeclipse.phpdt.core.compiler.problem.unusedImport"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 * 
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.problem.syntheticAccessEmulation"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "ignore"
-	 * 
-	 *  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-<n>$). 
-	 *      - option id:         "org.phpeclipse.phpdt.core.compiler.problem.nonExternalizedStringLiteral"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "ignore"
-	 *  
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.problem.assertIdentifier"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "ignore"
-	 *  
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.problem.staticAccessReceiver"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 *  
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.problem.noEffectAssignment"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 *  
-	 *  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 "1.4" and the compliance mode should be "1.4".
-	 *      - option id:         "org.phpeclipse.phpdt.core.compiler.source"
-	 *      - possible values:   { "1.3", "1.4" }
-	 *      - default:           "1.3"
-	 *  
-	 *  COMPILER / Setting Compliance Level
-	 *     Select the compliance level for the compiler. In "1.3" mode, source and target settings
-	 *     should not go beyond "1.3" level.
-	 *      - option id:         "org.phpeclipse.phpdt.core.compiler.compliance"
-	 *      - possible values:   { "1.3", "1.4" }
-	 *      - default:           "1.3"
-	 *  
-	 *  COMPILER / Maximum number of problems reported per compilation unit
-	 *     Specify the maximum number of problems reported on each compilation unit.
-	 *      - option id:         "org.phpeclipse.phpdt.core.compiler.maxProblemPerUnit"
-	 *      - possible values:	"<n>" where <n> is zero or a positive integer (if zero then all problems are reported).
-	 *      - default:           "100"
-	 *  
-	 *  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:         "org.phpeclipse.phpdt.core.compiler.taskTags"
-	 *      - possible values:   { "<tag>[,<tag>]*" } where <tag> is a String without any wild-card 
-	 *      - default:           ""
-	 *  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 "NORMAL".
-	 *      - option id:         "org.phpeclipse.phpdt.core.compiler.taskPriorities"
-	 *      - possible values:   { "<priority>[,<priority>]*" } where <priority> is one of "HIGH", "NORMAL" or "LOW"
-	 *      - default:           ""
-	 *  
-	 *  BUILDER / Specifying Filters for Resource Copying Control
-	 *     Allow to specify some filters to control the resource copy process.
-	 *      - option id:         "org.phpeclipse.phpdt.core.builder.resourceCopyExclusionFilter"
-	 *      - possible values:   { "<name>[,<name>]* } where <name> is a file name pattern (* and ? wild-cards allowed)
-	 *        or the name of a folder which ends with '/'
-	 *      - default:           ""
-	 *  
-	 *  BUILDER / Abort if Invalid Classpath
-	 *     Allow to toggle the builder to abort if the classpath is invalid
-	 *      - option id:         "org.phpeclipse.phpdt.core.builder.invalidClasspath"
-	 *      - possible values:   { "abort", "ignore" }
-	 *      - default:           "ignore"
-	 *  
-	 *  BUILDER / Cleaning Output Folder(s)
-	 *     Indicate whether the JavaBuilder is allowed to clean the output folders
-	 *     when performing full build operations.
-	 *      - option id:         "org.phpeclipse.phpdt.core.builder.cleanOutputFolder"
-	 *      - possible values:   { "clean", "ignore" }
-	 *      - default:           "clean"
-	 *  
-	 *  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:         "org.phpeclipse.phpdt.core.computeJavaBuildOrder"
-	 *      - possible values:   { "compute", "ignore" }
-	 *      - default:           "ignore"	 
-	 *  
-	 *  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:         "org.phpeclipse.phpdt.core.encoding"
-	 *      - possible values:   { any of the supported encoding name}.
-	 *      - default:           <platform default>
-	 *  
-	 *  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:         "org.phpeclipse.phpdt.core.incompleteClasspath"
-	 *      - possible values:   { "error", "warning"}
-	 *      - default:           "error"
-	 *  
-	 *  JAVACORE / Reporting Classpath Cycle
-	 *     A project is involved in a cycle.
-	 *      - option id:         "org.phpeclipse.phpdt.core.circularClasspath"
-	 *      - possible values:   { "error", "warning" }
-	 *      - default:           "error"
-	 *  
-	 * 	FORMATTER / Inserting New Line Before Opening Brace
-	 *     When Insert, a new line is inserted before an opening brace, otherwise nothing
-	 *     is inserted
-	 *      - option id:         "org.phpeclipse.phpdt.core.formatter.newline.openingBrace"
-	 *      - possible values:   { "insert", "do not insert" }
-	 *      - default:           "do not insert"
 	 *  
-	 * 	FORMATTER / Inserting New Line Inside Control Statement
-	 *     When Insert, a new line is inserted between } and following else, catch, finally
-	 *      - option id:         "org.phpeclipse.phpdt.core.formatter.newline.controlStatement"
-	 *      - possible values:   { "insert", "do not insert" }
-	 *      - default:           "do not insert"
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.debug.localVariable"
+	 *       - possible values:   { "generate", "do not generate" }
+	 *       - default:           "generate"
 	 *  
-	 * 	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:         "org.phpeclipse.phpdt.core.formatter.newline.clearAll"
-	 *      - possible values:   { "clear all", "preserve one" }
-	 *      - default:           "preserve one"
+	 *   COMPILER / Generating Line Number Debug Attribute 
+	 *      When generated, this attribute will enable source code highlighting in debugger 
+	 *      (.class file is then bigger).
+	 *       - option id:         "org.phpeclipse.phpdt.core.compiler.debug.lineNumber"
+	 *       - possible values:   { "generate", "do not generate" }
+	 *       - default:           "generate"
+	 *      
+	 *   COMPILER / Generating Source Debug Attribute 
+	 *      When generated, this attribute will enable the debugger to present the 
+	 *      corresponding source code.
+	 *       - option id:         "org.phpeclipse.phpdt.core.compiler.debug.sourceFile"
+	 *       - possible values:   { "generate", "do not generate" }
+	 *       - default:           "generate"
+	 *      
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.codegen.unusedLocal"
+	 *       - possible values:   { "preserve", "optimize out" }
+	 *       - default:           "preserve"
+	 *   
+	 *   COMPILER / Defining Target Java Platform
+	 *      For binary compatibility reason, .class files can be tagged to with certain VM versions and later.
+	 *      Note that "1.4" target require to toggle compliance mode to "1.4" too.
+	 *       - option id:         "org.phpeclipse.phpdt.core.compiler.codegen.targetPlatform"
+	 *       - possible values:   { "1.1", "1.2", "1.3", "1.4" }
+	 *       - default:           "1.1"
 	 *  
-	 * 	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:         "org.phpeclipse.phpdt.core.formatter.newline.elseIf"
-	 *      - possible values:   { "insert", "do not insert" }
-	 *      - default:           "do not insert"
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.problem.unreachableCode"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "error"
 	 *  
-	 * 	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:         "org.phpeclipse.phpdt.core.formatter.newline.emptyBlock"
-	 *      - possible values:   { "insert", "do not insert" }
-	 *      - default:           "insert"
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.problem.invalidImport"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "error"
 	 *  
-	 * 	FORMATTER / Splitting Lines Exceeding Length
-	 *     Enable splitting of long lines (exceeding the configurable length). Length of 0 will
-	 *     disable line splitting
-	 *      - option id:         "org.phpeclipse.phpdt.core.formatter.lineSplit"
-	 *      - possible values:	"<n>", where n is zero or a positive integer
-	 *      - default:           "80"
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.problem.overridingPackageDefaultMethod"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
 	 *  
-	 * 	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:         "org.phpeclipse.phpdt.core.formatter.style.assignment"
-	 *      - possible values:   { "compact", "normal" }
-	 *      - default:           "normal"
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.problem.methodWithConstructorName"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
 	 *  
-	 * 	FORMATTER / Defining Indentation Character
-	 *     Either choose to indent with tab characters or spaces
-	 *      - option id:         "org.phpeclipse.phpdt.core.formatter.tabulation.char"
-	 *      - possible values:   { "tab", "space" }
-	 *      - default:           "tab"
+	 *   COMPILER / Reporting Deprecation
+	 *      When enabled, the compiler will signal use of deprecated API either as an 
+	 *      error or a warning.
+	 *       - option id:         "org.phpeclipse.phpdt.core.compiler.problem.deprecation"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
 	 *  
-	 * 	FORMATTER / Defining Space Indentation Length
-	 *     When using spaces, set the amount of space characters to use for each 
-	 *     indentation mark.
-	 *      - option id:         "org.phpeclipse.phpdt.core.formatter.tabulation.size"
-	 *      - possible values:	"<n>", where n is a positive integer
-	 *      - default:           "4"
+	 *   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 "org.phpeclipse.phpdt.core.compiler.problem.deprecation".
+	 *       - option id:         "org.phpeclipse.phpdt.core.compiler.problem.deprecationInDeprecatedCode"
+	 *       - possible values:   { "enabled", "disabled" }
+	 *       - default:           "disabled"
 	 *  
-	 * 	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:         "org.phpeclipse.phpdt.core.codeComplete.visibilityCheck"
-	 *      - possible values:   { "enabled", "disabled" }
-	 *      - default:           "disabled"
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.problem.hiddenCatchBlock"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
 	 *  
-	 * 	CODEASSIST / Automatic Qualification of Implicit Members
-	 *     When active, completion automatically qualifies completion on implicit
-	 *     field references and message expressions.
-	 *      - option id:         "org.phpeclipse.phpdt.core.codeComplete.forceImplicitQualification"
-	 *      - possible values:   { "enabled", "disabled" }
-	 *      - default:           "disabled"
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.problem.unusedLocal"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "ignore"
 	 *  
-	 *   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:         "org.phpeclipse.phpdt.core.codeComplete.fieldPrefixes"
-	 *      - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
-	 *      - default:           ""
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.problem.unusedParameter"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "ignore"
 	 *  
-	 *   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:         "org.phpeclipse.phpdt.core.codeComplete.staticFieldPrefixes"
-	 *      - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
-	 *      - default:           ""
+	 *   COMPILER / Reporting Unused Import
+	 *      When enabled, the compiler will issue an error or a warning for unused import 
+	 *      reference 
+	 *       - option id:         "org.phpeclipse.phpdt.core.compiler.problem.unusedImport"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
 	 *  
-	 *   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:         "org.phpeclipse.phpdt.core.codeComplete.localPrefixes"
-	 *      - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
-	 *      - default:           ""
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.problem.syntheticAccessEmulation"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "ignore"
 	 *  
-	 *   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:         "org.phpeclipse.phpdt.core.codeComplete.argumentPrefixes"
-	 *      - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  
-	 *   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:         "org.phpeclipse.phpdt.core.codeComplete.fieldSuffixes"
-	 *      - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  
-	 *   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:         "org.phpeclipse.phpdt.core.codeComplete.staticFieldSuffixes"
-	 *      - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  
-	 *   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:         "org.phpeclipse.phpdt.core.codeComplete.localSuffixes"
-	 *      - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  
-	 *   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:         "org.phpeclipse.phpdt.core.codeComplete.argumentSuffixes"
-	 *      - possible values:   { "<suffix>[,<suffix>]*" } where <prefix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  </pre>
-	 *  
-	 *  @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-<n>$). 
+	 *       - option id:         "org.phpeclipse.phpdt.core.compiler.problem.nonExternalizedStringLiteral"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "ignore"
+	 *   
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.problem.assertIdentifier"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "ignore"
+	 *   
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.problem.staticAccessReceiver"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
+	 *   
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.problem.noEffectAssignment"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
+	 *   
+	 *   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 "1.4" and the compliance mode should be "1.4".
+	 *       - option id:         "org.phpeclipse.phpdt.core.compiler.source"
+	 *       - possible values:   { "1.3", "1.4" }
+	 *       - default:           "1.3"
+	 *   
+	 *   COMPILER / Setting Compliance Level
+	 *      Select the compliance level for the compiler. In "1.3" mode, source and target settings
+	 *      should not go beyond "1.3" level.
+	 *       - option id:         "org.phpeclipse.phpdt.core.compiler.compliance"
+	 *       - possible values:   { "1.3", "1.4" }
+	 *       - default:           "1.3"
+	 *   
+	 *   COMPILER / Maximum number of problems reported per compilation unit
+	 *      Specify the maximum number of problems reported on each compilation unit.
+	 *       - option id:         "org.phpeclipse.phpdt.core.compiler.maxProblemPerUnit"
+	 *       - possible values:	"<n>" where <n> is zero or a positive integer (if zero then all problems are reported).
+	 *       - default:           "100"
+	 *   
+	 *   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:         "org.phpeclipse.phpdt.core.compiler.taskTags"
+	 *       - possible values:   { "<tag>[,<tag>]*" } where <tag> is a String without any wild-card 
+	 *       - default:           ""
+	 *   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 "NORMAL".
+	 *       - option id:         "org.phpeclipse.phpdt.core.compiler.taskPriorities"
+	 *       - possible values:   { "<priority>[,<priority>]*" } where <priority> is one of "HIGH", "NORMAL" or "LOW"
+	 *       - default:           ""
+	 *   
+	 *   BUILDER / Specifying Filters for Resource Copying Control
+	 *      Allow to specify some filters to control the resource copy process.
+	 *       - option id:         "org.phpeclipse.phpdt.core.builder.resourceCopyExclusionFilter"
+	 *       - possible values:   { "<name>[,<name>]* } where <name> is a file name pattern (* and ? wild-cards allowed)
+	 *         or the name of a folder which ends with '/'
+	 *       - default:           ""
+	 *   
+	 *   BUILDER / Abort if Invalid Classpath
+	 *      Allow to toggle the builder to abort if the classpath is invalid
+	 *       - option id:         "org.phpeclipse.phpdt.core.builder.invalidClasspath"
+	 *       - possible values:   { "abort", "ignore" }
+	 *       - default:           "ignore"
+	 *   
+	 *   BUILDER / Cleaning Output Folder(s)
+	 *      Indicate whether the JavaBuilder is allowed to clean the output folders
+	 *      when performing full build operations.
+	 *       - option id:         "org.phpeclipse.phpdt.core.builder.cleanOutputFolder"
+	 *       - possible values:   { "clean", "ignore" }
+	 *       - default:           "clean"
+	 *   
+	 *   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:         "org.phpeclipse.phpdt.core.computeJavaBuildOrder"
+	 *       - possible values:   { "compute", "ignore" }
+	 *       - default:           "ignore"	 
+	 *   
+	 *   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:         "org.phpeclipse.phpdt.core.encoding"
+	 *       - possible values:   { any of the supported encoding name}.
+	 *       - default:           <platform default>
+	 *   
+	 *   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:         "org.phpeclipse.phpdt.core.incompleteClasspath"
+	 *       - possible values:   { "error", "warning"}
+	 *       - default:           "error"
+	 *   
+	 *   JAVACORE / Reporting Classpath Cycle
+	 *      A project is involved in a cycle.
+	 *       - option id:         "org.phpeclipse.phpdt.core.circularClasspath"
+	 *       - possible values:   { "error", "warning" }
+	 *       - default:           "error"
+	 *   
+	 *  	FORMATTER / Inserting New Line Before Opening Brace
+	 *      When Insert, a new line is inserted before an opening brace, otherwise nothing
+	 *      is inserted
+	 *       - option id:         "org.phpeclipse.phpdt.core.formatter.newline.openingBrace"
+	 *       - possible values:   { "insert", "do not insert" }
+	 *       - default:           "do not insert"
+	 *   
+	 *  	FORMATTER / Inserting New Line Inside Control Statement
+	 *      When Insert, a new line is inserted between } and following else, catch, finally
+	 *       - option id:         "org.phpeclipse.phpdt.core.formatter.newline.controlStatement"
+	 *       - possible values:   { "insert", "do not insert" }
+	 *       - default:           "do not insert"
+	 *   
+	 *  	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:         "org.phpeclipse.phpdt.core.formatter.newline.clearAll"
+	 *       - possible values:   { "clear all", "preserve one" }
+	 *       - default:           "preserve one"
+	 *   
+	 *  	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:         "org.phpeclipse.phpdt.core.formatter.newline.elseIf"
+	 *       - possible values:   { "insert", "do not insert" }
+	 *       - default:           "do not insert"
+	 *   
+	 *  	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:         "org.phpeclipse.phpdt.core.formatter.newline.emptyBlock"
+	 *       - possible values:   { "insert", "do not insert" }
+	 *       - default:           "insert"
+	 *   
+	 *  	FORMATTER / Splitting Lines Exceeding Length
+	 *      Enable splitting of long lines (exceeding the configurable length). Length of 0 will
+	 *      disable line splitting
+	 *       - option id:         "org.phpeclipse.phpdt.core.formatter.lineSplit"
+	 *       - possible values:	"<n>", where n is zero or a positive integer
+	 *       - default:           "80"
+	 *   
+	 *  	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:         "org.phpeclipse.phpdt.core.formatter.style.assignment"
+	 *       - possible values:   { "compact", "normal" }
+	 *       - default:           "normal"
+	 *   
+	 *  	FORMATTER / Defining Indentation Character
+	 *      Either choose to indent with tab characters or spaces
+	 *       - option id:         "org.phpeclipse.phpdt.core.formatter.tabulation.char"
+	 *       - possible values:   { "tab", "space" }
+	 *       - default:           "tab"
+	 *   
+	 *  	FORMATTER / Defining Space Indentation Length
+	 *      When using spaces, set the amount of space characters to use for each 
+	 *      indentation mark.
+	 *       - option id:         "org.phpeclipse.phpdt.core.formatter.tabulation.size"
+	 *       - possible values:	"<n>", where n is a positive integer
+	 *       - default:           "4"
+	 *   
+	 *  	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:         "org.phpeclipse.phpdt.core.codeComplete.visibilityCheck"
+	 *       - possible values:   { "enabled", "disabled" }
+	 *       - default:           "disabled"
+	 *   
+	 *  	CODEASSIST / Automatic Qualification of Implicit Members
+	 *      When active, completion automatically qualifies completion on implicit
+	 *      field references and message expressions.
+	 *       - option id:         "org.phpeclipse.phpdt.core.codeComplete.forceImplicitQualification"
+	 *       - possible values:   { "enabled", "disabled" }
+	 *       - default:           "disabled"
+	 *   
+	 *    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:         "org.phpeclipse.phpdt.core.codeComplete.fieldPrefixes"
+	 *       - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "org.phpeclipse.phpdt.core.codeComplete.staticFieldPrefixes"
+	 *       - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "org.phpeclipse.phpdt.core.codeComplete.localPrefixes"
+	 *       - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "org.phpeclipse.phpdt.core.codeComplete.argumentPrefixes"
+	 *       - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "org.phpeclipse.phpdt.core.codeComplete.fieldSuffixes"
+	 *       - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "org.phpeclipse.phpdt.core.codeComplete.staticFieldSuffixes"
+	 *       - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "org.phpeclipse.phpdt.core.codeComplete.localSuffixes"
+	 *       - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "org.phpeclipse.phpdt.core.codeComplete.argumentSuffixes"
+	 *       - possible values:   { "<suffix>[,<suffix>]*" } where <prefix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   </pre>
+	 *   
+	 *   @return a mutable table containing the default settings of all known options
+	 *     (key type: 
 	 * 
 	 * String
 	 * 
-	 * ; value type: 
+	 *  ; value type: 
 	 * 
 	 * String
 	 * 
-	 * )
-	 *  @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
 	 * (String)JavaCore.getOptions().get(optionName) 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 {
 	 *         String; value type: String)
 	 * @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.
 	 * 

@@ -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. *

* Has no effect if an identical listener is already registered. *

* - * @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 IJavaElement.getHandleIdentifier(), or - * null if unable to create the associated element. - * If the returned Java element is an ICompilationUnit, 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 IJavaElement.getHandleIdentifier(), + * or null if unable to create the associated element. If the + * returned Java element is an ICompilationUnit, 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 * null 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 .class file, or * null 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 * .java file. Returns null 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 null 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". *

* 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 null 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 null * if unable to bind. @@ -2023,10 +2030,10 @@ public class JavaCore { *

* 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 null 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". *

* * @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. * *

-	 * 
-	 *  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:         "net.sourceforge.phpdt.core.compiler.debug.localVariable"
-	 *      - possible values:   { "generate", "do not generate" }
-	 *      - default:           "generate"
-	 * 
-	 *  COMPILER / Generating Line Number Debug Attribute 
-	 *     When generated, this attribute will enable source code highlighting in debugger 
-	 *     (.class file is then bigger).
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.debug.lineNumber"
-	 *      - possible values:   { "generate", "do not generate" }
-	 *      - default:           "generate"
-	 *     
-	 *  COMPILER / Generating Source Debug Attribute 
-	 *     When generated, this attribute will enable the debugger to present the 
-	 *     corresponding source code.
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.debug.sourceFile"
-	 *      - possible values:   { "generate", "do not generate" }
-	 *      - default:           "generate"
-	 *     
-	 *  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:         "net.sourceforge.phpdt.core.compiler.codegen.unusedLocal"
-	 *      - possible values:   { "preserve", "optimize out" }
-	 *      - default:           "preserve"
-	 *  
-	 *  COMPILER / Defining Target Java Platform
-	 *     For binary compatibility reason, .class files can be tagged to with certain VM versions and later.
-	 *     Note that "1.4" target require to toggle compliance mode to "1.4" too.
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.codegen.targetPlatform"
-	 *      - possible values:   { "1.1", "1.2", "1.3", "1.4" }
-	 *      - default:           "1.1"
-	 * 
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.unreachableCode"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "error"
-	 * 
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.invalidImport"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "error"
-	 * 
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.overridingPackageDefaultMethod"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 * 
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.methodWithConstructorName"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 * 
-	 *  COMPILER / Reporting Deprecation
-	 *     When enabled, the compiler will signal use of deprecated API either as an 
-	 *     error or a warning.
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.problem.deprecation"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 * 
-	 *  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 "net.sourceforge.phpdt.core.compiler.problem.deprecation".
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.problem.deprecationInDeprecatedCode"
-	 *      - possible values:   { "enabled", "disabled" }
-	 *      - default:           "disabled"
-	 * 
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.hiddenCatchBlock"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 * 
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.unusedLocal"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "ignore"
-	 * 
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.unusedParameter"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "ignore"
-	 * 
-	 *  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 "net.sourceforge.phpdt.core.compiler.problem.unusedParameter".
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.problem.unusedParameterWhenImplementingAbstract"
-	 *      - possible values:   { "enabled", "disabled" }
-	 *      - default:           "disabled"
-	 * 
-	 *  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 "net.sourceforge.phpdt.core.compiler.problem.unusedParameter".
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.problem.unusedParameterWhenOverridingConcrete"
-	 *      - possible values:   { "enabled", "disabled" }
-	 *      - default:           "disabled"
-	 * 
-	 *  COMPILER / Reporting Unused Import
-	 *     When enabled, the compiler will issue an error or a warning for unused import 
-	 *     reference 
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.problem.unusedImport"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 * 
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.unusedPrivateMember"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "ignore"
-	 * 
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.syntheticAccessEmulation"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "ignore"
-	 * 
-	 *  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-<n>$). 
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.problem.nonExternalizedStringLiteral"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "ignore"
-	 *  
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.assertIdentifier"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "ignore"
-	 *  
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.staticAccessReceiver"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 *  
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.noEffectAssignment"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 *  
-	 *  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:         "net.sourceforge.phpdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 *  
-	 *  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, "hello" + new char[]{'w','o','r','l','d'}).
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.problem.noImplicitStringConversion"
-	 *      - possible values:   { "error", "warning", "ignore" }
-	 *      - default:           "warning"
-	 * 
-	 *  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 "1.4" and the compliance mode should be "1.4".
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.source"
-	 *      - possible values:   { "1.3", "1.4" }
-	 *      - default:           "1.3"
-	 *  
-	 *  COMPILER / Setting Compliance Level
-	 *     Select the compliance level for the compiler. In "1.3" mode, source and target settings
-	 *     should not go beyond "1.3" level.
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.compliance"
-	 *      - possible values:   { "1.3", "1.4" }
-	 *      - default:           "1.3"
-	 *  
-	 *  COMPILER / Maximum number of problems reported per compilation unit
-	 *     Specify the maximum number of problems reported on each compilation unit.
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.maxProblemPerUnit"
-	 *      - possible values:	"<n>" where <n> is zero or a positive integer (if zero then all problems are reported).
-	 *      - default:           "100"
 	 *  
-	 *  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:         "net.sourceforge.phpdt.core.compiler.taskTags"
-	 *      - possible values:   { "<tag>[,<tag>]*" } where <tag> is a String without any wild-card or leading/trailing spaces 
-	 *      - default:           ""
+	 *   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:         "net.sourceforge.phpdt.core.compiler.debug.localVariable"
+	 *       - possible values:   { "generate", "do not generate" }
+	 *       - default:           "generate"
 	 *  
-	 *  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 "NORMAL".
-	 *      - option id:         "net.sourceforge.phpdt.core.compiler.taskPriorities"
-	 *      - possible values:   { "<priority>[,<priority>]*" } where <priority> is one of "HIGH", "NORMAL" or "LOW"
-	 *      - default:           ""
-	 * 
-	 *  BUILDER / Specifying Filters for Resource Copying Control
-	 *     Allow to specify some filters to control the resource copy process.
-	 *      - option id:         "net.sourceforge.phpdt.core.builder.resourceCopyExclusionFilter"
-	 *      - possible values:   { "<name>[,<name>]* } where <name> is a file name pattern (* and ? wild-cards allowed)
-	 *        or the name of a folder which ends with '/'
-	 *      - default:           ""
+	 *   COMPILER / Generating Line Number Debug Attribute 
+	 *      When generated, this attribute will enable source code highlighting in debugger 
+	 *      (.class file is then bigger).
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.debug.lineNumber"
+	 *       - possible values:   { "generate", "do not generate" }
+	 *       - default:           "generate"
+	 *      
+	 *   COMPILER / Generating Source Debug Attribute 
+	 *      When generated, this attribute will enable the debugger to present the 
+	 *      corresponding source code.
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.debug.sourceFile"
+	 *       - possible values:   { "generate", "do not generate" }
+	 *       - default:           "generate"
+	 *      
+	 *   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:         "net.sourceforge.phpdt.core.compiler.codegen.unusedLocal"
+	 *       - possible values:   { "preserve", "optimize out" }
+	 *       - default:           "preserve"
+	 *   
+	 *   COMPILER / Defining Target Java Platform
+	 *      For binary compatibility reason, .class files can be tagged to with certain VM versions and later.
+	 *      Note that "1.4" target require to toggle compliance mode to "1.4" too.
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.codegen.targetPlatform"
+	 *       - possible values:   { "1.1", "1.2", "1.3", "1.4" }
+	 *       - default:           "1.1"
 	 *  
-	 *  BUILDER / Abort if Invalid Classpath
-	 *     Allow to toggle the builder to abort if the classpath is invalid
-	 *      - option id:         "net.sourceforge.phpdt.core.builder.invalidClasspath"
-	 *      - possible values:   { "abort", "ignore" }
-	 *      - default:           "abort"
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.unreachableCode"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "error"
 	 *  
-	 *  BUILDER / Cleaning Output Folder(s)
-	 *     Indicate whether the JavaBuilder is allowed to clean the output folders
-	 *     when performing full build operations.
-	 *      - option id:         "net.sourceforge.phpdt.core.builder.cleanOutputFolder"
-	 *      - possible values:   { "clean", "ignore" }
-	 *      - default:           "clean"
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.invalidImport"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "error"
 	 *  
-	 *  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:         "net.sourceforge.phpdt.core.builder.duplicateResourceTask"
-	 *      - possible values:   { "error", "warning" }
-	 *      - default:           "warning"
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.overridingPackageDefaultMethod"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
 	 *  
-	 *  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:         "net.sourceforge.phpdt.core.computeJavaBuildOrder"
-	 *      - possible values:   { "compute", "ignore" }
-	 *      - default:           "ignore"	 
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.methodWithConstructorName"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
 	 *  
-	 *  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:         "net.sourceforge.phpdt.core.encoding"
-	 *      - possible values:   { any of the supported encoding name}.
-	 *      - default:           <platform default>
+	 *   COMPILER / Reporting Deprecation
+	 *      When enabled, the compiler will signal use of deprecated API either as an 
+	 *      error or a warning.
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.problem.deprecation"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
 	 *  
-	 *  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:         "net.sourceforge.phpdt.core.incompleteClasspath"
-	 *      - possible values:   { "error", "warning"}
-	 *      - default:           "error"
+	 *   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 "net.sourceforge.phpdt.core.compiler.problem.deprecation".
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.problem.deprecationInDeprecatedCode"
+	 *       - possible values:   { "enabled", "disabled" }
+	 *       - default:           "disabled"
 	 *  
-	 *  JAVACORE / Reporting Classpath Cycle
-	 *     Indicate the severity of the problem reported when a project is involved in a cycle.
-	 *      - option id:         "net.sourceforge.phpdt.core.circularClasspath"
-	 *      - possible values:   { "error", "warning" }
-	 *      - default:           "error"
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.hiddenCatchBlock"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
 	 *  
-	 *  JAVACORE / Enabling Usage of Classpath Exclusion Patterns
-	 *     When disabled, no entry on a project classpath can be associated with
-	 *     an exclusion pattern.
-	 *      - option id:         "net.sourceforge.phpdt.core.classpath.exclusionPatterns"
-	 *      - possible values:   { "enabled", "disabled" }
-	 *      - default:           "enabled"
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.unusedLocal"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "ignore"
 	 *  
-	 *  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:         "net.sourceforge.phpdt.core.classpath.multipleOutputLocations"
-	 *      - possible values:   { "enabled", "disabled" }
-	 *      - default:           "enabled"
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.unusedParameter"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "ignore"
 	 *  
-	 * 	FORMATTER / Inserting New Line Before Opening Brace
-	 *     When Insert, a new line is inserted before an opening brace, otherwise nothing
-	 *     is inserted
-	 *      - option id:         "net.sourceforge.phpdt.core.formatter.newline.openingBrace"
-	 *      - possible values:   { "insert", "do not insert" }
-	 *      - default:           "do not insert"
+	 *   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 "net.sourceforge.phpdt.core.compiler.problem.unusedParameter".
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.problem.unusedParameterWhenImplementingAbstract"
+	 *       - possible values:   { "enabled", "disabled" }
+	 *       - default:           "disabled"
 	 *  
-	 * 	FORMATTER / Inserting New Line Inside Control Statement
-	 *     When Insert, a new line is inserted between } and following else, catch, finally
-	 *      - option id:         "net.sourceforge.phpdt.core.formatter.newline.controlStatement"
-	 *      - possible values:   { "insert", "do not insert" }
-	 *      - default:           "do not insert"
+	 *   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 "net.sourceforge.phpdt.core.compiler.problem.unusedParameter".
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.problem.unusedParameterWhenOverridingConcrete"
+	 *       - possible values:   { "enabled", "disabled" }
+	 *       - default:           "disabled"
 	 *  
-	 * 	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:         "net.sourceforge.phpdt.core.formatter.newline.clearAll"
-	 *      - possible values:   { "clear all", "preserve one" }
-	 *      - default:           "preserve one"
+	 *   COMPILER / Reporting Unused Import
+	 *      When enabled, the compiler will issue an error or a warning for unused import 
+	 *      reference 
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.problem.unusedImport"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
 	 *  
-	 * 	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:         "net.sourceforge.phpdt.core.formatter.newline.elseIf"
-	 *      - possible values:   { "insert", "do not insert" }
-	 *      - default:           "do not insert"
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.unusedPrivateMember"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "ignore"
 	 *  
-	 * 	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:         "net.sourceforge.phpdt.core.formatter.newline.emptyBlock"
-	 *      - possible values:   { "insert", "do not insert" }
-	 *      - default:           "insert"
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.syntheticAccessEmulation"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "ignore"
 	 *  
-	 * 	FORMATTER / Splitting Lines Exceeding Length
-	 *     Enable splitting of long lines (exceeding the configurable length). Length of 0 will
-	 *     disable line splitting
-	 *      - option id:         "net.sourceforge.phpdt.core.formatter.lineSplit"
-	 *      - possible values:	"<n>", where n is zero or a positive integer
-	 *      - default:           "80"
+	 *   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-<n>$). 
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.problem.nonExternalizedStringLiteral"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "ignore"
+	 *   
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.assertIdentifier"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "ignore"
+	 *   
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.staticAccessReceiver"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
+	 *   
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.noEffectAssignment"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
+	 *   
+	 *   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:         "net.sourceforge.phpdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
+	 *   
+	 *   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, "hello" + new char[]{'w','o','r','l','d'}).
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.problem.noImplicitStringConversion"
+	 *       - possible values:   { "error", "warning", "ignore" }
+	 *       - default:           "warning"
 	 *  
-	 * 	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:         "net.sourceforge.phpdt.core.formatter.style.assignment"
-	 *      - possible values:   { "compact", "normal" }
-	 *      - default:           "normal"
+	 *   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 "1.4" and the compliance mode should be "1.4".
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.source"
+	 *       - possible values:   { "1.3", "1.4" }
+	 *       - default:           "1.3"
+	 *   
+	 *   COMPILER / Setting Compliance Level
+	 *      Select the compliance level for the compiler. In "1.3" mode, source and target settings
+	 *      should not go beyond "1.3" level.
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.compliance"
+	 *       - possible values:   { "1.3", "1.4" }
+	 *       - default:           "1.3"
+	 *   
+	 *   COMPILER / Maximum number of problems reported per compilation unit
+	 *      Specify the maximum number of problems reported on each compilation unit.
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.maxProblemPerUnit"
+	 *       - possible values:	"<n>" where <n> is zero or a positive integer (if zero then all problems are reported).
+	 *       - default:           "100"
+	 *   
+	 *   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:         "net.sourceforge.phpdt.core.compiler.taskTags"
+	 *       - possible values:   { "<tag>[,<tag>]*" } where <tag> is a String without any wild-card or leading/trailing spaces 
+	 *       - default:           ""
+	 *   
+	 *   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 "NORMAL".
+	 *       - option id:         "net.sourceforge.phpdt.core.compiler.taskPriorities"
+	 *       - possible values:   { "<priority>[,<priority>]*" } where <priority> is one of "HIGH", "NORMAL" or "LOW"
+	 *       - default:           ""
 	 *  
-	 * 	FORMATTER / Defining Indentation Character
-	 *     Either choose to indent with tab characters or spaces
-	 *      - option id:         "net.sourceforge.phpdt.core.formatter.tabulation.char"
-	 *      - possible values:   { "tab", "space" }
-	 *      - default:           "tab"
-	 *  
-	 * 	FORMATTER / Defining Space Indentation Length
-	 *     When using spaces, set the amount of space characters to use for each 
-	 *     indentation mark.
-	 *      - option id:         "net.sourceforge.phpdt.core.formatter.tabulation.size"
-	 *      - possible values:	"<n>", where n is a positive integer
-	 *      - default:           "4"
-	 *  
-	 * 	FORMATTER / Inserting space in cast expression
-	 *     When Insert, a space is added between the type and the expression in a cast expression.
-	 *      - option id:         "net.sourceforge.phpdt.core.formatter.space.castexpression"
-	 *      - possible values:   { "insert", "do not insert" }
-	 *      - default:           "insert"
-	 *  
-	 * 	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:         "net.sourceforge.phpdt.core.codeComplete.visibilityCheck"
-	 *      - possible values:   { "enabled", "disabled" }
-	 *      - default:           "disabled"
-	 *  
-	 * 	CODEASSIST / Automatic Qualification of Implicit Members
-	 *     When active, completion automatically qualifies completion on implicit
-	 *     field references and message expressions.
-	 *      - option id:         "net.sourceforge.phpdt.core.codeComplete.forceImplicitQualification"
-	 *      - possible values:   { "enabled", "disabled" }
-	 *      - default:           "disabled"
-	 *  
-	 *   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:         "net.sourceforge.phpdt.core.codeComplete.fieldPrefixes"
-	 *      - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  
-	 *   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:         "net.sourceforge.phpdt.core.codeComplete.staticFieldPrefixes"
-	 *      - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  
-	 *   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:         "net.sourceforge.phpdt.core.codeComplete.localPrefixes"
-	 *      - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  
-	 *   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:         "net.sourceforge.phpdt.core.codeComplete.argumentPrefixes"
-	 *      - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  
-	 *   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:         "net.sourceforge.phpdt.core.codeComplete.fieldSuffixes"
-	 *      - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  
-	 *   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:         "net.sourceforge.phpdt.core.codeComplete.staticFieldSuffixes"
-	 *      - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  
-	 *   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:         "net.sourceforge.phpdt.core.codeComplete.localSuffixes"
-	 *      - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  
-	 *   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:         "net.sourceforge.phpdt.core.codeComplete.argumentSuffixes"
-	 *      - possible values:   { "<suffix>[,<suffix>]*" } where <prefix> is a String without any wild-card 
-	 *      - default:           ""
-	 *  </pre>
-	 *  
-	 *  @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:         "net.sourceforge.phpdt.core.builder.resourceCopyExclusionFilter"
+	 *       - possible values:   { "<name>[,<name>]* } where <name> is a file name pattern (* and ? wild-cards allowed)
+	 *         or the name of a folder which ends with '/'
+	 *       - default:           ""
+	 *   
+	 *   BUILDER / Abort if Invalid Classpath
+	 *      Allow to toggle the builder to abort if the classpath is invalid
+	 *       - option id:         "net.sourceforge.phpdt.core.builder.invalidClasspath"
+	 *       - possible values:   { "abort", "ignore" }
+	 *       - default:           "abort"
+	 *   
+	 *   BUILDER / Cleaning Output Folder(s)
+	 *      Indicate whether the JavaBuilder is allowed to clean the output folders
+	 *      when performing full build operations.
+	 *       - option id:         "net.sourceforge.phpdt.core.builder.cleanOutputFolder"
+	 *       - possible values:   { "clean", "ignore" }
+	 *       - default:           "clean"
+	 *   
+	 *   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:         "net.sourceforge.phpdt.core.builder.duplicateResourceTask"
+	 *       - possible values:   { "error", "warning" }
+	 *       - default:           "warning"
+	 *   
+	 *   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:         "net.sourceforge.phpdt.core.computeJavaBuildOrder"
+	 *       - possible values:   { "compute", "ignore" }
+	 *       - default:           "ignore"	 
+	 *   
+	 *   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:         "net.sourceforge.phpdt.core.encoding"
+	 *       - possible values:   { any of the supported encoding name}.
+	 *       - default:           <platform default>
+	 *   
+	 *   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:         "net.sourceforge.phpdt.core.incompleteClasspath"
+	 *       - possible values:   { "error", "warning"}
+	 *       - default:           "error"
+	 *   
+	 *   JAVACORE / Reporting Classpath Cycle
+	 *      Indicate the severity of the problem reported when a project is involved in a cycle.
+	 *       - option id:         "net.sourceforge.phpdt.core.circularClasspath"
+	 *       - possible values:   { "error", "warning" }
+	 *       - default:           "error"
+	 *   
+	 *   JAVACORE / Enabling Usage of Classpath Exclusion Patterns
+	 *      When disabled, no entry on a project classpath can be associated with
+	 *      an exclusion pattern.
+	 *       - option id:         "net.sourceforge.phpdt.core.classpath.exclusionPatterns"
+	 *       - possible values:   { "enabled", "disabled" }
+	 *       - default:           "enabled"
+	 *   
+	 *   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:         "net.sourceforge.phpdt.core.classpath.multipleOutputLocations"
+	 *       - possible values:   { "enabled", "disabled" }
+	 *       - default:           "enabled"
+	 *   
+	 *  	FORMATTER / Inserting New Line Before Opening Brace
+	 *      When Insert, a new line is inserted before an opening brace, otherwise nothing
+	 *      is inserted
+	 *       - option id:         "net.sourceforge.phpdt.core.formatter.newline.openingBrace"
+	 *       - possible values:   { "insert", "do not insert" }
+	 *       - default:           "do not insert"
+	 *   
+	 *  	FORMATTER / Inserting New Line Inside Control Statement
+	 *      When Insert, a new line is inserted between } and following else, catch, finally
+	 *       - option id:         "net.sourceforge.phpdt.core.formatter.newline.controlStatement"
+	 *       - possible values:   { "insert", "do not insert" }
+	 *       - default:           "do not insert"
+	 *   
+	 *  	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:         "net.sourceforge.phpdt.core.formatter.newline.clearAll"
+	 *       - possible values:   { "clear all", "preserve one" }
+	 *       - default:           "preserve one"
+	 *   
+	 *  	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:         "net.sourceforge.phpdt.core.formatter.newline.elseIf"
+	 *       - possible values:   { "insert", "do not insert" }
+	 *       - default:           "do not insert"
+	 *   
+	 *  	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:         "net.sourceforge.phpdt.core.formatter.newline.emptyBlock"
+	 *       - possible values:   { "insert", "do not insert" }
+	 *       - default:           "insert"
+	 *   
+	 *  	FORMATTER / Splitting Lines Exceeding Length
+	 *      Enable splitting of long lines (exceeding the configurable length). Length of 0 will
+	 *      disable line splitting
+	 *       - option id:         "net.sourceforge.phpdt.core.formatter.lineSplit"
+	 *       - possible values:	"<n>", where n is zero or a positive integer
+	 *       - default:           "80"
+	 *   
+	 *  	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:         "net.sourceforge.phpdt.core.formatter.style.assignment"
+	 *       - possible values:   { "compact", "normal" }
+	 *       - default:           "normal"
+	 *   
+	 *  	FORMATTER / Defining Indentation Character
+	 *      Either choose to indent with tab characters or spaces
+	 *       - option id:         "net.sourceforge.phpdt.core.formatter.tabulation.char"
+	 *       - possible values:   { "tab", "space" }
+	 *       - default:           "tab"
+	 *   
+	 *  	FORMATTER / Defining Space Indentation Length
+	 *      When using spaces, set the amount of space characters to use for each 
+	 *      indentation mark.
+	 *       - option id:         "net.sourceforge.phpdt.core.formatter.tabulation.size"
+	 *       - possible values:	"<n>", where n is a positive integer
+	 *       - default:           "4"
+	 *   
+	 *  	FORMATTER / Inserting space in cast expression
+	 *      When Insert, a space is added between the type and the expression in a cast expression.
+	 *       - option id:         "net.sourceforge.phpdt.core.formatter.space.castexpression"
+	 *       - possible values:   { "insert", "do not insert" }
+	 *       - default:           "insert"
+	 *   
+	 *  	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:         "net.sourceforge.phpdt.core.codeComplete.visibilityCheck"
+	 *       - possible values:   { "enabled", "disabled" }
+	 *       - default:           "disabled"
+	 *   
+	 *  	CODEASSIST / Automatic Qualification of Implicit Members
+	 *      When active, completion automatically qualifies completion on implicit
+	 *      field references and message expressions.
+	 *       - option id:         "net.sourceforge.phpdt.core.codeComplete.forceImplicitQualification"
+	 *       - possible values:   { "enabled", "disabled" }
+	 *       - default:           "disabled"
+	 *   
+	 *    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:         "net.sourceforge.phpdt.core.codeComplete.fieldPrefixes"
+	 *       - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "net.sourceforge.phpdt.core.codeComplete.staticFieldPrefixes"
+	 *       - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "net.sourceforge.phpdt.core.codeComplete.localPrefixes"
+	 *       - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "net.sourceforge.phpdt.core.codeComplete.argumentPrefixes"
+	 *       - possible values:   { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "net.sourceforge.phpdt.core.codeComplete.fieldSuffixes"
+	 *       - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "net.sourceforge.phpdt.core.codeComplete.staticFieldSuffixes"
+	 *       - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "net.sourceforge.phpdt.core.codeComplete.localSuffixes"
+	 *       - possible values:   { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   
+	 *    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:         "net.sourceforge.phpdt.core.codeComplete.argumentSuffixes"
+	 *       - possible values:   { "<suffix>[,<suffix>]*" } where <prefix> is a String without any wild-card 
+	 *       - default:           ""
+	 *   </pre>
+	 *   
+	 *   @return a mutable table containing the default settings of all known options
+	 *     (key type: 
 	 * 
 	 * String
 	 * 
-	 * ; value type: 
+	 *  ; value type: 
 	 * 
 	 * String
 	 * 
-	 * )
-	 *  @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 {
 	 * 

* A container is exclusively resolved by a * ClasspathContainerInitializer registered onto the - * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer". + * extension point + * "net.sourceforge.phpdt.core.classpathContainerInitializer". *

* A container path must be formed of at least one segment, where: *

@@ -3268,7 +3283,8 @@ public class JavaCore { * containerEntry = JavaCore.newContainerEntry(new * Path("MyProvidedJDK/default")); * - * + * * *

@@ -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 - * CPE_CONTAINER 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. - *

- * 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 - * JavaCore.getResolvedClasspathContainer, and updated with - * JavaCore.classpathContainerChanged - *

- * A container is exclusively resolved by a - * ClasspathContainerInitializer registered onto the - * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer". - *

- * A container path must be formed of at least one segment, where: - *

    - *
  • 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". - *
  • - *
  • the remaining segments will be passed onto the initializer, and can - * be used as additional hints during the initialization phase.
  • - *
- *

- * Example of an ClasspathContainerInitializer for a classpath container - * denoting a default JDK container: - * - * containerEntry = JavaCore.newContainerEntry(new - * Path("MyProvidedJDK/default")); - * - * - * - *

- * Note that this operation does not attempt to validate classpath - * containers or access the resources at the given paths. - *

- * - * @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 - * CPE_LIBRARY 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 IClassFile. - *

- * 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). - *

- * e.g. Here are some examples of binary path usage - *

    - *
  • "c:/jdk1.2.2/jre/lib/rt.jar" - reference to an - * external JAR
  • - *
  • "/Project/someLib.jar" - reference to an internal JAR - *
  • - *
  • "c:/classes/" - reference to an external binary - * folder
  • - *
- * Note that this operation does not attempt to validate or access the - * resources at the given paths. - *

- * The resulting entry is not exported to dependent projects. This method is - * equivalent to newLibraryEntry(-,-,-,false). - *

- * - * @param path - * the absolute path of the binary archive - * @param sourceAttachmentPath - * the absolute path of the corresponding source archive or - * folder, or null if none - * @param sourceAttachmentRootPath - * the location of the root within the source archive or folder - * or null 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 - * CPE_LIBRARY 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 IClassFile. - *

- * 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). - *

- * e.g. Here are some examples of binary path usage - *

    - *
  • "c:/jdk1.2.2/jre/lib/rt.jar" - reference to an - * external JAR
  • - *
  • "/Project/someLib.jar" - reference to an internal JAR - *
  • - *
  • "c:/classes/" - reference to an external binary - * folder
  • - *
- * Note that this operation does not attempt to validate or access the - * resources at the given paths. - *

- * - * @param path - * the absolute path of the binary archive - * @param sourceAttachmentPath - * the absolute path of the corresponding source archive or - * folder, or null if none - * @param sourceAttachmentRootPath - * the location of the root within the source archive or folder - * or null 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 - * CPE_PROJECT for the project identified by the given - * absolute path. - *

- * 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). - *

- * A project reference allows to indirect through another project, - * independently from its internal layout. - *

- * The prerequisite project is referred to using an absolute path relative - * to the workspace root. - *

- * The resulting entry is not exported to dependent projects. This method is - * equivalent to newProjectEntry(_,false). - *

- * - * @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 - * CPE_PROJECT for the project identified by the given - * absolute path. - *

- * 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). - *

- * A project reference allows to indirect through another project, - * independently from its internal layout. - *

- * The prerequisite project is referred to using an absolute path relative - * to the workspace root. - *

- * - * @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 + * CPE_CONTAINER 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. + *

+ * 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 + * JavaCore.getResolvedClasspathContainer, and updated with + * JavaCore.classpathContainerChanged + *

+ * A container is exclusively resolved by a + * ClasspathContainerInitializer registered onto the + * extension point + * "net.sourceforge.phpdt.core.classpathContainerInitializer". + *

+ * A container path must be formed of at least one segment, where: + *

    + *
  • 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".
  • + *
  • the remaining segments will be passed onto the initializer, and can + * be used as additional hints during the initialization phase.
  • + *
+ *

+ * Example of an ClasspathContainerInitializer for a classpath container + * denoting a default JDK container: + * + * containerEntry = JavaCore.newContainerEntry(new + * Path("MyProvidedJDK/default")); + * + * + * + *

+ * Note that this operation does not attempt to validate classpath + * containers or access the resources at the given paths. + *

+ * + * @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 + * CPE_LIBRARY 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 IClassFile. + *

+ * 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). + *

+ * e.g. Here are some examples of binary path usage + *

    + *
  • "c:/jdk1.2.2/jre/lib/rt.jar" - reference to an + * external JAR
  • + *
  • "/Project/someLib.jar" - reference to an internal JAR + *
  • + *
  • "c:/classes/" - reference to an external binary + * folder
  • + *
+ * Note that this operation does not attempt to validate or access the + * resources at the given paths. + *

+ * The resulting entry is not exported to dependent projects. This method is + * equivalent to newLibraryEntry(-,-,-,false). + *

+ * + * @param path + * the absolute path of the binary archive + * @param sourceAttachmentPath + * the absolute path of the corresponding source archive or + * folder, or null if none + * @param sourceAttachmentRootPath + * the location of the root within the source archive or folder + * or null 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 + * CPE_LIBRARY 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 IClassFile. + *

+ * 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). + *

+ * e.g. Here are some examples of binary path usage + *

    + *
  • "c:/jdk1.2.2/jre/lib/rt.jar" - reference to an + * external JAR
  • + *
  • "/Project/someLib.jar" - reference to an internal JAR + *
  • + *
  • "c:/classes/" - reference to an external binary + * folder
  • + *
+ * Note that this operation does not attempt to validate or access the + * resources at the given paths. + *

+ * + * @param path + * the absolute path of the binary archive + * @param sourceAttachmentPath + * the absolute path of the corresponding source archive or + * folder, or null if none + * @param sourceAttachmentRootPath + * the location of the root within the source archive or folder + * or null 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 + * CPE_PROJECT for the project identified by the given + * absolute path. + *

+ * 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). + *

+ * A project reference allows to indirect through another project, + * independently from its internal layout. + *

+ * The prerequisite project is referred to using an absolute path relative + * to the workspace root. + *

+ * The resulting entry is not exported to dependent projects. This method is + * equivalent to newProjectEntry(_,false). + *

+ * + * @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 + * CPE_PROJECT for the project identified by the given + * absolute path. + *

+ * 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). + *

+ * A project reference allows to indirect through another project, + * independently from its internal layout. + *

+ * The prerequisite project is referred to using an absolute path relative + * to the workspace root. + *

+ * + * @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 CPE_SOURCE * for all files in the project's source folder identified by the given * absolute workspace-relative path. *

* The convenience method is fully equivalent to: + * *

 	 * newSourceEntry(path, new IPath[] {}, new IPath[] {}, null);
 	 * 
+ * *

* - * @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 CPE_SOURCE - * 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. *

* The convenience method is fully equivalent to: + * *

 	 * newSourceEntry(path, new IPath[] {}, exclusionPatterns, null);
 	 * 
+ * *

- * - * @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 CPE_SOURCE - * 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). *

* The convenience method is fully equivalent to: + * *

 	 * newSourceEntry(path, new IPath[] {}, exclusionPatterns, specificOutputLocation);
 	 * 
+ * *

- * - * @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 (null 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 (null + * 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 CPE_SOURCE - * 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. *

* The source folder is referred to using an absolute path relative to the - * workspace root, e.g. /Project/src. A project's source - * folders are located with that project. That is, a source classpath - * entry specifying the path /P1/src is only usable for - * project P1. + * workspace root, e.g. /Project/src. A project's source + * folders are located with that project. That is, a source classpath entry + * specifying the path /P1/src is only usable for project + * P1. *

*

* 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 and only 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 ICompilationUnit. *

*

- * For example, if the source folder path is - * /Project/src, there are no inclusion filters, and the - * exclusion pattern is - * com/xyz/tests/**, then source files - * like /Project/src/com/xyz/Foo.java - * and /Project/src/com/xyz/utils/Bar.java would be included, - * whereas /Project/src/com/xyz/tests/T1.java - * and /Project/src/com/xyz/tests/quick/T2.java would be - * excluded. + * For example, if the source folder path is /Project/src, + * there are no inclusion filters, and the exclusion pattern is + * com/xyz/tests/**, then source files like + * /Project/src/com/xyz/Foo.java and + * /Project/src/com/xyz/utils/Bar.java would be included, + * whereas /Project/src/com/xyz/tests/T1.java and + * /Project/src/com/xyz/tests/quick/T2.java would be + * excluded. *

*

- * 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 null). - * 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. "/Project/bin", 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 null). 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. + * "/Project/bin", it must be located inside the same + * project as the source folder. *

*

- * Also note that all sources/binaries inside a project are contributed as - * a whole through a project entry - * (see JavaCore.newProjectEntry). 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 JavaCore.newProjectEntry). + * Particular source entries cannot be selectively exported. *

- * - * @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 (null 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 (null + * 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 - * CPE_VARIABLE 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. - *

- * A variable entry allows to express indirect references on a classpath to - * other projects or libraries, depending on what the classpath variable is - * referring. - *

- * It is possible to register an automatic initializer ( - * ClasspathVariableInitializer), 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. - *

- * e.g. Here are some examples of variable path usage - *

    - *
  • "JDTCORE" where variable JDTCORE is bound to - * "c:/jars/jdtcore.jar". The resolved classpath entry is denoting the - * library "c:\jars\jdtcore.jar"
  • - *
  • "JDTCORE" where variable JDTCORE is bound to - * "/Project_JDTCORE". The resolved classpath entry is denoting the project - * "/Project_JDTCORE"
  • - *
  • "PLUGINS/com.example/example.jar" where variable - * PLUGINS is bound to "c:/eclipse/plugins". The resolved - * classpath entry is denoting the library - * "c:/eclipse/plugins/com.example/example.jar"
  • - *
- * Note that this operation does not attempt to validate classpath variables - * or access the resources at the given paths. - *

- * The resulting entry is not exported to dependent projects. This method is - * equivalent to newVariableEntry(-,-,-,false). - *

- * - * @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 - * null if none; if present, the first segment is - * the name of a classpath variable (not necessarily the same - * variable as the one that begins variablePath) - * @param sourceAttachmentRootPath - * the location of the root within the source archive or - * null if archivePath is also - * null - * @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 - * CPE_VARIABLE 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. - *

- * A variable entry allows to express indirect references on a classpath to - * other projects or libraries, depending on what the classpath variable is - * referring. - *

- * It is possible to register an automatic initializer ( - * ClasspathVariableInitializer), 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. - *

- * e.g. Here are some examples of variable path usage - *

    - *
  • "JDTCORE" where variable JDTCORE is bound to - * "c:/jars/jdtcore.jar". The resolved classpath entry is denoting the - * library "c:\jars\jdtcore.jar"
  • - *
  • "JDTCORE" where variable JDTCORE is bound to - * "/Project_JDTCORE". The resolved classpath entry is denoting the project - * "/Project_JDTCORE"
  • - *
  • "PLUGINS/com.example/example.jar" where variable - * PLUGINS is bound to "c:/eclipse/plugins". The resolved - * classpath entry is denoting the library - * "c:/eclipse/plugins/com.example/example.jar"
  • - *
- * Note that this operation does not attempt to validate classpath variables - * or access the resources at the given paths. - *

- * - * @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 - * null if none; if present, the first segment is - * the name of a classpath variable (not necessarily the same - * variable as the one that begins variablePath) - * @param sourceAttachmentRootPath - * the location of the root within the source archive or - * null if archivePath is also - * null - * @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. - *

- * This functionality cannot be used while the resource tree is locked. - *

- * Classpath variable values are persisted locally to the workspace, and are - * preserved from session to session. - *

- * - * @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. - *

- * This functionality cannot be used while the resource tree is locked. - *

- * Classpath variable values are persisted locally to the workspace, and are - * preserved from session to session. - *

- * - * @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 ( - * IClasspathContainer). 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. - *

- * containerPath is the path under which these values can be - * referenced through container classpath entries ( - * IClasspathEntry#CPE_CONTAINER). 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 ClasspathContainerInitializer registered on the - * extension point "net.sourceforge.phpdt.core.classpathContainerInitializer". - *

- * There is no assumption that each individual container value passed in - * argument (respectiveContainers) must answer the exact - * same path when requested IClasspathContainer#getPath. - * Indeed, the containerPath is just an indication for resolving it to an - * actual container object. It can be delegated to a - * ClasspathContainerInitializer, which can be activated - * through the extension point - * "net.sourceforge.phpdt.core.ClasspathContainerInitializer"). - *

- * In reaction to changing container values, the JavaModel will be updated - * to reflect the new state of the updated container. - *

- * This functionality cannot be used while the resource tree is locked. - *

- * 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 ClasspathContainerInitializer - * for each referenced container (through the extension point - * "net.sourceforge.phpdt.core.ClasspathContainerInitializer"). - *

- * Note: setting a container to null 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. - *

- * - * @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 - * This functionality cannot be used while the resource tree is locked. - *

- * Classpath variable values are persisted locally to the workspace, and are - * preserved from session to session. - *

- * - * @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. - *

- * This functionality cannot be used while the resource tree is locked. - *

- * Classpath variable values are persisted locally to the workspace, and are - * preserved from session to session. - *

- * 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. - *

- * This functionality cannot be used while the resource tree is locked. - *

- * Classpath variable values are persisted locally to the workspace, and are - * preserved from session to session. - *

- * 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. - *

- * For a complete description of the configurable options, see - * getDefaultOptions. - *

- * - * @param newOptions - * the new options (key type: String; value type: - * String), or null 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. - *

- * De-registers the JavaModelManager as a resource changed listener and save - * participant. - *

- * - * @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. - *

- * Registers the JavaModelManager as a resource changed listener and save - * participant. Starts the background indexing, and restore saved classpath - * variable values. - *

- * - * @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.

Registers the - * JavaModelManager as a resource changed listener and save participant. - * Starts the background indexing, and restore saved classpath variable - * values.

@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.

De-registers the - * JavaModelManager as a resource changed listener and save participant.

- * - * @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 + * CPE_VARIABLE 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. + *

+ * A variable entry allows to express indirect references on a classpath to + * other projects or libraries, depending on what the classpath variable is + * referring. + *

+ * It is possible to register an automatic initializer ( + * ClasspathVariableInitializer), 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. + *

+ * e.g. Here are some examples of variable path usage + *

    + *
  • "JDTCORE" where variable JDTCORE is bound to + * "c:/jars/jdtcore.jar". The resolved classpath entry is denoting the + * library "c:\jars\jdtcore.jar"
  • + *
  • "JDTCORE" where variable JDTCORE is bound to + * "/Project_JDTCORE". The resolved classpath entry is denoting the project + * "/Project_JDTCORE"
  • + *
  • "PLUGINS/com.example/example.jar" where variable + * PLUGINS is bound to "c:/eclipse/plugins". The resolved + * classpath entry is denoting the library + * "c:/eclipse/plugins/com.example/example.jar"
  • + *
+ * Note that this operation does not attempt to validate classpath variables + * or access the resources at the given paths. + *

+ * The resulting entry is not exported to dependent projects. This method is + * equivalent to newVariableEntry(-,-,-,false). + *

+ * + * @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 + * null if none; if present, the first segment is + * the name of a classpath variable (not necessarily the same + * variable as the one that begins variablePath) + * @param sourceAttachmentRootPath + * the location of the root within the source archive or + * null if archivePath is also + * null + * @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 + * CPE_VARIABLE 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. + *

+ * A variable entry allows to express indirect references on a classpath to + * other projects or libraries, depending on what the classpath variable is + * referring. + *

+ * It is possible to register an automatic initializer ( + * ClasspathVariableInitializer), 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. + *

+ * e.g. Here are some examples of variable path usage + *

    + *
  • "JDTCORE" where variable JDTCORE is bound to + * "c:/jars/jdtcore.jar". The resolved classpath entry is denoting the + * library "c:\jars\jdtcore.jar"
  • + *
  • "JDTCORE" where variable JDTCORE is bound to + * "/Project_JDTCORE". The resolved classpath entry is denoting the project + * "/Project_JDTCORE"
  • + *
  • "PLUGINS/com.example/example.jar" where variable + * PLUGINS is bound to "c:/eclipse/plugins". The resolved + * classpath entry is denoting the library + * "c:/eclipse/plugins/com.example/example.jar"
  • + *
+ * Note that this operation does not attempt to validate classpath variables + * or access the resources at the given paths. + *

+ * + * @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 + * null if none; if present, the first segment is + * the name of a classpath variable (not necessarily the same + * variable as the one that begins variablePath) + * @param sourceAttachmentRootPath + * the location of the root within the source archive or + * null if archivePath is also + * null + * @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. + *

+ * This functionality cannot be used while the resource tree is locked. + *

+ * Classpath variable values are persisted locally to the workspace, and are + * preserved from session to session. + *

+ * + * @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. + *

+ * This functionality cannot be used while the resource tree is locked. + *

+ * Classpath variable values are persisted locally to the workspace, and are + * preserved from session to session. + *

+ * + * @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 ( + * IClasspathContainer). 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. + *

+ * containerPath is the path under which these values can be + * referenced through container classpath entries ( + * IClasspathEntry#CPE_CONTAINER). 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 ClasspathContainerInitializer registered on the + * extension point + * "net.sourceforge.phpdt.core.classpathContainerInitializer". + *

+ * There is no assumption that each individual container value passed in + * argument (respectiveContainers) must answer the exact + * same path when requested IClasspathContainer#getPath. + * Indeed, the containerPath is just an indication for resolving it to an + * actual container object. It can be delegated to a + * ClasspathContainerInitializer, which can be activated + * through the extension point + * "net.sourceforge.phpdt.core.ClasspathContainerInitializer"). + *

+ * In reaction to changing container values, the JavaModel will be updated + * to reflect the new state of the updated container. + *

+ * This functionality cannot be used while the resource tree is locked. + *

+ * 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 ClasspathContainerInitializer + * for each referenced container (through the extension point + * "net.sourceforge.phpdt.core.ClasspathContainerInitializer"). + *

+ * Note: setting a container to null 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. + *

+ * + * @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 + * This functionality cannot be used while the resource tree is locked. + *

+ * Classpath variable values are persisted locally to the workspace, and are + * preserved from session to session. + *

+ * + * @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. + *

+ * This functionality cannot be used while the resource tree is locked. + *

+ * Classpath variable values are persisted locally to the workspace, and are + * preserved from session to session. + *

+ * 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. + *

+ * This functionality cannot be used while the resource tree is locked. + *

+ * Classpath variable values are persisted locally to the workspace, and are + * preserved from session to session. + *

+ * 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. + *

+ * For a complete description of the configurable options, see + * getDefaultOptions. + *

+ * + * @param newOptions + * the new options (key type: String; value type: + * String), or null 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. + *

+ * De-registers the JavaModelManager as a resource changed listener and save + * participant. + *

+ * + * @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. + *

+ * Registers the JavaModelManager as a resource changed listener and save + * participant. Starts the background indexing, and restore saved classpath + * variable values. + *

+ * + * @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.

Registers the + * JavaModelManager as a resource changed listener and save participant. + * Starts the background indexing, and restore saved classpath variable + * values.

@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.

De-registers the + * JavaModelManager as a resource changed listener and save participant.

+ * + * @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