private static boolean isJdkSupportsLevel(@Nullable final Sdk jdk, @NotNull LanguageLevel level) { if (jdk == null) return true; String versionString = jdk.getVersionString(); JavaSdkVersion version = versionString == null ? null : JdkVersionUtil.getVersion(versionString); return version != null && version.getMaxLanguageLevel().isAtLeast(level); }
@Override public Value evaluate(final EvaluationContext evaluationContext) throws EvaluateException { DebugProcess process = evaluationContext.getDebugProcess(); ClassLoaderReference classLoader; try { classLoader = getClassLoader(evaluationContext, process); } catch (Exception e) { throw new EvaluateException("Error creating evaluation class loader: " + e, e); } String version = ((VirtualMachineProxyImpl) process.getVirtualMachineProxy()).version(); JavaSdkVersion sdkVersion = JdkVersionUtil.getVersion(version); Collection<OutputFileObject> classes = compile(sdkVersion != null ? sdkVersion.getDescription() : null); try { defineClasses(classes, evaluationContext, process, classLoader); } catch (Exception e) { throw new EvaluateException("Error during classes definition " + e, e); } try { // invoke base evaluator on call code final Project project = ApplicationManager.getApplication() .runReadAction( new Computable<Project>() { @Override public Project compute() { return myPsiContext.getProject(); } }); ExpressionEvaluator evaluator = DebuggerInvocationUtil.commitAndRunReadAction( project, new EvaluatingComputable<ExpressionEvaluator>() { @Override public ExpressionEvaluator compute() throws EvaluateException { final TextWithImports callCode = getCallCode(); PsiElement copyContext = myData.getAnchor(); final CodeFragmentFactory factory = DebuggerUtilsEx.findAppropriateCodeFragmentFactory(callCode, copyContext); return factory .getEvaluatorBuilder() .build( factory.createCodeFragment(callCode, copyContext, project), ContextUtil.getSourcePosition(evaluationContext)); } }); ((EvaluationContextImpl) evaluationContext).setClassLoader(classLoader); return evaluator.evaluate(evaluationContext); } catch (Exception e) { throw new EvaluateException("Error during generated code invocation " + e, e); } }
@Override @Nullable public JavaSdkVersion getVersion(@NotNull String versionString) { return JdkVersionUtil.getVersion(versionString); }
@Override public JavaSdkVersion getVersion(@NotNull Sdk sdk) { String version = sdk.getVersionString(); if (version == null) return null; return JdkVersionUtil.getVersion(version); }