Bug 548218 - Should the warning "There are no JREs installed in the
workspace that are strictly compatible with this environment" respect
the --release option?

Change-Id: I1344b0da9d007c8f1ec4093510b89d4914f0fff4
diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/EECompilationParticipant.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/EECompilationParticipant.java
index 0cbd2fa..286c12a 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/EECompilationParticipant.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/internal/launching/EECompilationParticipant.java
@@ -116,25 +116,45 @@
 	}
 
 	/**
+	 * Validates if --release flag is enabled for the project.
+	 *
+	 * @param eeId
+	 *            execution environment ID
+	 * @param compId
+	 *            project compliance
+	 * @param project
+	 *            associated project
+	 * @return <code>true</code> if --release flag if enabled else <code>false</code>
+	 */
+
+	private boolean isReleaseFlagEnabled(String eeId, String compId, final IJavaProject project) {
+		boolean releaseFlagEnabled = false;
+		if (JavaCore.compareJavaVersions(JavaCore.VERSION_9, eeId) <= 0) {
+			if (JavaCore.compareJavaVersions(JavaCore.VERSION_1_6, compId) <= 0) {
+				String releaseVal = project.getOption(JavaCore.COMPILER_RELEASE, true);
+				if (JavaCore.ENABLED.equals(releaseVal)) {
+					releaseFlagEnabled = true;
+				}
+			}
+		}
+		return releaseFlagEnabled;
+	}
+
+	/**
 	 * Validates the compliance, creating a problem marker for the project as required.
 	 *
-	 * @param id execution environment ID
-	 * @param project associated project
-	 * @param vm VM binding resolved for the project
+	 * @param eeId
+	 *            execution environment ID
+	 * @param project
+	 *            associated project
+	 * @param vm
+	 *            VM binding resolved for the project
 	 */
 	private void validateCompliance(String eeId, final IJavaProject project, IVMInstall vm) {
 		String id = project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
 		if (!eeId.equals(id)) {
-			boolean validateCompliance = true;
-			if (JavaCore.compareJavaVersions(JavaCore.VERSION_9, eeId) <= 0) {
-				if (JavaCore.compareJavaVersions(JavaCore.VERSION_1_6, id) <= 0) {
-					String releaseVal = project.getOption(JavaCore.COMPILER_RELEASE, true);
-					if (JavaCore.ENABLED.equals(releaseVal)) {
-						validateCompliance = false;
-					}
-				}
-			}
-			if (validateCompliance) {
+			// validate compliance only if release flag is not enabled
+			if (!isReleaseFlagEnabled(eeId, id, project)) {
 				IExecutionEnvironmentsManager manager = JavaRuntime.getExecutionEnvironmentsManager();
 				IExecutionEnvironment[] environments = manager.getExecutionEnvironments();
 				IExecutionEnvironment finalEnvironment = null;
@@ -185,6 +205,13 @@
 				}
 				String message = null;
 				if (exact == 0) {
+					if (vm instanceof IVMInstall2) {
+						String eeId = getCompilerCompliance((IVMInstall2) vm);
+						String compId = project.getOption(JavaCore.COMPILER_COMPLIANCE, true);
+						if (eeId != null && isReleaseFlagEnabled(eeId, compId, project)) {
+							return;
+						}
+					}
 					message = NLS.bind(
 						LaunchingMessages.LaunchingPlugin_35,
 						new String[]{environment.getId()});