/*******************************************************************************
* Copyright (c) 2004, 2013 Wind River Systems, Inc. and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* Markus Schorn - initial API and implementation
* Sergey Prigogin (Google)
******************************************************************************/
package org.eclipse.cdt.internal.ui.refactoring.rename;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Iterator;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.content.IContentType;
import org.eclipse.jface.text.ITextSelection;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.ide.IDE;
import org.eclipse.cdt.core.CCorePlugin;
import org.eclipse.cdt.core.model.ICElement;
import org.eclipse.cdt.core.model.IWorkingCopy;
/**
* Serves to launch the various refactorings.
*/
public class CRefactory {
public static final int OPTION_IN_CODE_REFERENCES = 0x01;
public static final int OPTION_IN_INACTIVE_CODE = 0x02;
public static final int OPTION_IN_COMMENT = 0x04;
public static final int OPTION_IN_STRING_LITERAL = 0x08;
public static final int OPTION_IN_INCLUDE_DIRECTIVE = 0x10;
public static final int OPTION_IN_MACRO_DEFINITION = 0x20;
public static final int OPTION_IN_PREPROCESSOR_DIRECTIVE = 0x40;
public static final int OPTION_DO_VIRTUAL = 0x80;
public static final int OPTION_EXHAUSTIVE_FILE_SEARCH = 0x100;
public static final int ARGUMENT_UNKNOWN = 0;
public static final int ARGUMENT_LOCAL_VAR = 1;
public static final int ARGUMENT_PARAMETER = 2;
public static final int ARGUMENT_FILE_LOCAL_VAR = 3;
public static final int ARGUMENT_GLOBAL_VAR = 4;
public static final int ARGUMENT_FIELD = 5;
public static final int ARGUMENT_FILE_LOCAL_FUNCTION = 6;
public static final int ARGUMENT_GLOBAL_FUNCTION = 7;
public static final int ARGUMENT_VIRTUAL_METHOD = 8;
public static final int ARGUMENT_NON_VIRTUAL_METHOD = 9;
public static final int ARGUMENT_TYPE = 10;
public static final int ARGUMENT_MACRO = 11;
public static final int ARGUMENT_INCLUDE_DIRECTIVE = 12;
public static final int ARGUMENT_ENUMERATOR = 13;
public static final int ARGUMENT_CLASS_TYPE = 14;
public static final int ARGUMENT_NAMESPACE = 15;
private static CRefactory sInstance= new CRefactory();
private TextSearchWrapper fTextSearch;
public static CRefactory getInstance() {
return sInstance;
}
private CRefactory() {
}
// Runs the rename refactoring.
public void rename(Shell shell, ICElement arg) {
if (!IDE.saveAllEditors(new IResource[] { ResourcesPlugin.getWorkspace().getRoot() }, false)) {
return;
}
CRefactoringArgument iarg= new CRefactoringArgument(arg);
final CRenameProcessor processor = new CRenameProcessor(this, iarg);
CRenameRefactoring refactoring= new CRenameRefactoring(processor);
RenameSupport.openDialog(shell, refactoring);
}
public void rename(Shell shell, IWorkingCopy workingCopy, ITextSelection selection) {
IResource res= workingCopy.getResource();
if (!(res instanceof IFile)) {
return;
}
if (!IDE.saveAllEditors(new IResource[] { ResourcesPlugin.getWorkspace().getRoot() }, false)) {
return;
}
CRefactoringArgument iarg=
new CRefactoringArgument((IFile) res, selection.getOffset(), selection.getLength());
final CRenameProcessor processor = new CRenameProcessor(this, iarg);
CRenameRefactoring refactoring= new CRenameRefactoring(processor);
RenameSupport.openDialog(shell, refactoring);
}
public TextSearchWrapper getTextSearch() {
if (fTextSearch == null) {
return new TextSearchWrapper();
}
return fTextSearch;
}
public String[] getCCppPatterns() {
IContentType[] cts= Platform.getContentTypeManager().getAllContentTypes();
HashSet<String> all= new HashSet<String>();
for (IContentType candidate : cts) {
IContentType type = candidate;
boolean useIt= false;
while (!useIt && type != null) {
String id= type.getId();
if (id.equals(CCorePlugin.CONTENT_TYPE_CHEADER) ||
id.equals(CCorePlugin.CONTENT_TYPE_CSOURCE) ||
id.equals(CCorePlugin.CONTENT_TYPE_CXXHEADER) ||
id.equals(CCorePlugin.CONTENT_TYPE_CXXSOURCE)) {
useIt= true;
} else {
type= type.getBaseType();
}
}
if (useIt) {
String exts[] = candidate.getFileSpecs(IContentType.FILE_EXTENSION_SPEC);
all.addAll(Arrays.asList(exts));
}
}
String[] result= new String[all.size()];
Iterator<String> it= all.iterator();
for (int i= 0; i < result.length; i++) {
result[i]= "*." + it.next(); //$NON-NLS-1$
}
return result;
}
}