1 11 package org.eclipse.jdt.internal.debug.core.refactoring; 12 13 import java.util.HashMap ; 14 import java.util.Map ; 15 16 import org.eclipse.core.resources.IResource; 17 import org.eclipse.core.runtime.CoreException; 18 import org.eclipse.core.runtime.IProgressMonitor; 19 import org.eclipse.jdt.core.IMethod; 20 import org.eclipse.jdt.core.IType; 21 import org.eclipse.jdt.core.Signature; 22 import org.eclipse.jdt.debug.core.IJavaMethodBreakpoint; 23 import org.eclipse.jdt.debug.core.JDIDebugModel; 24 import org.eclipse.jdt.internal.debug.ui.BreakpointUtils; 25 import org.eclipse.ltk.core.refactoring.Change; 26 27 import com.ibm.icu.text.MessageFormat; 28 29 33 public class MethodBreakpointTypeChange extends MethodBreakpointChange { 34 35 private IType fDestType; 36 37 public MethodBreakpointTypeChange(IJavaMethodBreakpoint breakpoint, IType destType) throws CoreException { 38 super(breakpoint); 39 fDestType = destType; 40 } 41 44 public String getName() { 45 String msg = MessageFormat.format(RefactoringMessages.MethodBreakpointTypeChange_1, new String [] {getBreakpointLabel(getOriginalBreakpoint())}); 46 if(!"".equals(fDestType.getElementName())) { msg = MessageFormat.format(RefactoringMessages.MethodBreakpointTypeChange_0, 48 new String [] {getBreakpointLabel(getOriginalBreakpoint()), fDestType.getElementName()}); 49 } 50 return msg; 51 } 52 53 56 public Change perform(IProgressMonitor pm) throws CoreException { 57 String [] parameterTypes = Signature.getParameterTypes(getSignature()); 58 for (int i = 0; i < parameterTypes.length; i++) { 59 parameterTypes[i] = parameterTypes[i].replace('/', '.'); 60 61 } 62 IMethod destMethod = fDestType.getMethod(getMethodName(), parameterTypes); 63 if (!destMethod.exists()) { 64 IMethod[] methods = fDestType.getMethods(); 66 for (int i = 0; i < methods.length; i++) { 67 if (methods[i].isSimilar(destMethod)) { 68 destMethod = methods[i]; 69 break; 70 } 71 } 72 } 73 Map map = new HashMap (); 74 BreakpointUtils.addJavaBreakpointAttributes(map, destMethod); 75 IResource resource = BreakpointUtils.getBreakpointResource(destMethod); 76 int[] range = getNewLineNumberAndRange(destMethod); 77 IJavaMethodBreakpoint breakpoint = JDIDebugModel.createMethodBreakpoint( 78 resource, 79 fDestType.getFullyQualifiedName(), 80 getMethodName(), 81 getSignature(), 82 isEntry(), 83 isExit(), 84 isNativeOnly(), 85 range[0], 86 range[1], 87 range[2], 88 getHitCount(), 89 true, 90 map); 91 apply(breakpoint); 92 getOriginalBreakpoint().delete(); 93 return new DeleteBreakpointChange(breakpoint); 94 } 95 96 } 97 | Popular Tags |