/******************************************************************************* 2 * Copyright (c) 2000, 2007 IBM Corporation and others. 3 * All rights reserved. This program and the accompanying materials 4 * are made available under the terms of the Eclipse Public License v1.0 5 * which accompanies this distribution, and is available at 6 * http://www.eclipse.org/legal/epl-v10.html 7 * 8 * Contributors: 9 * IBM Corporation - initial API and implementation 10 * IBM Corporation - added the following constants: 11 * COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE 12 * COMPILER_PB_STATIC_ACCESS_RECEIVER 13 * COMPILER_TASK_TAGS 14 * CORE_CIRCULAR_CLASSPATH 15 * CORE_INCOMPLETE_CLASSPATH 16 * IBM Corporation - added run(IWorkspaceRunnable, IProgressMonitor) 17 * IBM Corporation - added exclusion patterns to source classpath entries 18 * IBM Corporation - added specific output location to source classpath entries 19 * IBM Corporation - added the following constants: 20 * CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER 21 * CORE_JAVA_BUILD_RECREATE_MODIFIED_CLASS_FILES_IN_OUTPUT_FOLDER 22 * CLEAN 23 * IBM Corporation - added getClasspathContainerInitializer(String) 24 * IBM Corporation - added the following constants: 25 * CODEASSIST_ARGUMENT_PREFIXES 26 * CODEASSIST_ARGUMENT_SUFFIXES 27 * CODEASSIST_FIELD_PREFIXES 28 * CODEASSIST_FIELD_SUFFIXES 29 * CODEASSIST_LOCAL_PREFIXES 30 * CODEASSIST_LOCAL_SUFFIXES 31 * CODEASSIST_STATIC_FIELD_PREFIXES 32 * CODEASSIST_STATIC_FIELD_SUFFIXES 33 * COMPILER_PB_CHAR_ARRAY_IN_STRING_CONCATENATION 34 * IBM Corporation - added the following constants: 35 * COMPILER_PB_LOCAL_VARIABLE_HIDING 36 * COMPILER_PB_SPECIAL_PARAMETER_HIDING_FIELD 37 * COMPILER_PB_FIELD_HIDING 38 * COMPILER_PB_POSSIBLE_ACCIDENTAL_BOOLEAN_ASSIGNMENT 39 * CORE_INCOMPATIBLE_JDK_LEVEL 40 * VERSION_1_5 41 * COMPILER_PB_EMPTY_STATEMENT 42 * IBM Corporation - added the following constants: 43 * COMPILER_PB_INDIRECT_STATIC_ACCESS 44 * COMPILER_PB_BOOLEAN_METHOD_THROWING_EXCEPTION 45 * COMPILER_PB_UNNECESSARY_CAST 46 * IBM Corporation - added the following constants: 47 * COMPILER_PB_INVALID_JAVADOC 48 * COMPILER_PB_INVALID_JAVADOC_TAGS 49 * COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY 50 * COMPILER_PB_MISSING_JAVADOC_TAGS 51 * COMPILER_PB_MISSING_JAVADOC_TAGS_VISIBILITY 52 * COMPILER_PB_MISSING_JAVADOC_TAGS_OVERRIDING 53 * COMPILER_PB_MISSING_JAVADOC_COMMENTS 54 * COMPILER_PB_MISSING_JAVADOC_COMMENTS_VISIBILITY 55 * COMPILER_PB_MISSING_JAVADOC_COMMENTS_OVERRIDING 56 * COMPILER_PB_DEPRECATION_WHEN_OVERRIDING_DEPRECATED_METHOD 57 * COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING 58 * IBM Corporation - added the following constants: 59 * TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC 60 * IBM Corporation - added the following constants: 61 * COMPILER_PB_FALLTHROUGH_CASE 62 * COMPILER_PB_PARAMETER_ASSIGNMENT 63 * COMPILER_PB_NULL_REFERENCE 64 * IBM Corporation - added the following constants: 65 * CODEASSIST_DEPRECATION_CHECK 66 * IBM Corporation - added the following constants: 67 * COMPILER_PB_POTENTIAL_NULL_REFERENCE 68 * COMPILER_PB_REDUNDANT_NULL_CHECK 69 * IBM Corporation - added the following constants: 70 * COMPILER_PB_UNUSED_PARAMETER_INCLUDE_DOC_COMMENT_REFERENCE 71 *******************************************************************************/ 72 package org.eclipse.jdt.core; 73 74 import java.io.File JavaDoc; 75 import java.util.ArrayList JavaDoc; 76 import java.util.HashMap JavaDoc; 77 import java.util.Hashtable JavaDoc; 78 import java.util.Map JavaDoc; 79 80 import org.eclipse.core.resources.IContainer; 81 import org.eclipse.core.resources.IFile; 82 import org.eclipse.core.resources.IFolder; 83 import org.eclipse.core.resources.IMarker; 84 import org.eclipse.core.resources.IMarkerDelta; 85 import org.eclipse.core.resources.IProject; 86 import org.eclipse.core.resources.IResource; 87 import org.eclipse.core.resources.IResourceChangeEvent; 88 import org.eclipse.core.resources.IResourceChangeListener; 89 import org.eclipse.core.resources.IWorkspace; 90 import org.eclipse.core.resources.IWorkspaceRoot; 91 import org.eclipse.core.resources.IWorkspaceRunnable; 92 import org.eclipse.core.resources.ResourcesPlugin; 93 import org.eclipse.core.runtime.Assert; 94 import org.eclipse.core.runtime.CoreException; 95 import org.eclipse.core.runtime.IConfigurationElement; 96 import org.eclipse.core.runtime.IExtension; 97 import org.eclipse.core.runtime.IExtensionPoint; 98 import org.eclipse.core.runtime.IPath; 99 import org.eclipse.core.runtime.IProgressMonitor; 100 import org.eclipse.core.runtime.OperationCanceledException; 101 import org.eclipse.core.runtime.Platform; 102 import org.eclipse.core.runtime.Plugin; 103 import org.eclipse.core.runtime.QualifiedName; 104 import org.eclipse.core.runtime.SubProgressMonitor; 105 import org.eclipse.core.runtime.jobs.ISchedulingRule; 106 import org.eclipse.jdt.core.compiler.CharOperation; 107 import org.eclipse.jdt.core.search.IJavaSearchConstants; 108 import org.eclipse.jdt.core.search.IJavaSearchScope; 109 import org.eclipse.jdt.core.search.SearchEngine; 110 import org.eclipse.jdt.core.search.SearchPattern; 111 import org.eclipse.jdt.core.search.TypeNameRequestor; 112 import org.eclipse.jdt.internal.compiler.classfmt.ClassFileConstants; 113 import org.eclipse.jdt.internal.compiler.impl.CompilerOptions; 114 import org.eclipse.jdt.internal.compiler.util.SuffixConstants; 115 import org.eclipse.jdt.internal.core.*; 116 import org.eclipse.jdt.internal.core.builder.JavaBuilder; 117 import org.eclipse.jdt.internal.core.builder.State; 118 import org.eclipse.jdt.internal.core.util.MementoTokenizer; 119 import org.eclipse.jdt.internal.core.util.Messages; 120 import org.eclipse.jdt.internal.core.util.Util; 121 import org.osgi.framework.BundleContext; 122 123 /** 124 * The plug-in runtime class for the Java model plug-in containing the core 125 * (UI-free) support for Java projects. 126 * <p> 127 * Like all plug-in runtime classes (subclasses of <code>Plugin</code>), this 128 * class is automatically instantiated by the platform when the plug-in gets 129 * activated. Clients must not attempt to instantiate plug-in runtime classes 130 * directly. 131 * </p> 132 * <p> 133 * The single instance of this class can be accessed from any plug-in declaring 134 * the Java model plug-in as a prerequisite via 135 * <code>JavaCore.getJavaCore()</code>. The Java model plug-in will be activated 136 * automatically if not already active. 137 * </p> 138 */ 139 public final class JavaCore extends Plugin { 140 141 private static final IResource[] NO_GENERATED_RESOURCES = new IResource[0]; 142 143 private static Plugin JAVA_CORE_PLUGIN = null; 144 /** 145 * The plug-in identifier of the Java core support 146 * (value <code>"org.eclipse.jdt.core"</code>). 147 */ 148 public static final String JavaDoc PLUGIN_ID = "org.eclipse.jdt.core" ; //$NON-NLS-1$ 149 150 /** 151 * The identifier for the Java builder 152 * (value <code>"org.eclipse.jdt.core.javabuilder"</code>). 153 */ 154 public static final String JavaDoc BUILDER_ID = PLUGIN_ID + ".javabuilder" ; //$NON-NLS-1$ 155 156 /** 157 * The identifier for the Java model 158 * (value <code>"org.eclipse.jdt.core.javamodel"</code>). 159 */ 160 public static final String JavaDoc MODEL_ID = PLUGIN_ID + ".javamodel" ; //$NON-NLS-1$ 161 162 /** 163 * The identifier for the Java nature 164 * (value <code>"org.eclipse.jdt.core.javanature"</code>). 165 * The presence of this nature on a project indicates that it is 166 * Java-capable. 167 * 168 * @see org.eclipse.core.resources.IProject#hasNature(java.lang.String) 169 */ 170 public static final String JavaDoc NATURE_ID = PLUGIN_ID + ".javanature" ; //$NON-NLS-1$ 171 172 /** 173 * Name of the handle id attribute in a Java marker. 174 */ 175 protected static final String JavaDoc ATT_HANDLE_ID = 176 "org.eclipse.jdt.internal.core.JavaModelManager.handleId" ; //$NON-NLS-1$ 177 178 /** 179 * Name of the User Library Container id. 180 * @since 3.0 181 */ 182 public static final String JavaDoc USER_LIBRARY_CONTAINER_ID= "org.eclipse.jdt.USER_LIBRARY"; //$NON-NLS-1$ 183 184 // *************** Possible IDs for configurable options. ******************** 185 186 /** 187 * Possible configurable option ID. 188 * @see #getDefaultOptions() 189 */ 190 public static final String JavaDoc COMPILER_LOCAL_VARIABLE_ATTR = PLUGIN_ID + ".compiler.debug.localVariable"; //$NON-NLS-1$ 191 /** 192 * Possible configurable option ID. 193 * @see #getDefaultOptions() 194 */ 195 public static final String JavaDoc COMPILER_LINE_NUMBER_ATTR = PLUGIN_ID + ".compiler.debug.lineNumber"; //$NON-NLS-1$ 196 /** 197 * Possible configurable option ID. 198 * @see #getDefaultOptions() 199 */ 200 public static final String JavaDoc COMPILER_SOURCE_FILE_ATTR = PLUGIN_ID + ".compiler.debug.sourceFile"; //$NON-NLS-1$ 201 /** 202 * Possible configurable option ID. 203 * @see #getDefaultOptions() 204 */ 205 public static final String JavaDoc COMPILER_CODEGEN_UNUSED_LOCAL = PLUGIN_ID + ".compiler.codegen.unusedLocal"; //$NON-NLS-1$ 206 /** 207 * Possible configurable option ID. 208 * @see #getDefaultOptions() 209 */ 210 public static final String JavaDoc COMPILER_CODEGEN_TARGET_PLATFORM = PLUGIN_ID + ".compiler.codegen.targetPlatform"; //$NON-NLS-1$ 211 /** 212 * Possible configurable option ID. 213 * @see #getDefaultOptions() 214 * @since 3.0 215 */ 216 public static final String JavaDoc COMPILER_CODEGEN_INLINE_JSR_BYTECODE = PLUGIN_ID + ".compiler.codegen.inlineJsrBytecode"; //$NON-NLS-1$ 217 /** 218 * Possible configurable option ID. 219 * @see #getDefaultOptions() 220 * @since 3.0 221 */ 222 public static final String JavaDoc COMPILER_DOC_COMMENT_SUPPORT = PLUGIN_ID + ".compiler.doc.comment.support"; //$NON-NLS-1$ 223 /** 224 * Possible configurable option ID. 225 * @see #getDefaultOptions() 226 * @deprecated - discontinued since turning off would violate language specs 227 */ 228 public static final String JavaDoc COMPILER_PB_UNREACHABLE_CODE = PLUGIN_ID + ".compiler.problem.unreachableCode"; //$NON-NLS-1$ 229 /** 230 * Possible configurable option ID. 231 * @see #getDefaultOptions() 232 * @deprecated - discontinued since turning off would violate language specs 233 */ 234 public static final String JavaDoc COMPILER_PB_INVALID_IMPORT = PLUGIN_ID + ".compiler.problem.invalidImport"; //$NON-NLS-1$ 235 /** 236 * Possible configurable option ID. 237 * @see #getDefaultOptions() 238 */ 239 public static final String JavaDoc COMPILER_PB_OVERRIDING_PACKAGE_DEFAULT_METHOD = PLUGIN_ID + ".compiler.problem.overridingPackageDefaultMethod"; //$NON-NLS-1$ 240 /** 241 * Possible configurable option ID. 242 * @see #getDefaultOptions() 243 */ 244 public static final String JavaDoc COMPILER_PB_METHOD_WITH_CONSTRUCTOR_NAME = PLUGIN_ID + ".compiler.problem.methodWithConstructorName"; //$NON-NLS-1$ 245 /** 246 * Possible configurable option ID. 247 * @see #getDefaultOptions() 248 */ 249 public static final String JavaDoc COMPILER_PB_DEPRECATION = PLUGIN_ID + ".compiler.problem.deprecation"; //$NON-NLS-1$ 250 /** 251 * Possible configurable option ID. 252 * @see #getDefaultOptions() 253 * @since 2.1 254 */ 255 public static final String JavaDoc COMPILER_PB_DEPRECATION_IN_DEPRECATED_CODE = PLUGIN_ID + ".compiler.problem.deprecationInDeprecatedCode"; //$NON-NLS-1$ 256 /** 257 * Possible configurable option ID. 258 * @see #getDefaultOptions() 259 * @since 3.0 260 */ 261 public static final String JavaDoc COMPILER_PB_DEPRECATION_WHEN_OVERRIDING_DEPRECATED_METHOD = "org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod"; //$NON-NLS-1$ 262 /** 263 * Possible configurable option ID. 264 * @see #getDefaultOptions() 265 */ 266 public static final String JavaDoc COMPILER_PB_HIDDEN_CATCH_BLOCK = PLUGIN_ID + ".compiler.problem.hiddenCatchBlock"; //$NON-NLS-1$ 267 /** 268 * Possible configurable option ID. 269 * @see #getDefaultOptions() 270 */ 271 public static final String JavaDoc COMPILER_PB_UNUSED_LOCAL = PLUGIN_ID + ".compiler.problem.unusedLocal"; //$NON-NLS-1$ 272 /** 273 * Possible configurable option ID. 274 * @see #getDefaultOptions() 275 */ 276 public static final String JavaDoc COMPILER_PB_UNUSED_PARAMETER = PLUGIN_ID + ".compiler.problem.unusedParameter"; //$NON-NLS-1$ 277 /** 278 * Possible configurable option ID. 279 * @see #getDefaultOptions() 280 * @since 2.1 281 */ 282 public static final String JavaDoc COMPILER_PB_UNUSED_PARAMETER_WHEN_IMPLEMENTING_ABSTRACT = PLUGIN_ID + ".compiler.problem.unusedParameterWhenImplementingAbstract"; //$NON-NLS-1$ 283 /** 284 * Possible configurable option ID. 285 * @see #getDefaultOptions() 286 * @since 2.1 287 */ 288 public static final String JavaDoc COMPILER_PB_UNUSED_PARAMETER_WHEN_OVERRIDING_CONCRETE = PLUGIN_ID + ".compiler.problem.unusedParameterWhenOverridingConcrete"; //$NON-NLS-1$ 289 /** 290 * Possible configurable option ID. 291 * @see #getDefaultOptions() 292 * @since 3.3 293 */ 294 public static final String JavaDoc COMPILER_PB_UNUSED_PARAMETER_INCLUDE_DOC_COMMENT_REFERENCE = PLUGIN_ID + ".compiler.problem.unusedParameterIncludeDocCommentReference"; //$NON-NLS-1$ 295 /** 296 * Possible configurable option ID. 297 * @see #getDefaultOptions() 298 * @since 2.0 299 */ 300 public static final String JavaDoc COMPILER_PB_UNUSED_IMPORT = PLUGIN_ID + ".compiler.problem.unusedImport"; //$NON-NLS-1$ 301 /** 302 * Possible configurable option ID. 303 * @see #getDefaultOptions() 304 */ 305 public static final String JavaDoc COMPILER_PB_SYNTHETIC_ACCESS_EMULATION = PLUGIN_ID + ".compiler.problem.syntheticAccessEmulation"; //$NON-NLS-1$ 306 /** 307 * Possible configurable option ID. 308 * @see #getDefaultOptions() 309 * @since 2.0 310 */ 311 public static final String JavaDoc COMPILER_PB_NON_NLS_STRING_LITERAL = PLUGIN_ID + ".compiler.problem.nonExternalizedStringLiteral"; //$NON-NLS-1$ 312 /** 313 * Possible configurable option ID. 314 * @see #getDefaultOptions() 315 * @since 2.0 316 */ 317 public static final String JavaDoc COMPILER_PB_ASSERT_IDENTIFIER = PLUGIN_ID + ".compiler.problem.assertIdentifier"; //$NON-NLS-1$ 318 /** 319 * Possible configurable option ID. 320 * @see #getDefaultOptions() 321 * @since 3.1 322 */ 323 public static final String JavaDoc COMPILER_PB_ENUM_IDENTIFIER = PLUGIN_ID + ".compiler.problem.enumIdentifier"; //$NON-NLS-1$ 324 /** 325 * Possible configurable option ID. 326 * @see #getDefaultOptions() 327 * @since 2.1 328 */ 329 public static final String JavaDoc COMPILER_PB_STATIC_ACCESS_RECEIVER = PLUGIN_ID + ".compiler.problem.staticAccessReceiver"; //$NON-NLS-1$ 330 /** 331 * Possible configurable option ID. 332 * @see #getDefaultOptions() 333 * @since 3.0 334 */ 335 public static final String JavaDoc COMPILER_PB_INDIRECT_STATIC_ACCESS = PLUGIN_ID + ".compiler.problem.indirectStaticAccess"; //$NON-NLS-1$ 336 /** 337 * Possible configurable option ID. 338 * @see #getDefaultOptions() 339 * @since 2.1 340 */ 341 public static final String JavaDoc COMPILER_PB_NO_EFFECT_ASSIGNMENT = PLUGIN_ID + ".compiler.problem.noEffectAssignment"; //$NON-NLS-1$ 342 /** 343 * Possible configurable option ID. 344 * @see #getDefaultOptions() 345 * @since 2.1 346 */ 347 public static final String JavaDoc COMPILER_PB_INCOMPATIBLE_NON_INHERITED_INTERFACE_METHOD = PLUGIN_ID + ".compiler.problem.incompatibleNonInheritedInterfaceMethod"; //$NON-NLS-1$ 348 /** 349 * Possible configurable option ID. 350 * @see #getDefaultOptions() 351 * @since 2.1 352 */ 353 public static final String JavaDoc COMPILER_PB_UNUSED_PRIVATE_MEMBER = PLUGIN_ID + ".compiler.problem.unusedPrivateMember"; //$NON-NLS-1$ 354 /** 355 * Possible configurable option ID. 356 * @see #getDefaultOptions() 357 * @since 3.0 358 */ 359 public static final String JavaDoc COMPILER_PB_LOCAL_VARIABLE_HIDING = PLUGIN_ID + ".compiler.problem.localVariableHiding"; //$NON-NLS-1$ 360 /** 361 * Possible configurable option ID. 362 * @see #getDefaultOptions() 363 * @since 3.0 364 */ 365 public static final String JavaDoc COMPILER_PB_SPECIAL_PARAMETER_HIDING_FIELD = PLUGIN_ID + ".compiler.problem.specialParameterHidingField"; //$NON-NLS-1$ 366 /** 367 * Possible configurable option ID. 368 * @see #getDefaultOptions() 369 * @since 3.0 370 */ 371 public static final String JavaDoc COMPILER_PB_FIELD_HIDING = PLUGIN_ID + ".compiler.problem.fieldHiding"; //$NON-NLS-1$ 372 /** 373 * Possible configurable option ID. 374 * @see #getDefaultOptions() 375 * @since 3.1 376 */ 377 public static final String JavaDoc COMPILER_PB_TYPE_PARAMETER_HIDING = PLUGIN_ID + ".compiler.problem.typeParameterHiding"; //$NON-NLS-1$ 378 /** 379 * Possible configurable option ID. 380 * @see #getDefaultOptions() 381 * @since 3.0 382 */ 383 public static final String JavaDoc COMPILER_PB_POSSIBLE_ACCIDENTAL_BOOLEAN_ASSIGNMENT = PLUGIN_ID + ".compiler.problem.possibleAccidentalBooleanAssignment"; //$NON-NLS-1$ 384 /** 385 * Possible configurable option ID. 386 * @see #getDefaultOptions() 387 * @since 3.2 388 */ 389 public static final String JavaDoc COMPILER_PB_FALLTHROUGH_CASE = PLUGIN_ID + ".compiler.problem.fallthroughCase"; //$NON-NLS-1$ 390 /** 391 * Possible configurable option ID. 392 * @see #getDefaultOptions() 393 * @since 3.0 394 */ 395 public static final String JavaDoc COMPILER_PB_EMPTY_STATEMENT = PLUGIN_ID + ".compiler.problem.emptyStatement"; //$NON-NLS-1$ 396 /** 397 * Possible configurable option ID. 398 * @see #getDefaultOptions() 399 * @since 3.0 400 */ 401 public static final String JavaDoc COMPILER_PB_BOOLEAN_METHOD_THROWING_EXCEPTION = PLUGIN_ID + ".compiler.problem.booleanMethodThrowingException"; //$NON-NLS-1$ 402 /** 403 * Possible configurable option ID. 404 * @see #getDefaultOptions() 405 * @since 3.0 406 */ 407 public static final String JavaDoc COMPILER_PB_UNNECESSARY_TYPE_CHECK = PLUGIN_ID + ".compiler.problem.unnecessaryTypeCheck"; //$NON-NLS-1$ 408 /** 409 * Possible configurable option ID. 410 * @see #getDefaultOptions() 411 * @since 3.0 412 */ 413 public static final String JavaDoc COMPILER_PB_UNNECESSARY_ELSE = PLUGIN_ID + ".compiler.problem.unnecessaryElse"; //$NON-NLS-1$ 414 /** 415 * Possible configurable option ID. 416 * @see #getDefaultOptions() 417 * @since 3.0 418 */ 419 public static final String JavaDoc COMPILER_PB_UNDOCUMENTED_EMPTY_BLOCK = PLUGIN_ID + ".compiler.problem.undocumentedEmptyBlock"; //$NON-NLS-1$ 420 /** 421 * Possible configurable option ID. 422 * @see #getDefaultOptions() 423 * @since 3.0 424 */ 425 public static final String JavaDoc COMPILER_PB_FINALLY_BLOCK_NOT_COMPLETING = PLUGIN_ID + ".compiler.problem.finallyBlockNotCompletingNormally"; //$NON-NLS-1$ 426 /** 427 * Possible configurable option ID. 428 * @see #getDefaultOptions() 429 * @since 3.0 430 */ 431 public static final String JavaDoc COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION = PLUGIN_ID + ".compiler.problem.unusedDeclaredThrownException"; //$NON-NLS-1$ 432 /** 433 * Possible configurable option ID. 434 * @see #getDefaultOptions() 435 * @since 3.0 436 */ 437 public static final String JavaDoc COMPILER_PB_UNUSED_DECLARED_THROWN_EXCEPTION_WHEN_OVERRIDING = PLUGIN_ID + ".compiler.problem.unusedDeclaredThrownExceptionWhenOverriding"; //$NON-NLS-1$ 438 /** 439 * Possible configurable option ID. 440 * @see #getDefaultOptions() 441 * @since 3.0 442 */ 443 public static final String JavaDoc COMPILER_PB_UNQUALIFIED_FIELD_ACCESS = PLUGIN_ID + ".compiler.problem.unqualifiedFieldAccess"; //$NON-NLS-1$ 444 /** 445 * Possible configurable option ID. 446 * @see #getDefaultOptions() 447 * @deprecated - got renamed into {@link #COMPILER_PB_UNCHECKED_TYPE_OPERATION} 448 * @since 3.1 449 */ 450 public static final String JavaDoc COMPILER_PB_UNSAFE_TYPE_OPERATION = PLUGIN_ID + ".compiler.problem.uncheckedTypeOperation"; //$NON-NLS-1$ 451 /** 452 * Possible configurable option ID. 453 * @see #getDefaultOptions() 454 * @since 3.1 455 */ 456 public static final String JavaDoc COMPILER_PB_UNCHECKED_TYPE_OPERATION = PLUGIN_ID + ".compiler.problem.uncheckedTypeOperation"; //$NON-NLS-1$ 457 /** 458 * Possible configurable option ID. 459 * @see #getDefaultOptions() 460 * @since 3.2 461 */ 462 public static final String JavaDoc COMPILER_PB_RAW_TYPE_REFERENCE = PLUGIN_ID + ".compiler.problem.rawTypeReference"; //$NON-NLS-1$ 463 /** 464 * Possible configurable option ID. 465 * @see #getDefaultOptions() 466 * @since 3.1 467 */ 468 public static final String JavaDoc COMPILER_PB_FINAL_PARAMETER_BOUND = PLUGIN_ID + ".compiler.problem.finalParameterBound"; //$NON-NLS-1$ 469 /** 470 * Possible configurable option ID. 471 * @see #getDefaultOptions() 472 * @since 3.1 473 */ 474 public static final String JavaDoc COMPILER_PB_MISSING_SERIAL_VERSION = PLUGIN_ID + ".compiler.problem.missingSerialVersion"; //$NON-NLS-1$ 475 /** 476 * Possible configurable option ID. 477 * @see #getDefaultOptions() 478 * @since 3.1 479 */ 480 public static final String JavaDoc COMPILER_PB_VARARGS_ARGUMENT_NEED_CAST = PLUGIN_ID + ".compiler.problem.varargsArgumentNeedCast"; //$NON-NLS-1$ 481 /** 482 * Possible configurable option ID. 483 * @see #getDefaultOptions() 484 * @since 3.1 485 */ 486 public static final String JavaDoc COMPILER_PB_AUTOBOXING = PLUGIN_ID + ".compiler.problem.autoboxing"; //$NON-NLS-1$ 487 /** 488 * Possible configurable option ID. 489 * @see #getDefaultOptions() 490 * @since 3.1 491 */ 492 public static final String JavaDoc COMPILER_PB_ANNOTATION_SUPER_INTERFACE = PLUGIN_ID + ".compiler.problem.annotationSuperInterface"; //$NON-NLS-1$ 493 /** 494 * Possible configurable option ID. 495 * @see #getDefaultOptions() 496 * @since 3.1 497 */ 498 public static final String JavaDoc COMPILER_PB_MISSING_OVERRIDE_ANNOTATION = PLUGIN_ID + ".compiler.problem.missingOverrideAnnotation"; //$NON-NLS-1$ 499 /** 500 * Possible configurable option ID. 501 * @see #getDefaultOptions() 502 * @since 3.1 503 */ 504 public static final String JavaDoc COMPILER_PB_MISSING_DEPRECATED_ANNOTATION = PLUGIN_ID + ".compiler.problem.missingDeprecatedAnnotation"; //$NON-NLS-1$ 505 /** 506 * Possible configurable option ID. 507 * @see #getDefaultOptions() 508 * @since 3.1 509 */ 510 public static final String JavaDoc COMPILER_PB_INCOMPLETE_ENUM_SWITCH = PLUGIN_ID + ".compiler.problem.incompleteEnumSwitch"; //$NON-NLS-1$ 511 /** 512 * Possible configurable option ID. 513 * @since 3.1 514 * @deprecated use {@link #COMPILER_PB_NULL_REFERENCE} instead 515 */ 516 public static final String JavaDoc COMPILER_PB_INCONSISTENT_NULL_CHECK = PLUGIN_ID + ".compiler.problem.inconsistentNullCheck"; //$NON-NLS-1$ 517 /** 518 * Possible configurable option ID. 519 * @see #getDefaultOptions() 520 * @since 3.2 521 */ 522 public static final String JavaDoc COMPILER_PB_UNUSED_LABEL = PLUGIN_ID + ".compiler.problem.unusedLabel"; //$NON-NLS-1$ 523 /** 524 * Possible configurable option ID. 525 * @see #getDefaultOptions() 526 * @since 3.0 527 */ 528 public static final String JavaDoc COMPILER_PB_INVALID_JAVADOC = PLUGIN_ID + ".compiler.problem.invalidJavadoc"; //$NON-NLS-1$ 529 /** 530 * Possible configurable option ID. 531 * @see #getDefaultOptions() 532 * @since 3.0 533 */ 534 public static final String JavaDoc COMPILER_PB_INVALID_JAVADOC_TAGS = PLUGIN_ID + ".compiler.problem.invalidJavadocTags"; //$NON-NLS-1$ 535 /** 536 * Possible configurable option ID. 537 * @see #getDefaultOptions() 538 * @since 3.1 539 */ 540 public static final String JavaDoc COMPILER_PB_INVALID_JAVADOC_TAGS__DEPRECATED_REF = PLUGIN_ID + ".compiler.problem.invalidJavadocTagsDeprecatedRef"; //$NON-NLS-1$ 541 /** 542 * Possible configurable option ID. 543 * @see #getDefaultOptions() 544 * @since 3.1 545 */ 546 public static final String JavaDoc COMPILER_PB_INVALID_JAVADOC_TAGS__NOT_VISIBLE_REF = PLUGIN_ID + ".compiler.problem.invalidJavadocTagsNotVisibleRef"; //$NON-NLS-1$ 547 /** 548 * Possible configurable option ID. 549 * @see #getDefaultOptions() 550 * @since 3.0 551 */ 552 public static final String JavaDoc COMPILER_PB_INVALID_JAVADOC_TAGS_VISIBILITY = PLUGIN_ID + ".compiler.problem.invalidJavadocTagsVisibility"; //$NON-NLS-1$ 553 /** 554 * Possible configurable option ID. 555 * @see #getDefaultOptions() 556 * @since 3.0 557 */ 558 public static final String JavaDoc COMPILER_PB_MISSING_JAVADOC_TAGS = PLUGIN_ID + ".compiler.problem.missingJavadocTags"; //$NON-NLS-1$ 559 /** 560 * Possible configurable option ID. 561 * @see #getDefaultOptions() 562 * @since 3.0 563 */ 564 public static final String JavaDoc COMPILER_PB_MISSING_JAVADOC_TAGS_VISIBILITY = PLUGIN_ID + ".compiler.problem.missingJavadocTagsVisibility"; //$NON-NLS-1$ 565 /** 566 * Possible configurable option ID. 567 * @see #getDefaultOptions() 568 * @since 3.0 569 */ 570 public static final String JavaDoc COMPILER_PB_MISSING_JAVADOC_TAGS_OVERRIDING = PLUGIN_ID + ".compiler.problem.missingJavadocTagsOverriding"; //$NON-NLS-1$ 571 /** 572 * Possible configurable option ID. 573 * @see #getDefaultOptions() 574 * @since 3.0 575 */ 576 public static final String JavaDoc COMPILER_PB_MISSING_JAVADOC_COMMENTS = PLUGIN_ID + ".compiler.problem.missingJavadocComments"; //$NON-NLS-1$ 577 /** 578 * Possible configurable option ID. 579 * @see #getDefaultOptions() 580 * @since 3.0 581 */ 582 public static final String JavaDoc COMPILER_PB_MISSING_JAVADOC_COMMENTS_VISIBILITY = PLUGIN_ID + ".compiler.problem.missingJavadocCommentsVisibility"; //$NON-NLS-1$ 583 /** 584 * Possible configurable option ID. 585 * @see #getDefaultOptions() 586 * @since 3.0 587 */ 588 public static final String JavaDoc COMPILER_PB_MISSING_JAVADOC_COMMENTS_OVERRIDING = PLUGIN_ID + ".compiler.problem.missingJavadocCommentsOverriding"; //$NON-NLS-1$ 589 /** 590 * Possible configurable option ID. 591 * @see #getDefaultOptions() 592 * @since 2.1 593 */ 594 public static final String JavaDoc COMPILER_PB_CHAR_ARRAY_IN_STRING_CONCATENATION = PLUGIN_ID + ".compiler.problem.noImplicitStringConversion"; //$NON-NLS-1$ 595 /** 596 * Possible configurable option ID. 597 * @see #getDefaultOptions() 598 * @since 2.0 599 */ 600 public static final String JavaDoc COMPILER_PB_MAX_PER_UNIT = PLUGIN_ID + ".compiler.maxProblemPerUnit"; //$NON-NLS-1$ 601 /** 602 * Possible configurable option ID. 603 * @see #getDefaultOptions() 604 * @since 3.2 605 */ 606 public static final String JavaDoc COMPILER_PB_FATAL_OPTIONAL_ERROR = PLUGIN_ID + ".compiler.problem.fatalOptionalError"; //$NON-NLS-1$ 607 /** 608 * Possible configurable option ID. 609 * @see #getDefaultOptions() 610 * @since 3.2 611 */ 612 public static final String JavaDoc COMPILER_PB_PARAMETER_ASSIGNMENT = PLUGIN_ID + ".compiler.problem.parameterAssignment"; //$NON-NLS-1$ 613 /** 614 * Possible configurable option ID. 615 * @see #getDefaultOptions() 616 * @since 2.0 617 */ 618 public static final String JavaDoc COMPILER_SOURCE = PLUGIN_ID + ".compiler.source"; //$NON-NLS-1$ 619 /** 620 * Possible configurable option ID. 621 * @see #getDefaultOptions() 622 * @since 2.0 623 */ 624 public static final String JavaDoc COMPILER_COMPLIANCE = PLUGIN_ID + ".compiler.compliance"; //$NON-NLS-1$ 625 /** 626 * Possible configurable option ID. 627 * @see #getDefaultOptions() 628 * @since 2.1 629 */ 630 public static final String JavaDoc COMPILER_TASK_PRIORITIES = PLUGIN_ID + ".compiler.taskPriorities"; //$NON-NLS-1$ 631 /** 632 * Possible configurable option value for COMPILER_TASK_PRIORITIES. 633 * @see #getDefaultOptions() 634 * @since 2.1 635 */ 636 public static final String JavaDoc COMPILER_TASK_PRIORITY_HIGH = "HIGH"; //$NON-NLS-1$ 637 /** 638 * Possible configurable option value for COMPILER_TASK_PRIORITIES. 639 * @see #getDefaultOptions() 640 * @since 2.1 641 */ 642 public static final String JavaDoc COMPILER_TASK_PRIORITY_LOW = "LOW"; //$NON-NLS-1$ 643 /** 644 * Possible configurable option value for COMPILER_TASK_PRIORITIES. 645 * @see #getDefaultOptions() 646 * @since 2.1 647 */ 648 public static final String JavaDoc COMPILER_TASK_PRIORITY_NORMAL = "NORMAL"; //$NON-NLS-1$ 649 /** 650 * Possible configurable option ID. 651 * @see #getDefaultOptions() 652 * @since 2.1 653 */ 654 public static final String JavaDoc COMPILER_TASK_TAGS = PLUGIN_ID + ".compiler.taskTags"; //$NON-NLS-1$ 655 /** 656 * Possible configurable option ID. 657 * @see #getDefaultOptions() 658 * @since 3.0 659 */ 660 public static final String JavaDoc COMPILER_TASK_CASE_SENSITIVE = PLUGIN_ID + ".compiler.taskCaseSensitive"; //$NON-NLS-1$ 661 /** 662 * Possible configurable option ID. 663 * @see #getDefaultOptions() 664 * @since 3.1 665 */ 666 public static final String JavaDoc COMPILER_PB_FORBIDDEN_REFERENCE = PLUGIN_ID + ".compiler.problem.forbiddenReference"; //$NON-NLS-1$ 667 /** 668 * Possible configurable option ID. 669 * @see #getDefaultOptions() 670 * @since 3.1 671 */ 672 public static final String JavaDoc COMPILER_PB_DISCOURAGED_REFERENCE = PLUGIN_ID + ".compiler.problem.discouragedReference"; //$NON-NLS-1$ 673 /** 674 * Possible configurable option ID. 675 * @see #getDefaultOptions() 676 * @since 3.1 677 */ 678 public static final String JavaDoc COMPILER_PB_SUPPRESS_WARNINGS = PLUGIN_ID + ".compiler.problem.suppressWarnings"; //$NON-NLS-1$ 679 /** 680 * Possible configurable option ID. 681 * @see #getDefaultOptions() 682 * @since 3.1 683 */ 684 public static final String JavaDoc COMPILER_PB_UNHANDLED_WARNING_TOKEN = PLUGIN_ID + ".compiler.problem.unhandledWarningToken"; //$NON-NLS-1$ 685 /** 686 * Possible configurable option ID. 687 * @see #getDefaultOptions() 688 * @since 3.2 689 */ 690 public static final String JavaDoc COMPILER_PB_NULL_REFERENCE = PLUGIN_ID + ".compiler.problem.nullReference"; //$NON-NLS-1$ 691 /** 692 * Possible configurable option ID. 693 * @see #getDefaultOptions() 694 * @since 3.3 695 */ 696 public static final String JavaDoc COMPILER_PB_POTENTIAL_NULL_REFERENCE = PLUGIN_ID + ".compiler.problem.potentialNullReference"; //$NON-NLS-1$ 697 /** 698 * Possible configurable option ID. 699 * @see #getDefaultOptions() 700 * @since 3.3 701 */ 702 public static final String JavaDoc COMPILER_PB_REDUNDANT_NULL_CHECK = PLUGIN_ID + ".compiler.problem.redundantNullCheck"; //$NON-NLS-1$ 703 /** 704 * Possible configurable option ID. 705 * @see #getDefaultOptions() 706 * @since 3.3 707 */ 708 public static final String JavaDoc COMPILER_PB_OVERRIDING_METHOD_WITHOUT_SUPER_INVOCATION = PLUGIN_ID + ".compiler.problem.overridingMethodWithoutSuperInvocation"; //$NON-NLS-1$ 709 /** 710 * Possible configurable option ID. 711 * @see #getDefaultOptions() 712 */ 713 public static final String JavaDoc CORE_JAVA_BUILD_ORDER = PLUGIN_ID + ".computeJavaBuildOrder"; //$NON-NLS-1$ 714 /** 715 * Possible configurable option ID. 716 * @see #getDefaultOptions() 717 * @since 2.0 718 */ 719 public static final String JavaDoc CORE_JAVA_BUILD_RESOURCE_COPY_FILTER = PLUGIN_ID + ".builder.resourceCopyExclusionFilter"; //$NON-NLS-1$ 720 /** 721 * Possible configurable option ID. 722 * @see #getDefaultOptions() 723 * @since 2.1 724 */ 725 public static final String JavaDoc CORE_JAVA_BUILD_DUPLICATE_RESOURCE = PLUGIN_ID + ".builder.duplicateResourceTask"; //$NON-NLS-1$ 726 /** 727 * Possible configurable option ID. 728 * @see #getDefaultOptions() 729 * @since 2.1 730 */ 731 public static final String JavaDoc CORE_JAVA_BUILD_CLEAN_OUTPUT_FOLDER = PLUGIN_ID + ".builder.cleanOutputFolder"; //$NON-NLS-1$ 732 /** 733 * Possible configurable option ID. 734 * @see #getDefaultOptions() 735 * @since 3.2 736 */ 737 public static final String JavaDoc CORE_JAVA_BUILD_RECREATE_MODIFIED_CLASS_FILES_IN_OUTPUT_FOLDER = PLUGIN_ID + ".builder.recreateModifiedClassFileInOutputFolder"; //$NON-NLS-1$ 738 /** 739 * Possible configurable option ID. 740 * @see #getDefaultOptions() 741 * @since 2.1 742 */ 743 public static final String JavaDoc CORE_INCOMPLETE_CLASSPATH = PLUGIN_ID + ".incompleteClasspath"; //$NON-NLS-1$ 744 /** 745 * Possible configurable option ID. 746 * @see #getDefaultOptions() 747 * @since 2.1 748 */ 749 public static final String JavaDoc CORE_CIRCULAR_CLASSPATH = PLUGIN_ID + ".circularClasspath"; //$NON-NLS-1$ 750 /** 751 * Possible configurable option ID. 752 * @see #getDefaultOptions() 753 * @since 3.0 754 */ 755 public static final String JavaDoc CORE_INCOMPATIBLE_JDK_LEVEL = PLUGIN_ID + ".incompatibleJDKLevel"; //$NON-NLS-1$ 756 /** 757 * Possible configurable option ID. 758 * @see #getDefaultOptions() 759 * @since 2.0 760 */ 761 public static final String JavaDoc CORE_JAVA_BUILD_INVALID_CLASSPATH = PLUGIN_ID + ".builder.invalidClasspath"; //$NON-NLS-1$ 762 /** 763 * Possible configurable option ID. 764 * @see #getDefaultOptions() 765 * @since 2.0 766 */ 767 public static final String JavaDoc CORE_ENCODING = PLUGIN_ID + ".encoding"; //$NON-NLS-1$ 768 /** 769 * Possible configurable option ID. 770 * @see #getDefaultOptions() 771 * @since 2.1 772 */ 773 public static final String JavaDoc CORE_ENABLE_CLASSPATH_EXCLUSION_PATTERNS = PLUGIN_ID + ".classpath.exclusionPatterns"; //$NON-NLS-1$ 774 /** 775 * Possible configurable option ID. 776 * @see #getDefaultOptions() 777 * @since 2.1 778 */ 779 public static final String JavaDoc CORE_ENABLE_CLASSPATH_MULTIPLE_OUTPUT_LOCATIONS = PLUGIN_ID + ".classpath.multipleOutputLocations"; //$NON-NLS-1$ 780 /** 781 * Default task tag 782 * @deprecated Use {@link #DEFAULT_TASK_TAGS} instead 783 * @since 2.1 784 */ 785 public static final String JavaDoc DEFAULT_TASK_TAG = "TODO"; //$NON-NLS-1$ 786 /** 787 * Default task priority 788 * @deprecated Use {@link #DEFAULT_TASK_PRIORITIES} instead 789 * @since 2.1 790 */ 791 public static final String JavaDoc DEFAULT_TASK_PRIORITY = "NORMAL"; //$NON-NLS-1$ 792 /** 793 * Default task tag 794 * @since 3.0 795 */ 796 public static final String JavaDoc DEFAULT_TASK_TAGS = "TODO,FIXME,XXX"; //$NON-NLS-1$ 797 /** 798 * Default task priority 799 * @since 3.0 800 */ 801 public static final String JavaDoc DEFAULT_TASK_PRIORITIES = "NORMAL,HIGH,NORMAL"; //$NON-NLS-1$ 802 /** 803 * Possible configurable option ID. 804 * @see #getDefaultOptions() 805 * @since 2.0 806 * @deprecated Use {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_BRACE_POSITION_FOR_ANONYMOUS_TYPE_DECLARATION}, 807 * {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_BRACE_POSITION_FOR_BLOCK} , 808 * {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_BRACE_POSITION_FOR_CONSTRUCTOR_DECLARATION}, 809 * {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_BRACE_POSITION_FOR_METHOD_DECLARATION}, 810 * {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_BRACE_POSITION_FOR_SWITCH}, 811 * {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_BRACE_POSITION_FOR_TYPE_DECLARATION} instead 812 */ 813 public static final String JavaDoc FORMATTER_NEWLINE_OPENING_BRACE = PLUGIN_ID + ".formatter.newline.openingBrace"; //$NON-NLS-1$ 814 /** 815 * Possible configurable option ID. 816 * @see #getDefaultOptions() 817 * @since 2.0 818 * @deprecated Use {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_INSERT_NEW_LINE_BEFORE_CATCH_IN_TRY_STATEMENT}, 819 * {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_INSERT_NEW_LINE_BEFORE_ELSE_IN_IF_STATEMENT}, 820 * {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_INSERT_NEW_LINE_BEFORE_FINALLY_IN_TRY_STATEMENT}, 821 * {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_INSERT_NEW_LINE_BEFORE_WHILE_IN_DO_STATEMENT} instead. 822 */ 823 public static final String JavaDoc FORMATTER_NEWLINE_CONTROL = PLUGIN_ID + ".formatter.newline.controlStatement"; //$NON-NLS-1$ 824 /** 825 * Possible configurable option ID. 826 * @see #getDefaultOptions() 827 * @since 2.0 828 * @deprecated Use {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_COMPACT_ELSE_IF} instead 829 */ 830 public static final String JavaDoc FORMATTER_NEWLINE_ELSE_IF = PLUGIN_ID + ".formatter.newline.elseIf"; //$NON-NLS-1$ 831 /** 832 * Possible configurable option ID. 833 * @see #getDefaultOptions() 834 * @since 2.0 835 * @deprecated Use {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_INSERT_NEW_LINE_IN_EMPTY_BLOCK} instead 836 */ 837 public static final String JavaDoc FORMATTER_NEWLINE_EMPTY_BLOCK = PLUGIN_ID + ".formatter.newline.emptyBlock"; //$NON-NLS-1$ 838 /** 839 * Possible configurable option ID. 840 * @see #getDefaultOptions() 841 * @since 2.0 842 * @deprecated Use {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_NUMBER_OF_EMPTY_LINES_TO_PRESERVE} instead 843 */ 844 public static final String JavaDoc FORMATTER_CLEAR_BLANK_LINES = PLUGIN_ID + ".formatter.newline.clearAll"; //$NON-NLS-1$ 845 /** 846 * Possible configurable option ID. 847 * @see #getDefaultOptions() 848 * @since 2.0 849 * @deprecated Use {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_LINE_SPLIT} instead 850 */ 851 public static final String JavaDoc FORMATTER_LINE_SPLIT = PLUGIN_ID + ".formatter.lineSplit"; //$NON-NLS-1$ 852 /** 853 * Possible configurable option ID. 854 * @see #getDefaultOptions() 855 * @since 2.0 856 * @deprecated Use {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_INSERT_SPACE_BEFORE_ASSIGNMENT_OPERATOR} instead 857 */ 858 public static final String JavaDoc FORMATTER_COMPACT_ASSIGNMENT = PLUGIN_ID + ".formatter.style.assignment"; //$NON-NLS-1$ 859 /** 860 * Possible configurable option ID. 861 * @see #getDefaultOptions() 862 * @since 2.0 863 * @deprecated Use {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_TAB_CHAR}} instead 864 */ 865 public static final String JavaDoc FORMATTER_TAB_CHAR = PLUGIN_ID + ".formatter.tabulation.char"; //$NON-NLS-1$ 866 /** 867 * Possible configurable option ID. 868 * @see #getDefaultOptions() 869 * @since 2.0 870 * @deprecated Use {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_TAB_SIZE} instead 871 */ 872 public static final String JavaDoc FORMATTER_TAB_SIZE = PLUGIN_ID + ".formatter.tabulation.size"; //$NON-NLS-1$ 873 /** 874 * Possible configurable option ID 875 * @see #getDefaultOptions() 876 * @since 2.1 877 * @deprecated Use {@link org.eclipse.jdt.core.formatter.DefaultCodeFormatterConstants#FORMATTER_INSERT_SPACE_AFTER_CLOSING_PAREN_IN_CAST} instead 878 */ 879 public static final String JavaDoc FORMATTER_SPACE_CASTEXPRESSION = PLUGIN_ID + ".formatter.space.castexpression"; //$NON-NLS-1$ 880 /** 881 * Possible configurable option ID. 882 * @see #getDefaultOptions() 883 * @since 2.0 884 */ 885 public static final String JavaDoc CODEASSIST_VISIBILITY_CHECK = PLUGIN_ID + ".codeComplete.visibilityCheck"; //$NON-NLS-1$ 886 /** 887 * Possible configurable option ID. 888 * @see #getDefaultOptions() 889 * @since 3.2 890 */ 891 public static final String JavaDoc CODEASSIST_DEPRECATION_CHECK = PLUGIN_ID + ".codeComplete.deprecationCheck"; //$NON-NLS-1$ 892 /** 893 * Possible configurable option ID. 894 * @see #getDefaultOptions() 895 * @since 3.2 896 */ 897 public static final String JavaDoc CODEASSIST_CAMEL_CASE_MATCH = PLUGIN_ID + ".codeComplete.camelCaseMatch"; //$NON-NLS-1$ 898 /** 899 * Possible configurable option ID. 900 * @see #getDefaultOptions() 901 * @since 2.0 902 */ 903 public static final String JavaDoc CODEASSIST_IMPLICIT_QUALIFICATION = PLUGIN_ID + ".codeComplete.forceImplicitQualification"; //$NON-NLS-1$ 904 /** 905 * Possible configurable option ID. 906 * @see #getDefaultOptions() 907 * @since 2.1 908 */ 909 public static final String JavaDoc CODEASSIST_FIELD_PREFIXES = PLUGIN_ID + ".codeComplete.fieldPrefixes"; //$NON-NLS-1$ 910 /** 911 * Possible configurable option ID. 912 * @see #getDefaultOptions() 913 * @since 2.1 914 */ 915 public static final String JavaDoc CODEASSIST_STATIC_FIELD_PREFIXES = PLUGIN_ID + ".codeComplete.staticFieldPrefixes"; //$NON-NLS-1$ 916 /** 917 * Possible configurable option ID. 918 * @see #getDefaultOptions() 919 * @since 2.1 920 */ 921 public static final String JavaDoc CODEASSIST_LOCAL_PREFIXES = PLUGIN_ID + ".codeComplete.localPrefixes"; //$NON-NLS-1$ 922 /** 923 * Possible configurable option ID. 924 * @see #getDefaultOptions() 925 * @since 2.1 926 */ 927 public static final String JavaDoc CODEASSIST_ARGUMENT_PREFIXES = PLUGIN_ID + ".codeComplete.argumentPrefixes"; //$NON-NLS-1$ 928 /** 929 * Possible configurable option ID. 930 * @see #getDefaultOptions() 931 * @since 2.1 932 */ 933 public static final String JavaDoc CODEASSIST_FIELD_SUFFIXES = PLUGIN_ID + ".codeComplete.fieldSuffixes"; //$NON-NLS-1$ 934 /** 935 * Possible configurable option ID. 936 * @see #getDefaultOptions() 937 * @since 2.1 938 */ 939 public static final String JavaDoc CODEASSIST_STATIC_FIELD_SUFFIXES = PLUGIN_ID + ".codeComplete.staticFieldSuffixes"; //$NON-NLS-1$ 940 /** 941 * Possible configurable option ID. 942 * @see #getDefaultOptions() 943 * @since 2.1 944 */ 945 public static final String JavaDoc CODEASSIST_LOCAL_SUFFIXES = PLUGIN_ID + ".codeComplete.localSuffixes"; //$NON-NLS-1$ 946 /** 947 * Possible configurable option ID. 948 * @see #getDefaultOptions() 949 * @since 2.1 950 */ 951 public static final String JavaDoc CODEASSIST_ARGUMENT_SUFFIXES = PLUGIN_ID + ".codeComplete.argumentSuffixes"; //$NON-NLS-1$ 952 /** 953 * Possible configurable option ID. 954 * @see #getDefaultOptions() 955 * @since 3.1 956 */ 957 public static final String JavaDoc CODEASSIST_FORBIDDEN_REFERENCE_CHECK= PLUGIN_ID + ".codeComplete.forbiddenReferenceCheck"; //$NON-NLS-1$ 958 /** 959 * Possible configurable option ID. 960 * @see #getDefaultOptions() 961 * @since 3.1 962 */ 963 public static final String JavaDoc CODEASSIST_DISCOURAGED_REFERENCE_CHECK= PLUGIN_ID + ".codeComplete.discouragedReferenceCheck"; //$NON-NLS-1$ 964 /** 965 * Possible configurable option ID. 966 * @see #getDefaultOptions() 967 * @since 3.3 968 */ 969 public static final String JavaDoc CODEASSIST_SUGGEST_STATIC_IMPORTS= PLUGIN_ID + ".codeComplete.suggestStaticImports"; //$NON-NLS-1$ 970 /** 971 * Possible configurable option ID. 972 * @see #getDefaultOptions() 973 * @since 3.2 974 */ 975 public static final String JavaDoc TIMEOUT_FOR_PARAMETER_NAME_FROM_ATTACHED_JAVADOC = PLUGIN_ID + ".timeoutForParameterNameFromAttachedJavadoc"; //$NON-NLS-1$ 976 977 /** 978 * Possible configurable option value. 979 * @see #getDefaultOptions() 980 */ 981 public static final String JavaDoc GENERATE = "generate"; //$NON-NLS-1$ 982 /** 983 * Possible configurable option value. 984 * @see #getDefaultOptions() 985 */ 986 public static final String JavaDoc DO_NOT_GENERATE = "do not generate"; //$NON-NLS-1$ 987 /** 988 * Possible configurable option value. 989 * @see #getDefaultOptions() 990 */ 991 public static final String JavaDoc PRESERVE = "preserve"; //$NON-NLS-1$ 992 /** 993 * Possible configurable option value. 994 * @see #getDefaultOptions() 995 */ 996 public static final String JavaDoc OPTIMIZE_OUT = "optimize out"; //$NON-NLS-1$ 997 /** 998 * Possible configurable option value. 999 * @see #getDefaultOptions() 1000 */ 1001 public static final String JavaDoc VERSION_1_1 = "1.1"; //$NON-NLS-1$ 1002 /** 1003 * Possible configurable option value. 1004 * @see #getDefaultOptions() 1005 */ 1006 public static final String JavaDoc VERSION_1_2 = "1.2"; //$NON-NLS-1$ 1007 /** 1008 * Possible configurable option value. 1009 * @see #getDefaultOptions() 1010 * @since 2.0 1011 */ 1012 public static final String JavaDoc VERSION_1_3 = "1.3"; //$NON-NLS-1$ 1013 /** 1014 * Possible configurable option value. 1015 * @see #getDefaultOptions() 1016 * @since 2.0 1017 */ 1018 public static final String JavaDoc VERSION_1_4 = "1.4"; //$NON-NLS-1$ 1019 /** 1020 * Possible configurable option value. 1021 * @see #getDefaultOptions() 1022 * @since 3.0 1023 */ 1024 public static final String JavaDoc VERSION_1_5 = "1.5"; //$NON-NLS-1$ 1025 /** 1026 * Possible configurable option value. 1027 * @see #getDefaultOptions() 1028 * @since 3.2 1029 */ 1030 public static final String JavaDoc VERSION_1_6 = "1.6"; //$NON-NLS-1$ 1031 /** 1032 * Possible configurable option value. 1033 * @see #getDefaultOptions() 1034 * @since 3.3 1035 */ 1036 public static final String JavaDoc VERSION_1_7 = "1.7"; //$NON-NLS-1$ 1037 /** 1038 * Possible configurable option value. 1039 * @see #getDefaultOptions() 1040 * @since 2.0 1041 */ 1042 public static final String JavaDoc ABORT = "abort"; //$NON-NLS-1$ 1043 /** 1044 * Possible configurable option value. 1045 * @see #getDefaultOptions() 1046 */ 1047 public static final String JavaDoc ERROR = "error"; //$NON-NLS-1$ 1048 /** 1049 * Possible configurable option value. 1050 * @see #getDefaultOptions() 1051 */ 1052 public static final String JavaDoc WARNING = "warning"; //$NON-NLS-1$ 1053 /** 1054 * Possible configurable option value. 1055 * @see #getDefaultOptions() 1056 */ 1057 public static final String JavaDoc IGNORE = "ignore"; //$NON-NLS-1$ 1058 /** 1059 * Possible configurable option value. 1060 * @see #getDefaultOptions() 1061 */ 1062 public static final String JavaDoc COMPUTE = "compute"; //$NON-NLS-1$ 1063 /** 1064 * Possible configurable option value. 1065 * @see #getDefaultOptions() 1066 * @since 2.0 1067 */ 1068 public static final String JavaDoc INSERT = "insert"; //$NON-NLS-1$ 1069 /** 1070 * Possible configurable option value. 1071 * @see #getDefaultOptions() 1072 * @since 2.0 1073 */ 1074 public static final String JavaDoc DO_NOT_INSERT = "do not insert"; //$NON-NLS-1$ 1075 /** 1076 * Possible configurable option value. 1077 * @see #getDefaultOptions() 1078 * @since 2.0 1079 */ 1080 public static final String JavaDoc PRESERVE_ONE = "preserve one"; //$NON-NLS-1$ 1081 /** 1082 * Possible configurable option value. 1083 * @see #getDefaultOptions() 1084 * @since 2.0 1085 */ 1086 public static final String JavaDoc CLEAR_ALL = "clear all"; //$NON-NLS-1$ 1087 /** 1088 * Possible configurable option value. 1089 * @see #getDefaultOptions() 1090 * @since 2.0 1091 */ 1092 public static final String JavaDoc NORMAL = "normal"; //$NON-NLS-1$ 1093 /** 1094 * Possible configurable option value. 1095 * @see #getDefaultOptions() 1096 * @since 2.0 1097 */ 1098 public static final String JavaDoc COMPACT = "compact"; //$NON-NLS-1$ 1099 /** 1100 * Possible configurable option value. 1101 * @see #getDefaultOptions() 1102 * @since 2.0 1103 */ 1104 public static final String JavaDoc TAB = "tab"; //$NON-NLS-1$ 1105 /** 1106 * Possible configurable option value. 1107 * @see #getDefaultOptions() 1108 * @since 2.0 1109 */ 1110 public static final String JavaDoc SPACE = "space"; //$NON-NLS-1$ 1111 /** 1112 * Possible configurable option value. 1113 * @see #getDefaultOptions() 1114 * @since 2.0 1115 */ 1116 public static final String JavaDoc ENABLED = "enabled"; //$NON-NLS-1$ 1117 /** 1118 * Possible configurable option value. 1119 * @see #getDefaultOptions() 1120 * @since 2.0 1121 */ 1122 public static final String JavaDoc DISABLED = "disabled"; //$NON-NLS-1$ 1123 /** 1124 * Possible configurable option value. 1125 * @see #getDefaultOptions() 1126 * @since 2.1 1127 */ 1128 public static final String JavaDoc CLEAN = "clean"; //$NON-NLS-1$ 1129 /** 1130 * Possible configurable option value. 1131 * @see #getDefaultOptions() 1132 * @since 3.0 1133 */ 1134 public static final String JavaDoc PUBLIC = "public"; //$NON-NLS-1$ 1135 /** 1136 * Possible configurable option value. 1137 * @see #getDefaultOptions() 1138 * @since 3.0 1139 */ 1140 public static final String JavaDoc PROTECTED = "protected"; //$NON-NLS-1$ 1141 /** 1142 * Possible configurable option value. 1143 * @see #getDefaultOptions() 1144 * @since 3.0 1145 */ 1146 public static final String JavaDoc DEFAULT = "default"; //$NON-NLS-1$ 1147 /** 1148 * Possible configurable option value. 1149 * @see #getDefaultOptions() 1150 * @since 3.0 1151 */ 1152 public static final String JavaDoc PRIVATE = "private"; //$NON-NLS-1$ 1153 /** 1154 * Possible configurable option value. 1155 * @see #getDefaultOptions() 1156 * @since 3.1 1157 */ 1158 public static final String JavaDoc NEVER = "never"; //$NON-NLS-1$ 1159 1160 /** 1161 * Value of the content-type for Java source files. Use this value to retrieve the Java content type 1162 * from the content type manager, and to add new Java-like extensions to this content type. 1163 * 1164 * @see org.eclipse.core.runtime.content.IContentTypeManager#getContentType(String) 1165 * @see #getJavaLikeExtensions() 1166 * @since 3.2 1167 */ 1168 public static final String JavaDoc JAVA_SOURCE_CONTENT_TYPE = JavaCore.PLUGIN_ID+".javaSource" ; //$NON-NLS-1$ 1169 1170 /** 1171 * Creates the Java core plug-in. 1172 * <p> 1173 * The plug-in instance is created automatically by the 1174 * Eclipse platform. Clients must not call. 1175 * </p> 1176 * 1177 * @since 3.0 1178 */ 1179 public JavaCore() { 1180 super(); 1181 JAVA_CORE_PLUGIN = this; 1182 } 1183 1184 /** 1185 * Adds the given listener for changes to Java elements. 1186 * Has no effect if an identical listener is already registered. 1187 * 1188 * This listener will only be notified during the POST_CHANGE resource change notification 1189 * and any reconcile operation (POST_RECONCILE). 1190 * For finer control of the notification, use <code>addElementChangedListener(IElementChangedListener,int)</code>, 1191 * which allows to specify a different eventMask. 1192 * 1193 * @param listener the listener 1194 * @see ElementChangedEvent 1195 */ 1196 public static void addElementChangedListener(IElementChangedListener listener) { 1197 addElementChangedListener(listener, ElementChangedEvent.POST_CHANGE | ElementChangedEvent.POST_RECONCILE); 1198 } 1199 1200 /** 1201 * Adds the given listener for changes to Java elements. 1202 * Has no effect if an identical listener is already registered. 1203 * After completion of this method, the given listener will be registered for exactly 1204 * the specified events. If they were previously registered for other events, they 1205 * will be deregistered. 1206 * <p> 1207 * Once registered, a listener starts receiving notification of changes to 1208 * java elements in the model. The listener continues to receive 1209 * notifications until it is replaced or removed. 1210 * </p> 1211 * <p> 1212 * Listeners can listen for several types of event as defined in <code>ElementChangeEvent</code>. 1213 * Clients are free to register for any number of event types however if they register 1214 * for more than one, it is their responsibility to ensure they correctly handle the 1215 * case where the same java element change shows up in multiple notifications. 1216 * Clients are guaranteed to receive only the events for which they are registered. 1217 * </p> 1218 * 1219 * @param listener the listener 1220 * @param eventMask the bit-wise OR of all event types of interest to the listener 1221 * @see IElementChangedListener 1222 * @see ElementChangedEvent 1223 * @see #removeElementChangedListener(IElementChangedListener) 1224 * @since 2.0 1225 */ 1226 public static void addElementChangedListener(IElementChangedListener listener, int eventMask) { 1227 JavaModelManager.getJavaModelManager().deltaState.addElementChangedListener(listener, eventMask); 1228 } 1229 1230 /** 1231 * Configures the given marker attribute map for the given Java element. 1232 * Used for markers, which denote a Java element rather than a resource. 1233 * 1234 * @param attributes the mutable marker attribute map (key type: <code>String</code>, 1235 * value type: <code>String</code>) 1236 * @param element the Java element for which the marker needs to be configured 1237 */ 1238 public static void addJavaElementMarkerAttributes( 1239 Map JavaDoc attributes, 1240 IJavaElement element) { 1241 if (element instanceof IMember) 1242 element = ((IMember) element).getClassFile(); 1243 if (attributes != null && element != null) 1244 attributes.put(ATT_HANDLE_ID, element.getHandleIdentifier()); 1245 } 1246 1247 private static void addNonJavaResources(Object JavaDoc[] nonJavaResources, 1248 IContainer container, 1249 int rootPathSegmentCounts, 1250 ArrayList JavaDoc collector) { 1251 for (int i = 0, max = nonJavaResources.length; i < max; i++) { 1252 Object JavaDoc nonJavaResource = nonJavaResources[i]; 1253 if (nonJavaResource instanceof IFile) { 1254 IFile file = (IFile) nonJavaResource; 1255 IPath path = file.getFullPath().removeFirstSegments(rootPathSegmentCounts); 1256 IResource member = container.findMember(path); 1257 if (member != null && member.exists()) { 1258 collector.add(member); 1259 } 1260 } else if (nonJavaResource instanceof IFolder) { 1261 IFolder folder = (IFolder) nonJavaResource; 1262 IResource[] members = null; 1263 try { 1264 members = folder.members(); 1265 } catch (CoreException e) { 1266 // ignore 1267 } 1268 if (members != null) { 1269 addNonJavaResources(members, container, rootPathSegmentCounts, collector); 1270 } 1271 } 1272 } 1273 } 1274 1275 /** 1276 * Adds the given listener for POST_CHANGE resource change events to the Java core. 1277 * The listener is guaranteed to be notified of the POST_CHANGE resource change event before 1278 * the Java core starts processing the resource change event itself. 1279 * <p> 1280 * Has no effect if an identical listener is already registered. 1281 * </p> 1282 * 1283 * @param listener the listener 1284 * @see #removePreProcessingResourceChangedListener(IResourceChangeListener) 1285 * @since 3.0 1286 * @deprecated use addPreProcessingResourceChangedListener(listener, IResourceChangeEvent.POST_CHANGE) instead 1287 */ 1288 public static void addPreProcessingResourceChangedListener(IResourceChangeListener listener) { 1289 addPreProcessingResourceChangedListener(listener, IResourceChangeEvent.POST_CHANGE); 1290 } 1291 1292 /** 1293 * Adds the given listener for resource change events of the given types to the Java core. 1294 * The listener is guaranteed to be notified of the resource change event before 1295 * the Java core starts processing the resource change event itself. 1296 * <p> 1297 * If an identical listener is already registered, the given event types are added to the event types 1298 * of interest to the listener. 1299 * </p> 1300 * <p> 1301 * Supported event types are: 1302 * <ul> 1303 * <li>{@link IResourceChangeEvent#PRE_BUILD}</li> 1304 * <li>{@link IResourceChangeEvent#POST_BUILD}</li> 1305 * <li>{@link IResourceChangeEvent#POST_CHANGE}</li> 1306 * <li>{@link IResourceChangeEvent#PRE_DELETE}</li> 1307 * <li>{@link IResourceChangeEvent#PRE_CLOSE}</li> 1308 * </ul> 1309 * This list may increase in the future. 1310 * </p> 1311 * 1312 * @param listener the listener 1313 * @param eventMask the bit-wise OR of all event types of interest to the 1314 * listener 1315 * @see #removePreProcessingResourceChangedListener(IResourceChangeListener) 1316 * @see IResourceChangeEvent 1317 * @since 3.2 1318 */ 1319 public static void addPreProcessingResourceChangedListener(IResourceChangeListener listener, int eventMask) { 1320 JavaModelManager.getJavaModelManager().deltaState.addPreResourceChangedListener(listener, eventMask); 1321 } 1322 1323 /** 1324 * Configures the given marker for the given Java element. 1325 * Used for markers, which denote a Java element rather than a resource. 1326 * 1327 * @param marker the marker to be configured 1328 * @param element the Java element for which the marker needs to be configured 1329 * @exception CoreException if the <code>IMarker.setAttribute</code> on the marker fails 1330 */ 1331 public void configureJavaElementMarker(IMarker marker, IJavaElement element) 1332 throws CoreException { 1333 if (element instanceof IMember) 1334 element = ((IMember) element).getClassFile(); 1335 if (marker != null && element != null) 1336 marker.setAttribute(ATT_HANDLE_ID, element.getHandleIdentifier()); 1337 } 1338 1339 /** 1340 * Returns the Java model element corresponding to the given handle identifier 1341 * generated by <code>IJavaElement.getHandleIdentifier()</code>, or 1342 * <code>null</code> if unable to create the associated element. 1343 * 1344 * @param handleIdentifier the given handle identifier 1345 * @return the Java element corresponding to the handle identifier 1346 */ 1347 public static IJavaElement create(String JavaDoc handleIdentifier) { 1348 return create(handleIdentifier, DefaultWorkingCopyOwner.PRIMARY); 1349 } 1350 1351 /** 1352 * Returns the Java model element corresponding to the given handle identifier 1353 * generated by <code>IJavaElement.getHandleIdentifier()</code>, or 1354 * <code>null</code> if unable to create the associated element. 1355 * If the returned Java element is an <code>ICompilationUnit</code>, its owner 1356 * is the given owner if such a working copy exists, otherwise the compilation unit 1357 * is a primary compilation unit. 1358 * 1359 * @param handleIdentifier the given handle identifier 1360 * @param owner the owner of the returned compilation unit, ignored if the returned 1361 * element is not a compilation unit 1362 * @return the Java element corresponding to the handle identifier 1363 * @since 3.0 1364 */ 1365 public static IJavaElement create(String JavaDoc handleIdentifier, WorkingCopyOwner owner) { 1366 if (handleIdentifier == null) { 1367 return null; 1368 } 1369 MementoTokenizer memento = new MementoTokenizer(handleIdentifier); 1370 JavaModel model = JavaModelManager.getJavaModelManager().getJavaModel(); 1371 return model.getHandleFromMemento(memento, owner); 1372 } 1373 1374 /** 1375 * Returns the Java element corresponding to the given file, or 1376 * <code>null</code> if unable to associate the given file 1377 * with a Java element. 1378 * 1379 * <p>The file must be one of:<ul> 1380 * <li>a file with one of the {@link JavaCore#getJavaLikeExtensions() 1381 * Java-like extensions} - the element returned is the corresponding <code>ICompilationUnit</code></li> 1382 * <li>a <code>.class</code> file - the element returned is the corresponding <code>IClassFile</code></li> 1383 * <li>a <code>.jar</code> file - the element returned is the corresponding <code>IPackageFragmentRoot</code></li> 1384 * </ul> 1385 * <p> 1386 * Creating a Java element has the side effect of creating and opening all of the 1387 * element's parents if they are not yet open. 1388 * 1389 * @param file the given file 1390 * @return the Java element corresponding to the given file, or 1391 * <code>null</code> if unable to associate the given file 1392 * with a Java element 1393 */ 1394 public static IJavaElement create(IFile file) { 1395 return JavaModelManager.create(file, null/*unknown java project*/); 1396 } 1397 /** 1398 * Returns the package fragment or package fragment root corresponding to the given folder, or 1399 * <code>null</code> if unable to associate the given folder with a Java element. 1400 * <p> 1401 * Note that a package fragment root is returned rather than a default package. 1402 * <p> 1403 * Creating a Java element has the side effect of creating and opening all of the 1404 * element's parents if they are not yet open. 1405 * 1406 * @param folder the given folder 1407 * @return the package fragment or package fragment root corresponding to the given folder, or 1408 * <code>null</code> if unable to associate the given folder with a Java element 1409 */ 1410 public static IJavaElement create(IFolder folder) { 1411 return JavaModelManager.create(folder, null/*unknown java project*/); 1412 } 1413 /** 1414 * Returns the Java project corresponding to the given project. 1415 * <p> 1416 * Creating a Java Project has the side effect of creating and opening all of the 1417 * project's parents if they are not yet open. 1418 * <p> 1419 * Note that no check is done at this time on the existence or the java nature of this project. 1420 * 1421 * @param project the given project 1422 * @return the Java project corresponding to the given project, null if the given project is null 1423 */ 1424 public static IJavaProject create(IProject project) { 1425 if (project == null) { 1426 return null; 1427 } 1428 JavaModel javaModel = JavaModelManager.getJavaModelManager().getJavaModel(); 1429 return javaModel.getJavaProject(project); 1430 } 1431 /** 1432 * Returns the Java element corresponding to the given resource, or 1433 * <code>null</code> if unable to associate the given resource 1434 * with a Java element. 1435 * <p> 1436 * The resource must be one of:<ul> 1437 * <li>a project - the element returned is the corresponding <code>IJavaProject</code></li> 1438 * <li>a file with one of the {@link JavaCore#getJavaLikeExtensions() 1439 * Java-like extensions} - the element returned is the corresponding <code>ICompilationUnit</code></li> 1440 * <li>a <code>.class</code> file - the element returned is the corresponding <code>IClassFile</code></li> 1441 * <li>a <code>.jar</code> file - the element returned is the corresponding <code>IPackageFragmentRoot</code></li> 1442 * <li>a folder - the element returned is the corresponding <code>IPackageFragmentRoot</code> 1443 * or <code>IPackageFragment</code></li> 1444 * <li>the workspace root resource - the element returned is the <code>IJavaModel</code></li> 1445 * </ul> 1446 * <p> 1447 * Creating a Java element has the side effect of creating and opening all of the 1448 * element's parents if they are not yet open. 1449 * 1450 * @param resource the given resource 1451 * @return the Java element corresponding to the given resource, or 1452 * <code>null</code> if unable to associate the given resource 1453 * with a Java element 1454 */ 1455 public static IJavaElement create(IResource resource) { 1456 return JavaModelManager.create(resource, null/*unknown java project*/); 1457 } 1458 /** 1459 * Returns the Java element corresponding to the given file, its project being the given 1460 * project. Returns <code>null</code> if unable to associate the given resource 1461 * with a Java element. 1462 *<p> 1463 * The resource must be one of:<ul> 1464 * <li>a project - the element returned is the corresponding <code>IJavaProject</code></li> 1465 * <li>a file with one of the {@link JavaCore#getJavaLikeExtensions() 1466 * Java-like extensions} - the element returned is the corresponding <code>ICompilationUnit</code></li> 1467 * <li>a <code>.class</code> file - the element returned is the corresponding <code>IClassFile</code></li> 1468 * <li>a <code>.jar</code> file - the element returned is the corresponding <code>IPackageFragmentRoot</code></li> 1469 * <li>a folder - the element returned is the corresponding <code>IPackageFragmentRoot</code> 1470 * or <code>IPackageFragment</code></li> 1471 * <li>the workspace root resource - the element returned is the <code>IJavaModel</code></li> 1472 * </ul> 1473 * <p> 1474 * Creating a Java element has the side effect of creating and opening all of the 1475 * element's parents if they are not yet open. 1476 * 1477 * @param resource the given resource 1478 * @return the Java element corresponding to the given file, or 1479 * <code>null</code> if unable to associate the given file 1480 * with a Java element 1481 * @since 3.3 1482 */ 1483 public static IJavaElement create(IResource resource, IJavaProject project) { 1484 return JavaModelManager.create(resource, project); 1485 } 1486 /** 1487 * Returns the Java model. 1488 * 1489 * @param root the given root 1490 * @return the Java model, or <code>null</code> if the root is null 1491 */ 1492 public static IJavaModel create(IWorkspaceRoot root) { 1493 if (root == null) { 1494 return null; 1495 } 1496 return JavaModelManager.getJavaModelManager().getJavaModel(); 1497 } 1498 /** 1499 * Creates and returns a class file element for 1500 * the given <code>.class</code> file. Returns <code>null</code> if unable 1501 * to recognize the class file. 1502 * 1503 * @param file the given <code>.class</code> file 1504 * @return a class file element for the given <code>.class</code> file, or <code>null</code> if unable 1505 * to recognize the class file 1506 */ 1507 public static IClassFile createClassFileFrom(IFile file) { 1508 return JavaModelManager.createClassFileFrom(file, null); 1509 } 1510 /** 1511 * Creates and returns a compilation unit element for 1512 * the given source file (i.e. a file with one of the {@link JavaCore#getJavaLikeExtensions() 1513 * Java-like extensions}). Returns <code>null</code> if unable 1514 * to recognize the compilation unit. 1515 * 1516 * @param file the given source file 1517 * @return a compilation unit element for the given source file, or <code>null</code> if unable 1518 * to recognize the compilation unit 1519 */ 1520 public static ICompilationUnit createCompilationUnitFrom(IFile file) { 1521 return JavaModelManager.createCompilationUnitFrom(file, null/*unknown java project*/); 1522 } 1523 /** 1524 * Creates and returns a handle for the given JAR file. 1525 * The Java model associated with the JAR's project may be 1526 * created as a side effect. 1527 * 1528 * @param file the given JAR file 1529 * @return a handle for the given JAR file, or <code>null</code> if unable to create a JAR package fragment root. 1530 * (for example, if the JAR file represents a non-Java resource) 1531 */ 1532 public static IPackageFragmentRoot createJarPackageFragmentRootFrom(IFile file) { 1533 return JavaModelManager.createJarPackageFragmentRootFrom(file, null/*unknown java project*/); 1534 } 1535 1536 /** 1537 * Answers the project specific value for a given classpath container. 1538 * In case this container path could not be resolved, then will answer <code>null</code>. 1539 * Both the container path and the project context are supposed to be non-null. 1540 * <p> 1541 * The containerPath is a formed by a first ID segment followed with extra segments, which can be 1542 * used as additional hints for resolution. If no container was ever recorded for this container path 1543 * onto this project (using <code>setClasspathContainer</code>, then a 1544 * <code>ClasspathContainerInitializer</code> will be activated if any was registered for this container 1545 * ID onto the extension point "org.eclipse.jdt.core.classpathContainerInitializer". 1546 * <p> 1547 * There is no assumption that the returned container must answer the exact same containerPath 1548 * when requested <code>IClasspathContainer#getPath</code>. 1549 * Indeed, the containerPath is just an indication for resolving it to an actual container object. 1550 * <p> 1551 * Classpath container values are persisted locally to the workspace, but 1552 * are not preserved from a session to another. It is thus highly recommended to register a 1553 * <code>ClasspathContainerInitializer</code> for each referenced container 1554 * (through the extension point "org.eclipse.jdt.core.ClasspathContainerInitializer"). 1555 * <p> 1556 * @param containerPath the name of the container, which needs to be resolved 1557 * @param project a specific project in which the container is being resolved 1558 * @return the corresponding classpath container or <code>null</code> if unable to find one. 1559 * 1560 * @exception JavaModelException if an exception occurred while resolving the container, or if the resolved container 1561 * contains illegal entries (contains CPE_CONTAINER entries or null entries). 1562 * 1563 * @see ClasspathContainerInitializer 1564 * @see IClasspathContainer 1565 * @see #setClasspathContainer(IPath, IJavaProject[], IClasspathContainer[], IProgressMonitor) 1566 * @since 2.0 1567 */ 1568 public static IClasspathContainer getClasspathContainer(IPath containerPath, IJavaProject project) throws JavaModelException { 1569 1570 JavaModelManager manager = JavaModelManager.getJavaModelManager(); 1571 IClasspathContainer container = manager.getClasspathContainer(containerPath, project); 1572 if (container == JavaModelManager.CONTAINER_INITIALIZATION_IN_PROGRESS) { 1573 return manager.getPreviousSessionContainer(containerPath, project); 1574 } 1575 return container; 1576 } 1577 1578 /** 1579 * Helper method finding the classpath container initializer registered for a given classpath container ID 1580 * or <code>null</code> if none was found while iterating over the contributions to extension point to 1581 * the extension point "org.eclipse.jdt.core.classpathContainerInitializer". 1582 * <p> 1583 * A containerID is the first segment of any container path, used to identify the registered container initializer. 1584 * <p> 1585 * @param containerID - a containerID identifying a registered initializer 1586 * @return ClasspathContainerInitializer - the registered classpath container initializer or <code>null</code> if 1587 * none was found. 1588 * @since 2.1 1589 */ 1590 public static ClasspathContainerInitializer getClasspathContainerInitializer(String JavaDoc containerID) { 1591 HashMap JavaDoc containerInitializersCache = JavaModelManager.getJavaModelManager().containerInitializersCache; 1592 ClasspathContainerInitializer initializer = (ClasspathContainerInitializer) containerInitializersCache.get(containerID); 1593 if (initializer == null) { 1594 initializer = computeClasspathContainerInitializer(containerID); 1595 if (initializer == null) 1596 return null; 1597 containerInitializersCache.put(containerID, initializer); 1598 } 1599 return initializer; 1600 } 1601 1602 private static ClasspathContainerInitializer computeClasspathContainerInitializer(String JavaDoc containerID) { 1603 Plugin jdtCorePlugin = JavaCore.getPlugin(); 1604 if (jdtCorePlugin == null) return null; 1605 1606 IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(JavaCore.PLUGIN_ID, JavaModelManager.CPCONTAINER_INITIALIZER_EXTPOINT_ID); 1607 if (extension != null) { 1608 IExtension[] extensions = extension.getExtensions(); 1609 for(int i = 0; i < extensions.length; i++){ 1610 IConfigurationElement [] configElements = extensions[i].getConfigurationElements(); 1611 for(int j = 0; j < configElements.length; j++){ 1612 IConfigurationElement configurationElement = configElements[j]; 1613 String JavaDoc initializerID = configurationElement.getAttribute("id"); //$NON-NLS-1$ 1614 if (initializerID != null && initializerID.equals(containerID)){ 1615 if (JavaModelManager.CP_RESOLVE_VERBOSE_ADVANCED) 1616 verbose_found_container_initializer(containerID, configurationElement); 1617 try { 1618 Object JavaDoc execExt = configurationElement.createExecutableExtension("class"); //$NON-NLS-1$ 1619 if (execExt instanceof ClasspathContainerInitializer){ 1620 return (ClasspathContainerInitializer)execExt; 1621 } 1622 } catch(CoreException e) { 1623 // executable extension could not be created: ignore this initializer 1624 if (JavaModelManager.CP_RESOLVE_VERBOSE) { 1625 verbose_failed_to_instanciate_container_initializer(containerID, configurationElement); 1626 e.printStackTrace(); 1627 } 1628 } 1629 } 1630 } 1631 } 1632 } 1633 return null; 1634 } 1635 1636 private static void verbose_failed_to_instanciate_container_initializer(String JavaDoc containerID, IConfigurationElement configurationElement) { 1637 Util.verbose( 1638 "CPContainer INIT - failed to instanciate initializer\n" + //$NON-NLS-1$ 1639 " container ID: " + containerID + '\n' + //$NON-NLS-1$ 1640 " class: " + configurationElement.getAttribute("class"), //$NON-NLS-1$ //$NON-NLS-2$ 1641 System.err); 1642 } 1643 1644 private static void verbose_found_container_initializer(String JavaDoc containerID, IConfigurationElement configurationElement) { 1645 Util.verbose( 1646 "CPContainer INIT - found initializer\n" + //$NON-NLS-1$ 1647 " container ID: " + containerID + '\n' + //$NON-NLS-1$ 1648 " class: " + configurationElement.getAttribute("class")); //$NON-NLS-1$ //$NON-NLS-2$ 1649 } 1650 1651 /** 1652 * Returns the path held in the given classpath variable. 1653 * Returns <code>null</code> if unable to bind. 1654 * <p> 1655 * Classpath variable values are persisted locally to the workspace, and 1656 * are preserved from session to session. 1657 * <p> 1658 * Note that classpath variables can be contributed registered initializers for, 1659 * using the extension point "org.eclipse.jdt.core.classpathVariableInitializer". 1660 * If an initializer is registered for a variable, its persisted value will be ignored: 1661 * its initializer will thus get the opportunity to rebind the variable differently on 1662 * each session. 1663 * 1664 * @param variableName the name of the classpath variable 1665 * @return the path, or <code>null</code> if none 1666 * @see #setClasspathVariable(String, IPath) 1667 */ 1668 public static IPath getClasspathVariable(final String JavaDoc variableName) { 1669 1670 JavaModelManager manager = JavaModelManager.getJavaModelManager(); 1671 IPath variablePath = manager.variableGet(variableName); 1672 if (variablePath == JavaModelManager.VARIABLE_INITIALIZATION_IN_PROGRESS){ 1673 return manager.getPreviousSessionVariable(variableName); 1674 } 1675 1676 if (variablePath != null) { 1677 if (variablePath == JavaModelManager.CP_ENTRY_IGNORE_PATH) 1678 return null; 1679 return variablePath; 1680 } 1681 1682 // even if persisted value exists, initializer is given priority, only if no initializer is found the persisted value is reused 1683 final ClasspathVariableInitializer initializer = JavaCore.getClasspathVariableInitializer(variableName); 1684 if (initializer != null){ 1685 if (JavaModelManager.CP_RESOLVE_VERBOSE) 1686 verbose_triggering_variable_initialization(variableName, initializer); 1687 if (JavaModelManager.CP_RESOLVE_VERBOSE_ADVANCED) 1688 verbose_triggering_variable_initialization_invocation_trace(); 1689 manager.variablePut(variableName, JavaModelManager.VARIABLE_INITIALIZATION_IN_PROGRESS); // avoid initialization cycles 1690 boolean ok = false; 1691 try { 1692 // let OperationCanceledException go through 1693 // (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=59363) 1694 initializer.initialize(variableName); 1695 1696 variablePath = manager.variableGet(variableName); // initializer should have performed side-effect 1697 if (variablePath == JavaModelManager.VARIABLE_INITIALIZATION_IN_PROGRESS) return null; // break cycle (initializer did not init or reentering call) 1698 if (JavaModelManager.CP_RESOLVE_VERBOSE_ADVANCED) 1699 verbose_variable_value_after_initialization(variableName, variablePath); 1700 manager.variablesWithInitializer.add(variableName); 1701 ok = true; 1702 } catch (RuntimeException JavaDoc e) { 1703 if (JavaModelManager.CP_RESOLVE_VERBOSE) 1704 e.printStackTrace(); 1705 throw e; 1706 } catch (Error JavaDoc e) { 1707 if (JavaModelManager.CP_RESOLVE_VERBOSE) 1708 e.printStackTrace(); 1709 throw e; 1710 } finally { 1711 if (!ok) JavaModelManager.getJavaModelManager().variablePut(variableName, null); // flush cache 1712 } 1713 } else { 1714 if (JavaModelManager.CP_RESOLVE_VERBOSE_ADVANCED) 1715 verbose_no_variable_initializer_found(variableName); 1716 } 1717 return variablePath; 1718 } 1719 1720 private static void verbose_no_variable_initializer_found(String JavaDoc variableName) { 1721 Util.verbose( 1722 "CPVariable INIT - no initializer found\n" + //$NON-NLS-1$ 1723 " variable: " + variableName); //$NON-NLS-1$ 1724 } 1725 1726 private static void verbose_variable_value_after_initialization(String JavaDoc variableName, IPath variablePath) { 1727 Util.verbose( 1728 "CPVariable INIT - after initialization\n" + //$NON-NLS-1$ 1729 " variable: " + variableName +'\n' + //$NON-NLS-1$ 1730 " variable path: " + variablePath); //$NON-NLS-1$ 1731 } 1732 1733 private static void verbose_triggering_variable_initialization(String JavaDoc variableName, ClasspathVariableInitializer initializer) { 1734 Util.verbose( 1735 "CPVariable INIT - triggering initialization\n" + //$NON-NLS-1$ 1736 " variable: " + variableName + '\n' + //$NON-NLS-1$ 1737 " initializer: " + initializer); //$NON-NLS-1$ 1738 } 1739 1740 private static void verbose_triggering_variable_initialization_invocation_trace() { 1741 Util.verbose( 1742 "CPVariable INIT - triggering initialization\n" + //$NON-NLS-1$ 1743 " invocation trace:"); //$NON-NLS-1$ 1744 new Exception JavaDoc("<Fake exception>").printStackTrace(System.out); //$NON-NLS-1$ 1745 } 1746 1747 /** 1748 * Returns deprecation message of a given classpath variable. 1749 * 1750 * @param variableName 1751 * @return A string if the classpath variable is deprecated, <code>null</code> otherwise. 1752 * @since 3.3 1753 */ 1754 public static String JavaDoc getClasspathVariableDeprecationMessage(String JavaDoc variableName) { 1755 return (String JavaDoc) JavaModelManager.getJavaModelManager().deprecatedVariables.get(variableName); 1756 } 1757 1758 /** 1759 * Helper method finding the classpath variable initializer registered for a given classpath variable name 1760 * or <code>null</code> if none was found while iterating over the contributions to extension point to 1761 * the extension point "org.eclipse.jdt.core.classpathVariableInitializer". 1762 * <p> 1763 * @param variable the given variable 1764 * @return ClasspathVariableInitializer - the registered classpath variable initializer or <code>null</code> if 1765 * none was found. 1766 * @since 2.1 1767 */ 1768 public static ClasspathVariableInitializer getClasspathVariableInitializer(String JavaDoc variable){ 1769 1770 Plugin jdtCorePlugin = JavaCore.getPlugin(); 1771 if (jdtCorePlugin == null) return null; 1772 1773 IExtensionPoint extension = Platform.getExtensionRegistry().getExtensionPoint(JavaCore.PLUGIN_ID, JavaModelManager.CPVARIABLE_INITIALIZER_EXTPOINT_ID); 1774 if (extension != null) { 1775 IExtension[] extensions = extension.getExtensions(); 1776 for(int i = 0; i < extensions.length; i++){ 1777 IConfigurationElement [] configElements = extensions[i].getConfigurationElements(); 1778 for(int j = 0; j < configElements.length; j++){ 1779 IConfigurationElement configElement = configElements[j]; 1780 try { 1781 String JavaDoc varAttribute = configElement.getAttribute("variable"); //$NON-NLS-1$ 1782 if (variable.equals(varAttribute)) { 1783 if (JavaModelManager.CP_RESOLVE_VERBOSE_ADVANCED) 1784 verbose_found_variable_initializer(variable, configElement); 1785 Object JavaDoc execExt = configElement.createExecutableExtension("class"); //$NON-NLS-1$ 1786 if (execExt instanceof ClasspathVariableInitializer){ 1787 ClasspathVariableInitializer initializer = (ClasspathVariableInitializer)execExt; 1788 String JavaDoc deprecatedAttribute = configElement.getAttribute("deprecated"); //$NON-NLS-1$ 1789 if (deprecatedAttribute != null) { 1790 JavaModelManager.getJavaModelManager().deprecatedVariables.put(variable, deprecatedAttribute); 1791 } 1792 String JavaDoc readOnlyAttribute = configElement.getAttribute("readOnly"); //$NON-NLS-1$ 1793 if (JavaModelManager.TRUE.equals(readOnlyAttribute)) { 1794 JavaModelManager.getJavaModelManager().readOnlyVariables.add(variable); 1795 } 1796 return initializer; 1797 } 1798 } 1799 } catch(CoreException e){ 1800 // executable extension could not be created: ignore this initializer 1801 if (JavaModelManager.CP_RESOLVE_VERBOSE) { 1802 verbose_failed_to_instanciate_variable_initializer(variable, configElement); 1803 e.printStackTrace(); 1804 } 1805 } 1806 } 1807 } 1808 } 1809 return null; 1810 } 1811 1812 private static void verbose_failed_to_instanciate_variable_initializer(String JavaDoc variable, IConfigurationElement configElement) { 1813 Util.verbose( 1814 "CPContainer INIT - failed to instanciate initializer\n" + //$NON-NLS-1$ 1815 " variable: " + variable + '\n' + //$NON-NLS-1$ 1816 " class: " + configElement.getAttribute("class"), //$NON-NLS-1$ //$NON-NLS-2$ 1817 System.err); 1818 } 1819 1820 private static void verbose_found_variable_initializer(String JavaDoc variable, IConfigurationElement configElement) { 1821 Util.verbose( 1822 "CPVariable INIT - found initializer\n" + //$NON-NLS-1$ 1823 " variable: " + variable + '\n' + //$NON-NLS-1$ 1824 " class: " + configElement.getAttribute("class")); //$NON-NLS-1$ //$NON-NLS-2$ 1825 } 1826 1827 /** 1828 * Returns the names of all known classpath variables. 1829 * <p> 1830 * Classpath variable values are persisted locally to the workspace, and 1831 * are preserved from session to session. 1832 * <p> 1833 * 1834 * @return the list of classpath variable names 1835 * @see #setClasspathVariable(String, IPath) 1836 */ 1837 public static String JavaDoc[] getClasspathVariableNames() { 1838 return JavaModelManager.getJavaModelManager().variableNames(); 1839 } 1840 1841 /** 1842 * Returns a table of all known configurable options with their default values. 1843 * These options allow to configure the behaviour of the underlying components. 1844 * The client may safely use the result as a template that they can modify and 1845 * then pass to <code>setOptions</code>. 1846 * 1847 * Helper constants have been defined on JavaCore for each of the option ID and 1848 * their possible constant values. 1849 * 1850 * Note: more options might be added in further releases. 1851 * <pre> 1852 * RECOGNIZED OPTIONS: 1853 * 1854 * COMPILER / Setting Compliance Level 1855 * Select the compliance level for the compiler. In "1.3" mode, source and target settings 1856 * should not go beyond "1.3" level. 1857 * - option id: "org.eclipse.jdt.core.compiler.compliance" 1858 * - possible values: { "1.3", "1.4", "1.5", "1.6", "1.7" } 1859 * - default: "1.4" 1860 * 1861 * COMPILER / Setting Source Compatibility Mode 1862 * Specify whether which source level compatibility is used. From 1.4 on, 'assert' is a keyword 1863 * reserved for assertion support. Also note, than when toggling to 1.4 mode, the target VM 1864 * level should be set to "1.4" and the compliance mode should be "1.4". 1865 * Source level 1.5 is necessary to enable generics, autoboxing, covariance, annotations, enumerations 1866 * enhanced for loop, static imports and varargs. Once toggled, the target VM level should be set to "1.5" 1867 * and the compliance mode should be "1.5". 1868 * Source level 1.6 is necessary to enable the computation of stack map tables. Once toggled, the target 1869 * VM level should be set to "1.6" and the compliance mode should be "1.6". 1870 * Once the source level 1.7 is toggled, the target VM level should be set to "1.7" and the compliance mode 1871 * should be "1.7". 1872 * - option id: "org.eclipse.jdt.core.compiler.source" 1873 * - possible values: { "1.3", "1.4", "1.5", "1.6", "1.7" } 1874 * - default: "1.3" 1875 * 1876 * COMPILER / Defining Target Java Platform 1877 * For binary compatibility reason, .class files can be tagged to with certain VM versions and later. 1878 * Note that "1.4" target requires to toggle compliance mode to "1.4", "1.5" target requires 1879 * to toggle compliance mode to "1.5", "1.6" target requires to toggle compliance mode to "1.6" and 1880 * "1.7" target requires to toggle compliance mode to "1.7". 1881 * - option id: "org.eclipse.jdt.core.compiler.codegen.targetPlatform" 1882 * - possible values: { "1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7" } 1883 * - default: "1.2" 1884 * 1885 * COMPILER / Generating Local Variable Debug Attribute 1886 * When generated, this attribute will enable local variable names 1887 * to be displayed in debugger, only in place where variables are 1888 * definitely assigned (.class file is then bigger) 1889 * - option id: "org.eclipse.jdt.core.compiler.debug.localVariable" 1890 * - possible values: { "generate", "do not generate" } 1891 * - default: "generate" 1892 * 1893 * COMPILER / Generating Line Number Debug Attribute 1894 * When generated, this attribute will enable source code highlighting in debugger 1895 * (.class file is then bigger). 1896 * - option id: "org.eclipse.jdt.core.compiler.debug.lineNumber" 1897 * - possible values: { "generate", "do not generate" } 1898 * - default: "generate" 1899 * 1900 * COMPILER / Generating Source Debug Attribute 1901 * When generated, this attribute will enable the debugger to present the 1902 * corresponding source code. 1903 * - option id: "org.eclipse.jdt.core.compiler.debug.sourceFile" 1904 * - possible values: { "generate", "do not generate" } 1905 * - default: "generate" 1906 * 1907 * COMPILER / Preserving Unused Local Variables 1908 * Unless requested to preserve unused local variables (that is, never read), the 1909 * compiler will optimize them out, potentially altering debugging 1910 * - option id: "org.eclipse.jdt.core.compiler.codegen.unusedLocal" 1911 * - possible values: { "preserve", "optimize out" } 1912 * - default: "preserve" 1913 * 1914 * COMPILER / Inline JSR Bytecode Instruction 1915 * When enabled, the compiler will no longer generate JSR instructions, but rather inline corresponding 1916 * subroutine code sequences (mostly corresponding to try finally blocks). The generated code will thus 1917 * get bigger, but will load faster on virtual machines since the verification process is then much simpler. 1918 * This mode is anticipating support for the Java Specification Request 202. 1919 * Note that JSR inlining is optional only for target platform lesser than 1.5. From 1.5 on, the JSR 1920 * inlining is mandatory (also see related setting "org.eclipse.jdt.core.compiler.codegen.targetPlatform"). 1921 * - option id: "org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode" 1922 * - possible values: { "enabled", "disabled" } 1923 * - default: "disabled" 1924 * 1925 * COMPILER / Javadoc Comment Support 1926 * When this support is disabled, the compiler will ignore all javadoc problems options settings 1927 * and will not report any javadoc problem. It will also not find any reference in javadoc comment and 1928 * DOM AST Javadoc node will be only a flat text instead of having structured tag elements. 1929 * - option id: "org.eclipse.jdt.core.compiler.doc.comment.support" 1930 * - possible values: { "enabled", "disabled" } 1931 * - default: "enabled" 1932 * 1933 * COMPILER / Reporting Attempt to Override Package-Default Method 1934 * A package default method is not visible in a different package, and thus 1935 * cannot be overridden. When enabling this option, the compiler will signal 1936 * such scenarii either as an error or a warning. 1937 * - option id: "org.eclipse.jdt.core.compiler.problem.overridingPackageDefaultMethod" 1938 * - possible values: { "error", "warning", "ignore" } 1939 * - default: "warning" 1940 * 1941 * COMPILER / Reporting Method With Constructor Name 1942 * Naming a method with a constructor name is generally considered poor 1943 * style programming. When enabling this option, the compiler will signal such 1944 * scenarii either as an error or a warning. 1945 * - option id: "org.eclipse.jdt.core.compiler.problem.methodWithConstructorName" 1946 * - possible values: { "error", "warning", "ignore" } 1947 * - default: "warning" 1948 * 1949 * COMPILER / Reporting Deprecation 1950 * When enabled, the compiler will signal use of deprecated API either as an 1951 * error or a warning. 1952 * - option id: "org.eclipse.jdt.core.compiler.problem.deprecation" 1953 * - possible values: { "error", "warning", "ignore" } 1954 * - default: "warning" 1955 * 1956 * COMPILER / Reporting Deprecation Inside Deprecated Code 1957 * When enabled, the compiler will signal use of deprecated API inside deprecated code. 1958 * The severity of the problem is controlled with option "org.eclipse.jdt.core.compiler.problem.deprecation". 1959 * - option id: "org.eclipse.jdt.core.compiler.problem.deprecationInDeprecatedCode" 1960 * - possible values: { "enabled", "disabled" } 1961 * - default: "disabled" 1962 * 1963 * COMPILER / Reporting Deprecation When Overriding Deprecated Method 1964 * When enabled, the compiler will signal the declaration of a method overriding a deprecated one. 1965 * The severity of the problem is controlled with option "org.eclipse.jdt.core.compiler.problem.deprecation". 1966 * - option id: "org.eclipse.jdt.core.compiler.problem.deprecationWhenOverridingDeprecatedMethod" 1967 * - possible values: { "enabled", "disabled" } 1968 * - default: "disabled" 1969 * 1970 * COMPILER / Reporting Hidden Catch Block 1971 * Locally to a try statement, some catch blocks may hide others . For example, 1972 * try { throw new java.io.CharConversionException(); 1973 * } catch (java.io.CharConversionException e) { 1974 * } catch (java.io.IOException e) {}. 1975 * When enabling this option, the compiler will issue an error or a warning for hidden 1976 * catch blocks corresponding to checked exceptions 1977 * - option id: "org.eclipse.jdt.core.compiler.problem.hiddenCatchBlock" 1978 * - possible values: { "error", "warning", "ignore" } 1979 * - default: "warning" 1980 * 1981 * COMPILER / Reporting Unused Local 1982 * When enabled, the compiler will issue an error or a warning for unused local 1983 * variables (that is, variables never read from) 1984 * - option id: "org.eclipse.jdt.core.compiler.problem.unusedLocal" 1985 * - possible values: { "error", "warning", "ignore" } 1986 * - default: "ignore" 1987 * 1988 * COMPILER / Reporting Unused Parameter 1989 * When enabled, the compiler will issue an error or a warning for unused method 1990 * parameters (that is, parameters never read from) 1991 * - option id: "org.eclipse.jdt.core.compiler.problem.unusedParameter" 1992 * - possible values: { "error", "warning", "ignore" } 1993 * - default: "ignore" 1994 * 1995 * COMPILER / Reporting Unused Parameter if Implementing Abstract Method 1996 * When enabled, the compiler will signal unused parameters in abstract method implementations. 1997 * The severity of the problem is controlled with option "org.eclipse.jdt.core.compiler.problem.unusedParameter". 1998 * - option id: "org.eclipse.jdt.core.compiler.problem.unusedParameterWhenImplementingAbstract" 1999 * - possible values: { "enabled", "disabled" } 2000 * - default: "disabled" 2001 * 2002 * COMPILER / Reporting Unused Parameter if Overriding Concrete Method 2003 * When enabled, the compiler will signal unused parameters in methods overriding concrete ones. 2004 * The severity of the problem is controlled with option "org.eclipse.jdt.core.compiler.problem.unusedParameter". 2005 * - option id: "org.eclipse.jdt.core.compiler.problem.unusedParameterWhenOverridingConcrete" 2006 * - possible values: { "enabled", "disabled" } 2007 * - default: "disabled" 2008 * 2009 * COMPILER / Consider Reference in Doc Comment for Unused Parameter Check 2010 * When enabled, the compiler will consider doc comment references to parameters (i.e. @param clauses) for the unused 2011 * parameter check. Thus, documented parameters will be considered as mandated as per doc contract. 2012 * The severity of the unused parameter problem is controlled with option "org.eclipse.jdt.core.compiler.problem.unusedParameter". 2013 * Note: this option has no effect until the doc comment support is enabled according to the 2014 * option "org.eclipse.jdt.core.compiler.doc.comment.support". 2015 * - option id: "org.eclipse.jdt.core.compiler.problem.unusedParameterIncludeDocReference" 2016 * - possible values: { "enabled", "disabled" } 2017 * - default: "enabled" 2018 * 2019 * COMPILER / Reporting Unused Import 2020 * When enabled, the compiler will issue an error or a warning for unused import 2021 * reference 2022 * - option id: "org.eclipse.jdt.core.compiler.problem.unusedImport" 2023 * - possible values: { "error", "warning", "ignore" } 2024 * - default: "warning" 2025 * 2026 * COMPILER / Reporting Unused Private Members 2027 * When enabled, the compiler will issue an error or a warning whenever a private 2028 * method or field is declared but never used within the same unit. 2029 * - option id: "org.eclipse.jdt.core.compiler.problem.unusedPrivateMember" 2030 * - possible values: { "error", "warning", "ignore" } 2031 * - default: "ignore" 2032 * 2033 * COMPILER / Reporting Assignment with no Effect 2034 * When enabled, the compiler will issue an error or a warning whenever an assignment 2035 * has no effect (e.g 'x = x'). 2036 * - option id: "org.eclipse.jdt.core.compiler.problem.noEffectAssignment" 2037 * - possible values: { "error", "warning", "ignore" } 2038 * - default: "warning" 2039 * 2040 * COMPILER / Reporting Empty Statements and Unnecessary Semicolons 2041 * When enabled, the compiler will issue an error or a warning if an empty statement or a 2042 * unnecessary semicolon is encountered. 2043 * - option id: "org.eclipse.jdt.core.compiler.problem.emptyStatement" 2044 * - possible values: { "error", "warning", "ignore" } 2045 * - default: "ignore" 2046 * 2047 * COMPILER / Reporting Unnecessary Type Check 2048 * When enabled, the compiler will issue an error or a warning when a cast or an instanceof operation 2049 * is unnecessary. 2050 * - option id: "org.eclipse.jdt.core.compiler.problem.unnecessaryTypeCheck" 2051 * - possible values: { "error", "warning", "ignore" } 2052 * - default: "ignore" 2053 * 2054 * COMPILER / Reporting Unnecessary Else 2055 * When enabled, the compiler will issue an error or a warning when a statement is unnecessarily 2056 * nested within an else clause (in situation where then clause is not completing normally). 2057 * - option id: "org.eclipse.jdt.core.compiler.problem.unnecessaryElse" 2058 * - possible values: { "error", "warning", "ignore" } 2059 * - default: "ignore" 2060 * 2061 * COMPILER / Reporting Synthetic Access Emulation 2062 * When enabled, the compiler will issue an error or a warning whenever it emulates 2063 * access to a non-accessible member of an enclosing type. Such access can have 2064 * performance implications. 2065 * - option id: "org.eclipse.jdt.core.compiler.problem.syntheticAccessEmulation" 2066 * - possible values: { "error", "warning", "ignore" } 2067 * - default: "ignore" 2068 * 2069 * COMPILER / Reporting Non-Externalized String Literal 2070 * When enabled, the compiler will issue an error or a warning for non externalized 2071 * String literal (that is, not tagged with //$NON-NLS-<n>$). 2072 * - option id: "org.eclipse.jdt.core.compiler.problem.nonExternalizedStringLiteral" 2073 * - possible values: { "error", "warning", "ignore" } 2074 * - default: "ignore" 2075 * 2076 * COMPILER / Reporting Usage of 'assert' Identifier 2077 * When enabled, the compiler will issue an error or a warning whenever 'assert' is 2078 * used as an identifier (reserved keyword in 1.4) 2079 * - option id: "org.eclipse.jdt.core.compiler.problem.assertIdentifier" 2080 * - possible values: { "error", "warning", "ignore" } 2081 * - default: "warning" 2082 * 2083 * COMPILER / Reporting Usage of 'enum' Identifier 2084 * When enabled, the compiler will issue an error or a warning whenever 'enum' is 2085 * used as an identifier (reserved keyword in 1.5) 2086 * - option id: "org.eclipse.jdt.core.compiler.problem.enumIdentifier" 2087 * - possible values: { "error", "warning", "ignore" } 2088 * - default: "warning" 2089 * 2090 * COMPILER / Reporting Non-Static Reference to a Static Member 2091 * When enabled, the compiler will issue an error or a warning whenever a static field 2092 * or method is accessed with an expression receiver. A reference to a static member should 2093 * be qualified with a type name. 2094 * - option id: "org.eclipse.jdt.core.compiler.problem.staticAccessReceiver" 2095 * - possible values: { "error", "warning", "ignore" } 2096 * - default: "warning" 2097 * 2098 * COMPILER / Reporting Indirect Reference to a Static Member 2099 * When enabled, the compiler will issue an error or a warning whenever a static field 2100 * or method is accessed in an indirect way. A reference to a static member should 2101 * preferably be qualified with its declaring type name. 2102 * - option id: "org.eclipse.jdt.core.compiler.problem.indirectStaticAccess" 2103 * - possible values: { "error", "warning", "ignore" } 2104 * - default: "ignore" 2105 * 2106 * COMPILER / Reporting Interface Method not Compatible with non-Inherited Methods 2107 * When enabled, the compiler will issue an error or a warning whenever an interface 2108 * defines a method incompatible with a non-inherited Object method. Until this conflict 2109 * is resolved, such an interface cannot be implemented, For example, 2110 * interface I { 2111 * int clone(); 2112 * } 2113 * - option id: "org.eclipse.jdt.core.compiler.problem.incompatibleNonInheritedInterfaceMethod" 2114 * - possible values: { "error", "warning", "ignore" } 2115 * - default: "warning" 2116 * 2117 * COMPILER / Reporting Usage of char[] Expressions in String Concatenations 2118 * When enabled, the compiler will issue an error or a warning whenever a char[] expression 2119 * is used in String concatenations (for example, "hello" + new char[]{'w','o','r','l','d'}). 2120 * - option id: "org.eclipse.jdt.core.compiler.problem.noImplicitStringConversion" 2121 * - possible values: { "error", "warning", "ignore" } 2122 * - default: "warning" 2123 * 2124 * COMPILER / Reporting Local Variable Declaration Hiding another Variable 2125 * When enabled, the compiler will issue an error or a warning whenever a local variable 2126 * declaration is hiding some field or local variable (either locally, inherited or defined in enclosing type). 2127 * - option id: "org.eclipse.jdt.core.compiler.problem.localVariableHiding" 2128 * - possible values: { "error", "warning", "ignore" } 2129 * - default: "ignore" 2130 * 2131 * COMPILER / Reporting Field Declaration Hiding another Variable 2132 * When enabled, the compiler will issue an error or a warning whenever a field 2133 * declaration is hiding some field or local variable (either locally, inherited or defined in enclosing type). 2134 * - option id: "org.eclipse.jdt.core.compiler.problem.fieldHiding" 2135 * - possible values: { "error", "warning", "ignore" } 2136 * - default: "ignore" 2137 * 2138 * COMPILER / Reporting Special Parameter Hiding another Field 2139 * When enabled, the compiler will signal cases where a constructor or setter method parameter declaration 2140 * is hiding some field (either locally, inherited or defined in enclosing type). 2141 * The severity of the problem is controlled with option "org.eclipse.jdt.core.compiler.problem.localVariableHiding". 2142 * - option id: "org.eclipse.jdt.core.compiler.problem.specialParameterHidingField" 2143 * - possible values: { "enabled", "disabled" } 2144 * - default: "disabled" 2145 * 2146 * COMPILER / Reporting Type Declaration Hiding another Type 2147 * When enabled, the compiler will issue an error or a warning in situations where a type parameter 2148 * declaration is hiding some type, when a nested type is hiding some type parameter, or when 2149 * a nested type is hiding another nested type defined in same unit. 2150 * - option id: "org.eclipse.jdt.core.compiler.problem.typeParameterHiding" 2151 * - possible values: { "error", "warning", "ignore" } 2152 * - default: "warning" 2153 * 2154 * COMPILER / Reporting Possible Accidental Boolean Assignment 2155 * When enabled, the compiler will issue an error or a warning if a boolean assignment is acting as the condition 2156 * of a control statement (where it probably was meant to be a boolean comparison). 2157 * - option id: "org.eclipse.jdt.core.compiler.problem.possibleAccidentalBooleanAssignment" 2158 * - possible values: { "error", "warning", "ignore" } 2159 * - default: "ignore" 2160 * 2161 * COMPILER / Reporting Undocumented Empty Block 2162 * When enabled, the compiler will issue an error or a warning when an empty block is detected and it is not 2163 * documented with any comment. 2164 * - option id: "org.eclipse.jdt.core.compiler.problem.undocumentedEmptyBlock" 2165 * - possible values: { "error", "warning", "ignore" } 2166 * - default: "ignore" 2167 * 2168 * COMPILER / Reporting Finally Blocks Not Completing Normally 2169 * When enabled, the compiler will issue an error or a warning when a finally block does not complete normally. 2170 * - option id: "org.eclipse.jdt.core.compiler.problem.finallyBlockNotCompletingNormally" 2171 * - possible values: { "error", "warning", "ignore" } 2172 * - default: "warning" 2173 * 2174 * COMPILER / Reporting Unused Declared Thrown Exception 2175 * When enabled, the compiler will issue an error or a warning when a method or a constructor is declaring a 2176 * thrown checked exception, but never actually raises it in its body. 2177 * - option id: "org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException" 2178 * - possible values: { "error", "warning", "ignore" } 2179 * - default: "ignore" 2180 * 2181 * COMPILER / Reporting Unused Declared Thrown Exception in Overridind Method 2182 * When disabled, the compiler will not include overriding methods in its diagnosis for unused declared 2183 * thrown exceptions. 2184 * <br> 2185 * The severity of the problem is controlled with option "org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownException". 2186 * - option id: "org.eclipse.jdt.core.compiler.problem.unusedDeclaredThrownExceptionWhenOverriding" 2187 * - possible values: { "enabled", "disabled" } 2188 * - default: "disabled" 2189 * 2190 * COMPILER / Reporting Unqualified Access to Field 2191 * When enabled, the compiler will issue an error or a warning when a field is access without any qualification. 2192 * In order to improve code readability, it should be qualified, e.g. 'x' should rather be written 'this.x'. 2193 * - option id: "org.eclipse.jdt.core.compiler.problem.unqualifiedFieldAccess" 2194 * - possible values: { "error", "warning", "ignore" } 2195 * - default: "ignore" 2196 * 2197 * COMPILER / Reporting Unchecked Type Operation 2198 * When enabled, the compiler will issue an error or a warning whenever an operation involves generic types, and potentially 2199 * invalidates type safety since involving raw types (e.g. invoking #foo(X<String>) with arguments (X)). 2200 * - option id: "org.eclipse.jdt.core.compiler.problem.uncheckedTypeOperation" 2201 * - possible values: { "error", "warning", "ignore" } 2202 * - default: "warning" 2203 * 2204 * COMPILER / Reporting Raw Type Reference 2205 * When enabled, the compiler will issue an error or a warning when detecting references to raw types. Raw types are 2206 * discouraged, and are intended to help interfacing with legacy code. In the future, the language specification may 2207 * reject raw references to generic types. 2208 * - option id: "org.eclipse.jdt.core.compiler.problem.rawTypeReference" 2209 * - possible values: { "error", "warning", "ignore" } 2210 * - default: "warning" 2211 * 2212 * COMPILER / Reporting final Bound for Type Parameter 2213 * When enabled, the compiler will issue an error or a warning whenever a generic type parameter is associated with a 2214 * bound corresponding to a final type; since final types cannot be further extended, the parameter is pretty useless. 2215 * - option id: "org.eclipse.jdt.core.compiler.problem.finalParameterBound" 2216 * - possible values: { "error", "warning", "ignore" } 2217 * - default: "warning" 2218 * 2219 * COMPILER / Reporting Missing Declaration of serialVersionUID Field on Serializable Class 2220 * When enabled, the compiler will issue an error or a warning whenever a serializable class is missing a local declaration 2221 * of a serialVersionUID field. This field must be declared as static final and be of type long. 2222 * - option id: "org.eclipse.jdt.core.compiler.problem.missingSerialVersion" 2223 * - possible values: { "error", "warning", "ignore" } 2224 * - default: "warning" 2225 * 2226 * COMPILER / Reporting Varargs Argument Needing a Cast in Method/Constructor Invocation 2227 * When enabled, the compiler will issue an error or a warning whenever a varargs arguments should be cast 2228 * when passed to a method/constructor invocation. (e.g. Class.getMethod(String name, Class ... args ) 2229 * invoked with arguments ("foo", null)). 2230 * - option id: "org.eclipse.jdt.core.compiler.problem.varargsArgumentNeedCast" 2231 * - possible values: { "error", "warning", "ignore" } 2232 * - default: "warning" 2233 * 2234 * COMPILER / Reporting Null Dereference 2235 * When enabled, the compiler will issue an error or a warning whenever a 2236 * variable that is statically known to hold a null value is used to 2237 * access a field or method. 2238 * 2239 * - option id: "org.eclipse.jdt.core.compiler.problem.nullReference" 2240 * - possible values: { "error", "warning", "ignore" } 2241 * - default: "ignore" 2242 * 2243 * COMPILER / Reporting Potential Null Dereference 2244 * When enabled, the compiler will issue an error or a warning whenever a 2245 * variable that has formerly been tested against null but is not (no more) 2246 * statically known to hold a non-null value is used to access a field or 2247 * method. 2248 * 2249 * - option id: "org.eclipse.jdt.core.compiler.problem.potentialNullReference" 2250 * - possible values: { "error", "warning", "ignore" } 2251 * - default: "ignore" 2252 * 2253 * COMPILER / Reporting Redundant Null Check 2254 * When enabled, the compiler will issue an error or a warning whenever a 2255 * variable that is statically known to hold a null or a non-null value 2256 * is tested against null. 2257 * 2258 * - option id: "org.eclipse.jdt.core.compiler.problem.redundantNullCheck" 2259 * - possible values: { "error", "warning", "ignore" } 2260 * - default: "ignore" 2261 * 2262 * COMPILER / Reporting Use of Annotation Type as Super Interface 2263 * When enabled, the compiler will issue an error or a warning whenever an annotation type is used 2264 * as a super-interface. Though legal, this is discouraged. 2265 * - option id: "org.eclipse.jdt.core.compiler.problem.annotationSuperInterface" 2266 * - possible values: { "error", "warning", "ignore" } 2267 * - default: "warning" 2268 * 2269 * COMPILER / Reporting Missing @Override Annotation 2270 * When enabled, the compiler will issue an error or a warning whenever encountering a method 2271 * declaration which overrides a superclass method but has no @Override annotation. 2272 * - option id: "org.eclipse.jdt.core.compiler.problem.missingOverrideAnnotation" 2273 * - possible values: { "error", "warning", "ignore" } 2274 * - default: "ignore" 2275 * 2276 * COMPILER / Reporting Missing @Deprecated Annotation 2277 * When enabled, the compiler will issue an error or a warning whenever encountering a declaration 2278 * carrying a @deprecated doc tag but having no corresponding @Deprecated annotation. 2279 * - option id: "org.eclipse.jdt.core.compiler.problem.missingDeprecatedAnnotation" 2280 * - possible values: { "error", "warning", "ignore" } 2281 * - default: "ignore" 2282 * 2283 * COMPILER / Reporting Incomplete Enum Switch 2284 * When enabled, the compiler will issue an error or a warning whenever 2285 * an enum constant has no corresponding case label in an enum switch 2286 * statement. 2287 * - option id: "org.eclipse.jdt.core.compiler.problem.incompleteEnumSwitch" 2288 * - possible values: { "error", "warning", "ignore" } 2289 * - default: "ignore" 2290 * 2291 * COMPILER / Reporting Boxing/Unboxing Conversion 2292 * When enabled, the compiler will issue an error or a warning whenever a boxing or an unboxing 2293 * conversion is performed. 2294 * - option id: "org.eclipse.jdt.core.compiler.problem.autoboxing" 2295 * - possible values: { "error", "warning", "ignore" } 2296 * - default: "ignore" 2297 * 2298 * COMPILER / Reporting Invalid Javadoc Comment 2299 * This is the generic control for the severity of Javadoc problems. 2300 * When enabled, the compiler will issue an error or a warning for a problem in Javadoc. 2301 * - option id: "org.eclipse.jdt.core.compiler.problem.invalidJavadoc" 2302 * - possible values: { "error", "warning", "ignore" } 2303 * - default: "ignore" 2304 * 2305 * COMPILER / Visibility Level For Invalid Javadoc Tags 2306 * Set the minimum visibility level for Javadoc tag problems. Below this level problems will be ignored. 2307 * - option id: "org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility" 2308 * - possible values: { "public", "protected", "default", "private" } 2309 * - default: "public" 2310 * 2311 * COMPILER / Reporting Invalid Javadoc Tags 2312 * When enabled, the compiler will signal unbound or unexpected reference tags in Javadoc. 2313 * A 'throws' tag referencing an undeclared exception would be considered as unexpected. 2314 * <br>Note that this diagnosis can be enabled based on the visibility of the construct associated with the Javadoc; 2315 * also see the setting "org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility". 2316 * <br> 2317 * The severity of the problem is controlled with option "org.eclipse.jdt.core.compiler.problem.invalidJavadoc". 2318 * - option id: "org.eclipse.jdt.core.compiler.problem.invalidJavadocTags" 2319 * - possible values: { "disabled", "enabled" } 2320 * - default: "disabled" 2321 * 2322 * COMPILER / Reporting Invalid Javadoc Tags with Deprecated References 2323 * Specify whether the compiler will report deprecated references used in Javadoc tags. 2324 * <br>Note that this diagnosis can be enabled based on the visibility of the construct associated with the Javadoc; 2325 * also see the setting "org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility". 2326 * - option id: "org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsDeprecatedRef" 2327 * - possible values: { "enabled", "disabled" } 2328 * - default: "disabled" 2329 * 2330 * COMPILER / Reporting Invalid Javadoc Tags with Not Visible References 2331 * Specify whether the compiler will report non-visible references used in Javadoc tags. 2332 * <br>Note that this diagnosis can be enabled based on the visibility of the construct associated with the Javadoc; 2333 * also see the setting "org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsVisibility". 2334 * - option id: "org.eclipse.jdt.core.compiler.problem.invalidJavadocTagsNotVisibleRef" 2335 * - possible values: { "enabled", "disabled" } 2336 * - default: "disabled" 2337 * 2338 * COMPILER / Reporting Missing Javadoc Tags 2339 * This is the generic control for the severity of Javadoc missing tag problems. 2340 * When enabled, the compiler will issue an error or a warning when tags are missing in Javadoc comments. 2341 * <br>Note that this diagnosis can be enabled based on the visibility of the construct associated with the Javadoc; 2342 * also see the setting "org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility". 2343 * <br> 2344 * - option id: "org.eclipse.jdt.core.compiler.problem.missingJavadocTags" 2345 * - possible values: { "error", "warning", "ignore" } 2346 * - default: "ignore" 2347 * 2348 * COMPILER / Visibility Level For Missing Javadoc Tags 2349 * Set the minimum visibility level for Javadoc missing tag problems. Below this level problems will be ignored. 2350 * - option id: "org.eclipse.jdt.core.compiler.problem.missingJavadocTagsVisibility" 2351 * - possible values: { "public", "protected", "default", "private" } 2352 * - default: "public" 2353 * 2354 * COMPILER / Reporting Missing Javadoc Tags on Overriding Methods 2355 * Specify whether the compiler will verify overriding methods in order to report Javadoc missing tag problems. 2356 * - option id: "org.eclipse.jdt.core.compiler.problem.missingJavadocTagsOverriding" 2357 * - possible values: { "enabled", "disabled" } 2358 * - default: "disabled" 2359 * 2360 * COMPILER / Reporting Missing Javadoc Comments 2361 * This is the generic control for the severity of missing Javadoc comment problems. 2362 * When enabled, the compiler will issue an error or a warning when Javadoc comments are missing. 2363 * <br>Note that this diagnosis can be enabled based on the visibility of the construct associated with the expected Javadoc; 2364 * also see the setting "org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility". 2365 * <br> 2366 * - option id: "org.eclipse.jdt.core.compiler.problem.missingJavadocComments" 2367 * - possible values: { "error", "warning", "ignore" } 2368 * - default: "ignore" 2369 * 2370 * COMPILER / Visibility Level For Missing Javadoc Comments 2371 * Set the minimum visibility level for missing Javadoc problems. Below this level problems will be ignored. 2372 * - option id: "org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsVisibility" 2373 * - possible values: { "public", "protected", "default", "private" } 2374 * - default: "public" 2375 * 2376 * COMPILER / Reporting Missing Javadoc Comments on Overriding Methods 2377 * Specify whether the compiler will verify overriding methods in order to report missing Javadoc comment problems. 2378 * - option id: "org.eclipse.jdt.core.compiler.problem.missingJavadocCommentsOverriding" 2379 * - possible values: { "enabled", "disabled" } 2380 * - default: "disabled" 2381 * 2382 * COMPILER / Maximum Number of Problems Reported per Compilation Unit 2383 * Specify the maximum number of problems reported on each compilation unit. 2384 * - option id: "org.eclipse.jdt.core.compiler.maxProblemPerUnit" 2385 * - possible values: "<n>" where <n> is zero or a positive integer (if zero then all problems are reported). 2386 * - default: "100" 2387 * 2388 * COMPILER / Treating Optional Error as Fatal 2389 * When enabled, optional errors (i.e. optional problems which severity is set to "error") will be treated as standard 2390 * compiler errors, yielding problem methods/types preventing from running offending code until the issue got resolved. 2391 * When disabled, optional errors are only considered as warnings, still carrying an error indication to make them more 2392 * severe. Note that by default, errors are fatal, whether they are optional or not. 2393 * - option id: "org.eclipse.jdt.core.compiler.problem.fatalOptionalError" 2394 * - possible values: { "enabled", "disabled" } 2395 * - default: "enabled" 2396 * 2397 * COMPILER / Defining the Automatic Task Tags 2398 * When the tag list is not empty, the compiler will issue a task marker whenever it encounters 2399 * one of the corresponding tags inside any comment in Java source code. 2400 * Generated task messages will start with the tag, and range until the next line separator, 2401 * comment ending, or tag. 2402 * When a given line of code bears multiple tags, each tag will be reported separately. 2403 * Moreover, a tag immediately followed by another tag will be reported using the contents of the 2404 * next non-empty tag of the line, if any. 2405 * Note that tasks messages are trimmed. If a tag is starting with a letter or digit, then it cannot be leaded by 2406 * another letter or digit to be recognized ("fooToDo" will not be recognized as a task for tag "ToDo", but "foo#ToDo" 2407 * will be detected for either tag "ToDo" or "#ToDo"). Respectively, a tag ending with a letter or digit cannot be followed 2408 * by a letter or digit to be recognized ("ToDofoo" will not be recognized as a task for tag "ToDo", but "ToDo:foo" will 2409 * be detected either for tag "ToDo" or "ToDo:"). 2410 * - option id: "org.eclipse.jdt.core.compiler.taskTags" 2411 * - possible values: { "<tag>[,<tag>]*" } where <tag> is a String without any wild-card or leading/trailing spaces 2412 * - default: "TODO,FIXME,XXX" 2413 * 2414 * COMPILER / Defining the Automatic Task Priorities 2415 * In parallel with the Automatic Task Tags, this list defines the priorities (high, normal or low) 2416 * of the task markers issued by the compiler. 2417 * If the default is specified, the priority of each task marker is "NORMAL". 2418 * - option id: "org.eclipse.jdt.core.compiler.taskPriorities" 2419 * - possible values: { "<priority>[,<priority>]*" } where <priority> is one of "HIGH", "NORMAL" or "LOW" 2420 * - default: "NORMAL,HIGH,NORMAL" 2421 * 2422 * COMPILER / Determining whether task tags are case-sensitive 2423 * When enabled, task tags are considered in a case-sensitive way. 2424 * - option id: "org.eclipse.jdt.core.compiler.taskCaseSensitive" 2425 * - possible values: { "enabled", "disabled" } 2426 * - default: "enabled" 2427 * 2428 * COMPILER / Reporting Forbidden Reference to Type with Restricted Access 2429 * When enabled, the compiler will issue an error or a warning when referring to a type that is non accessible, as defined according 2430 * to the access rule specifications. 2431 * - option id: "org.eclipse.jdt.core.compiler.problem.forbiddenReference" 2432 * - possible values: { "error", "warning", "ignore" } 2433 * - default: "warning" 2434 * 2435 * COMPILER / Reporting Discouraged Reference to Type with Restricted Access 2436 * When enabled, the compiler will issue an error or a warning when referring to a type with discouraged access, as defined according 2437 * to the access rule specifications. 2438 * - option id: "org.eclipse.jdt.core.compiler.problem.discouragedReference" 2439 * - possible values: { "error", "warning", "ignore" } 2440 * - default: "warning" 2441 * 2442 * COMPILER / Determining Effect of @SuppressWarnings 2443 * When enabled, the @SuppressWarnings annotation can be used to suppress some compiler warnings. 2444 * When disabled, all @SupressWarnings annotations are ignored; i.e., warnings are reported. 2445 * - option id: "org.eclipse.jdt.core.compiler.problem.suppressWarnings" 2446 * - possible values: { "enabled", "disabled" } 2447 * - default: "enabled" 2448 * 2449 * COMPILER / Reporting Unhandled Warning Token for @SuppressWarnings 2450 * When enabled, the compiler will issue an error or a warning when encountering a token 2451 * it cannot handle inside a @SuppressWarnings annotation. 2452 * - option id: "org.eclipse.jdt.core.compiler.problem.unhandledWarningToken" 2453 * - possible values: { "error", "warning", "ignore" } 2454 * - default: "warning" 2455 * 2456 * COMPILER / Reporting Unreferenced Label 2457 * When enabled, the compiler will issue an error or a warning when encountering a labeled statement which label 2458 * is never explicitly referenced. A label is considered to be referenced if its name explicitly appears behind a break 2459 * or continue statement; for instance the following label would be considered unreferenced; LABEL: { break; } 2460 * - option id: "org.eclipse.jdt.core.compiler.problem.unusedLabel" 2461 * - possible values: { "error", "warning", "ignore" } 2462 * - default: "warning" 2463 * 2464 * COMPILER / Reporting Parameter Assignment 2465 * When enabled, the compiler will issue an error or a warning if a parameter is 2466 * assigned to. 2467 * - option id: "org.eclipse.jdt.core.compiler.problem.parameterAssignment" 2468 * - possible values: { "error", "warning", "ignore" } 2469 * - default: "ignore" 2470 * 2471 * COMPILER / Reporting Switch Fall-Through Case 2472 * When enabled, the compiler will issue an error or a warning if a case may be 2473 * entered by falling through previous case. Empty cases are allowed. 2474 * - option id: "org.eclipse.jdt.core.compiler.problem.fallthroughCase" 2475 * - possible values: { "error", "warning", "ignore" } 2476 * - default: "ignore" 2477 * 2478 * COMPILER / Reporting Overriding method that doesn't call the super method invocation 2479 * When enabled, the compiler will issue an error or a warning if a method is overriding a method without calling 2480 * the super invocation. 2481 * - option id: "org.eclipse.jdt.core.compiler.problem.overridingMethodWithoutSuperInvocation" 2482 * - possible values: { "error", "warning", "ignore" } 2483 * - default: "ignore" 2484 * 2485 * BUILDER / Specifying Filters for Resource Copying Control 2486 * Allow to specify some filters to control the resource copy process. 2487 * - option id: "org.eclipse.jdt.core.builder.resourceCopyExclusionFilter" 2488 * - possible values: { "<name>[,<name>]* } where <name> is a file name pattern (* and ? wild-cards allowed) 2489 * or the name of a folder which ends with '/' 2490 * - default: "" 2491 * 2492 * BUILDER / Abort if Invalid Classpath 2493 * Allow to toggle the builder to abort if the classpath is invalid 2494 * - option id: "org.eclipse.jdt.core.builder.invalidClasspath" 2495 * - possible values: { "abort", "ignore" } 2496 * - default: "abort" 2497 * 2498 * BUILDER / Cleaning Output Folder(s) 2499 * Indicate whether the JavaBuilder is allowed to clean the output folders 2500 * when performing full build operations. 2501 * - option id: "org.eclipse.jdt.core.builder.cleanOutputFolder" 2502 * - possible values: { "clean", "ignore" } 2503 * - default: "clean" 2504 * 2505 * BUILDER / Recreate Modified class files in Output Folder 2506 * Indicate whether the JavaBuilder should check for any changes to .class files 2507 * in the output folders while performing incremental build operations. If changes 2508 * are detected to managed .class files, then a full build is performed, otherwise 2509 * the changes are left as is. Tools further altering generated .class files, like optimizers, 2510 * should ensure this option remains set in its default state of ignore. 2511 * - option id: "org.eclipse.jdt.core.builder.recreateModifiedClassFileInOutputFolder" 2512 * - possible values: { "enabled", "ignore" } 2513 * - default: "ignore" 2514 * 2515 * BUILDER / Reporting Duplicate Resources 2516 * Indicate the severity of the problem reported when more than one occurrence 2517 * of a resource is to be copied into the output location. 2518 * - option id: "org.eclipse.jdt.core.builder.duplicateResourceTask" 2519 * - possible values: { "error", "warning" } 2520 * - default: "warning" 2521 * 2522 * JAVACORE / Computing Project Build Order 2523 * Indicate whether JavaCore should enforce the project build order to be based on 2524 * the classpath prerequisite chain. When requesting to compute, this takes over 2525 * the platform default order (based on project references). 2526 * - option id: "org.eclipse.jdt.core.computeJavaBuildOrder" 2527 * - possible values: { "compute", "ignore" } 2528 * - default: "ignore" 2529 * 2530 * JAVACORE / Default Source Encoding Format 2531 * Get the default encoding format of source files. This value is 2532 * immutable and preset to the result of ResourcesPlugin.getEncoding(). 2533 * It is offered as a convenience shortcut only. 2534 * - option id: "org.eclipse.jdt.core.encoding" 2535 * - value: <immutable, platform default value> 2536 * 2537 * JAVACORE / Reporting Incomplete Classpath 2538 * Indicate the severity of the problem reported when an entry on the classpath does not exist, 2539 * is not legite or is not visible (for example, a referenced project is closed). 2540 * - option id: "org.eclipse.jdt.core.incompleteClasspath" 2541 * - possible values: { "error", "warning"} 2542 * - default: "error" 2543 * 2544 * JAVACORE / Reporting Classpath Cycle 2545 * Indicate the severity of the problem reported when a project is involved in a cycle. 2546 * - option id: "org.eclipse.jdt.core.circularClasspath" 2547 * - possible values: { "error", "warning" } 2548 * - default: "error" 2549 * 2550 * JAVACORE / Reporting Incompatible JDK Level for Required Binaries 2551 * Indicate the severity of the problem reported when a project prerequisites another project 2552 * or library with an incompatible target JDK level (e.g. project targeting 1.1 vm, but compiled against 1.4 libraries). 2553 * - option id: "org.eclipse.jdt.core.incompatibleJDKLevel" 2554 * - possible values: { "error", "warning", "ignore" } 2555 * - default: "ignore" 2556 * 2557 * JAVACORE / Enabling Usage of Classpath Exclusion Patterns 2558 * When disabled, no entry on a project classpath can be associated with 2559 * an exclusion pattern. 2560 * - option id: "org.eclipse.jdt.core.classpath.exclusionPatterns" 2561 * - possible values: { "enabled", "disabled" } 2562 * - default: "enabled" 2563 * 2564 * JAVACORE / Enabling Usage of Classpath Multiple Output Locations 2565 * When disabled, no entry on a project classpath can be associated with 2566 * a specific output location, preventing thus usage of multiple output locations. 2567 * - option id: "org.eclipse.jdt.core.classpath.multipleOutputLocations" 2568 * - possible values: { "enabled", "disabled" } 2569 * - default: "enabled" 2570 * 2571 * JAVACORE / Set the timeout value for retrieving the method's parameter names from javadoc 2572 * Timeout in milliseconds to retrieve the method's parameter names from javadoc. 2573 * If the value is 0, the parameter names are not fetched and the raw names are returned. 2574 * - option id: "org.eclipse.jdt.core.timeoutForParameterNameFromAttachedJavadoc" 2575 * - possible values: "<n>", where n is an integer greater than or equal to 0 2576 * - default: "50" 2577 * 2578 * DEPRECATED SEE DefaultCodeFormatterOptions: FORMATTER / Inserting New Line Before Opening Brace 2579 * When Insert, a new line is inserted before an opening brace, otherwise nothing 2580 * is inserted 2581 * - option id: "org.eclipse.jdt.core.formatter.newline.openingBrace" 2582 * - possible values: { "insert", "do not insert" } 2583 * - default: "do not insert" 2584 * 2585 * DEPRECATED SEE DefaultCodeFormatterOptions: FORMATTER / Inserting New Line Inside Control Statement 2586 * When Insert, a new line is inserted between } and following else, catch, finally 2587 * - option id: "org.eclipse.jdt.core.formatter.newline.controlStatement" 2588 * - possible values: { "insert", "do not insert" } 2589 * - default: "do not insert" 2590 * 2591 * DEPRECATED SEE DefaultCodeFormatterOptions: Clearing Blank Lines 2592 * When Clear all, all blank lines are removed. When Preserve one, only one is kept 2593 * and all others removed. 2594 * - option id: "org.eclipse.jdt.core.formatter.newline.clearAll" 2595 * - possible values: { "clear all", "preserve one" } 2596 * - default: "preserve one" 2597 * 2598 * DEPRECATED SEE DefaultCodeFormatterOptions: Inserting New Line Between Else/If 2599 * When Insert, a blank line is inserted between an else and an if when they are 2600 * contiguous. When choosing to not insert, else-if will be kept on the same 2601 * line when possible. 2602 * - option id: "org.eclipse.jdt.core.formatter.newline.elseIf" 2603 * - possible values: { "insert", "do not insert" } 2604 * - default: "do not insert" 2605 * 2606 * DEPRECATED SEE DefaultCodeFormatterOptions: Inserting New Line In Empty Block 2607 * When insert, a line break is inserted between contiguous { and }, if } is not followed 2608 * by a keyword. 2609 * - option id: "org.eclipse.jdt.core.formatter.newline.emptyBlock" 2610 * - possible values: { "insert", "do not insert" } 2611 * - default: "insert" 2612 * 2613 * DEPRECATED SEE DefaultCodeFormatterOptions: Splitting Lines Exceeding Length 2614 * Enable splitting of long lines (exceeding the configurable length). Length of 0 will 2615 * disable line splitting 2616 * - option id: "org.eclipse.jdt.core.formatter.lineSplit" 2617 * - possible values: "<n>", where n is zero or a positive integer 2618 * - default: "80" 2619 * 2620 * DEPRECATED SEE DefaultCodeFormatterOptions: Compacting Assignment 2621 * Assignments can be formatted asymmetrically, for example 'int x= 2;', when Normal, a space 2622 * is inserted before the assignment operator 2623 * - option id: "org.eclipse.jdt.core.formatter.style.assignment" 2624 * - possible values: { "compact", "normal" } 2625 * - default: "normal" 2626 * 2627 * DEPRECATED SEE DefaultCodeFormatterOptions: Defining Indentation Character 2628 * Either choose to indent with tab characters or spaces 2629 * - option id: "org.eclipse.jdt.core.formatter.tabulation.char" 2630 * - possible values: { "tab", "space" } 2631 * - default: "tab" 2632 * 2633 * DEPRECATED SEE DefaultCodeFormatterOptions: Defining Space Indentation Length 2634 * When using spaces, set the amount of space characters to use for each 2635 * indentation mark. 2636 * - option id: "org.eclipse.jdt.core.formatter.tabulation.size" 2637 * - possible values: "<n>", where n is a positive integer 2638 * - default: "4" 2639 * 2640 * DEPRECATED SEE DefaultCodeFormatterOptions: Inserting space in cast expression 2641 * When Insert, a space is added between the type and the expression in a cast expression. 2642 * - option id: "org.eclipse.jdt.core.formatter.space.castexpression" 2643 * - possible values: { "insert", "do not insert" } 2644 * - default: "insert" 2645 * 2646 * CODEASSIST / Activate Visibility Sensitive Completion 2647 * When active, completion doesn't show that you can not see 2648 * (for example, you can not see private methods of a super class). 2649 * - option id: "org.eclipse.jdt.core.codeComplete.visibilityCheck" 2650 * - possible values: { "enabled", "disabled" } 2651 * - default: "disabled" 2652 * 2653 * CODEASSIST / Activate Deprecation Sensitive Completion 2654 * When enabled, completion doesn't propose deprecated members and types. 2655 * - option id: "org.eclipse.jdt.core.codeComplete.deprecationCheck" 2656 * - possible values: { "enabled", "disabled" } 2657 * - default: "disabled" 2658 * 2659 * CODEASSIST / Automatic Qualification of Implicit Members 2660 * When active, completion automatically qualifies completion on implicit 2661 * field references and message expressions. 2662 * - option id: "org.eclipse.jdt.core.codeComplete.forceImplicitQualification" 2663 * - possible values: { "enabled", "disabled" } 2664 * - default: "disabled" 2665 * 2666 * CODEASSIST / Define the Prefixes for Field Name 2667 * When the prefixes is non empty, completion for field name will begin with 2668 * one of the proposed prefixes. 2669 * - option id: "org.eclipse.jdt.core.codeComplete.fieldPrefixes" 2670 * - possible values: { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 2671 * - default: "" 2672 * 2673 * CODEASSIST / Define the Prefixes for Static Field Name 2674 * When the prefixes is non empty, completion for static field name will begin with 2675 * one of the proposed prefixes. 2676 * - option id: "org.eclipse.jdt.core.codeComplete.staticFieldPrefixes" 2677 * - possible values: { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 2678 * - default: "" 2679 * 2680 * CODEASSIST / Define the Prefixes for Local Variable Name 2681 * When the prefixes is non empty, completion for local variable name will begin with 2682 * one of the proposed prefixes. 2683 * - option id: "org.eclipse.jdt.core.codeComplete.localPrefixes" 2684 * - possible values: { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 2685 * - default: "" 2686 * 2687 * CODEASSIST / Define the Prefixes for Argument Name 2688 * When the prefixes is non empty, completion for argument name will begin with 2689 * one of the proposed prefixes. 2690 * - option id: "org.eclipse.jdt.core.codeComplete.argumentPrefixes" 2691 * - possible values: { "<prefix>[,<prefix>]*" } where <prefix> is a String without any wild-card 2692 * - default: "" 2693 * 2694 * CODEASSIST / Define the Suffixes for Field Name 2695 * When the suffixes is non empty, completion for field name will end with 2696 * one of the proposed suffixes. 2697 * - option id: "org.eclipse.jdt.core.codeComplete.fieldSuffixes" 2698 * - possible values: { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 2699 * - default: "" 2700 * 2701 * CODEASSIST / Define the Suffixes for Static Field Name 2702 * When the suffixes is non empty, completion for static field name will end with 2703 * one of the proposed suffixes. 2704 * - option id: "org.eclipse.jdt.core.codeComplete.staticFieldSuffixes" 2705 * - possible values: { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 2706 * - default: "" 2707 * 2708 * CODEASSIST / Define the Suffixes for Local Variable Name 2709 * When the suffixes is non empty, completion for local variable name will end with 2710 * one of the proposed suffixes. 2711 * - option id: "org.eclipse.jdt.core.codeComplete.localSuffixes" 2712 * - possible values: { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 2713 * - default: "" 2714 * 2715 * CODEASSIST / Define the Suffixes for Argument Name 2716 * When the suffixes is non empty, completion for argument name will end with 2717 * one of the proposed suffixes. 2718 * - option id: "org.eclipse.jdt.core.codeComplete.argumentSuffixes" 2719 * - possible values: { "<suffix>[,<suffix>]*" } where <suffix> is a String without any wild-card 2720 * - default: "" 2721 * 2722 * CODEASSIST / Activate Forbidden Reference Sensitive Completion 2723 * When enabled, completion doesn't propose elements which match a 2724 * forbidden reference rule. 2725 * - option id: "org.eclipse.jdt.core.codeComplete.forbiddenReferenceCheck" 2726 * - possible values: { "enabled", "disabled" } 2727 * - default: "enabled" 2728 * 2729 * CODEASSIST / Activate Discouraged Reference Sensitive Completion 2730 * When enabled, completion doesn't propose elements which match a 2731 * discouraged reference rule. 2732 * - option id: "org.eclipse.jdt.core.codeComplete.discouragedReferenceCheck" 2733 * - possible values: { "enabled", "disabled" } 2734 * - default: "disabled" 2735 * 2736 * CODEASSIST / Activate Camel Case Sensitive Completion 2737 * When enabled, completion shows proposals whose name match the CamelCase 2738 * pattern. 2739 * - option id: "org.eclipse.jdt.core.codeComplete.camelCaseMatch" 2740 * - possible values: { "enabled", "disabled" } 2741 * - default: "enabled" 2742 * 2743 * CODEASSIST / Activate Suggestion of Static Import 2744 * When enabled, completion proposals can contain static import 2745 * pattern. 2746 * - option id: "org.eclipse.jdt.core.codeComplete.suggestStaticImports" 2747 * - possible values: { "enabled", "disabled" } 2748 * - default: "enabled" 2749 * </pre> 2750 */ 2751 public static Hashtable JavaDoc getDefaultOptions(){ 2752 return JavaModelManager.getJavaModelManager().getDefaultOptions(); 2753 } 2754 2755 /** 2756 * Returns the workspace root default charset encoding. 2757 * 2758 * @return the name of the default charset encoding for workspace root. 2759 * @see IContainer#getDefaultCharset() 2760 * @see ResourcesPlugin#getEncoding() 2761 * @since 3.0 2762 */ 2763 public static String JavaDoc getEncoding() { 2764 // Verify that workspace is not shutting down (see bug https://bugs.eclipse.org/bugs/show_bug.cgi?id=60687) 2765 IWorkspace workspace = ResourcesPlugin.getWorkspace(); 2766 if (workspace != null) { 2767 try { 2768 return workspace.getRoot().getDefaultCharset(); 2769 } catch (CoreException e) { 2770 // fails silently and return plugin global encoding if core exception occurs 2771 } 2772 } 2773 return ResourcesPlugin.getEncoding(); 2774 } 2775 2776 /** 2777 * Returns an array that contains the resources generated by the Java builder when building the 2778 * compilation units contained in the given region. 2779 * <p>The contents of the array is accurate only if the elements of the given region have been built.</p> 2780 * <p>The given region can contain instances of:</p> 2781 * <ul> 2782 * <li><code>org.eclipse.jdt.core.ICompilationUnit</code></li> 2783 * <li><code>org.eclipse.jdt.core.IPackageFragment</code></li> 2784 * <li><code>org.eclipse.jdt.core.IPackageFragmentRoot</code></li> 2785 * <li><code>org.eclipse.jdt.core.IJavaProject</code></li> 2786 * </ul> 2787 * <p>All other types of <code>org.eclipse.jdt.core.IJavaElement</code> are ignored.</p> 2788 * 2789 * @param region the given region 2790 * @param includesNonJavaResources a flag that indicates if non-java resources should be included 2791 * 2792 * @return an array that contains the resources generated by the Java builder when building the 2793 * compilation units contained in the given region, an empty array if none 2794 * @exception IllegalArgumentException if the given region is <code>null</code> 2795 * @since 3.3 2796 */ 2797 public static IResource[] getGeneratedResources(IRegion region, boolean includesNonJavaResources) { 2798 if (region == null) throw new IllegalArgumentException JavaDoc("region cannot be null"); //$NON-NLS-1$ 2799 IJavaElement[] elements = region.getElements(); 2800 HashMap JavaDoc projectsStates = new HashMap JavaDoc(); 2801 ArrayList JavaDoc collector = new ArrayList JavaDoc(); 2802 for (int i = 0, max = elements.length; i < max; i++) { 2803 // collect all the java project 2804 IJavaElement element = elements[i]; 2805 IJavaProject javaProject = element.getJavaProject(); 2806 IProject project = javaProject.getProject(); 2807 State state = null; 2808 State currentState = (State) projectsStates.get(project); 2809 if (currentState != null) { 2810 state = currentState; 2811 } else { 2812 state = (State) JavaModelManager.getJavaModelManager().getLastBuiltState(project, null); 2813 if (state != null) { 2814 projectsStates.put(project, state); 2815 } 2816 } 2817 if (state == null) continue; 2818 if (element.getElementType() == IJavaElement.JAVA_PROJECT) { 2819 IPackageFragmentRoot[] roots = null; 2820 try { 2821 roots = javaProject.getPackageFragmentRoots(); 2822 } catch (JavaModelException e) { 2823 // ignore 2824 } 2825 if (roots == null) continue; 2826 IRegion region2 = JavaCore.newRegion(); 2827 for (int j = 0; j < roots.length; j++) { 2828 region2.add(roots[j]); 2829 } 2830 IResource[] res = getGeneratedResources(region2, includesNonJavaResources); 2831 for (int j = 0, max2 = res.length; j < max2; j++) { 2832 collector.add(res[j]); 2833 } 2834 continue; 2835 } 2836 IPath outputLocation = null; 2837 try { 2838 outputLocation = javaProject.getOutputLocation(); 2839 } catch (JavaModelException e) { 2840 // ignore 2841 } 2842 IJavaElement root = element; 2843 while (root != null && root.getElementType() != IJavaElement.PACKAGE_FRAGMENT_ROOT) { 2844 root = root.getParent(); 2845 } 2846 if (root == null) continue; 2847 IPackageFragmentRoot packageFragmentRoot = (IPackageFragmentRoot) root; 2848 int rootPathSegmentCounts = packageFragmentRoot.getPath().segmentCount(); 2849 try { 2850 IClasspathEntry entry = packageFragmentRoot.getRawClasspathEntry(); 2851 IPath entryOutputLocation = entry.getOutputLocation(); 2852 if (entryOutputLocation != null) { 2853 outputLocation = entryOutputLocation; 2854 } 2855 } catch (JavaModelException e) { 2856 e.printStackTrace(); 2857 } 2858 if (outputLocation == null) continue; 2859 IContainer container = (IContainer) project.getWorkspace().getRoot().findMember(outputLocation); 2860 switch(element.getElementType()) { 2861 case IJavaElement.COMPILATION_UNIT : 2862 // get the .class files generated when this element was built 2863 ICompilationUnit unit = (ICompilationUnit) element; 2864 getGeneratedResource(unit, container, state, rootPathSegmentCounts, collector); 2865 break; 2866 case IJavaElement.PACKAGE_FRAGMENT : 2867 // collect all the .class files generated when all the units in this package were built 2868 IPackageFragment fragment = (IPackageFragment) element; 2869 ICompilationUnit[] compilationUnits = null; 2870 try { 2871 compilationUnits = fragment.getCompilationUnits(); 2872 } catch (JavaModelException e) { 2873 // ignore 2874 } 2875 if (compilationUnits == null) continue; 2876 for (int j = 0, max2 = compilationUnits.length; j < max2; j++) { 2877 getGeneratedResource(compilationUnits[j], container, state, rootPathSegmentCounts, collector); 2878 } 2879 if (includesNonJavaResources) { 2880 // retrieve all non-java resources from the output location using the package fragment path 2881 Object JavaDoc[] nonJavaResources = null; 2882 try { 2883 nonJavaResources = fragment.getNonJavaResources(); 2884 } catch (JavaModelException e) { 2885 // ignore 2886 } 2887 if (nonJavaResources != null) { 2888 addNonJavaResources(nonJavaResources, container, rootPathSegmentCounts, collector); 2889 } 2890 } 2891 break; 2892 case IJavaElement.PACKAGE_FRAGMENT_ROOT : 2893 // collect all the .class files generated when all the units in this package were built 2894 IPackageFragmentRoot fragmentRoot = (IPackageFragmentRoot) element; 2895 if (fragmentRoot.isArchive()) continue; 2896 IJavaElement[] children = null; 2897 try { 2898 children = fragmentRoot.getChildren(); 2899 } catch (JavaModelException e) { 2900 // ignore 2901 } 2902 if (children == null) continue; 2903 for (int j = 0, max2 = children.length; j < max2; j++) { 2904 fragment = (IPackageFragment) children[j]; 2905 ICompilationUnit[] units = null; 2906 try { 2907 units = fragment.getCompilationUnits(); 2908 } catch (JavaModelException e) { 2909 // ignore 2910 } 2911 if (units == null) continue; 2912 for (int n = 0, max3 = units.length; n < max3; n++) { 2913 getGeneratedResource(units[n], container, state, rootPathSegmentCounts, collector); 2914 } 2915 if (includesNonJavaResources) { 2916 // retrieve all non-java resources from the output location using the package fragment path 2917 Object JavaDoc[] nonJavaResources = null; 2918 try { 2919 nonJavaResources = fragment.getNonJavaResources(); 2920 } catch (JavaModelException e) { 2921 // ignore 2922 } 2923 if (nonJavaResources != null) { 2924 addNonJavaResources(nonJavaResources, container, rootPathSegmentCounts, collector); 2925 } 2926 } 2927 } 2928 break; 2929 } 2930 } 2931 int size = collector.size(); 2932 if (size != 0) { 2933 IResource[] result = new IResource[size]; 2934 collector.toArray(result); 2935 return result; 2936 } 2937 return NO_GENERATED_RESOURCES; 2938 } 2939 2940 private static void getGeneratedResource(ICompilationUnit unit, 2941 IContainer container, 2942 State state, 2943 int rootPathSegmentCounts, 2944 ArrayList JavaDoc collector) { 2945 IResource resource = unit.getResource(); 2946 char[][] typeNames = state.getDefinedTypeNamesFor(resource.getProjectRelativePath().toString()); 2947 if (typeNames != null) { 2948 IPath path = unit.getPath().removeFirstSegments(rootPathSegmentCounts).removeLastSegments(1); 2949 for (int j = 0, max2 = typeNames.length; j < max2; j++) { 2950 IPath localPath = path.append(new String JavaDoc(typeNames[j]) + ".class"); //$NON-NLS-1$ 2951 IResource member = container.findMember(localPath); 2952 if (member != null && member.exists()) { 2953 collector.add(member); 2954 } 2955 } 2956 } else { 2957 IPath path = unit.getPath().removeFirstSegments(rootPathSegmentCounts).removeLastSegments(1); 2958 path = path.append(Util.getNameWithoutJavaLikeExtension(unit.getElementName()) + ".class"); //$NON-NLS-1$ 2959 IResource member = container.findMember(path); 2960 if (member != null && member.exists()) { 2961 collector.add(member); 2962 } 2963 } 2964 } 2965 2966 /** 2967 * Returns the single instance of the Java core plug-in runtime class. 2968 * Equivalent to <code>(JavaCore) getPlugin()</code>. 2969 * 2970 * @return the single instance of the Java core plug-in runtime class 2971 */ 2972 public static JavaCore getJavaCore() { 2973 return (JavaCore) getPlugin(); 2974 } 2975 2976 /** 2977 * Returns the list of known Java-like extensions. 2978 * Java like extension are defined in the {@link org.eclipse.core.runtime.Platform#getContentTypeManager() 2979 * content type manager} for the {@link #JAVA_SOURCE_CONTENT_TYPE}. 2980 * Note that a Java-like extension doesn't include the leading dot ('.'). 2981 * Also note that the "java" extension is always defined as a Java-like extension. 2982 * 2983 * @return the list of known Java-like extensions. 2984 * @since 3.2 2985 */ 2986 public static String JavaDoc[] getJavaLikeExtensions() { 2987 return CharOperation.toStrings(Util.getJavaLikeExtensions()); 2988 } 2989 2990 /** 2991 * Helper method for returning one option value only. Equivalent to <code>(String)JavaCore.getOptions().get(optionName)</code> 2992 * Note that it may answer <code>null</code> if this option does not exist. 2993 * <p> 2994 * For a complete description of the configurable options, see <code>getDefaultOptions</code>. 2995 * </p> 2996 * 2997 * @param optionName the name of an option 2998 * @return the String value of a given option 2999 * @see JavaCore#getDefaultOptions() 3000 * @see JavaCorePreferenceInitializer for changing default settings 3001 * @since 2.0 3002 */ 3003 public static String JavaDoc getOption(String JavaDoc optionName) { 3004 return JavaModelManager.getJavaModelManager().getOption(optionName); 3005 } 3006 3007 /** 3008 * Returns the table of the current options. Initially, all options have their default values, 3009 * and this method returns a table that includes all known options. 3010 * <p>For a complete description of the configurable options, see <code>getDefaultOptions</code>.</p> 3011 * <p>Returns a default set of options even if the platform is not running.</p> 3012 * 3013 * @return table of current settings of all options 3014 * (key type: <code>String</code>; value type: <code>String</code>) 3015 * @see #getDefaultOptions() 3016 * @see JavaCorePreferenceInitializer for changing default settings 3017 */ 3018 public static Hashtable JavaDoc getOptions() { 3019 return JavaModelManager.getJavaModelManager().getOptions(); 3020 } 3021 3022 /** 3023 * Returns the single instance of the Java core plug-in runtime class. 3024 * 3025 * @return the single instance of the Java core plug-in runtime class 3026 */ 3027 public static Plugin getPlugin() { 3028 return JAVA_CORE_PLUGIN; 3029 } 3030 3031 /** 3032 * This is a helper method, which returns the resolved classpath entry denoted 3033 * by a given entry (if it is a variable entry). It is obtained by resolving the variable 3034 * reference in the first segment. Returns <code>null</code> if unable to resolve using 3035 * the following algorithm: 3036 * <ul> 3037 * <li> if variable segment cannot be resolved, returns <code>null</code></li> 3038 * <li> finds a project, JAR or binary folder in the workspace at the resolved path location</li> 3039 * <li> if none finds an external JAR file or folder outside the workspace at the resolved path location </li> 3040 * <li> if none returns <code>null</code></li> 3041 * </ul> 3042 * <p> 3043 * Variable source attachment path and root path are also resolved and recorded in the resulting classpath entry. 3044 * <p> 3045 * NOTE: This helper method does not handle classpath containers, for which should rather be used 3046 * <code>JavaCore#getClasspathContainer(IPath, IJavaProject)</code>. 3047 * <p> 3048 * 3049 * @param entry the given variable entry 3050 * @return the resolved library or project classpath entry, or <code>null</code> 3051 * if the given variable entry could not be resolved to a valid classpath entry 3052 */ 3053 public static IClasspathEntry getResolvedClasspathEntry(IClasspathEntry entry) { 3054 3055 if (entry.getEntryKind() != IClasspathEntry.CPE_VARIABLE) 3056 return entry; 3057 3058 IWorkspaceRoot workspaceRoot = ResourcesPlugin.getWorkspace().getRoot(); 3059 IPath resolvedPath = JavaCore.getResolvedVariablePath(entry.getPath()); 3060 if (resolvedPath == null) 3061 return null; 3062 3063 Object JavaDoc target = JavaModel.getTarget(workspaceRoot, resolvedPath, false); 3064 if (target == null) 3065 return null; 3066 3067 // inside the workspace 3068 if (target instanceof IResource) { 3069 IResource resolvedResource = (IResource) target; 3070 switch (resolvedResource.getType()) { 3071 3072 case IResource.PROJECT : 3073 // internal project 3074 return JavaCore.newProjectEntry( 3075 resolvedPath, 3076 entry.getAccessRules(), 3077 entry.combineAccessRules(), 3078 entry.getExtraAttributes(), 3079 entry.isExported()); 3080 case IResource.FILE : 3081 if (org.eclipse.jdt.internal.compiler.util.Util.isArchiveFileName(resolvedResource.getName())) { 3082 // internal binary archive 3083 return JavaCore.newLibraryEntry( 3084 resolvedPath, 3085 getResolvedVariablePath(entry.getSourceAttachmentPath()), 3086 getResolvedVariablePath(entry.getSourceAttachmentRootPath()), 3087 entry.getAccessRules(), 3088 entry.getExtraAttributes(), 3089 entry.isExported()); 3090 } 3091 break; 3092 3093 case IResource.FOLDER : 3094 // internal binary folder 3095 return JavaCore.newLibraryEntry( 3096 resolvedPath, 3097 getResolvedVariablePath(entry.getSourceAttachmentPath()), 3098 getResolvedVariablePath(entry.getSourceAttachmentRootPath()), 3099 entry.getAccessRules(), 3100 entry.getExtraAttributes(), 3101 entry.isExported()); 3102 } 3103 } 3104 // outside the workspace 3105 if (target instanceof File JavaDoc) { 3106 File JavaDoc externalFile = JavaModel.getFile(target); 3107 if (externalFile != null) { 3108 String JavaDoc fileName = externalFile.getName().toLowerCase(); 3109 if (fileName.endsWith(SuffixConstants.SUFFIX_STRING_jar) || fileName.endsWith(SuffixConstants.SUFFIX_STRING_zip)) { 3110 // external binary archive 3111 return JavaCore.newLibraryEntry( 3112 resolvedPath, 3113 getResolvedVariablePath(entry.getSourceAttachmentPath()), 3114 getResolvedVariablePath(entry.getSourceAttachmentRootPath()), 3115 entry.getAccessRules(), 3116 entry.getExtraAttributes(), 3117 entry.isExported()); 3118 } 3119 } else { // external binary folder 3120 if (resolvedPath.isAbsolute()){ 3121 return JavaCore.newLibraryEntry( 3122 resolvedPath, 3123 getResolvedVariablePath(entry.getSourceAttachmentPath()), 3124 getResolvedVariablePath(entry.getSourceAttachmentRootPath()), 3125 entry.getAccessRules(), 3126 entry.getExtraAttributes(), 3127 entry.isExported()); 3128 } 3129 } 3130 } 3131 return null; 3132 } 3133 3134 3135 /** 3136 * Resolve a variable path (helper method). 3137 * 3138 * @param variablePath the given variable path 3139 * @return the resolved variable path or <code>null</code> if none 3140 */ 3141 public static IPath getResolvedVariablePath(IPath variablePath) { 3142 3143 if (variablePath == null) 3144 return null; 3145 int count = variablePath.segmentCount(); 3146 if (count == 0) 3147 return null; 3148 3149 // lookup variable 3150 String JavaDoc variableName = variablePath.segment(0); 3151 IPath resolvedPath = JavaCore.getClasspathVariable(variableName); 3152 if (resolvedPath == null) 3153 return null; 3154 3155 // append path suffix 3156 if (count > 1) { 3157 resolvedPath = resolvedPath.append(variablePath.removeFirstSegments(1)); 3158 } 3159 return resolvedPath; 3160 } 3161 3162 /** 3163 * Answers the shared working copies currently registered for this buffer factory. 3164 * Working copies can be shared by several clients using the same buffer factory,see 3165 * <code>IWorkingCopy.getSharedWorkingCopy</code>. 3166 * 3167 * @param factory the given buffer factory 3168 * @return the list of shared working copies for a given buffer factory 3169 * @since 2.0 3170 * @deprecated Use {@link #getWorkingCopies(WorkingCopyOwner)} instead 3171 */ 3172 public static IWorkingCopy[] getSharedWorkingCopies(IBufferFactory factory){ 3173 3174 // if factory is null, default factory must be used 3175 if (factory == null) factory = BufferManager.getDefaultBufferManager().getDefaultBufferFactory(); 3176 3177 return getWorkingCopies(BufferFactoryWrapper.create(factory)); 3178 } 3179 3180 /** 3181 * Returns the names of all defined user libraries. The corresponding classpath container path 3182 * is the name appended to the USER_LIBRARY_CONTAINER_ID. 3183 * @return Return an array containing the names of all known user defined. 3184 * @since 3.0 3185 */ 3186 public static String JavaDoc[] getUserLibraryNames() { 3187 return JavaModelManager.getUserLibraryManager().getUserLibraryNames(); 3188 } 3189 3190 /** 3191 * Returns the working copies that have the given owner. 3192 * Only compilation units in working copy mode are returned. 3193 * If the owner is <code>null</code>, primary working copies are returned. 3194 * 3195 * @param owner the given working copy owner or <code>null</code> for primary working copy owner 3196 * @return the list of working copies for a given owner 3197 * @since 3.0 3198 */ 3199 public static ICompilationUnit[] getWorkingCopies(WorkingCopyOwner owner){ 3200 3201 JavaModelManager manager = JavaModelManager.getJavaModelManager(); 3202 if (owner == null) owner = DefaultWorkingCopyOwner.PRIMARY; 3203 ICompilationUnit[] result = manager.getWorkingCopies(owner, false/*don't add primary WCs*/); 3204 if (result == null) return JavaModelManager.NO_WORKING_COPY; 3205 return result; 3206 } 3207 3208 /** 3209 * Initializes JavaCore internal structures to allow subsequent operations (such 3210 * as the ones that need a resolved classpath) to run full speed. A client may 3211 * choose to call this method in a background thread early after the workspace 3212 * has started so that the initialization is transparent to the user. 3213 * <p> 3214 * However calling this method is optional. Services will lazily perform 3215 * initialization when invoked. This is only a way to reduce initialization 3216 * overhead on user actions, if it can be performed before at some 3217 * appropriate moment. 3218 * </p><p> 3219 * This initialization runs accross all Java projects in the workspace. Thus the 3220 * workspace root scheduling rule is used during this operation. 3221 * </p><p> 3222 * This method may return before the initialization is complete. The 3223 * initialization will then continue in a background thread. 3224 * </p><p> 3225 * This method can be called concurrently. 3226 * </p> 3227 * 3228 * @param monitor a progress monitor, or <code>null</code> if progress 3229 * reporting and cancellation are not desired 3230 * @exception CoreException if the initialization fails, 3231 * the status of the exception indicates the reason of the failure 3232 * @since 3.1 3233 */ 3234 public static void initializeAfterLoad(IProgressMonitor monitor) throws CoreException { 3235 try { 3236 if (monitor != null) monitor.beginTask(Messages.javamodel_initialization, 100); 3237 3238 // initialize all containers and variables 3239 JavaModelManager manager = JavaModelManager.getJavaModelManager(); 3240 try { 3241 if (monitor != null) { 3242 monitor.subTask(Messages.javamodel_configuring_classpath_containers); 3243 manager.batchContainerInitializationsProgress.set(new SubProgressMonitor(monitor, 50)); // 50% of the time is spent in initializing containers and variables 3244 } 3245 3246 // all classpaths in the workspace are going to be resolved, ensure that containers are initialized in one batch 3247 manager.batchContainerInitializations = true; 3248 3249 // avoid leaking source attachment properties (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=183413) 3250 IJavaProject[] projects = manager.getJavaModel().getJavaProjects(); 3251 for (int i = 0, length = projects.length; i < length; i++) { 3252 IClasspathEntry[] classpath; 3253 try { 3254 classpath = ((JavaProject) projects[i]).getResolvedClasspath(); 3255 } catch (JavaModelException e) { 3256 // project no longer exist: ignore 3257 continue; 3258 } 3259 if (classpath != null) { 3260 for (int j = 0, length2 = classpath.length; j < length2; j++) { 3261 IClasspathEntry entry = classpath[j]; 3262 if (entry.getSourceAttachmentPath() != null) 3263 Util.setSourceAttachmentProperty(entry.getPath(), null); 3264 // else source might have been attached by IPackageFragmentRoot#attachSource(...), we keep it 3265 } 3266 } 3267 } 3268 3269 // initialize delta state 3270 manager.deltaState.rootsAreStale = true; // in case it was already initialized before we cleaned up the source attachment proprties 3271 manager.deltaState.initializeRoots(); 3272 } finally { 3273 manager.batchContainerInitializationsProgress.set(null); 3274 } 3275 3276 // dummy query for waiting until the indexes are ready 3277 SearchEngine engine = new SearchEngine(); 3278 IJavaSearchScope scope = SearchEngine.createWorkspaceScope(); 3279 try { 3280 if (monitor != null) 3281 monitor.subTask(Messages.javamodel_configuring_searchengine); 3282 engine.searchAllTypeNames( 3283 null, 3284 SearchPattern.R_EXACT_MATCH, 3285 "!@$#!@".toCharArray(), //$NON-NLS-1$ 3286 SearchPattern.R_PATTERN_MATCH | SearchPattern.R_CASE_SENSITIVE, 3287 IJavaSearchConstants.CLASS, 3288 scope, 3289 new TypeNameRequestor() { 3290 public void acceptType( 3291 int modifiers, 3292 char[] packageName, 3293 char[] simpleTypeName, 3294 char[][] enclosingTypeNames, 3295 String JavaDoc path) { 3296 // no type to accept 3297 } 3298 }, 3299 // will not activate index query caches if indexes are not ready, since it would take to long 3300 // to wait until indexes are fully rebuild 3301 IJavaSearchConstants.CANCEL_IF_NOT_READY_TO_SEARCH, 3302 monitor == null ? null : new SubProgressMonitor(monitor, 49) // 49% of the time is spent in the dummy search 3303 ); 3304 } catch (JavaModelException e) { 3305 // /search failed: ignore 3306 } catch (OperationCanceledException e) { 3307 if (monitor != null && monitor.isCanceled()) 3308 throw e; 3309 // else indexes were not ready: catch the exception so that jars are still refreshed 3310 } 3311 3312 // check if the build state version number has changed since last session 3313 // (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=98969) 3314 if (monitor != null) 3315 monitor.subTask(Messages.javamodel_getting_build_state_number); 3316 QualifiedName qName = new QualifiedName(JavaCore.PLUGIN_ID, "stateVersionNumber"); //$NON-NLS-1$ 3317 IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot(); 3318 String JavaDoc versionNumber = null; 3319 try { 3320 versionNumber = root.getPersistentProperty(qName); 3321 } catch (CoreException e) { 3322 // could not read version number: consider it is new 3323 } 3324 final JavaModel model = manager.getJavaModel(); 3325 String JavaDoc newVersionNumber = Byte.toString(State.VERSION); 3326 if (!newVersionNumber.equals(versionNumber)) { 3327 // build state version number has changed: touch every projects to force a rebuild 3328 if (JavaBuilder.DEBUG) 3329 System.out.println("Build state version number has changed"); //$NON-NLS-1$ 3330 IWorkspaceRunnable runnable = new IWorkspaceRunnable() { 3331 public void run(IProgressMonitor progressMonitor2) throws CoreException { 3332 IJavaProject[] projects = null; 3333 try { 3334 projects = model.getJavaProjects(); 3335 } catch (JavaModelException e) { 3336 // could not get Java projects: ignore 3337 } 3338 if (projects != null) { 3339 for (int i = 0, length = projects.length; i < length; i++) { 3340 IJavaProject project = projects[i]; 3341 try { 3342 if (JavaBuilder.DEBUG) 3343 System.out.println("Touching " + project.getElementName()); //$NON-NLS-1$ 3344 project.getProject().touch(progressMonitor2); 3345 } catch (CoreException e) { 3346 // could not touch this project: ignore 3347 } 3348 } 3349 } 3350 } 3351 }; 3352 if (monitor != null) 3353 monitor.subTask(Messages.javamodel_building_after_upgrade); 3354 try { 3355 ResourcesPlugin.getWorkspace().run(runnable, monitor); 3356 } catch (CoreException e) { 3357 // could not touch all projects 3358 } 3359 try { 3360 root.setPersistentProperty(qName, newVersionNumber); 3361 } catch (CoreException e) { 3362 Util.log(e, "Could not persist build state version number"); //$NON-NLS-1$ 3363 } 3364 } 3365 3366 // ensure external jars are refreshed (see https://bugs.eclipse.org/bugs/show_bug.cgi?id=93668) 3367 try { 3368 if (monitor != null) 3369 monitor.subTask(Messages.javamodel_refreshing_external_jars); 3370 model.refreshExternalArchives( 3371 null/*refresh all projects*/, 3372 monitor == null ? null : new SubProgressMonitor(monitor, 1) // 1% of the time is spent in jar refresh 3373 ); 3374 } catch (JavaModelException e) { 3375 // refreshing failed: ignore 3376 } 3377 3378 } finally { 3379 if (monitor != null) monitor.done(); 3380 } 3381 } 3382 3383 /** 3384 * Returns whether a given classpath variable is read-only or not. 3385 * 3386 * @param variableName 3387 * @return <code>true</code> if the classpath variable is read-only, 3388 * <code>false</code> otherwise. 3389 * @since 3.3 3390 */ 3391 public static boolean isClasspathVariableReadOnly(String JavaDoc variableName) { 3392 return JavaModelManager.getJavaModelManager().readOnlyVariables.contains(variableName); 3393 } 3394 3395 /** 3396 * Returns whether the given file name's extension is a Java-like extension. 3397 * 3398 * @return whether the given file name's extension is a Java-like extension 3399 * @see #getJavaLikeExtensions() 3400 * @since 3.2 3401 */ 3402 public static boolean isJavaLikeFileName(String JavaDoc fileName) { 3403 return Util.isJavaLikeFileName(fileName); 3404 } 3405 3406 /** 3407 * Returns whether the given marker references the given Java element. 3408 * Used for markers, which denote a Java element rather than a resource. 3409 * 3410 * @param element the element 3411 * @param marker the marker 3412 * @return <code>true</code> if the marker references the element, false otherwise 3413 * @exception CoreException if the <code>IMarker.getAttribute</code> on the marker fails 3414 */ 3415 public static boolean isReferencedBy(IJavaElement element, IMarker marker) throws CoreException { 3416 3417 // only match units or classfiles 3418 if (element instanceof IMember){ 3419 IMember member = (IMember) element; 3420 if (member.isBinary()){ 3421 element = member.getClassFile(); 3422 } else { 3423 element = member.getCompilationUnit(); 3424 } 3425 } 3426 if (element == null) return false; 3427 if (marker == null) return false; 3428 3429 String JavaDoc markerHandleId = (String JavaDoc)marker.getAttribute(ATT_HANDLE_ID); 3430 if (markerHandleId == null) return false; 3431 3432 IJavaElement markerElement = JavaCore.create(markerHandleId); 3433 while (true){ 3434 if (element.equals(markerElement)) return true; // external elements may still be equal with different handleIDs. 3435 3436 // cycle through enclosing types in case marker is associated with a classfile (15568) 3437 if (markerElement instanceof IClassFile){ 3438 IType enclosingType = ((IClassFile)markerElement).getType().getDeclaringType(); 3439 if (enclosingType != null){ 3440 markerElement = enclosingType.getClassFile(); // retry with immediate enclosing classfile 3441 continue; 3442 } 3443 } 3444 break; 3445 } 3446 return false; 3447 } 3448 3449 /** 3450 * Returns whether the given marker delta references the given Java element. 3451 * Used for markers deltas, which denote a Java element rather than a resource. 3452 * 3453 * @param element the element 3454 * @param markerDelta the marker delta 3455 * @return <code>true</code> if the marker delta references the element 3456 * @exception CoreException if the <code>IMarkerDelta.getAttribute</code> on the marker delta fails 3457 */ 3458 public static boolean isReferencedBy(IJavaElement element, IMarkerDelta markerDelta) throws CoreException { 3459 3460 // only match units or classfiles 3461 if (element instanceof IMember){ 3462 IMember member = (IMember) element; 3463 if (member.isBinary()){ 3464 element = member.getClassFile(); 3465 } else { 3466 element = member.getCompilationUnit(); 3467 } 3468 } 3469 if (element == null) return false; 3470 if (markerDelta == null) return false; 3471 3472 String JavaDoc markerDeltarHandleId = (String JavaDoc)markerDelta.getAttribute(ATT_HANDLE_ID); 3473 if (markerDeltarHandleId == null) return false; 3474 3475 IJavaElement markerElement = JavaCore.create(markerDeltarHandleId); 3476 while (true){ 3477 if (element.equals(markerElement)) return true; // external elements may still be equal with different handleIDs. 3478 3479 // cycle through enclosing types in case marker is associated with a classfile (15568) 3480 if (markerElement instanceof IClassFile){ 3481 IType enclosingType = ((IClassFile)markerElement).getType().getDeclaringType(); 3482 if (enclosingType != null){ 3483 markerElement = enclosingType.getClassFile(); // retry with immediate enclosing classfile 3484 continue; 3485 } 3486 } 3487 break; 3488 } 3489 return false; 3490 } 3491 3492 /** 3493 * Creates and returns a new access rule with the given file pattern and kind. 3494 * <p> 3495 * The rule kind is one of {@link IAccessRule#K_ACCESSIBLE}, {@link IAccessRule#K_DISCOURAGED}, 3496 * or {@link IAccessRule#K_NON_ACCESSIBLE}, optionally combined with {@link IAccessRule#IGNORE_IF_BETTER}, 3497 * e..g. <code>IAccessRule.K_NON_ACCESSIBLE | IAccessRule.IGNORE_IF_BETTER</code>. 3498 * </p> 3499 * 3500 * @param filePattern the file pattern this access rule should match 3501 * @param kind one of {@link IAccessRule#K_ACCESSIBLE}, {@link IAccessRule#K_DISCOURAGED}, 3502 * or {@link IAccessRule#K_NON_ACCESSIBLE}, optionally combined with 3503 * {@link IAccessRule#IGNORE_IF_BETTER} 3504 * @return a new access rule 3505 * @since 3.1 3506 */ 3507 public static IAccessRule newAccessRule(IPath filePattern, int kind) { 3508 return new ClasspathAccessRule(filePattern, kind); 3509 } 3510 3511 /** 3512 * Creates and returns a new classpath attribute with the given name and the given value. 3513 * 3514 * @return a new classpath attribute 3515 * @since 3.1 3516 */ 3517 public static IClasspathAttribute newClasspathAttribute(String JavaDoc name, String JavaDoc value) { 3518 return new ClasspathAttribute(name, value); 3519 } 3520 3521 /** 3522 * Creates and returns a new classpath entry of kind <code>CPE_CONTAINER</code> 3523 * for the given path. This method is fully equivalent to calling 3524 * {@link #newContainerEntry(IPath, IAccessRule[], IClasspathAttribute[], boolean) 3525 * newContainerEntry(containerPath, new IAccessRule[0], new IClasspathAttribute[0], false)}. 3526 * <p> 3527 * @param containerPath the path identifying the container, it must be formed of two 3528 * segments 3529 * @return a new container classpath entry 3530 * 3531 * @see JavaCore#getClasspathContainer(IPath, IJavaProject) 3532 * @since 2.0 3533 */ 3534 public static IClasspathEntry newContainerEntry(IPath containerPath) { 3535 return newContainerEntry( 3536 containerPath, 3537 ClasspathEntry.NO_ACCESS_RULES, 3538 ClasspathEntry.NO_EXTRA_ATTRIBUTES, 3539 false/*not exported*/); 3540 } 3541 3542 /** 3543 * Creates and returns a new classpath entry of kind <code>CPE_CONTAINER</code> 3544 * for the given path. This method is fully equivalent to calling 3545 * {@link #newContainerEntry(IPath, IAccessRule[], IClasspathAttribute[], boolean) 3546 * newContainerEntry(containerPath, new IAccessRule[0], new IClasspathAttribute[0], isExported)}. 3547 * 3548 * @param containerPath the path identifying the container, it must be formed of at least 3549 * one segment (ID+hints) 3550 * @param isExported a boolean indicating whether this entry is contributed to dependent 3551 * projects in addition to the output location 3552 * @return a new container classpath entry 3553 * 3554 * @see JavaCore#getClasspathContainer(IPath, IJavaProject) 3555 * @see JavaCore#setClasspathContainer(IPath, IJavaProject[], IClasspathContainer[], IProgressMonitor) 3556 * @since 2.0 3557 */ 3558 public static IClasspathEntry newContainerEntry(IPath containerPath, boolean isExported) { 3559 return newContainerEntry( 3560 containerPath, 3561 ClasspathEntry.NO_ACCESS_RULES, 3562 ClasspathEntry.NO_EXTRA_ATTRIBUTES, 3563 isExported); 3564 } 3565 3566 /** 3567 * Creates and returns a new classpath entry of kind <code>CPE_CONTAINER</code> 3568 * for the given path. The path of the container will be used during resolution so as to map this 3569 * container entry to a set of other classpath entries the container is acting for. 3570 * <p> 3571 * A container entry allows to express indirect references to a set of libraries, projects and variable entries, 3572 * which can be interpreted differently for each Java project where it is used. 3573 * A classpath container entry can be resolved using <code>JavaCore.getResolvedClasspathContainer</code>, 3574 * and updated with <code>JavaCore.classpathContainerChanged</code> 3575 * <p> 3576 * A container is exclusively resolved by a <code>ClasspathContainerInitializer</code> registered onto the 3577 * extension point "org.eclipse.jdt.core.classpathContainerInitializer". 3578 * <p> 3579 * A container path must be formed of at least one segment, where: <ul> 3580 * <li> the first segment is a unique ID identifying the target container, there must be a container initializer registered 3581 * onto this ID through the extension point "org.eclipse.jdt.core.classpathContainerInitializer". </li> 3582 * <li> the remaining segments will be passed onto the initializer, and can be used as additional 3583 * hints during the initialization phase. </li> 3584 * </ul> 3585 * <p> 3586 * Example of an ClasspathContainerInitializer for a classpath container denoting a default JDK container: 3587 * <pre> 3588 * containerEntry = JavaCore.newContainerEntry(new Path("MyProvidedJDK/default")); 3589 * 3590 * <extension 3591 * point="org.eclipse.jdt.core.classpathContainerInitializer"> 3592 * <containerInitializer 3593 * id="MyProvidedJDK" 3594 * class="com.example.MyInitializer"/> 3595 * </pre> 3596 * <p> 3597 * The access rules determine the set of accessible source and class files 3598 * in the container. If the list of access rules is empty, then all files 3599 * in this container are accessible. 3600 * See {@link IAccessRule} for a detailed description of access 3601 * rules. Note that if an entry defined by the container defines access rules, 3602 * then these access rules are combined with the given access rules. 3603 * The given access rules are considered first, then the entry's access rules are 3604 * considered. 3605 * </p> 3606 * <p> 3607 * The <code>extraAttributes</code> list contains name/value pairs that must be persisted with 3608 * this entry. If no extra attributes are provided, an empty array must be passed in.<br> 3609 * Note that this list should not contain any duplicate name. 3610 * </p> 3611 * <p> 3612 * The <code>isExported</code> flag indicates whether this entry is contributed to dependent 3613 * projects. If not exported, dependent projects will not see any of the classes from this entry. 3614 * If exported, dependent projects will concatenate the accessible files patterns of this entry with the 3615 * accessible files patterns of the projects, and they will concatenate the non accessible files patterns of this entry 3616 * with the non accessible files patterns of the project. 3617 * </p> 3618 * <p> 3619 * Note that this operation does not attempt to validate classpath containers 3620 * or access the resources at the given paths. 3621 * </p> 3622 * 3623 * @param containerPath the path identifying the container, it must be formed of at least 3624 * one segment (ID+hints) 3625 * @param accessRules the possibly empty list of access rules for this entry 3626 * @param extraAttributes the possibly empty list of extra attributes to persist with this entry 3627 * @param isExported a boolean indicating whether this entry is contributed to dependent 3628 * projects in addition to the output location 3629 * @return a new container classpath entry 3630 * 3631 * @see JavaCore#getClasspathContainer(IPath, IJavaProject) 3632 * @see JavaCore#setClasspathContainer(IPath, IJavaProject[], IClasspathContainer[], IProgressMonitor) 3633 * @see JavaCore#newContainerEntry(IPath, boolean) 3634 * @see JavaCore#newAccessRule(IPath, int) 3635 * @since 3.1 3636 */ 3637 public static IClasspathEntry newContainerEntry( 3638 IPath containerPath, 3639 IAccessRule[] accessRules, 3640 IClasspathAttribute[] extraAttributes, 3641 boolean isExported) { 3642 3643 if (containerPath == null) { 3644 Assert.isTrue(false, "Container path cannot be null"); //$NON-NLS-1$ 3645 } else if (containerPath.segmentCount() < 1) { 3646 Assert.isTrue( 3647 false, 3648 "Illegal classpath container path: \'" + containerPath.makeRelative().toString() + "\', must have at least one segment (containerID+hints)"); //$NON-NLS-1$//$NON-NLS-2$ 3649 } 3650 return new ClasspathEntry( 3651 IPackageFragmentRoot.K_SOURCE, 3652 IClasspathEntry.CPE_CONTAINER, 3653 containerPath, 3654 ClasspathEntry.INCLUDE_ALL, // inclusion patterns 3655 ClasspathEntry.EXCLUDE_NONE, // exclusion patterns 3656 null, // source attachment 3657 null, // source attachment root 3658 null, // specific output folder 3659 isExported, 3660 accessRules, 3661 true, // combine access rules 3662 extraAttributes); 3663 } 3664 3665 /** 3666 * Creates and returns a type hierarchy for all types in the given 3667 * region, considering subtypes within that region and considering types in the 3668 * working copies with the given owner. 3669 * In other words, the owner's working copies will take 3670 * precedence over their original compilation units in the workspace. 3671 * <p> 3672 * Note that if a working copy is empty, it will be as if the original compilation 3673 * unit had been deleted. 3674 * <p> 3675 * 3676 * @param monitor the given progress monitor 3677 * @param region the given region 3678 * @param owner the owner of working copies that take precedence over their original compilation units, 3679 * or <code>null</code> if the primary working copy owner should be used 3680 * @exception JavaModelException if an element in the region does not exist or if an 3681 * exception occurs while accessing its corresponding resource 3682 * @exception IllegalArgumentException if region is <code>null</code> 3683 * @return a type hierarchy for all types in the given 3684 * region, considering subtypes within that region 3685 * @since 3.1 3686 */ 3687 public static ITypeHierarchy newTypeHierarchy(IRegion region, WorkingCopyOwner owner, IProgressMonitor monitor) throws JavaModelException { 3688 if (region == null) { 3689 throw new IllegalArgumentException JavaDoc(Messages.hierarchy_nullRegion); 3690 } 3691 ICompilationUnit[] workingCopies = JavaModelManager.getJavaModelManager().getWorkingCopies(owner, true/*add primary working copies*/); 3692 CreateTypeHierarchyOperation op = 3693 new CreateTypeHierarchyOperation(region, workingCopies, null, true/*compute subtypes*/); 3694 op.runOperation(monitor); 3695 return op.getResult(); 3696 } 3697 3698 /** 3699 * Creates and returns a new non-exported classpath entry of kind <code>CPE_LIBRARY</code> for the 3700 * JAR or folder identified by the given absolute path. This specifies that all package fragments 3701 * within the root will have children of type <code>IClassFile</code>. 3702 * This method is fully equivalent to calling 3703 * {@link #newLibraryEntry(IPath, IPath, IPath, IAccessRule[], IClasspathAttribute[], boolean) 3704 * newLibraryEntry(path, sourceAttachmentPath, sourceAttachmentRootPath, new IAccessRule[0], new IClasspathAttribute[0], false)}. 3705 * 3706 * @param path the absolute path of the binary archive 3707 * @param sourceAttachmentPath the absolute path of the corresponding source archive or folder, 3708 * or <code>null</code> if none. Note, since 3.0, an empty path is allowed to denote no source attachment. 3709 * and will be automatically converted to <code>null</code>. 3710 * @param sourceAttachmentRootPath the location of the root of the source files within the source archive or folder 3711 * or <code>null</code> if this location should be automatically detected. 3712 * @return a new library classpath entry 3713 */ 3714 public static IClasspathEntry newLibraryEntry( 3715 IPath path, 3716 IPath sourceAttachmentPath, 3717 IPath sourceAttachmentRootPath) { 3718 3719 return newLibraryEntry( 3720 path, 3721 sourceAttachmentPath, 3722 sourceAttachmentRootPath, 3723 ClasspathEntry.NO_ACCESS_RULES, 3724 ClasspathEntry.NO_EXTRA_ATTRIBUTES, 3725 false/*not exported*/); 3726 } 3727 3728 /** 3729 * Creates and returns a new classpath entry of kind <code>CPE_LIBRARY</code> for the JAR or folder 3730 * identified by the given absolute path. This specifies that all package fragments within the root 3731 * will have children of type <code>IClassFile</code>. 3732 * This method is fully equivalent to calling 3733 * {@link #newLibraryEntry(IPath, IPath, IPath, IAccessRule[], IClasspathAttribute[], boolean) 3734 * newLibraryEntry(path, sourceAttachmentPath, sourceAttachmentRootPath, new IAccessRule[0], new IClasspathAttribute[0], isExported)}. 3735 * 3736 * @param path the absolute path of the binary archive 3737 * @param sourceAttachmentPath the absolute path of the corresponding source archive or folder, 3738 * or <code>null</code> if none. Note, since 3.0, an empty path is allowed to denote no source attachment. 3739 * and will be automatically converted to <code>null</code>. 3740 * @param sourceAttachmentRootPath the location of the root of the source files within the source archive or folder 3741 * or <code>null</code> if this location should be automatically detected. 3742 * @param isExported indicates whether this entry is contributed to dependent 3743 * projects in addition to the output location 3744 * @return a new library classpath entry 3745 * @since 2.0 3746 */ 3747 public static IClasspathEntry newLibraryEntry( 3748 IPath path, 3749 IPath sourceAttachmentPath, 3750 IPath sourceAttachmentRootPath, 3751 boolean isExported) { 3752 3753 return newLibraryEntry( 3754 path, 3755 sourceAttachmentPath, 3756 sourceAttachmentRootPath, 3757 ClasspathEntry.NO_ACCESS_RULES, 3758 ClasspathEntry.NO_EXTRA_ATTRIBUTES, 3759 isExported); 3760 } 3761 3762 /** 3763 * Creates and returns a new classpath entry of kind <code>CPE_LIBRARY</code> for the JAR or folder 3764 * identified by the given absolute path. This specifies that all package fragments within the root 3765 * will have children of type <code>IClassFile</code>. 3766 * <p> 3767 * A library entry is used to denote a prerequisite JAR or root folder containing binaries. 3768 * The target JAR can either be defined internally to the workspace (absolute path relative 3769 * to the workspace root) or externally to the workspace (absolute path in the file system). 3770 * The target root folder can only be defined internally to the workspace (absolute path relative 3771 * to the workspace root). To use a binary folder external to the workspace, it must first be 3772 * linked (see IFolder#createLink(...)). 3773 * <p> 3774 * e.g. Here are some examples of binary path usage<ul> 3775 * <li><code> "c:\jdk1.2.2\jre\lib\rt.jar" </code> - reference to an external JAR on Windows</li> 3776 * <li><code> "/Project/someLib.jar" </code> - reference to an internal JAR on Windows or Linux</li> 3777 * <li><code> "/Project/classes/" </code> - reference to an internal binary folder on Windows or Linux</li> 3778 * </ul> 3779 * Note that on non-Windows platform, a path <code>"/some/lib.jar"</code> is ambiguous. 3780 * It can be a path to an external JAR (its file system path being <code>"/some/lib.jar"</code>) 3781 * or it can be a path to an internal JAR (<code>"some"</code> being a project in the workspace). 3782 * Such an ambiguity is solved when the classpath entry is used (e.g. in {@link IJavaProject#getPackageFragmentRoots()}). 3783 * If the resource <code>"lib.jar"</code> exists in project <code>"some"</code>, then it is considered an 3784 * internal JAR. Otherwise it is an external JAR. 3785 * <p>Also note that this operation does not attempt to validate or access the 3786 * resources at the given paths. 3787 * </p><p> 3788 * The access rules determine the set of accessible class files 3789 * in the library. If the list of access rules is empty then all files 3790 * in this library are accessible. 3791 * See {@link IAccessRule} for a detailed description of access 3792 * rules. 3793 * </p> 3794 * <p> 3795 * The <code>extraAttributes</code> list contains name/value pairs that must be persisted with 3796 * this entry. If no extra attributes are provided, an empty array must be passed in.<br> 3797 * Note that this list should not contain any duplicate name. 3798 * </p> 3799 * <p> 3800 * The <code>isExported</code> flag indicates whether this entry is contributed to dependent 3801 * projects. If not exported, dependent projects will not see any of the classes from this entry. 3802 * If exported, dependent projects will concatenate the accessible files patterns of this entry with the 3803 * accessible files patterns of the projects, and they will concatenate the non accessible files patterns of this entry 3804 * with the non accessible files patterns of the project. 3805 * </p> 3806 * 3807 * @param path the absolute path of the binary archive 3808 * @param sourceAttachmentPath the absolute path of the corresponding source archive or folder, 3809 * or <code>null</code> if none. Note, since 3.0, an empty path is allowed to denote no source attachment. 3810 * and will be automatically converted to <code>null</code>. 3811 * @param sourceAttachmentRootPath the location of the root of the source files within the source archive or folder 3812 * or <code>null</code> if this location should be automatically detected. 3813 * @param accessRules the possibly empty list of access rules for this entry 3814 * @param extraAttributes the possibly empty list of extra attributes to persist with this entry 3815 * @param isExported indicates whether this entry is contributed to dependent 3816 * projects in addition to the output location 3817 * @return a new library classpath entry 3818 * @since 3.1 3819 */ 3820 public static IClasspathEntry newLibraryEntry( 3821 IPath path, 3822 IPath sourceAttachmentPath, 3823 IPath sourceAttachmentRootPath, 3824 IAccessRule[] accessRules, 3825 IClasspathAttribute[] extraAttributes, 3826 boolean isExported) { 3827 3828 if (path == null) Assert.isTrue(false, "Library path cannot be null"); //$NON-NLS-1$ 3829 if (!path.isAbsolute()) Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$ 3830 if (sourceAttachmentPath != null) { 3831 if (sourceAttachmentPath.isEmpty()) { 3832 sourceAttachmentPath = null; // treat empty path as none 3833 } else if (!sourceAttachmentPath.isAbsolute()) { 3834 Assert.isTrue(false, "Source attachment path '" //$NON-NLS-1$ 3835 + sourceAttachmentPath 3836 + "' for IClasspathEntry must be absolute"); //$NON-NLS-1$ 3837 } 3838 } 3839 return new ClasspathEntry( 3840 IPackageFragmentRoot.K_BINARY, 3841 IClasspathEntry.CPE_LIBRARY, 3842 JavaProject.canonicalizedPath(path), 3843 ClasspathEntry.INCLUDE_ALL, // inclusion patterns 3844 ClasspathEntry.EXCLUDE_NONE, // exclusion patterns 3845 sourceAttachmentPath, 3846 sourceAttachmentRootPath, 3847 null, // specific output folder 3848 isExported, 3849 accessRules, 3850 false, // no access rules to combine 3851 extraAttributes); 3852 } 3853 3854 /** 3855 * Creates and returns a new non-exported classpath entry of kind <code>CPE_PROJECT</code> 3856 * for the project identified by the given absolute path. 3857 * This method is fully equivalent to calling 3858 * {@link #newProjectEntry(IPath, IAccessRule[], boolean, IClasspathAttribute[], boolean) 3859 * newProjectEntry(path, new IAccessRule[0], true, new IClasspathAttribute[0], false)}. 3860 * 3861 * @param path the absolute path of the binary archive 3862 * @return a new project classpath entry 3863 */ 3864 public static IClasspathEntry newProjectEntry(IPath path) { 3865 return newProjectEntry(path, false); 3866 } 3867 3868 /** 3869 * Creates and returns a new classpath entry of kind <code>CPE_PROJECT</code> 3870 * for the project identified by the given absolute path. 3871 * This method is fully equivalent to calling 3872 * {@link #newProjectEntry(IPath, IAccessRule[], boolean, IClasspathAttribute[], boolean) 3873 * newProjectEntry(path, new IAccessRule[0], true, new IClasspathAttribute[0], isExported)}. 3874 * 3875 * @param path the absolute path of the prerequisite project 3876 * @param isExported indicates whether this entry is contributed to dependent 3877 * projects in addition to the output location 3878 * @return a new project classpath entry 3879 * @since 2.0 3880 */ 3881 public static IClasspathEntry newProjectEntry(IPath path, boolean isExported) { 3882 3883 if (!path.isAbsolute()) Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$ 3884 3885 return newProjectEntry( 3886 path, 3887 ClasspathEntry.NO_ACCESS_RULES, 3888 true, 3889 ClasspathEntry.NO_EXTRA_ATTRIBUTES, 3890 isExported); 3891 } 3892 3893 /** 3894 * Creates and returns a new classpath entry of kind <code>CPE_PROJECT</code> 3895 * for the project identified by the given absolute path. 3896 * <p> 3897 * A project entry is used to denote a prerequisite project on a classpath. 3898 * The referenced project will be contributed as a whole, either as sources (in the Java Model, it 3899 * contributes all its package fragment roots) or as binaries (when building, it contributes its 3900 * whole output location). 3901 * </p> 3902 * <p> 3903 * A project reference allows to indirect through another project, independently from its internal layout. 3904 * </p><p> 3905 * The prerequisite project is referred to using an absolute path relative to the workspace root. 3906 * </p> 3907 * <p> 3908 * The access rules determine the set of accessible class files 3909 * in the project. If the list of access rules is empty then all files 3910 * in this project are accessible. 3911 * See {@link IAccessRule} for a detailed description of access rules. 3912 * </p> 3913 * <p> 3914 * The <code>combineAccessRules</code> flag indicates whether access rules of one (or more) 3915 * exported entry of the project should be combined with the given access rules. If they should 3916 * be combined, the given access rules are considered first, then the entry's access rules are 3917 * considered. 3918 * </p> 3919 * <p> 3920 * The <code>extraAttributes</code> list contains name/value pairs that must be persisted with 3921 * this entry. If no extra attributes are provided, an empty array must be passed in.<br> 3922 * Note that this list should not contain any duplicate name. 3923 * </p> 3924 * <p> 3925 * The <code>isExported</code> flag indicates whether this entry is contributed to dependent 3926 * projects. If not exported, dependent projects will not see any of the classes from this entry. 3927 * If exported, dependent projects will concatenate the accessible files patterns of this entry with the 3928 * accessible files patterns of the projects, and they will concatenate the non accessible files patterns of this entry 3929 * with the non accessible files patterns of the project. 3930 * </p> 3931 * 3932 * @param path the absolute path of the prerequisite project 3933 * @param accessRules the possibly empty list of access rules for this entry 3934 * @param combineAccessRules whether the access rules of the project's exported entries should be combined with the given access rules 3935 * @param extraAttributes the possibly empty list of extra attributes to persist with this entry 3936 * @param isExported indicates whether this entry is contributed to dependent 3937 * projects in addition to the output location 3938 * @return a new project classpath entry 3939 * @since 3.1 3940 */ 3941 public static IClasspathEntry newProjectEntry( 3942 IPath path, 3943 IAccessRule[] accessRules, 3944 boolean combineAccessRules, 3945 IClasspathAttribute[] extraAttributes, 3946 boolean isExported) { 3947 3948 if (!path.isAbsolute()) Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$ 3949 3950 return new ClasspathEntry( 3951 IPackageFragmentRoot.K_SOURCE, 3952 IClasspathEntry.CPE_PROJECT, 3953 path, 3954 ClasspathEntry.INCLUDE_ALL, // inclusion patterns 3955 ClasspathEntry.EXCLUDE_NONE, // exclusion patterns 3956 null, // source attachment 3957 null, // source attachment root 3958 null, // specific output folder 3959 isExported, 3960 accessRules, 3961 combineAccessRules, 3962 extraAttributes); 3963 } 3964 3965 /** 3966 * Returns a new empty region. 3967 * 3968 * @return a new empty region 3969 */ 3970 public static IRegion newRegion() { 3971 return new Region(); 3972 } 3973 3974 /** 3975 * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code> 3976 * for all files in the project's source folder identified by the given 3977 * absolute workspace-relative path. 3978 * <p> 3979 * The convenience method is fully equivalent to: 3980 * <pre> 3981 * newSourceEntry(path, new IPath[] {}, new IPath[] {}, null); 3982 * </pre> 3983 * </p> 3984 * 3985 * @param path the absolute workspace-relative path of a source folder 3986 * @return a new source classpath entry 3987 * @see #newSourceEntry(IPath, IPath[], IPath[], IPath) 3988 */ 3989 public static IClasspathEntry newSourceEntry(IPath path) { 3990 3991 return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL, ClasspathEntry.EXCLUDE_NONE, null /*output location*/); 3992 } 3993 3994 /** 3995 * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code> 3996 * for the project's source folder identified by the given absolute 3997 * workspace-relative path but excluding all source files with paths 3998 * matching any of the given patterns. 3999 * <p> 4000 * The convenience method is fully equivalent to: 4001 * <pre> 4002 * newSourceEntry(path, new IPath[] {}, exclusionPatterns, null); 4003 * </pre> 4004 * </p> 4005 * 4006 * @param path the absolute workspace-relative path of a source folder 4007 * @param exclusionPatterns the possibly empty list of exclusion patterns 4008 * represented as relative paths 4009 * @return a new source classpath entry 4010 * @see #newSourceEntry(IPath, IPath[], IPath[], IPath) 4011 * @since 2.1 4012 */ 4013 public static IClasspathEntry newSourceEntry(IPath path, IPath[] exclusionPatterns) { 4014 4015 return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL, exclusionPatterns, null /*output location*/); 4016 } 4017 4018 /** 4019 * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code> 4020 * for the project's source folder identified by the given absolute 4021 * workspace-relative path but excluding all source files with paths 4022 * matching any of the given patterns, and associated with a specific output location 4023 * (that is, ".class" files are not going to the project default output location). 4024 * <p> 4025 * The convenience method is fully equivalent to: 4026 * <pre> 4027 * newSourceEntry(path, new IPath[] {}, exclusionPatterns, specificOutputLocation); 4028 * </pre> 4029 * </p> 4030 * 4031 * @param path the absolute workspace-relative path of a source folder 4032 * @param exclusionPatterns the possibly empty list of exclusion patterns 4033 * represented as relative paths 4034 * @param specificOutputLocation the specific output location for this source entry (<code>null</code> if using project default ouput location) 4035 * @return a new source classpath entry 4036 * @see #newSourceEntry(IPath, IPath[], IPath[], IPath) 4037 * @since 2.1 4038 */ 4039 public static IClasspathEntry newSourceEntry(IPath path, IPath[] exclusionPatterns, IPath specificOutputLocation) { 4040 4041 return newSourceEntry(path, ClasspathEntry.INCLUDE_ALL, exclusionPatterns, specificOutputLocation); 4042 } 4043 4044 /** 4045 * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code> 4046 * for the project's source folder identified by the given absolute 4047 * workspace-relative path but excluding all source files with paths 4048 * matching any of the given patterns, and associated with a specific output location 4049 * (that is, ".class" files are not going to the project default output location). 4050 * <p> 4051 * The convenience method is fully equivalent to: 4052 * <pre> 4053 * newSourceEntry(path, new IPath[] {}, exclusionPatterns, specificOutputLocation, new IClasspathAttribute[] {}); 4054 * </pre> 4055 * </p> 4056 * 4057 * @param path the absolute workspace-relative path of a source folder 4058 * @param inclusionPatterns the possibly empty list of inclusion patterns 4059 * represented as relative paths 4060 * @param exclusionPatterns the possibly empty list of exclusion patterns 4061 * represented as relative paths 4062 * @param specificOutputLocation the specific output location for this source entry (<code>null</code> if using project default ouput location) 4063 * @return a new source classpath entry 4064 * @see #newSourceEntry(IPath, IPath[], IPath[], IPath, IClasspathAttribute[]) 4065 * @since 3.0 4066 */ 4067 public static IClasspathEntry newSourceEntry(IPath path, IPath[] inclusionPatterns, IPath[] exclusionPatterns, IPath specificOutputLocation) { 4068 return newSourceEntry(path, inclusionPatterns, exclusionPatterns, specificOutputLocation, ClasspathEntry.NO_EXTRA_ATTRIBUTES); 4069 } 4070 4071 /** 4072 * Creates and returns a new classpath entry of kind <code>CPE_SOURCE</code> 4073 * for the project's source folder identified by the given absolute 4074 * workspace-relative path using the given inclusion and exclusion patterns 4075 * to determine which source files are included, and the given output path 4076 * to control the output location of generated files. 4077 * <p> 4078 * The source folder is referred to using an absolute path relative to the 4079 * workspace root, e.g. <code>/Project/src</code>. A project's source 4080 * folders are located with that project. That is, a source classpath 4081 * entry specifying the path <code>/P1/src</code> is only usable for 4082 * project <code>P1</code>. 4083 * </p> 4084 * <p> 4085 * The inclusion patterns determines the initial set of source files that 4086 * are to be included; the exclusion patterns are then used to reduce this 4087 * set. When no inclusion patterns are specified, the initial file set 4088 * includes all relevent files in the resource tree rooted at the source 4089 * entry's path. On the other hand, specifying one or more inclusion 4090 * patterns means that all <b>and only</b> files matching at least one of 4091 * the specified patterns are to be included. If exclusion patterns are 4092 * specified, the initial set of files is then reduced by eliminating files 4093 * matched by at least one of the exclusion patterns. Inclusion and 4094 * exclusion patterns look like relative file paths with wildcards and are 4095 * interpreted relative to the source entry's path. File patterns are 4096 * case-sensitive can contain '**', '*' or '?' wildcards (see 4097 * {@link IClasspathEntry#getExclusionPatterns()} for the full description 4098 * of their syntax and semantics). The resulting set of files are included 4099 * in the corresponding package fragment root; all package fragments within 4100 * the root will have children of type <code>ICompilationUnit</code>. 4101 * </p> 4102 * <p> 4103 * For example, if the source folder path is 4104 * <code>/Project/src</code>, there are no inclusion filters, and the 4105 * exclusion pattern is 4106 * <code>com/xyz/tests/**</code>, then source files 4107 * like <code>/Project/src/com/xyz/Foo.java</code> 4108 * and <code>/Project/src/com/xyz/utils/Bar.java</code> would be included, 4109 * whereas <code>/Project/src/com/xyz/tests/T1.java</code> 4110 * and <code>/Project/src/com/xyz/tests/quick/T2.java</code> would be 4111 * excluded. 4112 * </p> 4113 * <p> 4114 * Additionally, a source entry can be associated with a specific output location. 4115 * By doing so, the Java builder will ensure that the generated ".class" files will 4116 * be issued inside this output location, as opposed to be generated into the 4117 * project default output location (when output location is <code>null</code>). 4118 * Note that multiple source entries may target the same output location. 4119 * The output location is referred to using an absolute path relative to the 4120 * workspace root, e.g. <code>"/Project/bin"</code>, it must be located inside 4121 * the same project as the source folder. 4122 * </p> 4123 * <p> 4124 * Also note that all sources/binaries inside a project are contributed as 4125 * a whole through a project entry 4126 * (see <code>JavaCore.newProjectEntry</code>). Particular source entries 4127 * cannot be selectively exported. 4128 * </p> 4129 * <p> 4130 * The <code>extraAttributes</code> list contains name/value pairs that must be persisted with 4131 * this entry. If no extra attributes are provided, an empty array must be passed in.<br> 4132 * Note that this list should not contain any duplicate name. 4133 * </p> 4134 * 4135 * @param path the absolute workspace-relative path of a source folder 4136 * @param inclusionPatterns the possibly empty list of inclusion patterns 4137 * represented as relative paths 4138 * @param exclusionPatterns the possibly empty list of exclusion patterns 4139 * represented as relative paths 4140 * @param specificOutputLocation the specific output location for this source entry (<code>null</code> if using project default ouput location) 4141 * @param extraAttributes the possibly empty list of extra attributes to persist with this entry 4142 * @return a new source classpath entry with the given exclusion patterns 4143 * @see IClasspathEntry#getInclusionPatterns() 4144 * @see IClasspathEntry#getExclusionPatterns() 4145 * @see IClasspathEntry#getOutputLocation() 4146 * @since 3.1 4147 */ 4148 public static IClasspathEntry newSourceEntry(IPath path, IPath[] inclusionPatterns, IPath[] exclusionPatterns, IPath specificOutputLocation, IClasspathAttribute[] extraAttributes) { 4149 4150 if (path == null) Assert.isTrue(false, "Source path cannot be null"); //$NON-NLS-1$ 4151 if (!path.isAbsolute()) Assert.isTrue(false, "Path for IClasspathEntry must be absolute"); //$NON-NLS-1$ 4152 if (exclusionPatterns == null) Assert.isTrue(false, "Exclusion pattern set cannot be null"); //$NON-NLS-1$ 4153 if (inclusionPatterns == null) Assert.isTrue(false, "Inclusion pattern set cannot be null"); //$NON-NLS-1$ 4154 4155 return new ClasspathEntry( 4156 IPackageFragmentRoot.K_SOURCE, 4157 IClasspathEntry.CPE_SOURCE, 4158 path, 4159 inclusionPatterns, 4160 exclusionPatterns, 4161 null, // source attachment 4162 null, // source attachment root 4163 specificOutputLocation, // custom output location 4164 false, 4165 null, 4166 false, // no access rules to combine 4167 extraAttributes); 4168 } 4169 4170 /** 4171 * Creates and returns a new non-exported classpath entry of kind <code>CPE_VARIABLE</code> 4172 * for the given path. This method is fully equivalent to calling 4173 * {@link #newVariableEntry(IPath, IPath, IPath, IAccessRule[], IClasspathAttribute[], boolean) 4174 * newVariableEntry(variablePath, variableSourceAttachmentPath, sourceAttachmentRootPath, new IAccessRule[0], new IClasspathAttribute[0], false)}. 4175 * 4176 * @param variablePath the path of the binary archive; first segment is the 4177 * name of a classpath variable 4178 * @param variableSourceAttachmentPath the path of the corresponding source archive, 4179 * or <code>null</code> if none; if present, the first segment is the 4180 * name of a classpath variable (not necessarily the same variable 4181 * as the one that begins <code>variablePath</code>) 4182 * @param sourceAttachmentRootPath the location of the root of the source files within the source archive 4183 * or <code>null</code> if <code>variableSourceAttachmentPath</code> is also <code>null</code> 4184 * @return a new library classpath entry 4185 */ 4186 public static IClasspathEntry newVariableEntry( 4187 IPath variablePath, 4188 IPath variableSourceAttachmentPath, 4189 IPath sourceAttachmentRootPath) { 4190 4191 return newVariableEntry(variablePath, variableSourceAttachmentPath, sourceAttachmentRootPath, false); 4192 } 4193 4194 /** 4195 * Creates and returns a new classpath entry of kind <code>CPE_VARIABLE</code> 4196 * for the given path. This method is fully equivalent to calling 4197 * {@link #newVariableEntry(IPath, IPath, IPath, IAccessRule[], IClasspathAttribute[], boolean) 4198 * newVariableEntry(variablePath, variableSourceAttachmentPath, sourceAttachmentRootPath, new IAccessRule[0], new IClasspathAttribute[0], isExported)}. 4199 * 4200 * @param variablePath the path of the binary archive; first segment is the 4201 * name of a classpath variable 4202 * @param variableSourceAttachmentPath the path of the corresponding source archive, 4203 * or <code>null</code> if none; if present, the first segment is the 4204 * name of a classpath variable (not necessarily the same variable 4205 * as the one that begins <code>variablePath</code>) 4206 * @param variableSourceAttachmentRootPath the location of the root of the source files within the source archive 4207 * or <code>null</code> if <code>variableSourceAttachmentPath</code> is also <code>null</code> 4208 * @param isExported indicates whether this entry is contributed to dependent 4209 * projects in addition to the output location 4210 * @return a new variable classpath entry 4211 * @since 2.0 4212 */ 4213 public static IClasspathEntry newVariableEntry( 4214 IPath variablePath, 4215 IPath variableSourceAttachmentPath, 4216 IPath variableSourceAttachmentRootPath, 4217 boolean isExported) { 4218 4219 return newVariableEntry( 4220 variablePath, 4221 variableSourceAttachmentPath, 4222 variableSourceAttachmentRootPath, 4223 ClasspathEntry.NO_ACCESS_RULES, 4224 ClasspathEntry.NO_EXTRA_ATTRIBUTES, 4225 isExported); 4226 } 4227 4228 /** 4229 * Creates and returns a new classpath entry of kind <code>CPE_VARIABLE</code> 4230 * for the given path. The first segment of the path is the name of a classpath variable. 4231 * The trailing segments of the path will be appended to resolved variable path. 4232 * <p> 4233 * A variable entry allows to express indirect references on a classpath to other projects or libraries, 4234 * depending on what the classpath variable is referring. 4235 * <p> 4236 * It is possible to register an automatic initializer (<code>ClasspathVariableInitializer</code>), 4237 * which will be invoked through the extension point "org.eclipse.jdt.core.classpathVariableInitializer". 4238 * After resolution, a classpath variable entry may either correspond to a project or a library entry. 4239 * <p> 4240 * e.g. Here are some examples of variable path usage<ul> 4241 * <li> "JDTCORE" where variable <code>JDTCORE</code> is 4242 * bound to "c:/jars/jdtcore.jar". The resolved classpath entry is denoting the library "c:\jars\jdtcore.jar"</li> 4243 * <li> "JDTCORE" where variable <code>JDTCORE</code> is 4244 * bound to "/Project_JDTCORE". The resolved classpath entry is denoting the project "/Project_JDTCORE"</li> 4245 * <li> "PLUGINS/com.example/example.jar" where variable <code>PLUGINS</code> 4246 * is bound to "c:/eclipse/plugins". The resolved classpath entry is denoting the library "c:\eclipse\plugins\com.example\example.jar"</li> 4247 * </ul> 4248 * <p> 4249 * The access rules determine the set of accessible class files 4250 * in the project or library. If the list of access rules is empty then all files 4251 * in this project or library are accessible. 4252 * See {@link IAccessRule} for a detailed description of access rules. 4253 * </p> 4254 * <p> 4255 * The <code>extraAttributes</code> list contains name/value pairs that must be persisted with 4256 * this entry. If no extra attributes are provided, an empty array must be passed in.<br> 4257 * Note that this list should not contain any duplicate name. 4258 * </p> 4259 * <p> 4260 * The <code>isExported</code> flag indicates whether this entry is contributed to dependent 4261 * projects. If not exported, dependent projects will not see any of the classes from this entry. 4262 * If exported, dependent projects will concatenate the accessible files patterns of this entry with the 4263 * accessible files patterns of the projects, and they will concatenate the non accessible files patterns of this entry 4264 * with the non accessible files patterns of the project. 4265 * </p> 4266 * <p> 4267 * Note that this operation does not attempt to validate classpath variables 4268 * or access the resources at the given paths. 4269 * </p> 4270 * 4271 * @param variablePath the path of the binary archive; first segment is the 4272 * name of a classpath variable 4273 * @param variableSourceAttachmentPath the path of the corresponding source archive, 4274 * or <code>null</code> if none; if present, the first segment is the 4275 * name of a classpath variable (not necessarily the same variable 4276 * as the one that begins <code>variablePath</code>) 4277 * @param variableSourceAttachmentRootPath the location of the root of the source files within the source archive 4278 * or <code>null</code> if <code>variableSourceAttachmentPath</code> is also <code>null</code> 4279 * @param accessRules the possibly empty list of access rules for this entry 4280 * @param extraAttributes the possibly empty list of extra attributes to persist with this entry 4281 * @param isExported indicates whether this entry is contributed to dependent 4282 * projects in addition to the output location 4283 * @return a new variable classpath entry 4284 * @since 3.1 4285 */ 4286 public static IClasspathEntry newVariableEntry( 4287 IPath variablePath, 4288 IPath variableSourceAttachmentPath, 4289 IPath variableSourceAttachmentRootPath, 4290 IAccessRule[] accessRules, 4291 IClasspathAttribute[] extraAttributes, 4292 boolean isExported) { 4293 4294 if (variablePath == null) Assert.isTrue(false, "Variable path cannot be null"); //$NON-NLS-1$ 4295 if (variablePath.segmentCount() < 1) { 4296 Assert.isTrue( 4297 false, 4298 "Illegal classpath variable path: \'" + variablePath.makeRelative().toString() + "\', must have at least one segment"); //$NON-NLS-1$//$NON-NLS-2$ 4299 } 4300 4301 return new ClasspathEntry( 4302 IPackageFragmentRoot.K_SOURCE, 4303 IClasspathEntry.CPE_VARIABLE, 4304 variablePath, 4305 ClasspathEntry.INCLUDE_ALL, // inclusion patterns 4306 ClasspathEntry.EXCLUDE_NONE, // exclusion patterns 4307 variableSourceAttachmentPath, // source attachment 4308 variableSourceAttachmentRootPath, // source attachment root 4309 null, // specific output folder 4310 isExported, 4311 accessRules, 4312 false, // no access rules to combine 4313 extraAttributes); 4314 } 4315 /** 4316 * Removed the given classpath variable. Does nothing if no value was 4317 * set for this classpath variable. 4318 * <p> 4319 * This functionality cannot be used while the resource tree is locked. 4320 * <p> 4321 * Classpath variable values are persisted locally to the workspace, and 4322 * are preserved from session to session. 4323 * <p> 4324 * 4325 * @param variableName the name of the classpath variable 4326 * @see #setClasspathVariable(String, IPath) 4327 * 4328 * @deprecated Use {@link #removeClasspathVariable(String, IProgressMonitor)} instead 4329 */ 4330 public static void removeClasspathVariable(String JavaDoc variableName) { 4331 removeClasspathVariable(variableName, null); 4332 } 4333 4334 /** 4335 * Removed the given classpath variable. Does nothing if no value was 4336 * set for this classpath variable. 4337 * <p> 4338 * This functionality cannot be used while the resource tree is locked. 4339 * <p> 4340 * Classpath variable values are persisted locally to the workspace, and 4341 * are preserved from session to session. 4342 * <p> 4343 * 4344 * @param variableName the name of the classpath variable 4345 * @param monitor the progress monitor to report progress 4346 * @see #setClasspathVariable(String, IPath) 4347 */ 4348 public static void removeClasspathVariable(String JavaDoc variableName, IProgressMonitor monitor) { 4349 try { 4350 SetVariablesOperation operation = new SetVariablesOperation(new String JavaDoc[]{ variableName}, new IPath[]{ null }, true/*update preferences*/); 4351 operation.runOperation(monitor); 4352 } catch (JavaModelException e) { 4353 Util.log(e, "Exception while removing variable " + variableName); //$NON-NLS-1$ 4354 } 4355 } 4356 4357 /** 4358 * Removes the given element changed listener. 4359 * Has no affect if an identical listener is not registered. 4360 * 4361 * @param listener the listener 4362 */ 4363 public static void removeElementChangedListener(IElementChangedListener listener) { 4364 JavaModelManager.getJavaModelManager().deltaState.removeElementChangedListener(listener); 4365 } 4366 4367 /** 4368 * Removes the file extension from the given file name, if it has a Java-like file 4369 * extension. Otherwise the file name itself is returned. 4370 * Note this removes the dot ('.') before the extension as well. 4371 * 4372 * @param fileName the name of a file 4373 * @return the fileName without the Java-like extension 4374 * @since 3.2 4375 */ 4376 public static String JavaDoc removeJavaLikeExtension(String JavaDoc fileName) { 4377 return Util.getNameWithoutJavaLikeExtension(fileName); 4378 } 4379 4380 /** 4381 * Removes the given pre-processing resource changed listener. 4382 * <p> 4383 * Has no affect if an identical listener is not registered. 4384 * 4385 * @param listener the listener 4386 * @since 3.0 4387 */ 4388 public static void removePreProcessingResourceChangedListener(IResourceChangeListener listener) { 4389 JavaModelManager.getJavaModelManager().deltaState.removePreResourceChangedListener(listener); 4390 } 4391 4392 4393 4394 /** 4395 * Runs the given action as an atomic Java model operation. 4396 * <p> 4397 * After running a method that modifies java elements, 4398 * registered listeners receive after-the-fact notification of 4399 * what just transpired, in the form of a element changed event. 4400 * This method allows clients to call a number of 4401 * methods that modify java elements and only have element 4402 * changed event notifications reported at the end of the entire 4403 * batch. 4404 * </p> 4405 * <p> 4406 * If this method is called outside the dynamic scope of another such 4407 * call, this method runs the action and then reports a single 4408 * element changed event describing the net effect of all changes 4409 * done to java elements by the action. 4410 * </p> 4411 * <p> 4412 * If this method is called in the dynamic scope of another such 4413 * call, this method simply runs the action. 4414 * </p> 4415 * 4416 * @param action the action to perform 4417 * @param monitor a progress monitor, or <code>null</code> if progress 4418 * reporting and cancellation are not desired 4419 * @exception CoreException if the operation failed. 4420 * @since 2.1 4421 */ 4422 public static void run(IWorkspaceRunnable action, IProgressMonitor monitor) throws CoreException { 4423 run(action, ResourcesPlugin.getWorkspace().getRoot(), monitor); 4424 } 4425 /** 4426 * Runs the given action as an atomic Java model operation. 4427 * <p> 4428 * After running a method that modifies java elements, 4429 * registered listeners receive after-the-fact notification of 4430 * what just transpired, in the form of a element changed event. 4431 * This method allows clients to call a number of 4432 * methods that modify java elements and only have element 4433 * changed event notifications reported at the end of the entire 4434 * batch. 4435 * </p> 4436 * <p> 4437 * If this method is called outside the dynamic scope of another such 4438 * call, this method runs the action and then reports a single 4439 * element changed event describing the net effect of all changes 4440 * done to java elements by the action. 4441 * </p> 4442 * <p> 4443 * If this method is called in the dynamic scope of another such 4444 * call, this method simply runs the action. 4445 * </p> 4446 * <p> 4447 * The supplied scheduling rule is used to determine whether this operation can be 4448 * run simultaneously with workspace changes in other threads. See 4449 * <code>IWorkspace.run(...)</code> for more details. 4450 * </p> 4451 * 4452 * @param action the action to perform 4453 * @param rule the scheduling rule to use when running this operation, or 4454 * <code>null</code> if there are no scheduling restrictions for this operation. 4455 * @param monitor a progress monitor, or <code>null</code> if progress 4456 * reporting and cancellation are not desired 4457 * @exception CoreException if the operation failed. 4458 * @since 3.0 4459 */ 4460 public static void run(IWorkspaceRunnable action, ISchedulingRule rule, IProgressMonitor monitor) throws CoreException { 4461 IWorkspace workspace = ResourcesPlugin.getWorkspace(); 4462 if (workspace.isTreeLocked()) { 4463 new BatchOperation(action).run(monitor); 4464 } else { 4465 // use IWorkspace.run(...) to ensure that a build will be done in autobuild mode 4466 workspace.run(new BatchOperation(action), rule, IWorkspace.AVOID_UPDATE, monitor); 4467 } 4468 } 4469 /** 4470 * Bind a container reference path to some actual containers (<code>IClasspathContainer</code>). 4471 * This API must be invoked whenever changes in container need to be reflected onto the JavaModel. 4472 * Containers can have distinct values in different projects, therefore this API considers a 4473 * set of projects with their respective containers. 4474 * <p> 4475 * <code>containerPath</code> is the path under which these values can be referenced through 4476 * container classpath entries (<code>IClasspathEntry#CPE_CONTAINER</code>). A container path 4477 * is formed by a first ID segment followed with extra segments, which can be used as additional hints 4478 * for the resolution. The container ID is used to identify a <code>ClasspathContainerInitializer</code> 4479 * registered on the extension point "org.eclipse.jdt.core.classpathContainerInitializer". 4480 * <p> 4481 * There is no assumption that each individual container value passed in argument 4482 * (<code>respectiveContainers</code>) must answer the exact same path when requested 4483 * <code>IClasspathContainer#getPath</code>. 4484 * Indeed, the containerPath is just an indication for resolving it to an actual container object. It can be 4485 * delegated to a <code>ClasspathContainerInitializer</code>, which can be activated through the extension 4486 * point "org.eclipse.jdt.core.ClasspathContainerInitializer"). 4487 * <p> 4488 * In reaction to changing container values, the JavaModel will be updated to reflect the new 4489 * state of the updated container. A combined Java element delta will be notified to describe the corresponding 4490 * classpath changes resulting from the container update. This operation is batched, and automatically eliminates 4491 * unnecessary updates (new container is same as old one). This operation acquires a lock on the workspace's root. 4492 * <p> 4493 * This functionality cannot be used while the workspace is locked, since 4494 * it may create/remove some resource markers. 4495 * <p> 4496 * Classpath container values are persisted locally to the workspace, but 4497 * are not preserved from a session to another. It is thus highly recommended to register a 4498 * <code>ClasspathContainerInitializer</code> for each referenced container 4499 * (through the extension point "org.eclipse.jdt.core.ClasspathContainerInitializer"). 4500 * <p> 4501 * Note: setting a container to <code>null</code> will cause it to be lazily resolved again whenever 4502 * its value is required. In particular, this will cause a registered initializer to be invoked 4503 * again. 4504 * <p> 4505 * @param containerPath - the name of the container reference, which is being updated 4506 * @param affectedProjects - the set of projects for which this container is being bound 4507 * @param respectiveContainers - the set of respective containers for the affected projects 4508 * @param monitor a monitor to report progress 4509 * @throws JavaModelException 4510 * @see ClasspathContainerInitializer 4511 * @see #getClasspathContainer(IPath, IJavaProject) 4512 * @see IClasspathContainer 4513 * @since 2.0 4514 */ 4515 public static void setClasspathContainer(IPath containerPath, IJavaProject[] affectedProjects, IClasspathContainer[] respectiveContainers, IProgressMonitor monitor) throws JavaModelException { 4516 if (affectedProjects.length != respectiveContainers.length) 4517 Assert.isTrue(false, "Projects and containers collections should have the same size"); //$NON-NLS-1$ 4518 SetContainerOperation operation = new SetContainerOperation(containerPath, affectedProjects, respectiveContainers); 4519 operation.runOperation(monitor); 4520 } 4521 4522 /** 4523 * Sets the value of the given classpath variable. 4524 * The path must have at least one segment. 4525 * <p> 4526 * This functionality cannot be used while the resource tree is locked. 4527 * <p> 4528 * Classpath variable values are persisted locally to the workspace, and 4529 * are preserved from session to session. 4530 * <p> 4531 * 4532 * @param variableName the name of the classpath variable 4533 * @param path the path 4534 * @throws JavaModelException 4535 * @see #getClasspathVariable(String) 4536 * 4537 * @deprecated Use {@link #setClasspathVariable(String, IPath, IProgressMonitor)} instead 4538 */ 4539 public static void setClasspathVariable(String JavaDoc variableName, IPath path) 4540 throws JavaModelException { 4541 4542 setClasspathVariable(variableName, path, null); 4543 } 4544 4545 /** 4546 * Sets the value of the given classpath variable. 4547 * The path must not be null. 4548 * <p> 4549 * This functionality cannot be used while the resource tree is locked. 4550 * <p> 4551 * Classpath variable values are persisted locally to the workspace, and 4552 * are preserved from session to session. 4553 * <p> 4554 * Updating a variable with the same value has no effect. 4555 * 4556 * @param variableName the name of the classpath variable 4557 * @param path the path 4558 * @param monitor a monitor to report progress 4559 * @throws JavaModelException 4560 * @see #getClasspathVariable(String) 4561 */ 4562 public static void setClasspathVariable( 4563 String JavaDoc variableName, 4564 IPath path, 4565 IProgressMonitor monitor) 4566 throws JavaModelException { 4567 4568 if (path == null) Assert.isTrue(false, "Variable path cannot be null"); //$NON-NLS-1$ 4569 setClasspathVariables(new String JavaDoc[]{variableName}, new IPath[]{ path }, monitor); 4570 } 4571 4572 /** 4573 * Sets the values of all the given classpath variables at once. 4574 * Null paths can be used to request corresponding variable removal. 4575 * <p> 4576 * A combined Java element delta will be notified to describe the corresponding 4577 * classpath changes resulting from the variables update. This operation is batched, 4578 * and automatically eliminates unnecessary updates (new variable is same as old one). 4579 * This operation acquires a lock on the workspace's root. 4580 * <p> 4581 * This functionality cannot be used while the workspace is locked, since 4582 * it may create/remove some resource markers. 4583 * <p> 4584 * Classpath variable values are persisted locally to the workspace, and 4585 * are preserved from session to session. 4586 * <p> 4587 * Updating a variable with the same value has no effect. 4588 * 4589 * @param variableNames an array of names for the updated classpath variables 4590 * @param paths an array of path updates for the modified classpath variables (null 4591 * meaning that the corresponding value will be removed 4592 * @param monitor a monitor to report progress 4593 * @throws JavaModelException 4594 * @see #getClasspathVariable(String) 4595 * @since 2.0 4596 */ 4597 public static void setClasspathVariables( 4598 String JavaDoc[] variableNames, 4599 IPath[] paths, 4600 IProgressMonitor monitor) 4601 throws JavaModelException { 4602 4603 if (variableNames.length != paths.length) Assert.isTrue(false, "Variable names and paths collections should have the same size"); //$NON-NLS-1$ 4604 SetVariablesOperation operation = new SetVariablesOperation(variableNames, paths, true/*update preferences*/); 4605 operation.runOperation(monitor); 4606 } 4607 4608 /** 4609 * Sets the default's compiler options inside the given options map according 4610 * to the given compliance. 4611 * 4612 * <p>The given compliance must be one of the compliance supported by the compiler. 4613 * See {@link #getDefaultOptions()} for a list of compliance values.</p> 4614 * 4615 * <p>The list of modified options is:</p> 4616 * <ul> 4617 * <li>{@link #COMPILER_CODEGEN_TARGET_PLATFORM}</li> 4618 * <li>{@link #COMPILER_SOURCE}</li> 4619 * <li>{@link #COMPILER_COMPLIANCE}</li> 4620 * <li>{@link #COMPILER_PB_ASSERT_IDENTIFIER}</li> 4621 * <li>{@link #COMPILER_PB_ENUM_IDENTIFIER}</li> 4622 * </ul> 4623 * 4624 * <p>If the given compliance is unknown, the given map is unmodified.</p> 4625 * 4626 * @param compliance the given compliance 4627 * @param options the given options map 4628 * @since 3.3 4629 */ 4630 public static void setComplianceOptions(String JavaDoc compliance, Map JavaDoc options) { 4631 switch((int) (CompilerOptions.versionToJdkLevel(compliance) >>> 16)) { 4632 case ClassFileConstants.MAJOR_VERSION_1_3: 4633 options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_3); 4634 options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_3); 4635 options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_1); 4636 options.put(JavaCore.COMPILER_PB_ASSERT_IDENTIFIER, JavaCore.IGNORE); 4637 options.put(JavaCore.COMPILER_PB_ENUM_IDENTIFIER, JavaCore.IGNORE); 4638 break; 4639 case ClassFileConstants.MAJOR_VERSION_1_4: 4640 options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_4); 4641 options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_3); 4642 options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_2); 4643 options.put(JavaCore.COMPILER_PB_ASSERT_IDENTIFIER, JavaCore.WARNING); 4644 options.put(JavaCore.COMPILER_PB_ENUM_IDENTIFIER, JavaCore.WARNING); 4645 break; 4646 case ClassFileConstants.MAJOR_VERSION_1_5: 4647 options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_5); 4648 options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_5); 4649 options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_5); 4650 options.put(JavaCore.COMPILER_PB_ASSERT_IDENTIFIER, JavaCore.ERROR); 4651 options.put(JavaCore.COMPILER_PB_ENUM_IDENTIFIER, JavaCore.ERROR); 4652 options.put(JavaCore.COMPILER_CODEGEN_INLINE_JSR_BYTECODE, JavaCore.ENABLED); 4653 break; 4654 case ClassFileConstants.MAJOR_VERSION_1_6: 4655 options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_6); 4656 options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_6); 4657 options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_6); 4658 options.put(JavaCore.COMPILER_PB_ASSERT_IDENTIFIER, JavaCore.ERROR); 4659 options.put(JavaCore.COMPILER_PB_ENUM_IDENTIFIER, JavaCore.ERROR); 4660 options.put(JavaCore.COMPILER_CODEGEN_INLINE_JSR_BYTECODE, JavaCore.ENABLED); 4661 break; 4662 case ClassFileConstants.MAJOR_VERSION_1_7: 4663 options.put(JavaCore.COMPILER_COMPLIANCE, JavaCore.VERSION_1_7); 4664 options.put(JavaCore.COMPILER_SOURCE, JavaCore.VERSION_1_7); 4665 options.put(JavaCore.COMPILER_CODEGEN_TARGET_PLATFORM, JavaCore.VERSION_1_7); 4666 options.put(JavaCore.COMPILER_PB_ASSERT_IDENTIFIER, JavaCore.ERROR); 4667 options.put(JavaCore.COMPILER_PB_ENUM_IDENTIFIER, JavaCore.ERROR); 4668 options.put(JavaCore.COMPILER_CODEGEN_INLINE_JSR_BYTECODE, JavaCore.ENABLED); 4669 } 4670 } 4671 4672 /** 4673 * Sets the current table of options. All and only the options explicitly 4674 * included in the given table are remembered; all previous option settings 4675 * are forgotten, including ones not explicitly mentioned. 4676 * <p> 4677 * For a complete description of the configurable options, see 4678 * <code>getDefaultOptions</code>. 4679 * </p> 4680 * 4681 * @param newOptions 4682 * the new options (key type: <code>String</code>; value type: 4683 * <code>String</code>), or <code>null</code> to reset all 4684 * options to their default values 4685 * @see JavaCore#getDefaultOptions() 4686 * @see JavaCorePreferenceInitializer for changing default settings 4687 */ 4688 public static void setOptions(Hashtable JavaDoc newOptions) { 4689 JavaModelManager.getJavaModelManager().setOptions(newOptions); 4690 } 4691 4692 /* (non-Javadoc) 4693 * Shutdown the JavaCore plug-in. 4694 * <p> 4695 * De-registers the JavaModelManager as a resource changed listener and save participant. 4696 * <p> 4697 * @see org.eclipse.core.runtime.Plugin#stop(BundleContext) 4698 */ 4699 public void stop(BundleContext context) throws Exception JavaDoc { 4700 try { 4701 JavaModelManager.getJavaModelManager().shutdown(); 4702 } finally { 4703 // ensure we call super.stop as the last thing 4704 super.stop(context); 4705 } 4706 } 4707 4708 /* (non-Javadoc) 4709 * Startup the JavaCore plug-in. 4710 * <p> 4711 * Registers the JavaModelManager as a resource changed listener and save participant. 4712 * Starts the background indexing, and restore saved classpath variable values. 4713 * <p> 4714 * @throws Exception 4715 * @see org.eclipse.core.runtime.Plugin#start(BundleContext) 4716 */ 4717 public void start(BundleContext context) throws Exception JavaDoc { 4718 super.start(context); 4719 JavaModelManager.getJavaModelManager().startup(); 4720 } 4721} Read more: http://kickjava.com/src/org/eclipse/jdt/core/JavaCore.java.htm#ixzz2tkFaV0QY