# Plug-in Compiler Preferences

Syntactic errors in plugin.xml, fragment.xml and MANIFEST.MF are all flagged as errors by the plug-in manifest compiler. As for semantic problems in the plug-in manifests, the severity for each problem category can be set to Error, Warning or Ignore.

- General Settings
- Build Settings
- Versioning Settings
- Usage Settings
- References Settings

## Workspace vs. Project Settings

The plug-in compiler preferences are set at a workspace level on the Window > Preferences... > Plug-in Development > Compilers preference page and take effect on all plug-in projects in the workspace.

It is also possible to override the workspace-scope settings by having compiler settings at the plug-in project level. To do so, select Properties from the context menu of a plug-in project. In the Properties dialog, project-level manifest compiler settings can be customized on the Plug-in Development > Plug-in Manifest Compiler preference page.

## General Settings

Option | Description | Default
--- | --- | ---
Required attributes not defined | A required attribute in a plug-in file is missing | Error
Incompatible environment | The plug-in's environment settings do not match the target platform's environment settings | Warning
Missing exported packages | One or more packages in a java source folder are not included in the Export-Package manifest entry | Ignore
No automatic module name | Automatic-Module-Name header (required for Java 9 compatibility) is not present in MANIFEST.MF. For details, see this link. | Warning

## Build Settings

Option | Description | Default
--- | --- | ---
Problems with 'source.<library>' entry | Semantic problem with source entry | Warning
Problems with 'output.<library>' entry | Semantic problem with output entry | Warning
Missing 'output.<library>' entry | A source entry exists without matching output | Ignore
Problems with 'bin.includes' entry | Semantic problem with binary includes entry | Warning
Problems with 'src.includes' entry | Semantic problem with source includes entry | Warning
Missing or incompatible Java compliance properties | Project has Java compliance settings without matching entry in build.properties | Warning
Missing project specific Java compiler settings | Project has Java complier settings without matching entry in build.properties | Ignore
Missing or incorrect file encodings | Project has file encoding settings without matching entry in build.properties | Ignore
Other problems with build.properties files | Other problems not part of another setting | Warning

## Versioning Settings

Option | Description | Default
--- | --- | ---
Missing versions on required bundles | A required bundle manifest entry does not have version restrictions | Ignore
Missing versions on exported packages | An exported package manifest entry does not have a version specified | Ignore
Missing versions on imported packages | An imported package manifest entry does not have version restrictions | Ignore

## Usage Settings

Option | Description | Default
--- | --- | ---
Unresolved dependencies | A plug-in dependency (required bundle or imported package) can not be found | Error
Unresolved extension points | The provider for an extension point cannot be found | Error
Usage of internal extension points | Providing an extension to an extension point that is marked as internal | Warning
Usage of deprecated atributes and elements | Providing an extension that uses attributes or elements from an extension point that are marked as deprecated | Warning
Usage of non-externalized strings | A plug-in is using a string that could be translated in plugin.properties | Ignore
Usage of service component without lazy activation policy | Bundle manifest has a Service-Component without a Bundle-ActivationPolicy: lazy entry | Warning

## References Settings

Option | Description | Default
--- | --- | ---
Illegal elements | Referencing an illegal element in an extension | Warning
Illegal atributes | Referencing an illegal attribute in an extension | Warning
References to non-existent classes | Referencing a class from an extension that does not exist in the project | Warning
References to discourage classes | Referencing a class from an extension that has discouraged access warnings | Warning
References to non-existent resources | References a resource from an extension that does not exist in the project | Warning
References to non-existent identifier attributes | Referencing an identifier attribute that is not defined by a known extension | Warning

## Non-obvious Problems

The following is a brief explanation for some of the non-obvious potential problems that are flagged by PDE:

- Non-negotiable Markers:
  Some problems such as a missing plug-in ID, plug-in version, or plug-in name render a plug-in invalid. Therefore, these problems are flagged with a non-negotiable error marker and are not available for configuration on this preference page.
- Unresolved Dependencies:
  An unresolved dependency is a dependency on a plug-in (in the Require-Bundle MANIFEST.MF header) or on a package (in the Import-Package MANIFEST.MF header) where the plug-in or package in question does not exist.
- Incompatible Environment:
  A plug-in or fragment has an incompatible environment if it has an Eclipse-PlatformFilter MANIFEST.MF header whose value is not compatible with the current Target Environment settings as they appear on the Plug-in Development > Target Platform > Environment preference page.
- Unresolved Extension Points:
  An unresolved extension point is an extension point that does not exist or whose contributing plug-in is unchecked on the Plug-in Development > Target Platform preference page. Extensions contributing to such an extension point are flagged.

PDE Compiler Preferences
PDE Preferences