| jdt core - build notes 3.8 stream |
| Java development tools core |
|
Here are the build notes for the Eclipse JDT/Core plug-in project
org.eclipse.jdt.core,
describing bug resolution and substantial changes in the HEAD branch.
For more information on 3.8 planning, please refer to JDT/Core release plan,
the next milestone plan,
the overall official plan,
or the build schedule.
This present document covers all changes since Release 3.7 (also see a summary of API changes).
Maintenance of previous releases of JDT/Core is performed in parallel branches: R3.7.x, R3.6.x, R3.5.x, R3.4.x, R3.3.x, R3.2.x, R3.1.x, R3.0.x, R2.1.x, R2.0.x, R1.0.x. |
/**
* Constant for the name of the encoding to be used for source attachments.
*
* <p>The value of this attribute has to be a string representation of a valid encoding. The encoding
* for a source attachment is determined in the following order: </p>
*
* <ul>
* <li> Encoding explicitly set on the source file (java or zip), i.e. org.eclipse.core.resources.IFile#getCharset(false) </li>
* <li> Encoding set on the corresponding classpath entry </li>
* <li> If the source attachment is a member of the project, then the project's default charSet</li>
* <li> Workspace default charSet </li>
* </ul>
*
* @since 3.8
*/
String SOURCE_ATTACHMENT_ENCODING = "source_encoding";
/** * Compiler option ID: Raise null related errors or warnings on fields. * * When enabled, the compiler will flag all null related errors or warnings that have been enabled by the user * on fields, in addition to local variables. * When disabled, the compiler will not flag null related errors or warnings on fields. * * Option id:"org.eclipse.jdt.core.compiler.problem.includeFieldsInNullAnalysis"* Possible values:{ "enabled", "disabled" }* Default:"disabled"* * @since 3.8 * @category CompilerOptionID */ public static final String COMPILER_PB_INCLUDE_FIELDS_IN_NULL_ANALYSIS = PLUGIN_ID + ".compiler.problem.includeFieldsInNullAnalysis";
/** @since 3.8*/ int NullFieldReference = Internal + FieldRelated + 670; /** @since 3.8*/ int PotentialNullFieldReference = Internal + FieldRelated + 671; /** @since 3.8*/ int RedundantNullCheckOnNullField = Internal + FieldRelated + 672; /** @since 3.8*/ int NullFieldComparisonYieldsFalse = Internal + FieldRelated + 673; /** @since 3.8*/ int RedundantNullCheckOnNonNullField = Internal + FieldRelated + 674; /** @since 3.8*/ int NonNullFieldComparisonYieldsFalse = Internal + FieldRelated + 675; /** @since 3.8*/ int RedundantFieldNullAssignment = Internal + FieldRelated + 676; /** @since 3.8*/ int NullFieldInstanceofYieldsFalse = Internal + FieldRelated + 677;
/** @since 3.8 */ int RedundantNullDefaultAnnotation = Internal + 925; /** @since 3.8 */ int RedundantNullDefaultAnnotationPackage = Internal + 926; /** @since 3.8 */ int RedundantNullDefaultAnnotationType = Internal + 927; /** @since 3.8 */ int RedundantNullDefaultAnnotationMethod = Internal + 928; /** @since 3.8 */ int ContradictoryNullAnnotations = Internal + 929;
/**
* Constant for the name of the index location attribute.
*
* The value for this attribute has to be the string representation of a URL.
* It should point to an existing index file in a folder or a jar. The URL can also be of platform protocol.
*
* @since 3.8
*/
String INDEX_LOCATION_ATTRIBUTE_NAME = "index_location";
/**
* Generates the index file for the specified jar.
*
* @param pathToJar The full path to the jar that needs to be indexed
* @param pathToIndexFile The full path to the index file that needs to be generated
* @throws IOException if the jar is not found or could not write into the index file
* @since 3.8
*/
public static void generateIndexForJar(String pathToJar, String pathToIndexFile) throws IOException;
/**
* Compiler option ID: Annotation-based Null Analysis.
*
* This option controls whether the compiler will use null annotations for
* improved analysis of (potential) null references.
*
* When enabled, the compiler will interpret the annotation types defined using
* {@link #COMPILER_NONNULL_ANNOTATION_NAME} and {@link #COMPILER_NULLABLE_ANNOTATION_NAME}
* as specifying whether or not a given type includes the value null.
*
* The effect of these analyses is further controlled by the options
* {@link #COMPILER_PB_NULL_SPECIFICATION_VIOLATION},
* {@link #COMPILER_PB_POTENTIAL_NULL_SPECIFICATION_VIOLATION} and
* {@link #COMPILER_PB_NULL_SPECIFICATION_INSUFFICIENT_INFO}.
*
* Option id: "org.eclipse.jdt.core.compiler.annotation.nullanalysis"
* Possible values: { "disabled", "enabled" }
* Default: "disabled"
* @since 3.8
* @category CompilerOptionID
*/
public static final String COMPILER_ANNOTATION_NULL_ANALYSIS = PLUGIN_ID + ".compiler.annotation.nullanalysis";
/**
* Compiler option ID: Name of Annotation Type for Nullable Types.
*
* This option defines a fully qualified Java type name that the compiler may use
* to perform special null analysis.
*
* If the annotation specified by this option is applied to a type in a method
* signature or variable declaration, this will be interpreted as a specification
* that null is a legal value in that position. Currently supported
* positions are: method parameters, method return type and local variables.
*
* If a value whose type
* is annotated with this annotation is dereferenced without checking for null,
* the compiler will trigger a diagnostic as further controlled by
* {@link #COMPILER_PB_POTENTIAL_NULL_REFERENCE}.
*
* The compiler may furthermore check adherence to the null specification as
* further controlled by {@link #COMPILER_PB_NULL_SPECIFICATION_VIOLATION},
* {@link #COMPILER_PB_POTENTIAL_NULL_SPECIFICATION_VIOLATION} and
* {@link #COMPILER_PB_NULL_SPECIFICATION_INSUFFICIENT_INFO}.
*
* This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
*
* Option id: "org.eclipse.jdt.core.compiler.annotation.nullable"
* Possible values: any legal, fully qualified Java type name; must resolve to an annotation type.
* Default: "org.eclipse.jdt.annotation.Nullable"
* @since 3.8
* @category CompilerOptionID
*/
public static final String COMPILER_NULLABLE_ANNOTATION_NAME = PLUGIN_ID + ".compiler.annotation.nullable";
/**
* Compiler option ID: Name of Annotation Type for Non-Null Types.
*
* This option defines a fully qualified Java type name that the compiler may use
* to perform special null analysis.
*
* If the annotation specified by this option is applied to a type in a method
* signature or variable declaration, this will be interpreted as a specification
* that null is not a legal value in that position. Currently
* supported positions are: method parameters, method return type and local variables.
*
* For values declared with this annotation, the compiler will never trigger a null
* reference diagnostic (as controlled by {@link #COMPILER_PB_POTENTIAL_NULL_REFERENCE}
* and {@link #COMPILER_PB_NULL_REFERENCE}), because the assumption is made that null
* will never occur at runtime in these positions.
*
* The compiler may furthermore check adherence to the null specification as further
* controlled by {@link #COMPILER_PB_NULL_SPECIFICATION_VIOLATION},
* {@link #COMPILER_PB_POTENTIAL_NULL_SPECIFICATION_VIOLATION} and
* {@link #COMPILER_PB_NULL_SPECIFICATION_INSUFFICIENT_INFO}.
*
* This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
*
* Option id: "org.eclipse.jdt.core.compiler.annotation.nonnull"
* Possible values: any legal, fully qualified Java type name; must resolve to an annotation type.
* Default: "org.eclipse.jdt.annotation.NonNull"
* @since 3.8
* @category CompilerOptionID
*/
public static final String COMPILER_NONNULL_ANNOTATION_NAME = PLUGIN_ID + ".compiler.annotation.nonnull";
/**
* Compiler option ID: Name of Annotation Type to specify a nullness default for unannotated types.
*
* This option defines a fully qualified Java type name that the compiler may use
* to perform special null analysis.
*
* If the annotation is applied without an argument, all unannotated types in method signatures
* within the annotated element will be treated as if they were specified with the non-null annotation
* (see {@link #COMPILER_NONNULL_ANNOTATION_NAME}).
*
* If the annotation is applied with the constant false as its argument
* all corresponding defaults at outer scopes will be canceled for the annotated element.
* This includes defaults specified using this annotation type or a default defined using
* the compiler option {@link #COMPILER_NONNULL_IS_DEFAULT}.
*
* This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
*
* Option id: "org.eclipse.jdt.core.compiler.annotation.nonnullbydefault"
* Possible values: any legal, fully qualified Java type name; must resolve to an annotation type.
* That annotation type should have exactly one boolean parameter.
* Default: "org.eclipse.jdt.annotation.NonNullByDefault"
* @since 3.8
* @category CompilerOptionID
*/
public static final String COMPILER_NONNULL_BY_DEFAULT_ANNOTATION_NAME = PLUGIN_ID + ".compiler.annotation.nonnullbydefault";
/**
* Compiler option ID: Globally specify non-null as the assumed default for unannotated types.
*
* When enabled this option globally achieves the same effect
* as specifying {@link #COMPILER_NONNULL_ANNOTATION_NAME} does for individual elements.
*
* This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
*
* Option id: "org.eclipse.jdt.core.compiler.annotation.nonnullisdefault"
* Possible values: { "disabled", "enabled" }.
* Default: "disabled"
* @since 3.8
* @category CompilerOptionID
*/
public static final String COMPILER_NONNULL_IS_DEFAULT = PLUGIN_ID + ".compiler.annotation.nonnullisdefault";
/**
* Compiler option ID: Reporting Violations of Null Specifications.
*
* Depending on this option, the compiler will issue either an error or a warning
* whenever one of the following situations is detected:
*
* 1. A method declared with a nonnull annotation returns an expression that is
* statically known to evaluate to a null value.
* 2. An expression that is statically known to evaluate to a null value is passed
* as an argument in a method call where the corresponding parameter of the called
* method is declared with a nonnull annotation.
* 3. An expression that is statically known to evaluate to a null value is assigned
* to a local variable that is declared with a nonnull annotation.
* 4. A method that overrides an inherited method declared with a nonnull annotation
* tries to relax that contract by specifying a nullable annotation
* (prohibition of contravariant return).
* 5. A method that overrides an inherited method which has a nullable declaration
* for at least one of its parameters, tries to tighten that null contract by
* specifying a nonnull annotation for its corresponding parameter
* (prohibition of covariant parameters).
*
* The compiler options {@link #COMPILER_NONNULL_ANNOTATION_NAME} and
* {@link #COMPILER_NULLABLE_ANNOTATION_NAME} control which annotations the compiler
* shall interpret as nonnull or nullable annotations, respectively.
*
* This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
*
* Option id: "org.eclipse.jdt.core.compiler.problem.nullSpecViolation"
* Possible values: { "error", "warning" }
* Default: "error"
*
* @since 3.8
* @category CompilerOptionID
*/
public static final String COMPILER_PB_NULL_SPECIFICATION_VIOLATION = PLUGIN_ID + ".compiler.problem.nullSpecViolation";
/**
* Compiler option ID: Reporting Violations of Null Specifications with Potential Null Value.
*
* When enabled, the compiler will issue an error or a warning whenever one of the
* following situations is detected:
*
* 1. A method declared with a nonnull annotation returns an expression that is
* statically known to evaluate to a null value on some flow.
* 2. An expression that is statically known to evaluate to a null value on some flow
* is passed as an argument in a method call where the corresponding parameter of
* the called method is declared with a nonnull annotation.
* 3. An expression that is statically known to evaluate to a null value on some flow
* is assigned to a local variable that is declared with a nonnull annotation.
*
* The compiler options {@link #COMPILER_NONNULL_ANNOTATION_NAME} and
* {@link #COMPILER_NULLABLE_ANNOTATION_NAME} control which annotations the compiler
* shall interpret as nonnull or nullable annotations, respectively.
*
*
* This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
*
* Option id: "org.eclipse.jdt.core.compiler.problem.potentialNullSpecViolation"
* Possible values: { "error", "warning", "ignore" }
* Default: "error"
*
* @since 3.8
* @category CompilerOptionID
*/
public static final String COMPILER_PB_POTENTIAL_NULL_SPECIFICATION_VIOLATION = PLUGIN_ID + ".compiler.problem.potentialNullSpecViolation";
/**
* Compiler option ID: Reporting Insufficient Information for Analysing Adherence to Null Specifications.
*
* When enabled, the compiler will issue an error or a warning whenever one of the
* following situations is detected:
*
* 1. A method declared with a nonnull annotation returns an expression for which
* insufficient nullness information is available for statically proving that no
* flow will pass a null value at runtime.
* 2. An expression for which insufficient nullness information is available for
* statically proving that it will never evaluate to a null value at runtime
* is passed as an argument in a method call where the corresponding parameter of
* the called method is declared with a nonnull annotation.
* 3. An expression for which insufficient nullness information is available for
* statically proving that it will never evaluate to a null value at runtime
* is assigned to a local variable that is declared with a nonnull annotation.
*
* Insufficient nullness information is usually a consequence of using other unannotated
* variables or methods.
*
* The compiler options {@link #COMPILER_NONNULL_ANNOTATION_NAME} and
* {@link #COMPILER_NULLABLE_ANNOTATION_NAME} control which annotations the compiler
* shall interpret as nonnull or nullable annotations, respectively.
*
* This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
*
* Option id: "org.eclipse.jdt.core.compiler.problem.nullSpecInsufficientInfo"
* Possible values: { "error", "warning", "ignore" }
* Default: "warning"
*
* @since 3.8
* @category CompilerOptionID
*/
public static final String COMPILER_PB_NULL_SPECIFICATION_INSUFFICIENT_INFO = PLUGIN_ID + ".compiler.problem.nullSpecInsufficientInfo";
/**
* Compiler option ID: Reporting Redundant Null Annotations.
*
* When enabled, the compiler will issue an error or a warning when a non-null annotation
* (see {@link #COMPILER_NONNULL_ANNOTATION_NAME})
* is applied although the same effect is already achieved by a default applicable at the
* current location. Such a default may be effective by enabling the option
* {@link #COMPILER_NONNULL_IS_DEFAULT} or by using the annotation specified by the option
* {@link #COMPILER_NONNULL_BY_DEFAULT_ANNOTATION_NAME}.
*
* This option only has an effect if the the option {@link #COMPILER_ANNOTATION_NULL_ANALYSIS} is enabled.
*
* Option id: "org.eclipse.jdt.core.compiler.problem.redundantNullAnnotation"
* Possible values: { "error", "warning", "ignore" }
* Default: "warning"
*
* @since 3.8
* @category CompilerOptionID
*/
public static final String COMPILER_PB_REDUNDANT_NULL_ANNOTATION = PLUGIN_ID + ".compiler.problem.redundantNullAnnotation";
/** * Status constant indicating that the default or specific output folder is overlapping * with another source location. * @since 3.8 */ public static final int OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE = 1013;
/**
* Core option ID: Reporting an output location overlapping another source location.
* Indicate the severity of the problem reported when a source entry's output location overlaps another
* source entry.
*
* Option id:"org.eclipse.jdt.core.classpath.outputOverlappingAnotherSource"
* Possible values:{ "error", "warning", "ignore" }
* Default:"error"
*
* @since 3.8
*/
public static final String CORE_OUTPUT_LOCATION_OVERLAPPING_ANOTHER_SOURCE = PLUGIN_ID + ".classpath.outputOverlappingAnotherSource";
/** * Description of a bootstrap method table entry as specified in the JVM specifications. * * This interface may be implemented by clients. * * @since 3.8 */ public interface IBootstrapMethodsEntry;
/** * Description of a bootstrap methods attribute as described in the JVM specifications. * * This interface may be implemented by clients. * * @since 3.8 */ public interface IBootstrapMethodsAttribute
/** * Answer back the number of bootstrap methods of this entry as specified in * the JVM specifications. * * @return the number of bootstrap methods of this entry as specified in * the JVM specifications */ int getBootstrapMethodsLength();
/** * Answer back the bootstrap methods table of this entry as specified in * the JVM specifications. Answer an empty array if none. * * @return the bootstrap methods table of this entry as specified in * the JVM specifications. Answer an empty array if none */ IBootstrapMethodsEntry[] getBootstrapMethods();
/** * Description of the new constant pool entry as described in the JVM specifications * added for Java 7 support. * Its contents is initialized according to its kind. * * This interface may be implemented by clients. * * @since 3.8 */ public interface IConstantPoolEntry2
/**
* Returns the descriptor index. This value is set only when decoding a MethodType entry.
* The value is unspecified otherwise. The corresponding UTF8 value can be retrieved by using
* {@link #getMethodDescriptor()}.
*
* @return the descriptor index. This value is set only when decoding a MethodType entry.
* @see IConstantPoolConstant#CONSTANT_MethodType
*/
int getDescriptorIndex();
/** * Returns the reference kind. This value is set only when decoding a MethodHandle entry. * The value is unspecified otherwise. * * @return the reference kind. This value is set only when decoding a MethodHandle entry. * @see IConstantPoolConstant#CONSTANT_MethodHandle */ int getReferenceKind();
/** * Returns the reference index. This value is set only when decoding a MethodHandle entry. * The value is unspecified otherwise. * * @return the reference kind. This value is set only when decoding a MethodHandle entry. * @see IConstantPoolConstant#CONSTANT_MethodHandle */ int getReferenceIndex();
/** * Returns the bootstrap method attribute index. This value is set only when decoding a InvokeDynamic entry. * The value is unspecified otherwise. * * @return the reference kind. This value is set only when decoding a MethodHandle entry. * @see IConstantPoolConstant#CONSTANT_InvokeDynamic */ int getBootstrapMethodAttributeIndex();
/** * @since 3.8 */ void _invokedynamic( int pc, int index, IConstantPoolEntry invokeDynamic);
This has been added in place of the deprecated API
void _invokedynamic( int pc, int index, IConstantPoolEntry nameEntry, IConstantPoolEntry descriptorEntry);
/** * Compiler option ID: Reporting a resource that is not closed properly. * * When enabled, the compiler will issue an error or a warning if * a local variable holds a value of typejava.lang.AutoCloseable(compliance>=1.7) * or a value of typejava.io.Closeable(compliance<=1.6) and if * flow analysis shows that the methodclose()is not invoked locally on that value. * * Option id:"org.eclipse.jdt.core.compiler.problem.reportUnclosedCloseable"* Possible values:{ "error", "warning", "ignore" }* Default:"warning"* * @since 3.8 * @category CompilerOptionID */ public static final String COMPILER_PB_UNCLOSED_CLOSEABLE = PLUGIN_ID + ".compiler.problem.unclosedCloseable"; //$NON-NLS-1$
/** * Compiler option ID: Reporting a resource that may not be closed properly. * * When enabled, the compiler will issue an error or a warning if * a local variable holds a value of typejava.lang.AutoCloseable(compliance>=1.7) * or a value of typejava.io.Closeable(compliance<=1.6) and if * flow analysis shows that the methodclose()is * not invoked locally on that value for all execution paths. * * Option id:"org.eclipse.jdt.core.compiler.problem.reportPotentiallyUnclosedCloseable"* Possible values:{ "error", "warning", "ignore" }* Default:"ignore"* * @since 3.8 * @category CompilerOptionID */ public static final String COMPILER_PB_POTENTIALLY_UNCLOSED_CLOSEABLE = PLUGIN_ID + ".compiler.problem.potentiallyUnclosedCloseable"; //$NON-NLS-1$
/** * Compiler option ID: Reporting a resource that is not managed by try-with-resources. * * When enabled, the compiler will issue an error or a warning if a local variable * holds a value of typejava.lang.AutoCloseable, and if the method *close()is explicitly invoked on that resource, but the resource is * not managed by a try-with-resources block. * * Option id:"org.eclipse.jdt.core.compiler.problem.reportPotentiallyUnclosedCloseable"* Possible values:{ "error", "warning", "ignore" }* Default:"ignore"* * @since 3.8 * @category CompilerOptionID */ public static final String COMPILER_PB_EXPLICITLY_CLOSED_AUTOCLOSEABLE = PLUGIN_ID + ".compiler.problem.explicitlyClosedAutoCloseable"; //$NON-NLS-1$
/** * Returns the binding key of the declaring type of the element represented by this binding key. If the binding key * does not represent a member or if the member doesn't have a declaring type, returnsnull. * * Note that only binding keys for references to methods and fields * are fully supported. The binding keys for declarations will not have type parameters. * * @return the type binding key ornull* @since 3.7.1 */ public BindingKey getDeclaringType();
/** * Returns whether it is safe to use the '<>' (diamond) operator in place of explicitly specifying * type arguments for this proposal. * * This is only relevant for source level 1.7 or greater. * * @param coreContext the completion context associated with the proposal * @since 3.7.1 * @returntrueif it is safe to use the diamond operator for the constructor invocation, *falseotherwise. Also returnsfalsefor source levels below 1.7 */ public boolean canUseDiamond(CompletionContext coreContext);
/** * Compiler option ID: Reporting redundant specification of type arguments in class instance creation expressions. * When enabled, the compiler will issue an error or a warning if type arguments are used in a class instance creation, * when the '<>' operator can be used instead. * * This option only has an effect if the compiler compliance is 1.7 or greater. * * Option id:"org.eclipse.jdt.core.compiler.problem.redundantSpecificationOfTypeArguments"* Possible values:{ "error", "warning", "ignore" }* Default:"ignore"* * @since 3.7.1 * @category CompilerOptionID */ public static final String COMPILER_PB_REDUNDANT_TYPE_ARGUMENTS = PLUGIN_ID + ".compiler.problem.redundantSpecificationOfTypeArguments";
/** * Returnstrueif the resolved class type has been inferred * from the assignment context (JLS4 15.12.2.8),falseotherwise. * * This information is available only when bindings are requested when the AST is being built. * * @returntrueif the resolved class type has been inferred * from the assignment context (JLS3 15.12.2.8),falseotherwise * @since 3.7.1 */ public boolean isResolvedTypeInferredFromExpectedType();
For earlier build notes, also see build notes up to Release 3.6.