KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > eclipse > jdt > internal > debug > core > refactoring > JavaMethodBreakpointTypeChange


1 /*******************************************************************************
2  * Copyright (c) 2000, 2005 IBM Corporation and others.
3  * All rights reserved. This program and the accompanying materials
4  * are made available under the terms of the Eclipse Public License v1.0
5  * which accompanies this distribution, and is available at
6  * http://www.eclipse.org/legal/epl-v10.html
7  *
8  * Contributors:
9  * IBM Corporation - initial API and implementation
10  *******************************************************************************/

11 package org.eclipse.jdt.internal.debug.core.refactoring;
12
13 import java.text.MessageFormat JavaDoc;
14 import java.util.Map JavaDoc;
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 /**
28  * Change to update a method breakpoint when a IType is moved or renamed.
29  */

30 public class JavaMethodBreakpointTypeChange extends JavaLineBreakpointTypeChange {
31
32     private String JavaDoc fMethodName;
33     private String JavaDoc fMethodSignature;
34     private boolean fIsEntry;
35     private boolean fIsExit;
36     private boolean fIsNativeOnly;
37     private boolean fIsEnable;
38     
39     public JavaMethodBreakpointTypeChange(IJavaMethodBreakpoint methodBreakpoint, Object JavaDoc changedElement, Object JavaDoc 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     /* (non-Javadoc)
50      * @see org.eclipse.jdt.internal.debug.core.refactoring.JavaBreakpointTypeNameChange#getErrorMessageNoMoreExists()
51      */

52     public String JavaDoc getErrorMessageNoMoreExists() {
53         return MessageFormat.format(RefactoringMessages.JavaMethodBreakpointTypeChange_0, new String JavaDoc[] {getDeclaringType().getElementName(), fMethodName}); //$NON-NLS-1$
54
}
55
56     /* (non-Javadoc)
57      * @see org.eclipse.ltk.core.refactoring.Change#getName()
58      */

59     public String JavaDoc getName() {
60         return MessageFormat.format(RefactoringMessages.JavaMethodBreakpointTypeChange_1, new String JavaDoc[] {getDeclaringType().getElementName(), fMethodName}); //$NON-NLS-1$
61
}
62
63     /* (non-Javadoc)
64      * @see org.eclipse.jdt.internal.debug.core.refactoring.JavaBreakpointTypeNameChange#performChange(org.eclipse.jdt.core.IType, java.lang.String)
65      */

66     public Change performChange(IType newType, Object JavaDoc undoChangedElement, Object JavaDoc undoArgument, int changeType) throws CoreException {
67         String JavaDoc[] 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 JavaDoc 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