boolean (CompileContext context, ModuleChunk chunk, int chunkLanguageLevel, JavaCompilingTool compilingTool) { if (!isJavac(compilingTool)) { return false; // applicable to javac only } final int compilerSdkVersion = JavaVersion.current().feature; if (preferTargetJdkCompiler(context)) { final Pair<JpsSdk<JpsDummyElement>, Integer> sdkVersionPair = getAssociatedSdk(chunk); if (sdkVersionPair != null) { final Integer chunkSdkVersion = sdkVersionPair.second; if (chunkSdkVersion != compilerSdkVersion && chunkSdkVersion >= ExternalJavacProcess.MINIMUM_REQUIRED_JAVA_VERSION) { // there is a special case because of difference in type inference behavior between javac8 and javac6-javac7 // so if corresponding JDK is associated with the module chunk, prefer compiler from this JDK over the newer compiler version return true; } } } if (chunkLanguageLevel <= 0) { // was not able to determine jdk version, so assuming in-process compiler return false; } return !isTargetReleaseSupported(compilerSdkVersion, chunkLanguageLevel); }