📄 midletjadfilechangescollector.java
字号:
/**
* Copyright (c) 2003-2005 Craig Setera
* All Rights Reserved.
* Licensed under the Eclipse Public License - v 1.0
* For more information see http://www.eclipse.org/legal/epl-v10.html
*/
package eclipseme.core.internal.refactoring;
import java.util.regex.Matcher;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.SubProgressMonitor;
import org.eclipse.jdt.core.IClasspathEntry;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IJavaProject;
import org.eclipse.jdt.core.IType;
import org.eclipse.ltk.core.refactoring.CompositeChange;
import eclipseme.core.IEclipseMECoreConstants;
import eclipseme.core.internal.utils.AbstractClasspathEntryVisitor;
import eclipseme.core.model.IMidletSuiteProject;
import eclipseme.core.model.MidletSuiteFactory;
/**
* Type description
* <p />
* Copyright (c) 2003-2005 Craig Setera<br>
* All Rights Reserved.<br>
* Licensed under the Eclipse Public License - v 1.0<p/>
* <br>
* $Revision: 1.2 $
* <br>
* $Date: 2006/02/11 21:26:57 $
* <br>
* @author Craig Setera
*/
class MidletJadFileChangesCollector extends AbstractClasspathEntryVisitor {
static final int MODE_RENAME = 1;
static final int MODE_DELETE = 2;
/**
* Create the CompositeChange that holds the JAD file changes.
*
* @param mode
* @param type
* @param newName
* @param monitor
* @return
* @throws CoreException
*/
public static CompositeChange collectChange(
int mode,
IType type,
String newName,
IProgressMonitor monitor)
throws CoreException
{
IJavaProject javaProject =
(IJavaProject) type.getAncestor(IJavaElement.JAVA_PROJECT);
MidletJadFileChangesCollector collector = new MidletJadFileChangesCollector(
mode,
javaProject,
type,
newName);
collector.addJavaProjectChanges(javaProject, monitor);
collector.getRunner().run(javaProject, collector, monitor);
return collector.getChange();
}
private int mode;
private String oldName;
private String newName;
private CompositeChange change;
/**
* Construct a new changes collector.
*
* @param javaProject
* @param change
*/
public MidletJadFileChangesCollector(
int mode,
IJavaProject javaProject,
IType type,
String newName)
{
this.mode = mode;
this.newName = newName;
this.oldName = type.getFullyQualifiedName();
change = new CompositeChange("Update Application Descriptor Midlet References");
}
/**
* Return the composite change created by this collector.
*
* @return
*/
public CompositeChange getChange() {
return change;
}
/**
* @see eclipseme.core.internal.utils.IClasspathEntryVisitor#visitProject(org.eclipse.jdt.core.IClasspathEntry, org.eclipse.jdt.core.IJavaProject, org.eclipse.jdt.core.IJavaProject, org.eclipse.core.runtime.IProgressMonitor)
*/
public boolean visitProject(
IClasspathEntry entry,
IJavaProject javaProject,
IJavaProject classpathProject,
IProgressMonitor monitor)
throws CoreException
{
addJavaProjectChanges(javaProject, monitor);
return true;
}
/**
* Add any JAD file updates found in the specified project.
*
* @param jadFile
* @param monitor
* @throws CoreException
*/
private void addJadFileChanges(IFile jadFile, IProgressMonitor monitor)
throws CoreException
{
MidletJadTextFileMidletChange jadChange = new MidletJadTextFileMidletChange(
mode,
jadFile.getName(),
jadFile,
oldName,
newName);
// Only add changes that actually match
SubProgressMonitor subProgressMonitor = new SubProgressMonitor(monitor, 3);
Matcher matcher = jadChange.getMatcher(monitor);
if (matcher.find()) {
jadChange.initializeTextEdit(monitor);
change.add(jadChange);
}
subProgressMonitor.done();
}
/**
* Handle visitation of a java project.
*
* @param javaProject
* @param monitor
* @throws CoreException
*/
private void addJavaProjectChanges(IJavaProject javaProject, IProgressMonitor monitor)
throws CoreException
{
monitor.setTaskName("Creating Application Descriptor for " + javaProject.getElementName());
if (isMidletSuite(javaProject)) {
IMidletSuiteProject midletSuite =
MidletSuiteFactory.getMidletSuiteProject(javaProject);
if (midletSuite != null) {
IFile jadFile = midletSuite.getJadFile();
if (jadFile.exists()) {
addJadFileChanges(jadFile, monitor);
}
}
}
monitor.worked(1);
}
/**
* Return a boolean describing whether the specified java project is
* a midlet suite project.
*
* @param javaProject
* @return
* @throws CoreException
*/
private boolean isMidletSuite(IJavaProject javaProject)
throws CoreException
{
return javaProject.getProject().hasNature(IEclipseMECoreConstants.J2ME_NATURE_ID);
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -