diff --git a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/engine/DebugProcessImpl.java b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/engine/DebugProcessImpl.java index 70b14cf5f4..f54469a2f6 100644 --- a/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/engine/DebugProcessImpl.java +++ b/java-debugger-impl/src/main/java/com/intellij/java/debugger/impl/engine/DebugProcessImpl.java @@ -26,7 +26,6 @@ import com.intellij.java.debugger.engine.jdi.ThreadReferenceProxy; import com.intellij.java.debugger.impl.*; import com.intellij.java.debugger.impl.actions.DebuggerAction; -import com.intellij.java.debugger.impl.actions.DebuggerActions; import com.intellij.java.debugger.impl.engine.evaluation.EvaluationContextImpl; import com.intellij.java.debugger.impl.engine.evaluation.EvaluationListener; import com.intellij.java.debugger.impl.engine.events.DebuggerCommandImpl; @@ -85,7 +84,7 @@ import consulo.process.event.ProcessEvent; import consulo.process.event.ProcessListener; import consulo.project.Project; -import consulo.project.ui.notification.NotificationType; +import consulo.project.ui.notification.NotificationService; import consulo.project.ui.wm.ToolWindowId; import consulo.proxy.EventDispatcher; import consulo.ui.UIAccess; @@ -99,8 +98,8 @@ import consulo.util.dataholder.UserDataHolderBase; import consulo.util.lang.Pair; import consulo.util.lang.StringUtil; -import org.jspecify.annotations.Nullable; import org.intellij.lang.annotations.MagicConstant; +import org.jspecify.annotations.Nullable; import java.io.IOException; import java.net.UnknownHostException; @@ -493,16 +492,16 @@ private VirtualMachine createVirtualMachineInt() throws ExecutionException { (ListeningConnector)findConnector(myConnection.isUseSockets() ? SOCKET_LISTENING_CONNECTOR_NAME : SHMEM_LISTENING_CONNECTOR_NAME); if (connector == null) { throw new CantRunException( - JavaDebuggerLocalize.errorDebugConnectorNotFound(DebuggerUtils.getTransportName(myConnection)).get() + JavaDebuggerLocalize.errorDebugConnectorNotFound(DebuggerUtils.getTransportName(myConnection)) ); } myArguments = connector.defaultArguments(); if (myArguments == null) { - throw new CantRunException(JavaDebuggerLocalize.errorNoDebugListenPort().get()); + throw new CantRunException(JavaDebuggerLocalize.errorNoDebugListenPort()); } if (address == null) { - throw new CantRunException(JavaDebuggerLocalize.errorNoDebugListenPort().get()); + throw new CantRunException(JavaDebuggerLocalize.errorNoDebugListenPort()); } // zero port number means the caller leaves to debugger to decide at which port to listen //noinspection HardCodedStringLiteral @@ -543,7 +542,7 @@ private VirtualMachine createVirtualMachineInt() throws ExecutionException { if (connector == null) { throw new CantRunException( - JavaDebuggerLocalize.errorDebugConnectorNotFound(DebuggerUtils.getTransportName(myConnection)).get() + JavaDebuggerLocalize.errorDebugConnectorNotFound(DebuggerUtils.getTransportName(myConnection)) ); } myArguments = connector.defaultArguments(); @@ -554,7 +553,7 @@ private VirtualMachine createVirtualMachineInt() throws ExecutionException { hostnameArg.setValue(myConnection.getHostName()); } if (address == null) { - throw new CantRunException(JavaDebuggerLocalize.errorNoDebugAttachPort().get()); + throw new CantRunException(JavaDebuggerLocalize.errorNoDebugAttachPort()); } //noinspection HardCodedStringLiteral Connector.Argument portArg = myArguments.get("port"); @@ -564,7 +563,7 @@ private VirtualMachine createVirtualMachineInt() throws ExecutionException { } else { if (address == null) { - throw new CantRunException(JavaDebuggerLocalize.errorNoShmemAddress().get()); + throw new CantRunException(JavaDebuggerLocalize.errorNoShmemAddress()); } //noinspection HardCodedStringLiteral Connector.Argument nameArg = myArguments.get("name"); @@ -583,7 +582,7 @@ private VirtualMachine createVirtualMachineInt() throws ExecutionException { return connector.attach(myArguments); } catch (IllegalArgumentException e) { - throw new CantRunException(e.getLocalizedMessage()); + throw new CantRunException(LocalizeValue.of(e.getLocalizedMessage())); } } } @@ -639,20 +638,20 @@ private void checkVirtualMachineVersion(VirtualMachine vm) { } if (getSession().getAlternativeJre() == null) { - Sdk runjre = getSession().getRunJre(); - if ((runjre == null || runjre.getSdkType() instanceof JavaSdkType) && !versionMatch(runjre, version)) { + Sdk runJre = getSession().getRunJre(); + if ((runJre == null || runJre.getSdkType() instanceof JavaSdkType) && !versionMatch(runJre, version)) { JavaSdkTypeUtil.getAllJavaSdks().stream() .filter(sdk -> versionMatch(sdk, version)) .findFirst() .ifPresent(sdk -> { - XDebuggerUIConstants.NOTIFICATION_GROUP.createNotification( - JavaDebuggerLocalize.messageRemoteJreVersionMismatch( + NotificationService.getInstance() + .newInfo(XDebuggerUIConstants.NOTIFICATION_GROUP) + .content(JavaDebuggerLocalize.messageRemoteJreVersionMismatch( version, - runjre != null ? runjre.getVersionString() : "unknown", + runJre != null ? runJre.getVersionString() : "unknown", sdk.getName() - ).get(), - NotificationType.INFORMATION - ).notify(myProject); + )) + .notify(myProject); getSession().setAlternativeJre(sdk); }); } @@ -1744,7 +1743,7 @@ protected void applyThreadFilter(ThreadReferenceProxy thread) { // there could be explicit resume as a result of call to voteSuspend() // e.g. when breakpoint was considered invalid, in that case the filter will be applied _after_ // resuming and all breakpoints in other threads will be ignored. - // As resume() implicitly cleares the filter, the filter must be always applied _before_ any resume() action happens + // As resume() implicitly clears the filter, the filter must be always applied _before_ any resume() action happens BreakpointManager breakpointManager = DebuggerManagerEx.getInstanceEx(getProject()).getBreakpointManager(); breakpointManager.applyThreadFilter(DebugProcessImpl.this, thread.getThreadReference()); } @@ -2037,8 +2036,7 @@ protected void action() { processHandler != null && (processHandler.isProcessTerminating() || processHandler.isProcessTerminated()); fail(); - DebuggerInvocationUtil.swingInvokeLater(myProject, () -> - { + DebuggerInvocationUtil.swingInvokeLater(myProject, () -> { // propagate exception only in case we succeeded to obtain execution result, // otherwise if the error is induced by the fact that there is nothing to debug, and there is no need to show // this problem to the user diff --git a/java-execution-api/src/main/java/consulo/java/execution/configurations/OwnJavaParameters.java b/java-execution-api/src/main/java/consulo/java/execution/configurations/OwnJavaParameters.java index fe68506071..bb83171595 100644 --- a/java-execution-api/src/main/java/consulo/java/execution/configurations/OwnJavaParameters.java +++ b/java-execution-api/src/main/java/consulo/java/execution/configurations/OwnJavaParameters.java @@ -46,169 +46,170 @@ import java.util.Set; public class OwnJavaParameters extends OwnSimpleJavaParameters { - private static final Logger LOG = Logger.getInstance(OwnJavaParameters.class); - private static final String JAVA_LIBRARY_PATH_PROPERTY = "java.library.path"; - public static final Key JAVA_PARAMETERS = Key.create("javaParameters"); - - public String getJdkPath() throws CantRunException { - Sdk jdk = getJdk(); - if (jdk == null) { - throw new CantRunException(ExecutionLocalize.noJdkSpecifiedErrorMessage().get()); + private static final Logger LOG = Logger.getInstance(OwnJavaParameters.class); + private static final String JAVA_LIBRARY_PATH_PROPERTY = "java.library.path"; + public static final Key JAVA_PARAMETERS = Key.create("javaParameters"); + + public String getJdkPath() throws CantRunException { + Sdk jdk = getJdk(); + if (jdk == null) { + throw new CantRunException(ExecutionLocalize.noJdkSpecifiedErrorMessage()); + } + + VirtualFile jdkHome = jdk.getHomeDirectory(); + if (jdkHome == null) { + throw new CantRunException(ExecutionLocalize.homeDirectoryNotSpecifiedForJdkErrorMessage()); + } + return jdkHome.getPresentableUrl(); + } + + public static final int JDK_ONLY = 0x1; + public static final int CLASSES_ONLY = 0x2; + public static final int TESTS_ONLY = 0x4; + public static final int INCLUDE_PROVIDED = 0x8; + public static final int JDK_AND_CLASSES = JDK_ONLY | CLASSES_ONLY; + public static final int JDK_AND_CLASSES_AND_TESTS = JDK_ONLY | CLASSES_ONLY | TESTS_ONLY; + public static final int CLASSES_AND_TESTS = CLASSES_ONLY | TESTS_ONLY; + public static final int JDK_AND_CLASSES_AND_PROVIDED = JDK_ONLY | CLASSES_ONLY | INCLUDE_PROVIDED; + + public void configureByModule( + Module module, + @MagicConstant(valuesFromClass = OwnJavaParameters.class) int classPathType, + @Nullable Sdk jdk + ) throws CantRunException { + if ((classPathType & JDK_ONLY) != 0) { + if (jdk == null) { + throw CantRunException.noJdkConfigured(); + } + setJdk(jdk); + } + + if ((classPathType & CLASSES_ONLY) == 0) { + return; + } + + setDefaultCharset(module.getProject()); + configureEnumerator(OrderEnumerator.orderEntries(module).recursively(), classPathType, jdk).collectPaths(getClassPath()); + configureJavaLibraryPath(OrderEnumerator.orderEntries(module).recursively()); + } + + private void configureJavaLibraryPath(OrderEnumerator enumerator) { + PathsList pathsList = new PathsList(); + enumerator.runtimeOnly().withoutSdk().roots(NativeLibraryOrderRootType.ID).collectPaths(pathsList); + if (!pathsList.getPathList().isEmpty()) { + ParametersList vmParameters = getVMParametersList(); + if (vmParameters.hasProperty(JAVA_LIBRARY_PATH_PROPERTY)) { + LOG.info( + JAVA_LIBRARY_PATH_PROPERTY + " property is already specified, " + + "native library paths from dependencies (" + pathsList.getPathsString() + ") won't be added" + ); + } + else { + vmParameters.addProperty(JAVA_LIBRARY_PATH_PROPERTY, pathsList.getPathsString()); + } + } + } + + public void setDefaultCharset(Project project) { + Charset encoding = EncodingProjectManager.getInstance(project).getDefaultCharset(); + setCharset(encoding); + } + + public void configureByModule(Module module, @MagicConstant(valuesFromClass = OwnJavaParameters.class) int classPathType) + throws CantRunException { + configureByModule(module, classPathType, getValidJdkToRunModule(module, (classPathType & TESTS_ONLY) == 0)); + } + + /** + * @deprecated use {@link #getValidJdkToRunModule(Module, boolean)} instead + */ + public static Sdk getModuleJdk(Module module) throws CantRunException { + return getValidJdkToRunModule(module, false); + } + + public static Sdk getValidJdkToRunModule(Module module, boolean productionOnly) throws CantRunException { + Sdk jdk = getJdkToRunModule(module, productionOnly); + if (jdk == null) { + throw CantRunException.noJdkForModule(module); + } + VirtualFile homeDirectory = jdk.getHomeDirectory(); + if (homeDirectory == null || !homeDirectory.isValid()) { + throw CantRunException.jdkMisconfigured(jdk, module); + } + return jdk; + } + + @Nullable + public static Sdk getJdkToRunModule(Module module, boolean productionOnly) { + Sdk moduleSdk = ModuleUtilCore.getSdk(module, JavaModuleExtension.class); + if (moduleSdk == null) { + return null; + } + + Set sdksFromDependencies = new LinkedHashSet<>(); + OrderEnumerator enumerator = OrderEnumerator.orderEntries(module).runtimeOnly().recursively(); + if (productionOnly) { + enumerator = enumerator.productionOnly(); + } + enumerator.forEachModule(module1 -> { + Sdk sdk = ModuleUtilCore.getSdk(module1, JavaModuleExtension.class); + if (sdk != null && sdk.getSdkType().equals(moduleSdk.getSdkType())) { + sdksFromDependencies.add(sdk); + } + return true; + }); + return findLatestVersion(moduleSdk, sdksFromDependencies); + } + + private static Sdk findLatestVersion(Sdk mainSdk, Set sdks) { + Sdk result = mainSdk; + for (Sdk sdk : sdks) { + if (VersionComparatorUtil.compare(result.getVersionString(), sdk.getVersionString()) < 0) { + result = sdk; + } + } + return result; + } + + public void configureByProject(Project project, @MagicConstant(valuesFromClass = OwnJavaParameters.class) int classPathType, Sdk jdk) + throws CantRunException { + if ((classPathType & JDK_ONLY) != 0) { + if (jdk == null) { + throw CantRunException.noJdkConfigured(); + } + setJdk(jdk); + } + + if ((classPathType & CLASSES_ONLY) == 0) { + return; + } + setDefaultCharset(project); + configureEnumerator(OrderEnumerator.orderEntries(project).runtimeOnly(), classPathType, jdk).collectPaths(getClassPath()); + configureJavaLibraryPath(OrderEnumerator.orderEntries(project)); + } + + private static OrderRootsEnumerator configureEnumerator(OrderEnumerator enumerator, int classPathType, Sdk jdk) { + if ((classPathType & INCLUDE_PROVIDED) == 0) { + enumerator = enumerator.runtimeOnly(); + } + if ((classPathType & JDK_ONLY) == 0) { + enumerator = enumerator.withoutSdk(); + } + if ((classPathType & TESTS_ONLY) == 0) { + enumerator = enumerator.productionOnly(); + } + OrderRootsEnumerator rootsEnumerator = enumerator.classes(); + if ((classPathType & JDK_ONLY) != 0) { + rootsEnumerator = rootsEnumerator.usingCustomRootProvider( + e -> e instanceof ModuleExtensionWithSdkOrderEntry ? jdkRoots(jdk) : e.getFiles(BinariesOrderRootType.ID) + ); + } + return rootsEnumerator; + } + + private static VirtualFile[] jdkRoots(Sdk jdk) { + return Arrays.stream(jdk.getRootProvider().getFiles(BinariesOrderRootType.ID)) + .filter(f -> !JModFileType.isModuleRoot(f) && !JrtFileSystem.isModuleRoot(f)) + .toArray(VirtualFile[]::new); } - - VirtualFile jdkHome = jdk.getHomeDirectory(); - if (jdkHome == null) { - throw new CantRunException(ExecutionLocalize.homeDirectoryNotSpecifiedForJdkErrorMessage().get()); - } - return jdkHome.getPresentableUrl(); - } - - public static final int JDK_ONLY = 0x1; - public static final int CLASSES_ONLY = 0x2; - public static final int TESTS_ONLY = 0x4; - public static final int INCLUDE_PROVIDED = 0x8; - public static final int JDK_AND_CLASSES = JDK_ONLY | CLASSES_ONLY; - public static final int JDK_AND_CLASSES_AND_TESTS = JDK_ONLY | CLASSES_ONLY | TESTS_ONLY; - public static final int CLASSES_AND_TESTS = CLASSES_ONLY | TESTS_ONLY; - public static final int JDK_AND_CLASSES_AND_PROVIDED = JDK_ONLY | CLASSES_ONLY | INCLUDE_PROVIDED; - - public void configureByModule( - Module module, - @MagicConstant(valuesFromClass = OwnJavaParameters.class) int classPathType, - @Nullable Sdk jdk - ) throws CantRunException { - if ((classPathType & JDK_ONLY) != 0) { - if (jdk == null) { - throw CantRunException.noJdkConfigured(); - } - setJdk(jdk); - } - - if ((classPathType & CLASSES_ONLY) == 0) { - return; - } - - setDefaultCharset(module.getProject()); - configureEnumerator(OrderEnumerator.orderEntries(module).recursively(), classPathType, jdk).collectPaths(getClassPath()); - configureJavaLibraryPath(OrderEnumerator.orderEntries(module).recursively()); - } - - private void configureJavaLibraryPath(OrderEnumerator enumerator) { - PathsList pathsList = new PathsList(); - enumerator.runtimeOnly().withoutSdk().roots(NativeLibraryOrderRootType.ID).collectPaths(pathsList); - if (!pathsList.getPathList().isEmpty()) { - ParametersList vmParameters = getVMParametersList(); - if (vmParameters.hasProperty(JAVA_LIBRARY_PATH_PROPERTY)) { - LOG.info( - JAVA_LIBRARY_PATH_PROPERTY + " property is already specified, " + - "native library paths from dependencies (" + pathsList.getPathsString() + ") won't be added" - ); - } else { - vmParameters.addProperty(JAVA_LIBRARY_PATH_PROPERTY, pathsList.getPathsString()); - } - } - } - - public void setDefaultCharset(Project project) { - Charset encoding = EncodingProjectManager.getInstance(project).getDefaultCharset(); - setCharset(encoding); - } - - public void configureByModule(Module module, @MagicConstant(valuesFromClass = OwnJavaParameters.class) int classPathType) - throws CantRunException { - configureByModule(module, classPathType, getValidJdkToRunModule(module, (classPathType & TESTS_ONLY) == 0)); - } - - /** - * @deprecated use {@link #getValidJdkToRunModule(Module, boolean)} instead - */ - public static Sdk getModuleJdk(Module module) throws CantRunException { - return getValidJdkToRunModule(module, false); - } - - public static Sdk getValidJdkToRunModule(Module module, boolean productionOnly) throws CantRunException { - Sdk jdk = getJdkToRunModule(module, productionOnly); - if (jdk == null) { - throw CantRunException.noJdkForModule(module); - } - VirtualFile homeDirectory = jdk.getHomeDirectory(); - if (homeDirectory == null || !homeDirectory.isValid()) { - throw CantRunException.jdkMisconfigured(jdk, module); - } - return jdk; - } - - @Nullable - public static Sdk getJdkToRunModule(Module module, boolean productionOnly) { - Sdk moduleSdk = ModuleUtilCore.getSdk(module, JavaModuleExtension.class); - if (moduleSdk == null) { - return null; - } - - Set sdksFromDependencies = new LinkedHashSet<>(); - OrderEnumerator enumerator = OrderEnumerator.orderEntries(module).runtimeOnly().recursively(); - if (productionOnly) { - enumerator = enumerator.productionOnly(); - } - enumerator.forEachModule(module1 -> { - Sdk sdk = ModuleUtilCore.getSdk(module1, JavaModuleExtension.class); - if (sdk != null && sdk.getSdkType().equals(moduleSdk.getSdkType())) { - sdksFromDependencies.add(sdk); - } - return true; - }); - return findLatestVersion(moduleSdk, sdksFromDependencies); - } - - private static Sdk findLatestVersion(Sdk mainSdk, Set sdks) { - Sdk result = mainSdk; - for (Sdk sdk : sdks) { - if (VersionComparatorUtil.compare(result.getVersionString(), sdk.getVersionString()) < 0) { - result = sdk; - } - } - return result; - } - - public void configureByProject(Project project, @MagicConstant(valuesFromClass = OwnJavaParameters.class) int classPathType, Sdk jdk) - throws CantRunException { - if ((classPathType & JDK_ONLY) != 0) { - if (jdk == null) { - throw CantRunException.noJdkConfigured(); - } - setJdk(jdk); - } - - if ((classPathType & CLASSES_ONLY) == 0) { - return; - } - setDefaultCharset(project); - configureEnumerator(OrderEnumerator.orderEntries(project).runtimeOnly(), classPathType, jdk).collectPaths(getClassPath()); - configureJavaLibraryPath(OrderEnumerator.orderEntries(project)); - } - - private static OrderRootsEnumerator configureEnumerator(OrderEnumerator enumerator, int classPathType, Sdk jdk) { - if ((classPathType & INCLUDE_PROVIDED) == 0) { - enumerator = enumerator.runtimeOnly(); - } - if ((classPathType & JDK_ONLY) == 0) { - enumerator = enumerator.withoutSdk(); - } - if ((classPathType & TESTS_ONLY) == 0) { - enumerator = enumerator.productionOnly(); - } - OrderRootsEnumerator rootsEnumerator = enumerator.classes(); - if ((classPathType & JDK_ONLY) != 0) { - rootsEnumerator = rootsEnumerator.usingCustomRootProvider( - e -> e instanceof ModuleExtensionWithSdkOrderEntry ? jdkRoots(jdk) : e.getFiles(BinariesOrderRootType.ID) - ); - } - return rootsEnumerator; - } - - private static VirtualFile[] jdkRoots(Sdk jdk) { - return Arrays.stream(jdk.getRootProvider().getFiles(BinariesOrderRootType.ID)) - .filter(f -> !JModFileType.isModuleRoot(f) && !JrtFileSystem.isModuleRoot(f)) - .toArray(VirtualFile[]::new); - } } diff --git a/java-execution-api/src/main/java/consulo/java/execution/projectRoots/OwnJdkUtil.java b/java-execution-api/src/main/java/consulo/java/execution/projectRoots/OwnJdkUtil.java index 41938281a0..0a974510b7 100644 --- a/java-execution-api/src/main/java/consulo/java/execution/projectRoots/OwnJdkUtil.java +++ b/java-execution-api/src/main/java/consulo/java/execution/projectRoots/OwnJdkUtil.java @@ -101,18 +101,18 @@ public static boolean isExplodedModularRuntime(String homePath) { public static GeneralCommandLine setupJVMCommandLine(OwnSimpleJavaParameters javaParameters) throws CantRunException { Sdk jdk = javaParameters.getJdk(); if (jdk == null) { - throw new CantRunException(ExecutionLocalize.runConfigurationErrorNoJdkSpecified().get()); + throw new CantRunException(ExecutionLocalize.runConfigurationErrorNoJdkSpecified()); } SdkTypeId type = jdk.getSdkType(); if (!(type instanceof JavaSdkType)) { - throw new CantRunException(ExecutionLocalize.runConfigurationErrorNoJdkSpecified().get()); + throw new CantRunException(ExecutionLocalize.runConfigurationErrorNoJdkSpecified()); } GeneralCommandLine commandLine = new GeneralCommandLine(); ((JavaSdkType)type).setupCommandLine(commandLine, jdk); String exePath = commandLine.getExePath(); if (exePath == null) { - throw new CantRunException(ExecutionLocalize.runConfigurationCannotFindVmExecutable().get()); + throw new CantRunException(ExecutionLocalize.runConfigurationCannotFindVmExecutable()); } setupCommandLine(commandLine, javaParameters); @@ -410,7 +410,7 @@ else if (jarPath != null) { return Arrays.asList("-jar", jarPath); } else { - throw new CantRunException(ExecutionLocalize.mainClassIsNotSpecifiedErrorMessage().get()); + throw new CantRunException(ExecutionLocalize.mainClassIsNotSpecifiedErrorMessage()); } } diff --git a/java-execution-impl/src/main/java/com/intellij/java/execution/impl/JavaTestFrameworkRunnableState.java b/java-execution-impl/src/main/java/com/intellij/java/execution/impl/JavaTestFrameworkRunnableState.java index 5c944c380b..e2a9a3fcb6 100644 --- a/java-execution-impl/src/main/java/com/intellij/java/execution/impl/JavaTestFrameworkRunnableState.java +++ b/java-execution-impl/src/main/java/com/intellij/java/execution/impl/JavaTestFrameworkRunnableState.java @@ -63,6 +63,7 @@ import consulo.language.psi.scope.GlobalSearchScope; import consulo.language.psi.scope.GlobalSearchScopesCore; import consulo.language.util.ModuleUtilCore; +import consulo.localize.LocalizeValue; import consulo.logging.Logger; import consulo.module.Module; import consulo.process.ExecutionException; @@ -86,8 +87,13 @@ import java.net.ServerSocket; import java.util.*; -public abstract class JavaTestFrameworkRunnableState & CommonJavaRunConfigurationParameters & ConfigurationWithCommandLineShortener & - SMRunnerConsolePropertiesProvider> extends JavaCommandLineState implements RemoteConnectionCreator { +public abstract class JavaTestFrameworkRunnableState + & CommonJavaRunConfigurationParameters + & ConfigurationWithCommandLineShortener + & SMRunnerConsolePropertiesProvider> + extends JavaCommandLineState + implements RemoteConnectionCreator { + private static final Logger LOG = Logger.getInstance(JavaTestFrameworkRunnableState.class); protected ServerSocket myServerSocket; protected File myTempFile; @@ -293,10 +299,10 @@ protected void appendForkInfo(Executor executor) throws ExecutionException { if (forkPerModule()) { if (isExecutorDisabledInForkedMode()) { String actionName = executor.getStartActionText().map(Presentation.NO_MNEMONIC).get(); - throw new CantRunException( + throw new CantRunException(LocalizeValue.localizeTODO( "'" + actionName + "' is disabled when per-module working directory is configured.
" + "Please specify single working directory, or change test scope to single module." - ); + )); } } else { @@ -305,9 +311,9 @@ protected void appendForkInfo(Executor executor) throws ExecutionException { } else if (isExecutorDisabledInForkedMode()) { String actionName = executor.getStartActionText().toLowerCase().map(Presentation.NO_MNEMONIC).get(); - throw new CantRunException( + throw new CantRunException(LocalizeValue.localizeTODO( actionName + " is disabled in fork mode.
Please change fork mode to <none> to " + actionName + "." - ); + )); } OwnJavaParameters javaParameters = getJavaParameters(); diff --git a/java-execution-impl/src/main/java/com/intellij/java/execution/impl/application/ApplicationConfiguration.java b/java-execution-impl/src/main/java/com/intellij/java/execution/impl/application/ApplicationConfiguration.java index 086501492a..6af44a0c79 100644 --- a/java-execution-impl/src/main/java/com/intellij/java/execution/impl/application/ApplicationConfiguration.java +++ b/java-execution-impl/src/main/java/com/intellij/java/execution/impl/application/ApplicationConfiguration.java @@ -21,6 +21,7 @@ import com.intellij.java.language.psi.PsiClass; import com.intellij.java.language.psi.PsiJavaModule; import com.intellij.java.language.psi.util.PsiMethodUtil; +import consulo.annotation.access.RequiredReadAction; import consulo.application.ReadAction; import consulo.execution.CantRunException; import consulo.execution.ProgramRunnerUtil; @@ -75,25 +76,25 @@ public class ApplicationConfiguration extends ModuleBasedConfiguration myEnvs = new LinkedHashMap<>(); public boolean PASS_PARENT_ENVS = true; - public ApplicationConfiguration(final String name, final Project project, ApplicationConfigurationType applicationConfigurationType) { + public ApplicationConfiguration(String name, Project project, ApplicationConfigurationType applicationConfigurationType) { this(name, project, applicationConfigurationType.getConfigurationFactories()[0]); } - protected ApplicationConfiguration(final String name, final Project project, final ConfigurationFactory factory) { + protected ApplicationConfiguration(String name, Project project, ConfigurationFactory factory) { super(name, new JavaRunConfigurationModule(project, true), factory); } @Override - public void setMainClass(final PsiClass psiClass) { - final Module originalModule = getConfigurationModule().getModule(); + public void setMainClass(PsiClass psiClass) { + Module originalModule = getConfigurationModule().getModule(); setMainClassName(psiClass.getQualifiedName()); setModule(JavaExecutionUtil.findModule(psiClass)); restoreOriginalModule(originalModule); } @Override - public RunProfileState getState(final Executor executor, final ExecutionEnvironment env) throws ExecutionException { - final JavaCommandLineState state = new JavaApplicationCommandLineState<>(this, env); + public RunProfileState getState(Executor executor, ExecutionEnvironment env) throws ExecutionException { + JavaCommandLineState state = new JavaApplicationCommandLineState<>(this, env); JavaRunConfigurationModule module = getConfigurationModule(); state.setConsoleBuilder(TextConsoleBuilderFactory.getInstance().createBuilder(getProject(), module.getSearchScope())); return state; @@ -102,16 +103,16 @@ public RunProfileState getState(final Executor executor, final ExecutionEnvironm @Override public SettingsEditor getConfigurationEditor() { SettingsEditorGroup group = new SettingsEditorGroup<>(); - group.addEditor(ExecutionLocalize.runConfigurationConfigurationTabTitle().get(), new ApplicationConfigurable(getProject())); + group.addEditor(ExecutionLocalize.runConfigurationConfigurationTabTitle(), new ApplicationConfigurable(getProject())); JavaRunConfigurationExtensionManager.getInstance().appendEditors(this, group); - group.addEditor(ExecutionLocalize.logsTabTitle().get(), new LogConfigurationPanel<>()); + group.addEditor(ExecutionLocalize.logsTabTitle(), new LogConfigurationPanel<>()); return group; } @Override - public RefactoringElementListener getRefactoringElementListener(final PsiElement element) { - final RefactoringElementListener listener = RefactoringListeners. - getClassOrPackageListener(element, new RefactoringListeners.SingleClassConfigurationAccessor(this)); + public RefactoringElementListener getRefactoringElementListener(PsiElement element) { + RefactoringElementListener listener = + RefactoringListeners.getClassOrPackageListener(element, new RefactoringListeners.SingleClassConfigurationAccessor(this)); return RunConfigurationExtension.wrapRefactoringElementListener(element, this, listener); } @@ -165,20 +166,20 @@ public String getActionName() { } @Override - public void setMainClassName(final String qualifiedName) { + public void setMainClassName(String qualifiedName) { MAIN_CLASS_NAME = qualifiedName; } @Override public void checkConfiguration() throws RuntimeConfigurationException { JavaParametersUtil.checkAlternativeJRE(this); - final JavaRunConfigurationModule configurationModule = getConfigurationModule(); - final PsiClass psiClass = configurationModule.checkModuleAndClassName( + JavaRunConfigurationModule configurationModule = getConfigurationModule(); + PsiClass psiClass = configurationModule.checkModuleAndClassName( MAIN_CLASS_NAME, ExecutionLocalize.noMainClassSpecifiedErrorText().get() ); if (!PsiMethodUtil.hasMainMethod(psiClass)) { - throw new RuntimeConfigurationWarning(ExecutionLocalize.mainMethodNotFoundInClassErrorMessage(MAIN_CLASS_NAME).get()); + throw new RuntimeConfigurationWarning(ExecutionLocalize.mainMethodNotFoundInClassErrorMessage(MAIN_CLASS_NAME)); } ProgramParametersUtil.checkWorkingDirectoryExist(this, getProject(), configurationModule.getModule()); JavaRunConfigurationExtensionManager.checkConfigurationIsValid(this); @@ -225,7 +226,7 @@ public Map getEnvs() { } @Override - public void setEnvs(final Map envs) { + public void setEnvs(Map envs) { myEnvs.clear(); myEnvs.putAll(envs); } @@ -281,12 +282,13 @@ public void setIncludeProvidedScope(boolean value) { } @Override + @RequiredReadAction public Collection getValidModules() { return JavaRunConfigurationModule.getModulesForClass(getProject(), MAIN_CLASS_NAME); } @Override - public void readExternal(final Element element) { + public void readExternal(Element element) { super.readExternal(element); JavaRunConfigurationExtensionManager.getInstance().readExternal(this, element); DefaultJDOMExternalizer.readExternal(this, element); @@ -320,24 +322,23 @@ public void setShortenCommandLine(ShortenCommandLine mode) { } public static class JavaApplicationCommandLineState extends BaseJavaApplicationCommandLineState { - public JavaApplicationCommandLineState(final T configuration, final ExecutionEnvironment environment) { + public JavaApplicationCommandLineState(T configuration, ExecutionEnvironment environment) { super(environment, configuration); } @Override protected OwnJavaParameters createJavaParameters() throws ExecutionException { - final OwnJavaParameters params = new OwnJavaParameters(); + OwnJavaParameters params = new OwnJavaParameters(); T configuration = getConfiguration(); - final String mainClass = ReadAction.compute(myConfiguration::getRunClass); + String mainClass = ReadAction.compute(myConfiguration::getRunClass); - final JavaRunConfigurationModule module = myConfiguration.getConfigurationModule(); - final String alternativeJreHome = myConfiguration.ALTERNATIVE_JRE_PATH_ENABLED ? myConfiguration.ALTERNATIVE_JRE_PATH : null; + JavaRunConfigurationModule module = myConfiguration.getConfigurationModule(); + String alternativeJreHome = myConfiguration.ALTERNATIVE_JRE_PATH_ENABLED ? myConfiguration.ALTERNATIVE_JRE_PATH : null; if (module.getModule() != null) { - DumbService.getInstance(module.getProject()).runWithAlternativeResolveEnabled(() -> - { + DumbService.getInstance(module.getProject()).runWithAlternativeResolveEnabled(() -> { if (mainClass == null) { - throw new CantRunException(ExecutionLocalize.noMainClassSpecifiedErrorText().get()); + throw new CantRunException(ExecutionLocalize.noMainClassSpecifiedErrorText()); } int classPathType = JavaParametersUtil.getClasspathType(module, mainClass, false, myConfiguration.isProvidedScopeIncluded()); JavaParametersUtil.configureModule(module, params, classPathType, alternativeJreHome); @@ -379,8 +380,9 @@ protected void buildProcessHandler(ProcessHandlerBuilder builder) throws Executi private static void setupModulePath(OwnJavaParameters params, JavaRunConfigurationModule module) { if (JavaSdkUtil.isJdkAtLeast(params.getJdk(), JavaSdkVersion.JDK_1_9)) { - PsiJavaModule mainModule = DumbService.getInstance(module.getProject()).computeWithAlternativeResolveEnabled(() -> JavaModuleGraphUtil.findDescriptorByElement(module.findClass(params - .getMainClass()))); + PsiJavaModule mainModule = DumbService.getInstance(module.getProject()).computeWithAlternativeResolveEnabled( + () -> JavaModuleGraphUtil.findDescriptorByElement(module.findClass(params.getMainClass())) + ); if (mainModule != null) { params.setModuleName(mainModule.getName()); PathsList classPath = params.getClassPath(), modulePath = params.getModulePath(); diff --git a/java-execution-impl/src/main/java/com/intellij/java/execution/impl/junit/JUnitUtil.java b/java-execution-impl/src/main/java/com/intellij/java/execution/impl/junit/JUnitUtil.java index defd4ea59d..3d46654c3e 100644 --- a/java-execution-impl/src/main/java/com/intellij/java/execution/impl/junit/JUnitUtil.java +++ b/java-execution-impl/src/main/java/com/intellij/java/execution/impl/junit/JUnitUtil.java @@ -29,13 +29,12 @@ import consulo.language.psi.scope.GlobalSearchScope; import consulo.language.psi.util.LanguageCachedValueUtil; import consulo.language.psi.util.PsiTreeUtil; -import consulo.language.util.ModuleUtilCore; import consulo.module.Module; import consulo.project.Project; -import consulo.util.lang.function.Condition; import org.jspecify.annotations.Nullable; import java.util.*; +import java.util.function.Predicate; import static com.intellij.java.language.codeInsight.AnnotationUtil.CHECK_HIERARCHY; @@ -106,10 +105,10 @@ public class JUnitUtil { }; public static boolean isSuiteMethod(PsiMethod psiMethod) { - if (!psiMethod.hasModifierProperty(PsiModifier.PUBLIC)) { + if (!psiMethod.isPublic()) { return false; } - if (!psiMethod.hasModifierProperty(PsiModifier.STATIC)) { + if (!psiMethod.isStatic()) { return false; } if (psiMethod.isConstructor()) { @@ -118,7 +117,7 @@ public static boolean isSuiteMethod(PsiMethod psiMethod) { if (psiMethod.getParameterList().getParametersCount() > 0) { return false; } - final PsiType returnType = psiMethod.getReturnType(); + PsiType returnType = psiMethod.getReturnType(); if (returnType == null || returnType instanceof PsiPrimitiveType) { return false; } @@ -126,22 +125,27 @@ public static boolean isSuiteMethod(PsiMethod psiMethod) { || InheritanceUtil.isInheritor(returnType, TEST_INTERFACE); } - public static boolean isTestMethod(final Location location) { + @RequiredReadAction + public static boolean isTestMethod(Location location) { return isTestMethod(location, true); } - public static boolean isTestMethod(final Location location, boolean checkAbstract) { + @RequiredReadAction + public static boolean isTestMethod(Location location, boolean checkAbstract) { return isTestMethod(location, checkAbstract, true); } - public static boolean isTestMethod(final Location location, boolean checkAbstract, boolean checkRunWith) { + @RequiredReadAction + public static boolean isTestMethod(Location location, boolean checkAbstract, boolean checkRunWith) { return isTestMethod(location, checkAbstract, checkRunWith, true); } - public static boolean isTestMethod(final Location location, boolean checkAbstract, boolean checkRunWith, boolean checkClass) { - final PsiMethod psiMethod = location.getPsiElement(); - final PsiClass aClass = location instanceof MethodLocation methodLocation - ? methodLocation.getContainingClass() : psiMethod.getContainingClass(); + @RequiredReadAction + public static boolean isTestMethod(Location location, boolean checkAbstract, boolean checkRunWith, boolean checkClass) { + PsiMethod psiMethod = location.getPsiElement(); + PsiClass aClass = location instanceof MethodLocation methodLocation + ? methodLocation.getContainingClass() + : psiMethod.getContainingClass(); if (checkClass && (aClass == null || !isTestClass(aClass, checkAbstract, true))) { return false; } @@ -151,10 +155,10 @@ public static boolean isTestMethod(final Location location, if (psiMethod.isConstructor()) { return false; } - if (!psiMethod.hasModifierProperty(PsiModifier.PUBLIC)) { + if (!psiMethod.isPublic()) { return false; } - if (psiMethod.hasModifierProperty(PsiModifier.ABSTRACT)) { + if (psiMethod.isAbstract()) { return false; } if (AnnotationUtil.isAnnotated(psiMethod, CONFIGURATIONS_ANNOTATION_NAME, 0)) { @@ -169,7 +173,7 @@ public static boolean isTestMethod(final Location location, if (psiMethod.getParameterList().getParametersCount() > 0) { return false; } - if (psiMethod.hasModifierProperty(PsiModifier.STATIC)) { + if (psiMethod.isStatic()) { return false; } if (!psiMethod.getName().startsWith("test")) { @@ -184,7 +188,8 @@ public static boolean isTestMethod(final Location location, return PsiType.VOID.equals(psiMethod.getReturnType()); } - public static boolean isTestCaseInheritor(final PsiClass aClass) { + @RequiredReadAction + public static boolean isTestCaseInheritor(PsiClass aClass) { if (!aClass.isValid()) { return false; } @@ -193,10 +198,12 @@ public static boolean isTestCaseInheritor(final PsiClass aClass) { return testCaseClass != null && aClass.isInheritor(testCaseClass, true); } - public static boolean isTestClass(final PsiClass psiClass) { + @RequiredReadAction + public static boolean isTestClass(PsiClass psiClass) { return isTestClass(psiClass, true, true); } + @RequiredReadAction public static boolean isTestClass(PsiClass psiClass, boolean checkAbstract, boolean checkForTestCaseInheritance) { if (psiClass.getQualifiedName() == null) { return false; @@ -204,13 +211,13 @@ public static boolean isTestClass(PsiClass psiClass, boolean checkAbstract, bool if (isJUnit5(psiClass) && isJUnit5TestClass(psiClass, checkAbstract)) { return true; } - final PsiClass topLevelClass = PsiTreeUtil.getTopmostParentOfType(psiClass, PsiClass.class); + PsiClass topLevelClass = PsiTreeUtil.getTopmostParentOfType(psiClass, PsiClass.class); if (topLevelClass != null) { - final PsiAnnotation annotation = AnnotationUtil.findAnnotationInHierarchy(topLevelClass, Collections.singleton(RUN_WITH)); + PsiAnnotation annotation = AnnotationUtil.findAnnotationInHierarchy(topLevelClass, Collections.singleton(RUN_WITH)); if (annotation != null) { - final PsiAnnotationMemberValue attributeValue = annotation.findAttributeValue("value"); + PsiAnnotationMemberValue attributeValue = annotation.findAttributeValue("value"); if (attributeValue instanceof PsiClassObjectAccessExpression classObjectAccessExpression) { - final String runnerName = classObjectAccessExpression.getOperand().getType().getCanonicalText(); + String runnerName = classObjectAccessExpression.getOperand().getType().getCanonicalText(); if (!(PARAMETERIZED_CLASS_NAME.equals(runnerName) || SUITE_CLASS_NAME.equals(runnerName))) { return true; } @@ -237,7 +244,7 @@ public static boolean isTestClass(PsiClass psiClass, boolean checkAbstract, bool } private static boolean hasTestOrSuiteMethods(PsiClass psiClass) { - for (final PsiMethod method : psiClass.getAllMethods()) { + for (PsiMethod method : psiClass.getAllMethods()) { if (isSuiteMethod(method)) { return true; } @@ -259,20 +266,21 @@ private static boolean hasTestOrSuiteMethods(PsiClass psiClass) { return false; } - public static boolean isJUnit3TestClass(final PsiClass clazz) { + @RequiredReadAction + public static boolean isJUnit3TestClass(PsiClass clazz) { return isTestCaseInheritor(clazz); } - public static boolean isJUnit4TestClass(final PsiClass psiClass) { + public static boolean isJUnit4TestClass(PsiClass psiClass) { return isJUnit4TestClass(psiClass, true); } - public static boolean isJUnit4TestClass(final PsiClass psiClass, boolean checkAbstract) { - final PsiModifierList modifierList = psiClass.getModifierList(); + public static boolean isJUnit4TestClass(PsiClass psiClass, boolean checkAbstract) { + PsiModifierList modifierList = psiClass.getModifierList(); if (modifierList == null) { return false; } - final PsiClass topLevelClass = PsiTreeUtil.getTopmostParentOfType(modifierList, PsiClass.class); + PsiClass topLevelClass = PsiTreeUtil.getTopmostParentOfType(modifierList, PsiClass.class); if (topLevelClass != null) { if (AnnotationUtil.isAnnotated(topLevelClass, RUN_WITH, CHECK_HIERARCHY)) { PsiAnnotation annotation = getRunWithAnnotation(topLevelClass); @@ -291,7 +299,7 @@ public static boolean isJUnit4TestClass(final PsiClass psiClass, boolean checkAb return false; } - for (final PsiMethod method : psiClass.getAllMethods()) { + for (PsiMethod method : psiClass.getAllMethods()) { ProgressManager.checkCanceled(); if (isTestAnnotated(method)) { return true; @@ -302,8 +310,8 @@ public static boolean isJUnit4TestClass(final PsiClass psiClass, boolean checkAb } @RequiredReadAction - public static boolean isJUnit5TestClass(final PsiClass psiClass, boolean checkAbstract) { - final PsiModifierList modifierList = psiClass.getModifierList(); + public static boolean isJUnit5TestClass(PsiClass psiClass, boolean checkAbstract) { + PsiModifierList modifierList = psiClass.getModifierList(); if (modifierList == null) { return false; } @@ -320,12 +328,11 @@ public static boolean isJUnit5TestClass(final PsiClass psiClass, boolean checkAb return false; } - Module module = ModuleUtilCore.findModuleForPsiElement(psiClass); + Module module = psiClass.getModule(); if (module != null) { - return LanguageCachedValueUtil.getCachedValue(psiClass, () -> - { + return LanguageCachedValueUtil.getCachedValue(psiClass, () -> { boolean hasAnnotation = false; - for (final PsiMethod method : psiClass.getAllMethods()) { + for (PsiMethod method : psiClass.getAllMethods()) { ProgressManager.checkCanceled(); if (MetaAnnotationUtil.isMetaAnnotated(method, TEST5_ANNOTATIONS)) { hasAnnotation = true; @@ -354,16 +361,15 @@ public static boolean isJUnit5(PsiElement element) { public static boolean isJUnit5(GlobalSearchScope scope, Project project) { JavaPsiFacade facade = JavaPsiFacade.getInstance(project); - Condition foundCondition = aPackageName -> - { + Predicate foundCondition = aPackageName -> { PsiPackage aPackage = facade.findPackage(aPackageName); return aPackage != null && aPackage.getDirectories(scope).length > 0; }; - return ReadAction.compute(() -> foundCondition.value(TEST5_PACKAGE_FQN)); + return ReadAction.compute(() -> foundCondition.test(TEST5_PACKAGE_FQN)); } - public static boolean isTestAnnotated(final PsiMethod method) { + public static boolean isTestAnnotated(PsiMethod method) { return AnnotationUtil.isAnnotated(method, TEST_ANNOTATION, 0) || JUnitRecognizer.willBeAnnotatedAfterCompilation(method) || MetaAnnotationUtil.isMetaAnnotated(method, TEST5_ANNOTATIONS); @@ -371,12 +377,12 @@ public static boolean isTestAnnotated(final PsiMethod method) { @Nullable @RequiredReadAction - private static PsiClass getTestCaseClassOrNull(final Location location) { - final Location ancestorOrSelf = location.getAncestorOrSelf(PsiClass.class); + private static PsiClass getTestCaseClassOrNull(Location location) { + Location ancestorOrSelf = location.getAncestorOrSelf(PsiClass.class); if (ancestorOrSelf == null) { return null; } - final PsiClass aClass = ancestorOrSelf.getPsiElement(); + PsiClass aClass = ancestorOrSelf.getPsiElement(); Module module = JavaExecutionUtil.findModule(aClass); if (module == null) { return null; @@ -385,15 +391,15 @@ private static PsiClass getTestCaseClassOrNull(final Location location) { return getTestCaseClassOrNull(scope, module.getProject()); } - public static PsiClass getTestCaseClass(final Module module) throws NoJUnitException { + public static PsiClass getTestCaseClass(Module module) throws NoJUnitException { if (module == null) { throw new NoJUnitException(); } - final GlobalSearchScope scope = GlobalSearchScope.moduleRuntimeScope(module, true); + GlobalSearchScope scope = GlobalSearchScope.moduleRuntimeScope(module, true); return getTestCaseClass(scope, module.getProject()); } - public static PsiClass getTestCaseClass(final SourceScope scope) throws NoJUnitException { + public static PsiClass getTestCaseClass(SourceScope scope) throws NoJUnitException { if (scope == null) { throw new NoJUnitException(); } @@ -410,7 +416,7 @@ public static void checkTestCase(SourceScope scope, Project project) throws NoJU } } - private static PsiClass getTestCaseClass(final GlobalSearchScope scope, final Project project) throws NoJUnitException { + private static PsiClass getTestCaseClass(GlobalSearchScope scope, Project project) throws NoJUnitException { PsiClass testCaseClass = getTestCaseClassOrNull(scope, project); if (testCaseClass == null) { throw new NoJUnitException(scope.getDisplayName()); @@ -419,21 +425,21 @@ private static PsiClass getTestCaseClass(final GlobalSearchScope scope, final Pr } @Nullable - private static PsiClass getTestCaseClassOrNull(final GlobalSearchScope scope, final Project project) { + private static PsiClass getTestCaseClassOrNull(GlobalSearchScope scope, Project project) { return JavaPsiFacade.getInstance(project).findClass(TEST_CASE_CLASS, scope); } + @RequiredReadAction public static boolean isTestMethodOrConfig(PsiMethod psiMethod) { - final PsiClass containingClass = psiMethod.getContainingClass(); + PsiClass containingClass = psiMethod.getContainingClass(); if (containingClass == null) { return false; } if (isTestMethod(PsiLocation.fromPsiElement(psiMethod), false)) { - if (containingClass.hasModifierProperty(PsiModifier.ABSTRACT)) { - final boolean[] foundNonAbstractInheritor = new boolean[1]; - ClassInheritorsSearch.search(containingClass).forEach(psiClass -> - { - if (!psiClass.hasModifierProperty(PsiModifier.ABSTRACT)) { + if (containingClass.isAbstract()) { + boolean[] foundNonAbstractInheritor = new boolean[1]; + ClassInheritorsSearch.search(containingClass).forEach(psiClass -> { + if (!psiClass.isAbstract()) { foundNonAbstractInheritor[0] = true; return false; } @@ -446,14 +452,14 @@ public static boolean isTestMethodOrConfig(PsiMethod psiMethod) { return true; } } - final String name = psiMethod.getName(); - final boolean isPublic = psiMethod.hasModifierProperty(PsiModifier.PUBLIC); - if (!psiMethod.hasModifierProperty(PsiModifier.ABSTRACT)) { + String name = psiMethod.getName(); + boolean isPublic = psiMethod.isPublic(); + if (!psiMethod.isAbstract()) { if (isPublic && (SUITE_METHOD_NAME.equals(name) || "setUp".equals(name) || "tearDown".equals(name))) { return true; } - if (psiMethod.hasModifierProperty(PsiModifier.STATIC)) { + if (psiMethod.isStatic()) { if (AnnotationUtil.isAnnotated(psiMethod, STATIC_CONFIGS, 0)) { return isPublic; } @@ -476,6 +482,7 @@ public static boolean isTestMethodOrConfig(PsiMethod psiMethod) { } @Nullable + @RequiredReadAction public static PsiMethod findFirstTestMethod(PsiClass clazz) { PsiMethod testMethod = null; for (PsiMethod method : clazz.getMethods()) { @@ -489,7 +496,7 @@ public static PsiMethod findFirstTestMethod(PsiClass clazz) { @Nullable public static PsiMethod findSuiteMethod(PsiClass clazz) { - final PsiMethod[] suiteMethods = clazz.findMethodsByName(SUITE_METHOD_NAME, false); + PsiMethod[] suiteMethods = clazz.findMethodsByName(SUITE_METHOD_NAME, false); for (PsiMethod method : suiteMethods) { if (isSuiteMethod(method)) { return method; @@ -507,32 +514,34 @@ public static boolean isParameterized(PsiAnnotation annotation) { } public static boolean isInheritorOrSelfRunner(PsiAnnotation annotation, String... runners) { - final PsiAnnotationMemberValue value = annotation.findAttributeValue(PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME); + PsiAnnotationMemberValue value = annotation.findAttributeValue(PsiAnnotation.DEFAULT_REFERENCED_METHOD_NAME); if (value instanceof PsiClassObjectAccessExpression classObjectAccessExpression) { - final PsiTypeElement operand = classObjectAccessExpression.getOperand(); - final PsiClass psiClass = PsiUtil.resolveClassInClassTypeOnly(operand.getType()); + PsiTypeElement operand = classObjectAccessExpression.getOperand(); + PsiClass psiClass = PsiUtil.resolveClassInClassTypeOnly(operand.getType()); return psiClass != null && Arrays.stream(runners).anyMatch(runner -> InheritanceUtil.isInheritor(psiClass, runner)); } return false; } - public static class TestMethodFilter implements Condition { + public static class TestMethodFilter implements Predicate { private final PsiClass myClass; private final JavaTestFramework framework; - public TestMethodFilter(final PsiClass aClass) { + public TestMethodFilter(PsiClass aClass) { myClass = aClass; TestFramework framework = TestFrameworks.detectFramework(aClass); this.framework = framework instanceof JavaTestFramework javaTestFramework ? javaTestFramework : null; } - public boolean value(final PsiMethod method) { + @Override + @RequiredReadAction + public boolean test(PsiMethod method) { return framework != null ? framework.isTestMethod(method, myClass) : isTestMethod(MethodLocation.elementInClass(method, myClass)); } } - public static PsiClass findPsiClass(final String qualifiedName, final Module module, final Project project) { - final GlobalSearchScope scope = module == null ? GlobalSearchScope.projectScope(project) : GlobalSearchScope.moduleWithDependenciesScope(module); + public static PsiClass findPsiClass(String qualifiedName, Module module, Project project) { + GlobalSearchScope scope = module == null ? GlobalSearchScope.projectScope(project) : GlobalSearchScope.moduleWithDependenciesScope(module); return JavaPsiFacade.getInstance(project).findClass(qualifiedName, scope); } @@ -541,13 +550,15 @@ public static PsiJavaPackage getContainingPackage(PsiClass psiClass) { return directory == null ? null : JavaDirectoryService.getInstance().getPackage(directory); } - public static PsiClass getTestClass(final PsiElement element) { + @RequiredReadAction + public static PsiClass getTestClass(PsiElement element) { return getTestClass(PsiLocation.fromPsiElement(element)); } - public static PsiClass getTestClass(final Location location) { + @RequiredReadAction + public static PsiClass getTestClass(Location location) { for (Iterator> iterator = location.getAncestors(PsiClass.class, false); iterator.hasNext(); ) { - final Location classLocation = iterator.next(); + Location classLocation = iterator.next(); if (isTestClass(classLocation.getPsiElement(), false, true)) { return classLocation.getPsiElement(); } @@ -562,20 +573,22 @@ public static PsiClass getTestClass(final Location location) { return null; } - public static PsiMethod getTestMethod(final PsiElement element) { + @RequiredReadAction + public static PsiMethod getTestMethod(PsiElement element) { return getTestMethod(element, true); } - - public static PsiMethod getTestMethod(final PsiElement element, boolean checkAbstract) { + @RequiredReadAction + public static PsiMethod getTestMethod(PsiElement element, boolean checkAbstract) { return getTestMethod(element, checkAbstract, true); } - public static PsiMethod getTestMethod(final PsiElement element, boolean checkAbstract, boolean checkRunWith) { - final PsiManager manager = element.getManager(); - final Location location = PsiLocation.fromPsiElement(manager.getProject(), element); + @RequiredReadAction + public static PsiMethod getTestMethod(PsiElement element, boolean checkAbstract, boolean checkRunWith) { + PsiManager manager = element.getManager(); + Location location = PsiLocation.fromPsiElement(manager.getProject(), element); for (Iterator> iterator = location.getAncestors(PsiMethod.class, false); iterator.hasNext(); ) { - final Location methodLocation = iterator.next(); + Location methodLocation = iterator.next(); if (isTestMethod(methodLocation, checkAbstract, checkRunWith)) { return methodLocation.getPsiElement(); } @@ -585,11 +598,11 @@ public static PsiMethod getTestMethod(final PsiElement element, boolean checkAbs public static class NoJUnitException extends CantRunException { public NoJUnitException() { - super(ExecutionLocalize.noJunitErrorMessage().get()); + super(ExecutionLocalize.noJunitErrorMessage()); } - public NoJUnitException(final String message) { - super(ExecutionLocalize.noJunitInScopeErrorMessage(message).get()); + public NoJUnitException(String message) { + super(ExecutionLocalize.noJunitInScopeErrorMessage(message)); } } } \ No newline at end of file diff --git a/java-execution-impl/src/main/java/com/intellij/java/execution/impl/util/JavaParametersUtil.java b/java-execution-impl/src/main/java/com/intellij/java/execution/impl/util/JavaParametersUtil.java index 18f600d9d5..f9cca96dfe 100644 --- a/java-execution-impl/src/main/java/com/intellij/java/execution/impl/util/JavaParametersUtil.java +++ b/java-execution-impl/src/main/java/com/intellij/java/execution/impl/util/JavaParametersUtil.java @@ -20,18 +20,18 @@ import com.intellij.java.language.impl.projectRoots.ex.PathUtilEx; import com.intellij.java.language.projectRoots.JavaSdkType; import com.intellij.java.language.psi.PsiClass; +import consulo.annotation.access.RequiredReadAction; import consulo.content.bundle.Sdk; import consulo.content.bundle.SdkTable; import consulo.execution.CantRunException; import consulo.execution.RuntimeConfigurationWarning; import consulo.execution.configuration.RunConfigurationModule; import consulo.execution.util.ProgramParametersUtil; -import consulo.java.execution.JavaExecutionBundle; import consulo.java.execution.OwnSimpleJavaParameters; import consulo.java.execution.configurations.OwnJavaParameters; +import consulo.java.execution.localize.JavaExecutionLocalize; import consulo.java.execution.projectRoots.OwnJdkUtil; import consulo.language.psi.PsiFile; -import consulo.language.util.ModuleUtilCore; import consulo.module.Module; import consulo.module.content.ModuleFileIndex; import consulo.module.content.ModuleRootManager; @@ -43,8 +43,8 @@ import consulo.util.lang.StringUtil; import consulo.virtualFileSystem.VirtualFile; import org.intellij.lang.annotations.MagicConstant; - import org.jspecify.annotations.Nullable; + import java.util.List; import java.util.Map; @@ -53,155 +53,174 @@ * @since Nov 26, 2003 */ public class JavaParametersUtil { - private JavaParametersUtil() { - } - - public static void configureConfiguration(OwnSimpleJavaParameters parameters, CommonJavaRunConfigurationParameters configuration) { - ProgramParametersUtil.configureConfiguration(parameters, configuration); - - Project project = configuration.getProject(); - Module module = ProgramParametersUtil.getModule(configuration); - - String alternativeJrePath = configuration.getAlternativeJrePath(); - if (alternativeJrePath != null) { - configuration.setAlternativeJrePath(ProgramParametersUtil.expandPath(alternativeJrePath, null, project)); - } - - String vmParameters = configuration.getVMParameters(); - if (vmParameters != null) { - vmParameters = ProgramParametersUtil.expandPath(vmParameters, module, project); - - for (Map.Entry each : parameters.getEnv().entrySet()) { - vmParameters = StringUtil.replace(vmParameters, "$" + each.getKey() + "$", each.getValue(), false); //replace env usages - } - } - - parameters.getVMParametersList().addParametersString(vmParameters); - } - - @MagicConstant(valuesFromClass = OwnJavaParameters.class) - public static int getClasspathType(final RunConfigurationModule configurationModule, final String mainClassName, final boolean classMustHaveSource) throws CantRunException { - return getClasspathType(configurationModule, mainClassName, classMustHaveSource, false); - } - - @MagicConstant(valuesFromClass = OwnJavaParameters.class) - public static int getClasspathType(final RunConfigurationModule configurationModule, - final String mainClassName, - final boolean classMustHaveSource, - final boolean includeProvidedDependencies) throws CantRunException { - final Module module = configurationModule.getModule(); - if (module == null) { - throw CantRunException.noModuleConfigured(configurationModule.getModuleName()); - } - Boolean inProduction = isClassInProductionSources(mainClassName, module); - if (inProduction == null) { - if (!classMustHaveSource) { - return OwnJavaParameters.JDK_AND_CLASSES_AND_TESTS; - } - throw CantRunException.classNotFound(mainClassName, module); - } - - return inProduction ? (includeProvidedDependencies ? OwnJavaParameters.JDK_AND_CLASSES_AND_PROVIDED : OwnJavaParameters.JDK_AND_CLASSES) : OwnJavaParameters.JDK_AND_CLASSES_AND_TESTS; - } - - /** - * @return null if class not found - */ - @Nullable - public static Boolean isClassInProductionSources(String mainClassName, Module module) { - final PsiClass psiClass = JavaExecutionUtil.findMainClass(module, mainClassName); - if (psiClass == null) { - return null; - } - final PsiFile psiFile = psiClass.getContainingFile(); - if (psiFile == null) { - return null; - } - final VirtualFile virtualFile = psiFile.getVirtualFile(); - if (virtualFile == null) { - return null; - } - Module classModule = psiClass.isValid() ? ModuleUtilCore.findModuleForPsiElement(psiClass) : null; - if (classModule == null) { - classModule = module; - } - ModuleFileIndex fileIndex = ModuleRootManager.getInstance(classModule).getFileIndex(); - if (fileIndex.isInSourceContent(virtualFile)) { - return !fileIndex.isInTestSourceContent(virtualFile); - } - final List entriesForFile = fileIndex.getOrderEntriesForFile(virtualFile); - for (OrderEntry entry : entriesForFile) { - if (entry instanceof ExportableOrderEntry && ((ExportableOrderEntry) entry).getScope() == DependencyScope.TEST) { - return false; - } - } - return true; - } - - public static void configureModule(final RunConfigurationModule runConfigurationModule, - final OwnJavaParameters parameters, - @MagicConstant(valuesFromClass = OwnJavaParameters.class) final int classPathType, - @Nullable String alternativeJreName) throws CantRunException { - Module module = runConfigurationModule.getModule(); - if (module == null) { - throw CantRunException.noModuleConfigured(runConfigurationModule.getModuleName()); - } - configureModule(module, parameters, classPathType, alternativeJreName); - } - - public static void configureModule(Module module, - OwnJavaParameters parameters, - @MagicConstant(valuesFromClass = OwnJavaParameters.class) int classPathType, - @Nullable String alternativeJreName) throws CantRunException { - parameters.configureByModule(module, classPathType, createModuleJdk(module, (classPathType & OwnJavaParameters.TESTS_ONLY) == 0, alternativeJreName)); - } - - public static void configureProject(Project project, - final OwnJavaParameters parameters, - @MagicConstant(valuesFromClass = OwnJavaParameters.class) final int classPathType, - @Nullable String alternativeJreName) throws CantRunException { - parameters.configureByProject(project, classPathType, createProjectJdk(project, alternativeJreName)); - } - - public static Sdk createModuleJdk(final Module module, boolean productionOnly, @Nullable String jreHome) throws CantRunException { - return jreHome == null ? OwnJavaParameters.getValidJdkToRunModule(module, productionOnly) : createAlternativeJdk(jreHome); - } - - public static Sdk createProjectJdk(final Project project, @Nullable String jreHome) throws CantRunException { - return jreHome == null ? createProjectJdk(project) : createAlternativeJdk(jreHome); - } - - private static Sdk createProjectJdk(final Project project) throws CantRunException { - final Sdk jdk = PathUtilEx.getAnyJdk(project); - if (jdk == null) { - throw CantRunException.noJdkConfigured(); - } - return jdk; - } - - private static Sdk createAlternativeJdk(String jreHome) throws CantRunException { - final Sdk configuredJdk = SdkTable.getInstance().findSdk(jreHome); - if (configuredJdk != null) { - return configuredJdk; - } - - if (!OwnJdkUtil.checkForJre(jreHome)) { - throw new CantRunException(JavaExecutionBundle.message("jre.path.is.not.valid.jre.home.error.message", jreHome)); - } - - final JavaSdkType javaSdk = JavaSdkType.getDefaultJavaSdkType(); - return javaSdk.createJdk(ObjectUtil.notNull(javaSdk.getVersionString(jreHome), ""), jreHome); - } - - public static void checkAlternativeJRE(CommonJavaRunConfigurationParameters configuration) throws RuntimeConfigurationWarning { - if (configuration.isAlternativeJrePathEnabled()) { - checkAlternativeJRE(configuration.getAlternativeJrePath()); - } - } - - public static void checkAlternativeJRE(@Nullable String jrePath) throws RuntimeConfigurationWarning { - if (StringUtil.isEmptyOrSpaces(jrePath) || SdkTable.getInstance().findSdk(jrePath) == null && !OwnJdkUtil.checkForJre(jrePath)) { - throw new RuntimeConfigurationWarning(JavaExecutionBundle.message("jre.path.is.not.valid.jre.home.error.message", jrePath)); + private JavaParametersUtil() { + } + + public static void configureConfiguration(OwnSimpleJavaParameters parameters, CommonJavaRunConfigurationParameters configuration) { + ProgramParametersUtil.configureConfiguration(parameters, configuration); + + Project project = configuration.getProject(); + Module module = ProgramParametersUtil.getModule(configuration); + + String alternativeJrePath = configuration.getAlternativeJrePath(); + if (alternativeJrePath != null) { + configuration.setAlternativeJrePath(ProgramParametersUtil.expandPath(alternativeJrePath, null, project)); + } + + String vmParameters = configuration.getVMParameters(); + if (vmParameters != null) { + vmParameters = ProgramParametersUtil.expandPath(vmParameters, module, project); + + for (Map.Entry each : parameters.getEnv().entrySet()) { + vmParameters = StringUtil.replace(vmParameters, "$" + each.getKey() + "$", each.getValue(), false); //replace env usages + } + } + + parameters.getVMParametersList().addParametersString(vmParameters); + } + + @MagicConstant(valuesFromClass = OwnJavaParameters.class) + @RequiredReadAction + public static int getClasspathType( + RunConfigurationModule configurationModule, + String mainClassName, + boolean classMustHaveSource + ) throws CantRunException { + return getClasspathType(configurationModule, mainClassName, classMustHaveSource, false); + } + + @MagicConstant(valuesFromClass = OwnJavaParameters.class) + @RequiredReadAction + public static int getClasspathType( + RunConfigurationModule configurationModule, + String mainClassName, + boolean classMustHaveSource, + boolean includeProvidedDependencies + ) throws CantRunException { + Module module = configurationModule.getModule(); + if (module == null) { + throw CantRunException.noModuleConfigured(configurationModule.getModuleName()); + } + Boolean inProduction = isClassInProductionSources(mainClassName, module); + if (inProduction == null) { + if (!classMustHaveSource) { + return OwnJavaParameters.JDK_AND_CLASSES_AND_TESTS; + } + throw CantRunException.classNotFound(mainClassName, module); + } + + return inProduction ? (includeProvidedDependencies ? OwnJavaParameters.JDK_AND_CLASSES_AND_PROVIDED : OwnJavaParameters.JDK_AND_CLASSES) : OwnJavaParameters.JDK_AND_CLASSES_AND_TESTS; + } + + /** + * @return null if class not found + */ + @Nullable + @RequiredReadAction + public static Boolean isClassInProductionSources(String mainClassName, Module module) { + PsiClass psiClass = JavaExecutionUtil.findMainClass(module, mainClassName); + if (psiClass == null) { + return null; + } + PsiFile psiFile = psiClass.getContainingFile(); + if (psiFile == null) { + return null; + } + VirtualFile virtualFile = psiFile.getVirtualFile(); + if (virtualFile == null) { + return null; + } + Module classModule = psiClass.isValid() ? psiClass.getModule() : null; + if (classModule == null) { + classModule = module; + } + ModuleFileIndex fileIndex = ModuleRootManager.getInstance(classModule).getFileIndex(); + if (fileIndex.isInSourceContent(virtualFile)) { + return !fileIndex.isInTestSourceContent(virtualFile); + } + List entriesForFile = fileIndex.getOrderEntriesForFile(virtualFile); + for (OrderEntry entry : entriesForFile) { + if (entry instanceof ExportableOrderEntry exportableOrderEntry && exportableOrderEntry.getScope() == DependencyScope.TEST) { + return false; + } + } + return true; + } + + public static void configureModule( + RunConfigurationModule runConfigurationModule, + OwnJavaParameters parameters, + @MagicConstant(valuesFromClass = OwnJavaParameters.class) int classPathType, + @Nullable String alternativeJreName + ) throws CantRunException { + Module module = runConfigurationModule.getModule(); + if (module == null) { + throw CantRunException.noModuleConfigured(runConfigurationModule.getModuleName()); + } + configureModule(module, parameters, classPathType, alternativeJreName); + } + + public static void configureModule( + Module module, + OwnJavaParameters parameters, + @MagicConstant(valuesFromClass = OwnJavaParameters.class) int classPathType, + @Nullable String alternativeJreName + ) throws CantRunException { + parameters.configureByModule( + module, + classPathType, + createModuleJdk(module, (classPathType & OwnJavaParameters.TESTS_ONLY) == 0, alternativeJreName) + ); + } + + public static void configureProject( + Project project, + OwnJavaParameters parameters, + @MagicConstant(valuesFromClass = OwnJavaParameters.class) int classPathType, + @Nullable String alternativeJreName + ) throws CantRunException { + parameters.configureByProject(project, classPathType, createProjectJdk(project, alternativeJreName)); + } + + public static Sdk createModuleJdk(Module module, boolean productionOnly, @Nullable String jreHome) throws CantRunException { + return jreHome == null ? OwnJavaParameters.getValidJdkToRunModule(module, productionOnly) : createAlternativeJdk(jreHome); + } + + public static Sdk createProjectJdk(Project project, @Nullable String jreHome) throws CantRunException { + return jreHome == null ? createProjectJdk(project) : createAlternativeJdk(jreHome); + } + + private static Sdk createProjectJdk(Project project) throws CantRunException { + Sdk jdk = PathUtilEx.getAnyJdk(project); + if (jdk == null) { + throw CantRunException.noJdkConfigured(); + } + return jdk; + } + + private static Sdk createAlternativeJdk(String jreHome) throws CantRunException { + Sdk configuredJdk = SdkTable.getInstance().findSdk(jreHome); + if (configuredJdk != null) { + return configuredJdk; + } + + if (!OwnJdkUtil.checkForJre(jreHome)) { + throw new CantRunException(JavaExecutionLocalize.jrePathIsNotValidJreHomeErrorMessage(jreHome)); + } + + JavaSdkType javaSdk = JavaSdkType.getDefaultJavaSdkType(); + return javaSdk.createJdk(ObjectUtil.notNull(javaSdk.getVersionString(jreHome), ""), jreHome); + } + + public static void checkAlternativeJRE(CommonJavaRunConfigurationParameters configuration) throws RuntimeConfigurationWarning { + if (configuration.isAlternativeJrePathEnabled()) { + checkAlternativeJRE(configuration.getAlternativeJrePath()); + } + } + + public static void checkAlternativeJRE(@Nullable String jrePath) throws RuntimeConfigurationWarning { + if (StringUtil.isEmptyOrSpaces(jrePath) || SdkTable.getInstance().findSdk(jrePath) == null && !OwnJdkUtil.checkForJre(jrePath)) { + throw new RuntimeConfigurationWarning(JavaExecutionLocalize.jrePathIsNotValidJreHomeErrorMessage(jrePath)); + } } - } } \ No newline at end of file diff --git a/plugin/src/main/java/com/intellij/java/impl/javadoc/JavadocGeneratorRunProfile.java b/plugin/src/main/java/com/intellij/java/impl/javadoc/JavadocGeneratorRunProfile.java index 41d93d436c..2a2695ab4c 100644 --- a/plugin/src/main/java/com/intellij/java/impl/javadoc/JavadocGeneratorRunProfile.java +++ b/plugin/src/main/java/com/intellij/java/impl/javadoc/JavadocGeneratorRunProfile.java @@ -16,7 +16,6 @@ package com.intellij.java.impl.javadoc; import com.intellij.java.execution.configurations.JavaCommandLineStateUtil; -import com.intellij.java.language.JavadocBundle; import com.intellij.java.language.impl.projectRoots.ex.PathUtilEx; import com.intellij.java.language.projectRoots.JavaSdkType; import com.intellij.java.language.projectRoots.JavaSdkVersion; @@ -34,6 +33,7 @@ import consulo.execution.runner.ExecutionEnvironment; import consulo.execution.ui.console.RegexpFilter; import consulo.java.language.bundle.JavaSdkTypeUtil; +import consulo.java.language.localize.JavadocLocalize; import consulo.language.editor.scope.AnalysisScope; import consulo.language.psi.PsiFile; import consulo.language.psi.PsiManager; @@ -92,7 +92,7 @@ public RunProfileState getState(Executor executor, ExecutionEnvironment env) thr @Override public String getName() { - return JavadocBundle.message("javadoc.settings.title"); + return JavadocLocalize.javadocSettingsTitle().get(); } @Override @@ -130,7 +130,7 @@ protected GeneralCommandLine createCommandLine() throws ExecutionException { private void setupExeParams(Sdk jdk, GeneralCommandLine cmdLine) throws ExecutionException { String jdkPath = jdk != null && jdk.getSdkType() instanceof JavaSdkType javaSdkType ? javaSdkType.getBinPath(jdk) : null; if (jdkPath == null) { - throw new CantRunException(JavadocBundle.message("javadoc.generate.no.jdk.path")); + throw new CantRunException(JavadocLocalize.javadocGenerateNoJdkPath()); } JavaSdkVersion version = JavaSdkTypeUtil.getVersion(jdk); if (myConfiguration.HEAP_SIZE != null && myConfiguration.HEAP_SIZE.trim().length() != 0) { @@ -151,7 +151,7 @@ private void setupExeParams(Sdk jdk, GeneralCommandLine cmdLine) throws Executio File parent = new File(Platform.current().jvm().getRuntimeProperty("java.home")).getParentFile(); //try system jre exePath = parent.getPath() + File.separator + "bin" + javadocExecutableName; if (!new File(exePath).exists()) { - throw new CantRunException(JavadocBundle.message("javadoc.generate.no.jdk.path")); + throw new CantRunException(JavadocLocalize.javadocGenerateNoJdkPath()); } } cmdLine.setExePath(exePath); @@ -223,7 +223,7 @@ private void setupProgramParameters(Sdk jdk, GeneralCommandLine cmdLine) throws return; } if (packages.size() + sources.size() == 0) { - throw new CantRunException(JavadocBundle.message("javadoc.generate.no.classes.in.selected.packages.error")); + throw new CantRunException(JavadocLocalize.javadocGenerateNoClassesInSelectedPackagesError()); } for (String aPackage : packages) { writer.println(aPackage); @@ -291,7 +291,7 @@ private void setupProgramParameters(Sdk jdk, GeneralCommandLine cmdLine) throws @Override protected ProcessHandler startProcess() throws ExecutionException { ProcessHandler handler = JavaCommandLineStateUtil.startProcess(createCommandLine()); - ProcessTerminatedListener.attach(handler, myProject, JavadocBundle.message("javadoc.generate.exited")); + ProcessTerminatedListener.attach(handler, myProject, JavadocLocalize.javadocGenerateExited().get()); handler.addProcessListener(new ProcessAdapter() { @Override public void processTerminated(ProcessEvent event) {