1 11 package org.eclipse.jdt.internal.debug.core.refactoring; 12 13 import java.text.MessageFormat ; 14 import java.util.Map ; 15 16 import org.eclipse.core.runtime.CoreException; 17 import org.eclipse.jdt.core.IMethod; 18 import org.eclipse.jdt.core.ISourceRange; 19 import org.eclipse.jdt.core.IType; 20 import org.eclipse.jdt.core.Signature; 21 import org.eclipse.jdt.debug.core.IJavaMethodBreakpoint; 22 import org.eclipse.jdt.debug.core.JDIDebugModel; 23 import org.eclipse.jdt.internal.debug.ui.BreakpointUtils; 24 import org.eclipse.ltk.core.refactoring.Change; 25 26 27 30 public class JavaMethodBreakpointTypeChange extends JavaLineBreakpointTypeChange { 31 32 private String fMethodName; 33 private String fMethodSignature; 34 private boolean fIsEntry; 35 private boolean fIsExit; 36 private boolean fIsNativeOnly; 37 private boolean fIsEnable; 38 39 public JavaMethodBreakpointTypeChange(IJavaMethodBreakpoint methodBreakpoint, Object changedElement, Object argument, int changeType) throws CoreException { 40 super(methodBreakpoint, changedElement, argument, changeType); 41 fMethodName= methodBreakpoint.getMethodName(); 42 fMethodSignature= methodBreakpoint.getMethodSignature(); 43 fIsEntry= methodBreakpoint.isEntry(); 44 fIsExit= methodBreakpoint.isExit(); 45 fIsNativeOnly= methodBreakpoint.isNativeOnly(); 46 fIsEnable= methodBreakpoint.isEnabled(); 47 } 48 49 52 public String getErrorMessageNoMoreExists() { 53 return MessageFormat.format(RefactoringMessages.JavaMethodBreakpointTypeChange_0, new String [] {getDeclaringType().getElementName(), fMethodName}); } 55 56 59 public String getName() { 60 return MessageFormat.format(RefactoringMessages.JavaMethodBreakpointTypeChange_1, new String [] {getDeclaringType().getElementName(), fMethodName}); } 62 63 66 public Change performChange(IType newType, Object undoChangedElement, Object undoArgument, int changeType) throws CoreException { 67 String [] parameterTypes= Signature.getParameterTypes(fMethodSignature); 68 for (int i= 0; i < parameterTypes.length; i++) { 69 parameterTypes[i]= parameterTypes[i].replace('/', '.'); 70 } 71 IMethod method= newType.getMethod(fMethodName, parameterTypes); 72 IMethod[] methods= newType.findMethods(method); 73 int lineNumber= getLineNumber(); 74 int start = getCharStart(); 75 int end = getCharEnd(); 76 if (methods.length == 1) { 77 method= methods[0]; 78 ISourceRange range = method.getNameRange(); 79 if (range != null) { 80 start = range.getOffset(); 81 end = start + range.getLength(); 82 lineNumber= -1; 83 } 84 } 85 Map attributes= getAttributes(); 86 BreakpointUtils.addJavaBreakpointAttributes(attributes, method); 87 IJavaMethodBreakpoint newMethodBreakpoint= JDIDebugModel.createMethodBreakpoint( 88 BreakpointUtils.getBreakpointResource(newType), 89 newType.getFullyQualifiedName(), 90 fMethodName, 91 fMethodSignature, 92 fIsEntry, 93 fIsExit, 94 fIsNativeOnly, 95 lineNumber, 96 start, 97 end, 98 getHitCount(), 99 true, 100 attributes); 101 newMethodBreakpoint.setEnabled(fIsEnable); 102 getBreakpoint().delete(); 103 return new JavaMethodBreakpointTypeChange(newMethodBreakpoint, undoChangedElement, undoArgument, changeType); 104 } 105 106 } 107 | Popular Tags |