blob: bab01c983ad1ec316a0744737447a623dbe43a77 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004 International Business Machines Corp. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Common Public License v0.5
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/cpl-v05.html
*
* Contributors:
* IBM Corporation - initial API and implementation
******************************************************************************/
package org.eclipse.jdt.internal.debug.core.refactoring;
import java.text.MessageFormat;
import java.util.Map;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.jdt.core.IField;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.debug.core.IJavaWatchpoint;
import org.eclipse.jdt.debug.core.JDIDebugModel;
import org.eclipse.debug.core.DebugPlugin;
import org.eclipse.debug.core.IBreakpointManager;
import org.eclipse.debug.core.model.IBreakpoint;
import org.eclipse.jdt.internal.debug.ui.BreakpointUtils;
import org.eclipse.ltk.core.refactoring.Change;
import org.eclipse.ltk.core.refactoring.RefactoringStatus;
/**
*/
public class JavaWatchpointFieldNameChange extends Change {
private IJavaWatchpoint fWatchpoint;
private String fNewName;
private String fOldName;
private IType fDeclaringType;
public static Change createChange(IField field, String newName) throws CoreException {
String typeName= field.getDeclaringType().getFullyQualifiedName();
String fieldName= field.getElementName();
IBreakpointManager breakpointManager= DebugPlugin.getDefault().getBreakpointManager();
IBreakpoint[] breakpoints= breakpointManager.getBreakpoints(JDIDebugModel.getPluginIdentifier());
for (int i= 0; i < breakpoints.length; i++) {
IBreakpoint breakpoint= breakpoints[i];
if (breakpoint instanceof IJavaWatchpoint) {
IJavaWatchpoint watchpoint= (IJavaWatchpoint)breakpoint;
if (typeName.equals(watchpoint.getTypeName()) && fieldName.equals(watchpoint.getFieldName())) {
return new JavaWatchpointFieldNameChange(watchpoint, newName);
}
}
}
return null;
}
public JavaWatchpointFieldNameChange(IJavaWatchpoint watchpoint, String newName) throws CoreException {
fWatchpoint= watchpoint;
fNewName= newName;
fOldName= fWatchpoint.getFieldName();
fDeclaringType= BreakpointUtils.getType(watchpoint);
}
/* (non-Javadoc)
* @see org.eclipse.jdt.internal.corext.refactoring.base.Change#getName()
*/
public String getName() {
return MessageFormat.format(RefactoringMessages.getString("JavaWatchpointFieldNameChange.1"), new String[] {fDeclaringType.getElementName(), fOldName}); //$NON-NLS-1$
}
/* (non-Javadoc)
* @see org.eclipse.jdt.internal.corext.refactoring.base.Change#initializeValidationData(org.eclipse.core.runtime.IProgressMonitor)
*/
public void initializeValidationData(IProgressMonitor pm) throws CoreException {
}
/* (non-Javadoc)
* @see org.eclipse.jdt.internal.corext.refactoring.base.Change#isValid(org.eclipse.core.runtime.IProgressMonitor)
*/
public RefactoringStatus isValid(IProgressMonitor pm) throws CoreException {
RefactoringStatus status= new RefactoringStatus();
if (!fWatchpoint.isRegistered()) {
status.addFatalError(MessageFormat.format(RefactoringMessages.getString("JavaWatchpointFieldNameChange.2"), new String[] {fDeclaringType.getElementName(), fOldName})); //$NON-NLS-1$
}
return status;
}
/* (non-Javadoc)
* @see org.eclipse.jdt.internal.corext.refactoring.base.Change#perform(org.eclipse.core.runtime.IProgressMonitor)
*/
public Change perform(IProgressMonitor pm) throws CoreException {
IField newField= fDeclaringType.getField(fNewName);
Map attributes= fWatchpoint.getMarker().getAttributes();
boolean isAccess= fWatchpoint.isAccess();
boolean isModification= fWatchpoint.isModification();
boolean isEnable= fWatchpoint.isEnabled();
BreakpointUtils.addJavaBreakpointAttributes(attributes, newField);
IJavaWatchpoint newWatchpoint= JDIDebugModel.createWatchpoint(fWatchpoint.getMarker().getResource(), fWatchpoint.getTypeName(), fNewName, fWatchpoint.getLineNumber(), fWatchpoint.getCharStart(), fWatchpoint.getCharEnd(), fWatchpoint.getHitCount(), true, attributes);
newWatchpoint.setAccess(isAccess);
newWatchpoint.setModification(isModification);
newWatchpoint.setEnabled(isEnable);
fWatchpoint.delete();
return new JavaWatchpointFieldNameChange(newWatchpoint, fOldName);
}
/* (non-Javadoc)
* @see org.eclipse.jdt.internal.corext.refactoring.base.Change#getModifiedElement()
*/
public Object getModifiedElement() {
return fWatchpoint;
}
}