Bug 574831 - Computation of module name in Java launch use wrong module Change-Id: I23c54de4217364ccc8586609241a0747f32fdfd7 Reviewed-on: https://git.eclipse.org/r/c/jdt/eclipse.jdt.debug/+/187080 Tested-by: JDT Bot <jdt-bot@eclipse.org> Tested-by: Releng Bot <releng-bot@eclipse.org> Reviewed-by: Sarika Sinha <sarika.sinha@in.ibm.com>
diff --git a/org.eclipse.jdt.debug.ui/plugin.properties b/org.eclipse.jdt.debug.ui/plugin.properties index 62e444f..7a3f817 100644 --- a/org.eclipse.jdt.debug.ui/plugin.properties +++ b/org.eclipse.jdt.debug.ui/plugin.properties
@@ -1,5 +1,5 @@ ############################################################################### -# Copyright (c) 2000, 2019 IBM Corporation and others. +# Copyright (c) 2000, 2021 IBM Corporation and others. # # This program and the accompanying materials # are made available under the terms of the Eclipse Public License 2.0 @@ -265,6 +265,7 @@ LaunchConfigurationITypeRenameParticipant.name=Launch configuration participant LaunchConfigurationITypeMoveParticipant.name=Launch configuration participant LaunchConfigurationIPackageFragmentMoveParticipant.name=Launch configuration participant +LaunchConfigurationIModuleDescriptionRenameParticipant.name=Launch configuration participant JavaBreakpointITypeRenameParticipant.name=Breakpoint participant JavaBreakpointIJavaProjectRenameParticipant.name=Breakpoint participant JavaBreakpointIPackageFragmentRenameParticipant.name=Breakpoint participant
diff --git a/org.eclipse.jdt.debug.ui/plugin.xml b/org.eclipse.jdt.debug.ui/plugin.xml index 5021241..6e88711 100644 --- a/org.eclipse.jdt.debug.ui/plugin.xml +++ b/org.eclipse.jdt.debug.ui/plugin.xml
@@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <?eclipse version="3.0"?> <!-- - Copyright (c) 2005, 2019 IBM Corporation and others. + Copyright (c) 2005, 2021 IBM Corporation and others. This program and the accompanying materials are made available under the terms of the Eclipse Public License 2.0 @@ -3152,6 +3152,21 @@ </with> </enablement> </renameParticipant> + <renameParticipant + class="org.eclipse.jdt.internal.debug.core.refactoring.LaunchConfigurationIModuleDescriptionRenameParticipant" + name="%LaunchConfigurationIModuleDescriptionRenameParticipant.name" + id="org.eclipse.jdt.debug.refactoring.launchConfiguration.IModuleDescriptionRename"> + <enablement> + <with variable="affectedNatures"> + <iterate operator="or"> + <equals value="org.eclipse.jdt.core.javanature"/> + </iterate> + </with> + <with variable="element"> + <instanceof value="org.eclipse.jdt.core.IModuleDescription"/> + </with> + </enablement> + </renameParticipant> </extension> <extension point="org.eclipse.ltk.core.refactoring.moveParticipants"> <moveParticipant
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/JDTDebugRefactoringUtil.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/JDTDebugRefactoringUtil.java index 2e2e672..1baad98 100644 --- a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/JDTDebugRefactoringUtil.java +++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/JDTDebugRefactoringUtil.java
@@ -1,5 +1,5 @@ /******************************************************************************* - * Copyright (c) 2000, 2012 IBM Corporation and others. + * Copyright (c) 2000, 2021 IBM Corporation and others. * * This program and the accompanying materials * are made available under the terms of the Eclipse Public License 2.0 @@ -22,6 +22,7 @@ import org.eclipse.debug.core.ILaunchConfiguration; import org.eclipse.jdt.core.IJavaElement; import org.eclipse.jdt.core.IJavaProject; +import org.eclipse.jdt.core.IModuleDescription; import org.eclipse.jdt.core.IPackageFragment; import org.eclipse.jdt.core.IPackageFragmentRoot; import org.eclipse.jdt.core.IType; @@ -176,6 +177,31 @@ } /** + * Provides a public mechanism for creating the <code>Change</code> for renaming a module + * + * @param module + * the module to rename + * @param newname + * the new name for the module + * @return the Change for the module rename + * @throws CoreException + */ + public static Change createChangesForModuleRename(IModuleDescription module, String newname) throws CoreException { + List<Change> changes = new ArrayList<>(); + ILaunchConfiguration[] configs = getJavaTypeLaunchConfigurationsForModule(module.getElementName()); + LaunchConfigurationProjectMainTypeChange change = null; + for (int i = 0; i < configs.length; i++) { + change = new LaunchConfigurationProjectMainTypeChange(configs[i], null, newname); + String newcname = computeNewContainerName(configs[i]); + if (newcname != null) { + change.setNewContainerName(newcname); + } + changes.add(change); + } + return JDTDebugRefactoringUtil.createChangeFromList(changes, RefactoringMessages.LaunchConfigurationProjectMainTypeChange_7); + } + + /** * Creates a <code>Change</code> for a type change * @param type the type that is changing * @param newfqname the new fully qualified name @@ -278,4 +304,31 @@ return new ILaunchConfiguration[0]; } + /** + * Returns a listing of configurations that have a specific module name attribute in them + * + * @param pname + * the module attribute to compare against + * @return the list of java type launch configurations that have the specified module attribute + */ + protected static ILaunchConfiguration[] getJavaTypeLaunchConfigurationsForModule(String pname) { + try { + ILaunchConfiguration[] configs = DebugPlugin.getDefault().getLaunchManager().getLaunchConfigurations(); + ArrayList<ILaunchConfiguration> list = new ArrayList<>(); + String attrib; + for (int i = 0; i < configs.length; i++) { + attrib = configs[i].getAttribute(IJavaLaunchConfigurationConstants.ATTR_MODULE_NAME, (String) null); + if (attrib != null) { + if (attrib.equals(pname)) { + list.add(configs[i]); + } + } + } + return list.toArray(new ILaunchConfiguration[list.size()]); + } catch (CoreException e) { + JDIDebugPlugin.log(e); + } + return new ILaunchConfiguration[0]; + } + }
diff --git a/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/LaunchConfigurationIModuleDescriptionRenameParticipant.java b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/LaunchConfigurationIModuleDescriptionRenameParticipant.java new file mode 100644 index 0000000..830425b --- /dev/null +++ b/org.eclipse.jdt.debug.ui/ui/org/eclipse/jdt/internal/debug/core/refactoring/LaunchConfigurationIModuleDescriptionRenameParticipant.java
@@ -0,0 +1,55 @@ +/******************************************************************************* + * Copyright (c) 2021 IBM Corporation and others. + * + * This program and the accompanying materials + * are made available under the terms of the Eclipse Public License 2.0 + * which accompanies this distribution, and is available at + * https://www.eclipse.org/legal/epl-2.0/ + * + * SPDX-License-Identifier: EPL-2.0 + * + * Contributors: + * IBM Corporation - initial API and implementation + *******************************************************************************/ + +package org.eclipse.jdt.internal.debug.core.refactoring; + +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.jdt.core.IModuleDescription; +import org.eclipse.ltk.core.refactoring.Change; +import org.eclipse.ltk.core.refactoring.RefactoringStatus; +import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext; +import org.eclipse.ltk.core.refactoring.participants.RenameParticipant; + +/** + * Provides a rename participant for module descriptions with respect to launch configurations + */ +public class LaunchConfigurationIModuleDescriptionRenameParticipant extends RenameParticipant { + + /** + * the module to rename + */ + private IModuleDescription fModuleDescription; + + @Override + protected boolean initialize(Object element) { + fModuleDescription = (IModuleDescription) element; + return true; + } + + @Override + public String getName() { + return RefactoringMessages.LaunchConfigurationParticipant_0; + } + + @Override + public RefactoringStatus checkConditions(IProgressMonitor pm, CheckConditionsContext context) { + return new RefactoringStatus(); + } + + @Override + public Change createChange(IProgressMonitor pm) throws CoreException { + return JDTDebugRefactoringUtil.createChangesForModuleRename(fModuleDescription, getArguments().getNewName()); + } +}