# API Errors and Warnings Preferences

The following preferences can be set using the Plug-in Development > API Errors/Warnings preference page.

API problems are created during project builds (auto and full builds), the tooling breaks down the types of problems reported into one of three categories:

1. Usage Problems - restricted code is being called by unauthorized plug-ins.
2. Binary Incompatibilities - changes between versions are not binary compatible.
3. Version Problems - plug-in versions or code versions (@since tags) not correct.

You can also configure the problem severities on a per project basis as well, by using the API Errors/Warnings property page for a project

## API Use

### General

Option | Description | Default
--- | --- | ---
Unsupported Use of API Javadoc Tags | When enabled the API analysis builder will check for API Javadoc tags used incorrectly. | Ignore

### Restrictions

Option | Description | Default
--- | --- | ---
Implementing an interface marked as '@noimplement' | When enabled the API analysis builder will check for illegal implementation of marked interfaces. | Warning
Extending a type marked '@noextend' | When enabled the API analysis builder will check for classes that extend marked types. | Warning
Referencing a field or method marked '@noreference' | When enabled the API analysis builder will check for field and method references to tagged members. | Warning
Instantiating a class tagged '@noinstantiate' | When enabled the API analysis builder will check that tagged classes are not instantiated. | Warning
Overriding a method marked as '@nooverride' | When enabled the API analysis builder will check that tagged methods in parent classes are not overridden in any child class either by extending (re-implement with a call to the overridden parent) or re-implementing (with no call to the overridden parent). | Warning

### Leaks

Option | Description | Default
--- | --- | ---
Extends a non-API class | When enabled the API analysis builder will check if any API classes extend non-API types. | Warning
Implements a non-API interface | When enabled the API analysis builder will check if any API classes implement a non-API interface | Warning
Field with non-API type | When enabled the API analysis builder will check if any API types have public or protected fields with non-API types. | Warning
Method with a non-API return type | When enabled the API analysis builder will check if any API types have public or protected methods with non-API return types. | Warning
Method with non-API parameter type | When enabled the API analysis builder will check if any API types have public or protected methods with non-API parameter types. | Warning

## API Compatibility

### Bundle

Option | Description | Default
--- | --- | ---
An API type has become non-API | When enabled the API analysis builder will check if any API types in the current bundle have been changes to non-API types. | Error
A Type has been removed | When enabled the API analysis builder will check if any API types have been removed from the API scope in the given bundle. | Error

### Annotation

Option | Description | Default
--- | --- | ---
A field (annotation not tagged as '@noimplement') has been added | When enabled the API analysis builder will check if any fields have been added to API annotations that have not been tagged as @noimplement. | Error
A method (annotation not tagged as '@noimplement') has been added | When enabled the API analysis builder will check if any methods have been added to API annotations that have not been tagged as @noimplement. | Error
A type member (annotation not tagged as '@noimplement') has been added | When enabled the API analysis builder will check if any member types have been added to API annotations that have not been tagged as @noimplement. | Error
A class bound has been added | When enabled the API analysis builder will check if a new class bound has been added to any API annotation. | Error
An interface bound has been added | When enabled the API analysis builder will check if a new interface bound has been added to any API annotation. | Error
The interface bounds have been added | When enabled the API analysis builder will check if interface bounds have been added to any API annotation where there currently were none. | Error
A method without a default value has been added | When enabled the API analysis builder will check if a method without a default value has been added to API annotations. | Error
A type parameter has been added | When enabled the API analysis builder will check if type parameters have been added to any API annotations. | Error
A class bound has been modified | When enabled the API analysis builder will check if class bounds have been changed in any API annotations. | Error
An interface bound has been changed | When enabled the API analysis builder will check if interface bounds have been changed on any API annotations. | Error
The interface bounds have been modified | When enabled the API analysis builder will check if all of the interface bounds have been changed on any API annotations. | Error
Converted to a class type | When enabled the API analysis builder will check if any API annotations have been converted to classes. | Error
Converted to an enum type | When enabled the API analysis builder will check if and API annotations have been converted to enums. | Error
Converted to an interface type | When enabled the API analysis builder will check if any PI annotations have been converted to interfaces. | Error
The superinterfaces hierarchy has been reduced | When enabled the API analysis builder will check if any parent interfaces have been removed. | Error
The restrictions have been modified | When enabled the API analysis builder will check if the API restrictions have been changed (e.g. adding an @noimplement when there was not one before). | Error
A type parameter has been removed | When enabled the API analysis builder will check if any type parameters have been removed from API annotations. | Error
The type parameters have been removed | When enabled the API analysis builder will check if all of the type parameters have been removed from any API annotations. | Error
A class bound has been removed | When enabled the API analysis builder will check if a class bound has been removed from any API annotations. | Error
An interface bounds has been removed | When enabled the API analysis builder will check if an interface bound has been removed from any API annotations. | Error
The interface bounds have been removed | When enabled the API analysis builder will check if all of the interface bounds have been removed for any API annotations. | Error
A field has been removed | When enabled the API analysis builder will check if any public fields have been removed from any API annotations. | Error
A method with a default value has been removed | When enabled the API analysis builder will check if any public methods with default values have been removed from any API annotations. | Error
A method without a default value has been removed | When enabled the API analysis builder will check if any public methods without default values have been removed from any API annotations. | Error
The annotation default value has been removed | When enabled the API analysis builder will check if the default value has been removed for any public annotation methods in any API annotations. | Error

### Interface

Option | Description | Default
--- | --- | ---
A field (interface not tagged as '@noimplement') has been added | When enabled the API analysis builder will check if any public fields have been added to any API interfaces. | Error
A method (interface not tagged as '@noimplement') has been added | When enabled the API analysis builder will check if any public methods have been added to any API interfaces. | Error
A type member (interface not tagged as '@noimplement') has been added | When enabled the API analysis builder will check if any member types have been added to any API interfaces. | Error
A class bound has been added | When enabled the API analysis builder will check if a class bound has been added to any API interfaces. | Error
An interface bound has been added | When enabled the API analysis builder will check if any interface bounds have been added to any API interfaces. | Error
The interface bounds have been removed | When enabled the API analysis builder will check if all of the interface bounds have been removed from any API interfaces. | Error
A type parameter has been added | When enabled the API analysis builder will check if any type parameters have been added to any API interfaces. | Error
A class bound has been modified | When enabled the API analysis builder will check if any class bounds have been changed for an API interfaces. | Error
An interface bound has been modified | When enabled the API analysis builder will check if any interface bounds have been changed on any API interfaces. | Error
The interface bound have been modified | When enabled the API analysis builder will check if all of the interface bounds have been changed on any API interfaces. | Error
Converted to a class type | When enabled the API analysis builder will check if any API interfaces have been changed to classes. | Error
Converted to an enum type | When enabled the API analysis builder will check if any API interfaces have been changed to enums. | Error
Converted to annotation type | When enabled the API analysis builder will check if any API interfaces have been changed to annotations. | Error
The superinterfaces hierarchy has been reduced | When enabled the API analysis builder will check if any parent interfaces have been removed for any API interfaces. | Error
The restrictions have been modified | When enabled the API analysis builder will check if the API restrictions have changed for any API interfaces. | Error
A type parameter has been removed | When enabled the API analysis builder will check if any type parameters have been removed from any API interfaces. | Error
The type parameters have been removed | When enabled the API analysis builder will check if all of the type parameters have been removed from any API interfaces. | Error
A class bound has been removed | When enabled the API analysis builder will check if any class bound have been removed from any API interfaces. | Error
An interface bound has been removed | When enabled the API analysis builder will check if any interface bounds have been removed from any API interfaces. | Error
The interface bounds have been removed | When enabled the API analysis builder will check if all of the interface bounds have been removed from any API interfaces. | Error
A field has been removed | When enabled the API analysis builder will check if any public fields have been removed from any API interfaces. | Error
A method has been removed | When enabled the API analysis builder will check if any public methods have been removed from any API interfaces. | Error
A type member has been removed | When enabled the API analysis builder will check if nay member types have been removed from any API interfaces. | Error

### Enum

Option | Description | Default
--- | --- | ---
The superinterfaces hierarchy has been reduced | When enabled the API analysis builder will check if any parent interfaces have been removed from any API enums. | Error
Converted to an annotation type | When enabled the API analysis builder will check if any API enums have been changed to annotations. | Error
Converted to a class type. | When enabled the API analysis builder will check if any API enums have been changed to classes. | Error
Converted to an interface type | When enabled the API analysis builder will check if any enums have been changed to interfaces. | Error
The restrictions have been modified | When enabled the API analysis builder will check if the API restrictions have been changed on any API enums. | Error
A field has been removed | When enabled the API analysis builder will check if any public fields have been removed from any API enums. | Error
An enum constant has been removed | When enabled the API analysis builder will check if any enum constants have been removed from any API enums. | Error
A method has been removed | When enabled the API analysis builder will check if any public methods have been removed from any API enums. | Error
A type member has been removed | When enabled the API analysis builder will check if any member types have been removed from any API enums. | Error

### Class

Option | Description | Default
--- | --- | ---
A method (class not tagged as '@noextend') has been added | When enabled the API analysis builder will check if any public or protected methods have been added to any API types that have not been tagged @noextend. | Error
A parameter type has been added | When enabled the API analysis builder will check if any parameter types have been added to any API classes. | Error
A class bound has been added | When enabled the API analysis builder will check if a class bound has been added to any API classes. | Error
An interface bound has been added | When enabled the API analysis builder will check if any interface bounds have been added to any API classes. | Error
The interface bounds have been added | When enabled the API analysis builder will check if interface bounds have been added to any API classes that did not previously have interface bounds. | Error
The superinterfaces hierarchy has been reduced | When enabled the API analysis builder will check if any parent interfaces have been removed from any API classes. | Error
The superclass hierarchy has been reduced | When enabled the API analysis builder will check if any parent classes have been removed from any API classes. | Error
The superclass has been modified | When enabled the API analysis builder will check if the superclass for any API classes has been changed. | Error
A class bound has been modified | When enabled the API analysis builder will check if any class bounds have been changed on any API classes. | Error
An interface bound has been changed | When enabled the API analysis builder will check if any interface bounds have been changed on any API classes. | Error
The keyword 'abstract' has been added | When enabled the API analysis builder will check if the 'abstract' keyword has been added to any API classes. | Error
The keyword 'final' has been added | When enabled the API analysis builder will check if the 'final' keyword has been added to any API classes. | Error
Converted to an annotation type | When enabled the API analysis builder will check if any API classes have been changed to annotation types. | Error
Converted to an enum type | When enabled the API analysis builder will check if any API classes have been changed into enum types. | Error
Converted to an interface type | When enabled the API analysis builder will check if any API classes have been changed into interface types. | Error
The visibility has been reduced | When enabled the API analysis builder will check if any public API classes have been made private or default scope. | Error
The restrictions have been modified | When enabled the API analysis builder will check if the API restrictions have been changed for any API classes. | Error
A field has been removed | When enabled the API analysis builder will check if any public or protected fields have been removed from any API classes. | Error
A method has been removed | When enabled the API analysis builder will check if any public or protected methods have been removed from any API classes. | Error
A constructor has been removed | When enabled the API analysis builder will check if any public or protected constructors have been removed from any API classes. | Error
A type member has been removed | When enabled the API analysis builder will check if any type members have been removed from any API classes. | Error
A type parameter has been removed | When enabled the API analysis builder will check if any type parameters have been removed from any API classes. | Error
A class bound has been removed | When enabled the API analysis builder will check if any class bounds have been removed from any API classes. | Error
An interface bound has been removed | When enabled the API analysis builder will check if any interface bounds have been removed from any API classes. | Error

### Field

Option | Description | Default
--- | --- | ---
A constant value has been added | When enabled the API analysis builder will check if a constant value has been added to any previously un-initialized public or protected field constants for any API types. | Error
The type has been modified | When enabled the API analysis builder will check if the type of any public or protected fields has been changed for any API types. | Error
The constant value has been modified | When enabled the API analysis builder will check if the value of any public or protected field constants has been changed in any API types. | Error
The visibility has been reduced | When enabled the API analysis builder will check if any public or protected fields have been made private in any API types. | Error
The keyword 'final' has been removed for static constant | When enabled the API analysis builder will check if any public or protected fields have had the final keyword removed in any API types. | Error
The keyword 'final' has been added | When enabled the API analysis builder will check if the final keyword has been added to any public or protected fields in any API types. | Error
The keyword 'static' has been removed | When enabled the API analysis builder will check if the static keyword has been removed from any public or protected fields in any API types. | Error
The keyword 'static' has been added | When enabled the API analysis builder will check if the static keyword has been added to any public or protected fields in any API types. | Error
The constant value has been removed | When enabled the API analysis builder will check if the value of a constant field has been removed for any public or protected field constants in any API types. | Error
The type arguments have bee removed | When enabled the API analysis builder will check if all of the type arguments have been removed from any public or protected fields in any API types. | Error

### Method

Option | Description | Default
--- | --- | ---
A class bound has been added | When enabled the API analysis builder will check if a class bound has been added to a public or protected method from any API types. | Error
An interface bound has been added | When enabled the API analysis builder will check if an interface bound has been added to any public or protected methods for any API types. | Error
The interface bounds have been added | When enabled the API analysis builder will check if interface bounds have been added to any public or protected methods for any API types. | Error
A type parameter has been added | When enabled the API analysis builder will check if a type parameter has been added to any public or protected methods for any API types. | Error
A class bound has been modified | When enabled the API analysis builder will check if a class bound has been changed for any public or protected method for any API types. | Error
An interface bound has been modified | When enabled the API analysis builder will check if an interface bound has been modified for any public or protected methods for any API types. | Error
A type parameter has been modified | When enabled the API analysis builder will check if a type parameter has been modified for any public or protected methods for any API types. | Error
Converted variable argument to array type | When enabled the API analysis builder will check if a varargs argument has been expanded to an object array for any public or protected methods for any API types. | Error
The visibility has been reduced | When enabled the API analysis builder will check if any public or protected methods have been made private for any API types. | Error
The keyword 'abstract' has been added | When enabled the API analysis builder will check if any public or protected methods have been made abstract in any API types. | Error
The keyword 'static' has been added | When enabled the API analysis builder will check if any public or protected methods have been made static in any API types. | Error
The keyword 'static' has been removed | When enabled the API analysis builder will check if any public or protected methods have been made non-static in any API types. | Error
The keyword 'final' has been added (type tagged '@noextend') | When enabled the API analysis builder will check if any public or protected methods have been made final in any API types that have been tagged @noextend. | Error
The type parameters have been removed | When enabled the API analysis builder will check if all of the type parameters have been removed from any public or protected methods for any API types. | Error
A type parameter has been removed | When enabled the API analysis builder will check if a type parameter has been removed from any public or protected methods for any API types. | Error
A class bound has been removed | When enabled the API analysis builder will check if a class bound has been removed from any public or protected methods for any API types. | Error
An interface bound has been removed | When enabled the API analysis builder will check if an interface bound has been removed from any public or protected methods for any API types. | Error
The interface bounds have been removed | When enabled the API analysis builder will check if all of the interface bounds have been removed from any public or protected methods for any API types. | Error

### Constructor

Option | Description | Default
--- | --- | ---
A class bound has been added | When enabled the API analysis builder will check if a class bound has been added to any public constructors of any API types. | Error
An interface bound has been added | When enabled the API analysis builder will check if an interface bound has been added to any public constructors of any API types. | Error
The interface bounds have been added | When enabled the API analysis builder will check if interfaces bounds have been added to any public constructors for any API types. | Error
A type parameter has been added | When enabled the API analysis builder will check if a type parameter has been added to any public constructors for any API types. | Error
A class bound has been modified | When enabled the API analysis builder will check if a class bound has been changed on any public constructors for any API types. | Error
An interface bound has been modified | When enabled the API analysis builder will check if an interface bounds has been changed on any public constructors for any API types. | Error
A type parameter has been modified | When enabled the API analysis builder will check if a type parameter has changed for any public constructors for any API types | Error
Converted variable argument to array type | When enabled the API analysis builder will check if any varargs parameters have been expanded to object arrays for any public constructors for any API types. | Error
The visibility has been reduced | When enabled the API analysis builder will check if any public constructors have been made non-public in any API types. | Error
The type parameters have been removed | When enabled the API analysis builder will check if all of the type parameters have been removed from any public constructors for any API types. | Error
A type parameter has been removed | When enabled the API analysis builder will check if a type parameter has been removed from any public constructors for any API types. | Error
A class bound has been removed | When enabled the API analysis builder will check if a class bound has been removed from any public constructors for any API types. | Error
An interface bound has been removed | When enabled the API analysis builder will check if an interface bound has been removed from any public constructors for any API types. | Error
The interface bounds have been removed | When enabled the API analysis builder will check if all of the interface bounds have been removed for any public constructors for any API type. | Error

## Version Management

Option | Description | Default
--- | --- | ---
Report missing '@since' tags | When enabled the API analysis builder will check if @since tags are missing for types or members added since the version of the API baseline in use. | Error
Report malformed '@since' tags | When enabled the API analysis builder will check if any @since tags currently in use are malformed (incorrect syntax). | Error
Report invalid '@since' tag version | When enabled the API analysis builder will check if any @since tags currently in use have the wrong version. | Error
Report incompatible bundle version | When enabled the API analysis builder will check if the bundle version for the plug-in is incorrect, based on any API changes and the current API baseline in use. | Error
Ignore minor version increment without API changes | If reporting for incompatible version numbers is enabled, this option can be used to tell the API analysis builder to ignore minor version changes if there has not been an API change compared to the current API baseline. | On
Ignore major version increment without API changes | If reporting for incompatible version numbers is enabled, this option can be used to tell the API analysis builder to ignore major version changes if there has not been an API change compared to the current API baseline. | On

API Errors and Warnings Property Page
API Baselines Preferences