package net.sourceforge.phpeclipse;
import java.util.ArrayList;
import java.util.Enumeration;
import java.util.HashSet;
import java.util.Hashtable;
import java.util.List;
import net.sourceforge.phpdt.internal.core.BatchOperation;
import net.sourceforge.phpeclipse.resourcesview.PHPFile;
import net.sourceforge.phpeclipse.resourcesview.PHPProject;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IProjectDescription;
import org.eclipse.core.resources.IWorkspace;
import org.eclipse.core.resources.IWorkspaceRunnable;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.Plugin;
import org.eclipse.core.runtime.Preferences;
public class PHPCore {
public static HashSet OptionNames = new HashSet(20);
/**
* The plug-in identifier of the Java core support
* (value "org.phpeclipse.phpdt.core").
*/
public static final String PLUGIN_ID = "net.sourceforge.phpeclipse.core"; //$NON-NLS-1$
/**
* Possible configurable option ID.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String CORE_ENCODING = PLUGIN_ID + ".encoding"; //$NON-NLS-1$
/**
* Possible configurable option ID.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String FORMATTER_NEWLINE_OPENING_BRACE = PLUGIN_ID + ".formatter.newline.openingBrace"; //$NON-NLS-1$
/**
* Possible configurable option ID.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String FORMATTER_NEWLINE_CONTROL = PLUGIN_ID + ".formatter.newline.controlStatement"; //$NON-NLS-1$
/**
* Possible configurable option ID.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String FORMATTER_NEWLINE_ELSE_IF = PLUGIN_ID + ".formatter.newline.elseIf"; //$NON-NLS-1$
/**
* Possible configurable option ID.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String FORMATTER_NEWLINE_EMPTY_BLOCK = PLUGIN_ID + ".formatter.newline.emptyBlock"; //$NON-NLS-1$
/**
* Possible configurable option ID.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String FORMATTER_CLEAR_BLANK_LINES = PLUGIN_ID + ".formatter.newline.clearAll"; //$NON-NLS-1$
/**
* Possible configurable option ID.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String FORMATTER_LINE_SPLIT = PLUGIN_ID + ".formatter.lineSplit"; //$NON-NLS-1$
/**
* Possible configurable option ID.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String FORMATTER_COMPACT_ASSIGNMENT = PLUGIN_ID + ".formatter.style.assignment"; //$NON-NLS-1$
/**
* Possible configurable option ID.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String FORMATTER_TAB_CHAR = PLUGIN_ID + ".formatter.tabulation.char"; //$NON-NLS-1$
/**
* Possible configurable option ID.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String FORMATTER_TAB_SIZE = PLUGIN_ID + ".formatter.tabulation.size"; //$NON-NLS-1$
/**
* Possible configurable option value.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String INSERT = "insert"; //$NON-NLS-1$
/**
* Possible configurable option value.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String DO_NOT_INSERT = "do not insert"; //$NON-NLS-1$
/**
* Possible configurable option value.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String PRESERVE_ONE = "preserve one"; //$NON-NLS-1$
/**
* Possible configurable option value.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String CLEAR_ALL = "clear all"; //$NON-NLS-1$
/**
* Possible configurable option value.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String NORMAL = "normal"; //$NON-NLS-1$
/**
* Possible configurable option value.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String COMPACT = "compact"; //$NON-NLS-1$
/**
* Possible configurable option value.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String TAB = "tab"; //$NON-NLS-1$
/**
* Possible configurable option value.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String SPACE = "space"; //$NON-NLS-1$
/**
* Possible configurable option value.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String ENABLED = "enabled"; //$NON-NLS-1$
/**
* Possible configurable option value.
* @see #getDefaultOptions
* @since 2.0
*/
public static final String DISABLED = "disabled"; //$NON-NLS-1$
/**
* Possible configurable option value.
* @see #getDefaultOptions
* @since 2.1
*/
public static final String CLEAN = "clean"; //$NON-NLS-1$
/**
* Returns a table of all known configurable options with their default values.
* These options allow to configure the behaviour of the underlying components.
* The client may safely use the result as a template that they can modify and
* then pass to setOptions.
*
* Helper constants have been defined on JavaCore for each of the option ID and
* their possible constant values.
*
* 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-$).
* - 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: "" where 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: { "[,]*" } where 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: { "[,]*" } where 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: { "[,]* } where 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:
*
* 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: "", 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: "", 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: { "[,]*" } where 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: { "[,]*" } where 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: { "[,]*" } where 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: { "[,]*" } where 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: { "[,]*" } where 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: { "[,]*" } where 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: { "[,]*" } where 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: { "[,]*" } where is a String without any wild-card
* - default: ""
*
*
* @return a mutable table containing the default settings of all known options
* (key type: String; value type: String)
* @see #setOptions
*/
public static Hashtable getDefaultOptions() {
Hashtable defaultOptions = new Hashtable(10);
// see #initializeDefaultPluginPreferences() for changing default settings
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, 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, preferences.getDefaultString(propertyName));
}
}
// get encoding through resource plugin
defaultOptions.put(CORE_ENCODING, ResourcesPlugin.getEncoding());
return defaultOptions;
}
/**
* Helper method for returning one option value only. Equivalent to (String)JavaCore.getOptions().get(optionName)
* Note that it may answer null if this option does not exist.
*
* For a complete description of the configurable options, see getDefaultOptions.
*
* For a complete description of the configurable options, see getDefaultOptions.
*
String; value type: String)
* @see JavaCore#getDefaultOptions
*/
public static Hashtable getOptions() {
Hashtable options = new Hashtable(10);
// see #initializeDefaultPluginPreferences() for changing default settings
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;
}
/**
* 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.
*
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 = 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();
}
public static IProject[] getPHPProjects() {
List phpProjectsList = new ArrayList();
IProject[] workspaceProjects = PHPeclipsePlugin.getWorkspace().getRoot().getProjects();
for (int i = 0; i < workspaceProjects.length; i++) {
IProject iProject = workspaceProjects[i];
if (isPHPProject(iProject))
phpProjectsList.add(iProject);
}
IProject[] phpProjects = new IProject[phpProjectsList.size()];
return (IProject[]) phpProjectsList.toArray(phpProjects);
}
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;
}
public static boolean isPHPProject(IProject aProject) {
try {
return aProject.hasNature(PHPeclipsePlugin.PHP_NATURE_ID);
} catch (CoreException e) {
}
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);
return null;
}
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): " + e.toString());
}
return null;
}
public static void addPHPNature(IProject project, IProgressMonitor monitor) throws CoreException {
if (!project.hasNature(PHPeclipsePlugin.PHP_NATURE_ID)) {
IProjectDescription description = project.getDescription();
String[] prevNatures = description.getNatureIds();
String[] newNatures = new String[prevNatures.length + 1];
System.arraycopy(prevNatures, 0, newNatures, 0, prevNatures.length);
newNatures[prevNatures.length] = PHPeclipsePlugin.PHP_NATURE_ID;
description.setNatureIds(newNatures);
project.setDescription(description, monitor);
}
}
/**
* Returns the single instance of the PHP core plug-in runtime class.
*
* @return the single instance of the PHP core plug-in runtime class
*/
public static Plugin getPlugin() {
return PHPeclipsePlugin.getDefault();
}
/**
* Initializes the default preferences settings for this plug-in.
*/
protected static void initializeDefaultPluginPreferences() {
Preferences preferences = PHPeclipsePlugin.getDefault().getPluginPreferences();
HashSet optionNames = OptionNames;
// // Compiler settings
// preferences.setDefault(COMPILER_LOCAL_VARIABLE_ATTR, GENERATE);
// optionNames.add(COMPILER_LOCAL_VARIABLE_ATTR);
//
// preferences.setDefault(COMPILER_LINE_NUMBER_ATTR, GENERATE);
// optionNames.add(COMPILER_LINE_NUMBER_ATTR);
//
// preferences.setDefault(COMPILER_SOURCE_FILE_ATTR, GENERATE);
// optionNames.add(COMPILER_SOURCE_FILE_ATTR);
//
// preferences.setDefault(COMPILER_CODEGEN_UNUSED_LOCAL, PRESERVE);
// optionNames.add(COMPILER_CODEGEN_UNUSED_LOCAL);
//
// preferences.setDefault(COMPILER_CODEGEN_TARGET_PLATFORM, VERSION_1_1);
// optionNames.add(COMPILER_CODEGEN_TARGET_PLATFORM);
//
// preferences.setDefault(COMPILER_PB_UNREACHABLE_CODE, ERROR);
// optionNames.add(COMPILER_PB_UNREACHABLE_CODE);
//
// preferences.setDefault(COMPILER_PB_INVALID_IMPORT, ERROR);
// optionNames.add(COMPILER_PB_INVALID_IMPORT);
//
// preferences.setDefault(COMPILER_PB_OVERRIDING_PACKAGE_DEFAULT_METHOD, WARNING);
// optionNames.add(COMPILER_PB_OVERRIDING_PACKAGE_DEFAULT_METHOD);
//
// preferences.setDefault(COMPILER_PB_METHOD_WITH_CONSTRUCTOR_NAME, WARNING);
// optionNames.add(COMPILER_PB_METHOD_WITH_CONSTRUCTOR_NAME);
//
// preferences.setDefault(COMPILER_PB_DEPRECATION, WARNING);
// optionNames.add(COMPILER_PB_DEPRECATION);
//
// preferences.setDefault(COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE, DISABLED);
// optionNames.add(COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE);
//
// preferences.setDefault(COMPILER_PB_HIDDEN_CATCH_BLOCK, WARNING);
// optionNames.add(COMPILER_PB_HIDDEN_CATCH_BLOCK);
//
// preferences.setDefault(COMPILER_PB_UNUSED_LOCAL, IGNORE);
// optionNames.add(COMPILER_PB_UNUSED_LOCAL);
//
// preferences.setDefault(COMPILER_PB_UNUSED_PARAMETER, IGNORE);
// optionNames.add(COMPILER_PB_UNUSED_PARAMETER);
//
// preferences.setDefault(COMPILER_PB_UNUSED_IMPORT, WARNING);
// optionNames.add(COMPILER_PB_UNUSED_IMPORT);
//
// preferences.setDefault(COMPILER_PB_SYNTHETIC_ACCESS_EMULATION, IGNORE);
// optionNames.add(COMPILER_PB_SYNTHETIC_ACCESS_EMULATION);
//
// preferences.setDefault(COMPILER_PB_NON_NLS_STRING_LITERAL, IGNORE);
// optionNames.add(COMPILER_PB_NON_NLS_STRING_LITERAL);
//
// preferences.setDefault(COMPILER_PB_ASSERT_IDENTIFIER, IGNORE);
// optionNames.add(COMPILER_PB_ASSERT_IDENTIFIER);
//
// preferences.setDefault(COMPILER_PB_STATIC_ACCESS_RECEIVER, WARNING);
// optionNames.add(COMPILER_PB_STATIC_ACCESS_RECEIVER);
//
// preferences.setDefault(COMPILER_PB_NO_EFFECT_ASSIGNMENT, WARNING);
// optionNames.add(COMPILER_PB_NO_EFFECT_ASSIGNMENT);
//
// preferences.setDefault(COMPILER_TASK_TAGS, ""); //$NON-NLS-1$
// optionNames.add(COMPILER_TASK_TAGS);
//
// preferences.setDefault(COMPILER_TASK_PRIORITIES, ""); //$NON-NLS-1$
// optionNames.add(COMPILER_TASK_PRIORITIES);
//
// preferences.setDefault(COMPILER_SOURCE, VERSION_1_3);
// optionNames.add(COMPILER_SOURCE);
//
// preferences.setDefault(COMPILER_COMPLIANCE, VERSION_1_3);
// optionNames.add(COMPILER_COMPLIANCE);
//
// preferences.setDefault(COMPILER_PB_MAX_PER_UNIT, "100"); //$NON-NLS-1$
// optionNames.add(COMPILER_PB_MAX_PER_UNIT);
//
// // Builder settings
// preferences.setDefault(CORE_JAVA_BUILD_RESOURCE_COPY_FILTER, ""); //$NON-NLS-1$
// optionNames.add(CORE_JAVA_BUILD_RESOURCE_COPY_FILTER);
//
// preferences.setDefault(CORE_JAVA_BUILD_INVALID_CLASSPATH, ABORT);
// optionNames.add(CORE_JAVA_BUILD_INVALID_CLASSPATH);
//
// preferences.setDefault(CORE_JAVA_BUILD_DUPLICATE_RESOURCE, WARNING);
// optionNames.add(CORE_JAVA_BUILD_DUPLICATE_RESOURCE);
//
// preferences.setDefault(CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER, CLEAN);
// optionNames.add(CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER);
//
// // JavaCore settings
// preferences.setDefault(CORE_JAVA_BUILD_ORDER, IGNORE);
// optionNames.add(CORE_JAVA_BUILD_ORDER);
//
// preferences.setDefault(CORE_CIRCULAR_CLASSPATH, ERROR);
// optionNames.add(CORE_CIRCULAR_CLASSPATH);
//
// preferences.setDefault(CORE_INCOMPLETE_CLASSPATH, ERROR);
// optionNames.add(CORE_INCOMPLETE_CLASSPATH);
// encoding setting comes from resource plug-in
optionNames.add(CORE_ENCODING);
// Formatter settings
preferences.setDefault(FORMATTER_NEWLINE_OPENING_BRACE, DO_NOT_INSERT);
optionNames.add(FORMATTER_NEWLINE_OPENING_BRACE);
preferences.setDefault(FORMATTER_NEWLINE_CONTROL, DO_NOT_INSERT);
optionNames.add(FORMATTER_NEWLINE_CONTROL);
preferences.setDefault(FORMATTER_CLEAR_BLANK_LINES, PRESERVE_ONE);
optionNames.add(FORMATTER_CLEAR_BLANK_LINES);
preferences.setDefault(FORMATTER_NEWLINE_ELSE_IF, DO_NOT_INSERT);
optionNames.add(FORMATTER_NEWLINE_ELSE_IF);
preferences.setDefault(FORMATTER_NEWLINE_EMPTY_BLOCK, INSERT);
optionNames.add(FORMATTER_NEWLINE_EMPTY_BLOCK);
preferences.setDefault(FORMATTER_LINE_SPLIT, "80"); //$NON-NLS-1$
optionNames.add(FORMATTER_LINE_SPLIT);
preferences.setDefault(FORMATTER_COMPACT_ASSIGNMENT, NORMAL);
optionNames.add(FORMATTER_COMPACT_ASSIGNMENT);
preferences.setDefault(FORMATTER_TAB_CHAR, TAB);
optionNames.add(FORMATTER_TAB_CHAR);
preferences.setDefault(FORMATTER_TAB_SIZE, "4"); //$NON-NLS-1$
optionNames.add(FORMATTER_TAB_SIZE);
// CodeAssist settings
// preferences.setDefault(CODEASSIST_VISIBILITY_CHECK, DISABLED); //$NON-NLS-1$
// optionNames.add(CODEASSIST_VISIBILITY_CHECK);
//
// preferences.setDefault(CODEASSIST_IMPLICIT_QUALIFICATION, DISABLED); //$NON-NLS-1$
// optionNames.add(CODEASSIST_IMPLICIT_QUALIFICATION);
//
// preferences.setDefault(CODEASSIST_FIELD_PREFIXES, ""); //$NON-NLS-1$
// optionNames.add(CODEASSIST_FIELD_PREFIXES);
//
// preferences.setDefault(CODEASSIST_STATIC_FIELD_PREFIXES, ""); //$NON-NLS-1$
// optionNames.add(CODEASSIST_STATIC_FIELD_PREFIXES);
//
// preferences.setDefault(CODEASSIST_LOCAL_PREFIXES, ""); //$NON-NLS-1$
// optionNames.add(CODEASSIST_LOCAL_PREFIXES);
//
// preferences.setDefault(CODEASSIST_ARGUMENT_PREFIXES, ""); //$NON-NLS-1$
// optionNames.add(CODEASSIST_ARGUMENT_PREFIXES);
//
// preferences.setDefault(CODEASSIST_FIELD_SUFFIXES, ""); //$NON-NLS-1$
// optionNames.add(CODEASSIST_FIELD_SUFFIXES);
//
// preferences.setDefault(CODEASSIST_STATIC_FIELD_SUFFIXES, ""); //$NON-NLS-1$
// optionNames.add(CODEASSIST_STATIC_FIELD_SUFFIXES);
//
// preferences.setDefault(CODEASSIST_LOCAL_SUFFIXES, ""); //$NON-NLS-1$
// optionNames.add(CODEASSIST_LOCAL_SUFFIXES);
//
// preferences.setDefault(CODEASSIST_ARGUMENT_SUFFIXES, ""); //$NON-NLS-1$
// optionNames.add(CODEASSIST_ARGUMENT_SUFFIXES);
}
/**
* Runs the given action as an atomic Java model operation.
* * After running a method that modifies Java elements, * registered listeners receive after-the-fact notification of * what just transpired, in the form of a element changed event. * This method allows clients to call a number of * methods that modify java elements and only have element * changed event notifications reported at the end of the entire * batch. *
** If this method is called outside the dynamic scope of another such * call, this method runs the action and then reports a single * element changed event describing the net effect of all changes * done to java elements by the action. *
** If this method is called in the dynamic scope of another such * call, this method simply runs the action. *
* * @param action the action to perform * @param monitor a progress monitor, ornull if progress
* reporting and cancellation are not desired
* @exception CoreException if the operation failed.
* @since 2.1
*/
public static void run(IWorkspaceRunnable action, 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 autobuild mode
workspace.run(new BatchOperation(action), monitor);
}
}
}