mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
Merge branch 'master' of git.labs.intellij.net:idea/community
This commit is contained in:
+4
-4
@@ -23,12 +23,12 @@ fi
|
||||
|
||||
SCRIPT_LOCATION=$0
|
||||
# Step through symlinks to find where the script really is
|
||||
while [ -L $SCRIPT_LOCATION ]; do
|
||||
SCRIPT_LOCATION=`readlink -e $SCRIPT_LOCATION`
|
||||
while [ -L "$SCRIPT_LOCATION" ]; do
|
||||
SCRIPT_LOCATION=`readlink -e "$SCRIPT_LOCATION"`
|
||||
done
|
||||
|
||||
IDEA_HOME=`dirname $SCRIPT_LOCATION`/..
|
||||
IDEA_BIN_HOME=`dirname $SCRIPT_LOCATION`
|
||||
IDEA_HOME=`dirname "$SCRIPT_LOCATION"`/..
|
||||
IDEA_BIN_HOME=`dirname "$SCRIPT_LOCATION"`
|
||||
|
||||
export JAVA_HOME
|
||||
export IDEA_HOME
|
||||
|
||||
@@ -24,26 +24,30 @@ import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.fileChooser.FileChooser;
|
||||
import com.intellij.openapi.fileChooser.FileChooserDescriptor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.project.DumbAware;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.projectImport.ProjectOpenProcessor;
|
||||
import com.intellij.projectImport.ProjectOpenProcessorBase;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Set;
|
||||
|
||||
public class OpenProjectAction extends AnAction implements DumbAware {
|
||||
public void actionPerformed(AnActionEvent e) {
|
||||
Project project = PlatformDataKeys.PROJECT.getData(e.getDataContext());
|
||||
final Project project = PlatformDataKeys.PROJECT.getData(e.getDataContext());
|
||||
|
||||
final FileChooserDescriptor descriptor = new OpenProjectFileChooserDescriptor(true);
|
||||
descriptor.setTitle(IdeBundle.message("title.open.project"));
|
||||
String [] extensions = new String[]{ProjectFileType.DOT_DEFAULT_EXTENSION};
|
||||
final Set<String> extensions = new HashSet<String>();
|
||||
extensions.add(ProjectFileType.DOT_DEFAULT_EXTENSION);
|
||||
final ProjectOpenProcessor[] openProcessors = Extensions.getExtensions(ProjectOpenProcessorBase.EXTENSION_POINT_NAME);
|
||||
for (ProjectOpenProcessor openProcessor : openProcessors) {
|
||||
final String[] supportedExtensions = ((ProjectOpenProcessorBase)openProcessor).getSupportedExtensions();
|
||||
if (supportedExtensions != null) {
|
||||
extensions = ArrayUtil.mergeArrays(extensions, supportedExtensions, String.class);
|
||||
Collections.addAll(extensions, supportedExtensions);
|
||||
}
|
||||
}
|
||||
descriptor.setDescription(IdeBundle.message("filter.project.files", StringUtil.join(extensions, ", ")));
|
||||
|
||||
+27
-20
@@ -22,6 +22,7 @@ import com.intellij.codeInspection.*;
|
||||
import com.intellij.openapi.extensions.ExtensionPoint;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.module.LanguageLevelUtil;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleUtil;
|
||||
import com.intellij.openapi.vfs.CharsetToolkit;
|
||||
import com.intellij.pom.java.LanguageLevel;
|
||||
@@ -172,25 +173,28 @@ public class Java15APIUsageInspection extends BaseJavaLocalInspectionTool {
|
||||
final PsiElement resolved = reference.resolve();
|
||||
|
||||
if (resolved instanceof PsiCompiledElement && resolved instanceof PsiMember) {
|
||||
final LanguageLevel languageLevel = LanguageLevelUtil.getEffectiveLanguageLevel(ModuleUtil.findModuleForPsiElement(reference.getElement()));
|
||||
if (isForbiddenApiUsage((PsiMember)resolved, languageLevel)) {
|
||||
PsiClass psiClass = null;
|
||||
final PsiElement qualifier = reference.getQualifier();
|
||||
if (qualifier != null) {
|
||||
if (qualifier instanceof PsiExpression) {
|
||||
psiClass = PsiUtil.resolveClassInType(((PsiExpression)qualifier).getType());
|
||||
final Module module = ModuleUtil.findModuleForPsiElement(reference.getElement());
|
||||
if (module != null) {
|
||||
final LanguageLevel languageLevel = LanguageLevelUtil.getEffectiveLanguageLevel(module);
|
||||
if (isForbiddenApiUsage((PsiMember)resolved, languageLevel)) {
|
||||
PsiClass psiClass = null;
|
||||
final PsiElement qualifier = reference.getQualifier();
|
||||
if (qualifier != null) {
|
||||
if (qualifier instanceof PsiExpression) {
|
||||
psiClass = PsiUtil.resolveClassInType(((PsiExpression)qualifier).getType());
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
psiClass = PsiTreeUtil.getParentOfType(reference, PsiClass.class);
|
||||
}
|
||||
if (psiClass != null) {
|
||||
if (isIgnored(psiClass)) return;
|
||||
for (PsiClass superClass : psiClass.getSupers()) {
|
||||
if (isIgnored(superClass)) return;
|
||||
else {
|
||||
psiClass = PsiTreeUtil.getParentOfType(reference, PsiClass.class);
|
||||
}
|
||||
if (psiClass != null) {
|
||||
if (isIgnored(psiClass)) return;
|
||||
for (PsiClass superClass : psiClass.getSupers()) {
|
||||
if (isIgnored(superClass)) return;
|
||||
}
|
||||
}
|
||||
registerError(reference, languageLevel);
|
||||
}
|
||||
registerError(reference, languageLevel);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -203,10 +207,13 @@ public class Java15APIUsageInspection extends BaseJavaLocalInspectionTool {
|
||||
@Override public void visitNewExpression(final PsiNewExpression expression) {
|
||||
super.visitNewExpression(expression);
|
||||
final PsiMethod constructor = expression.resolveConstructor();
|
||||
final LanguageLevel languageLevel = LanguageLevelUtil.getEffectiveLanguageLevel(ModuleUtil.findModuleForPsiElement(expression));
|
||||
if (constructor instanceof PsiCompiledElement) {
|
||||
if (isForbiddenApiUsage(constructor, languageLevel)) {
|
||||
registerError(expression.getClassReference(), languageLevel);
|
||||
final Module module = ModuleUtil.findModuleForPsiElement(expression);
|
||||
if (module != null) {
|
||||
final LanguageLevel languageLevel = LanguageLevelUtil.getEffectiveLanguageLevel(module);
|
||||
if (constructor instanceof PsiCompiledElement) {
|
||||
if (isForbiddenApiUsage(constructor, languageLevel)) {
|
||||
registerError(expression.getClassReference(), languageLevel);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+3
-3
@@ -219,6 +219,7 @@ class IntroduceConstantDialog extends DialogWrapper {
|
||||
myTfTargetClassName.getChildComponent().addDocumentListener(new DocumentAdapter() {
|
||||
public void documentChanged(DocumentEvent e) {
|
||||
targetClassChanged();
|
||||
enableEnumDependant(introduceEnumConstant());
|
||||
}
|
||||
});
|
||||
myIntroduceEnumConstantCb.addActionListener(new ActionListener() {
|
||||
@@ -226,7 +227,6 @@ class IntroduceConstantDialog extends DialogWrapper {
|
||||
enableEnumDependant(introduceEnumConstant());
|
||||
}
|
||||
});
|
||||
enableEnumDependant(introduceEnumConstant());
|
||||
final JPanel enumPanel = new JPanel(new BorderLayout());
|
||||
enumPanel.add(myIntroduceEnumConstantCb, BorderLayout.EAST);
|
||||
myTargetClassNamePanel.add(enumPanel, BorderLayout.SOUTH);
|
||||
@@ -285,7 +285,7 @@ class IntroduceConstantDialog extends DialogWrapper {
|
||||
}
|
||||
|
||||
final PsiManager psiManager = PsiManager.getInstance(myProject);
|
||||
if (myTypeSelectorManager.isSuggestedType("java.lang.String") &&
|
||||
if ((myTypeSelectorManager.isSuggestedType("java.lang.String") || (myLocalVariable != null && AnnotationUtil.isAnnotated(myLocalVariable, AnnotationUtil.NON_NLS, false)))&&
|
||||
LanguageLevelProjectExtension.getInstance(psiManager.getProject()).getLanguageLevel().hasEnumKeywordAndAutoboxing() &&
|
||||
JavaPsiFacade.getInstance(psiManager.getProject()).findClass(AnnotationUtil.NON_NLS, myParentClass.getResolveScope()) != null) {
|
||||
final PropertiesComponent component = PropertiesComponent.getInstance(myProject);
|
||||
@@ -306,7 +306,7 @@ class IntroduceConstantDialog extends DialogWrapper {
|
||||
bg.add(myRbpackageLocal);
|
||||
bg.add(myRbProtected);
|
||||
bg.add(myRbPublic);
|
||||
|
||||
enableEnumDependant(introduceEnumConstant());
|
||||
return myPanel;
|
||||
}
|
||||
|
||||
|
||||
+133
-108
@@ -53,11 +53,11 @@ import java.util.*;
|
||||
public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
private static final Logger LOG = Logger.getInstance("#com.intellij.refactoring.move.moveClassesOrPackages.MoveClassToInnerProcessor");
|
||||
|
||||
private PsiClass myClassToMove;
|
||||
private PsiClass[] myClassesToMove;
|
||||
private final PsiClass myTargetClass;
|
||||
private PsiPackage mySourcePackage;
|
||||
private PsiPackage[] mySourcePackage;
|
||||
private final PsiPackage myTargetPackage;
|
||||
private String mySourceVisibility;
|
||||
private String[] mySourceVisibility;
|
||||
private final boolean mySearchInComments;
|
||||
private final boolean mySearchInNonJavaFiles;
|
||||
private NonCodeUsageInfo[] myNonCodeUsages;
|
||||
@@ -65,13 +65,13 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
private final MoveCallback myMoveCallback;
|
||||
|
||||
public MoveClassToInnerProcessor(Project project,
|
||||
final PsiClass classToMove,
|
||||
final PsiClass[] classesToMove,
|
||||
@NotNull final PsiClass targetClass,
|
||||
boolean searchInComments,
|
||||
boolean searchInNonJavaFiles,
|
||||
MoveCallback moveCallback) {
|
||||
super(project);
|
||||
setClassToMove(classToMove);
|
||||
setClassesToMove(classesToMove);
|
||||
myTargetClass = targetClass;
|
||||
mySearchInComments = searchInComments;
|
||||
mySearchInNonJavaFiles = searchInNonJavaFiles;
|
||||
@@ -79,29 +79,30 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
myTargetPackage = JavaDirectoryService.getInstance().getPackage(myTargetClass.getContainingFile().getContainingDirectory());
|
||||
}
|
||||
|
||||
private void setClassToMove(final PsiClass classToMove) {
|
||||
myClassToMove = classToMove;
|
||||
mySourceVisibility = VisibilityUtil.getVisibilityModifier(myClassToMove.getModifierList());
|
||||
mySourcePackage = JavaDirectoryService.getInstance().getPackage(myClassToMove.getContainingFile().getContainingDirectory());
|
||||
private void setClassesToMove(final PsiClass[] classesToMove) {
|
||||
myClassesToMove = classesToMove;
|
||||
mySourcePackage = new PsiPackage[classesToMove.length];
|
||||
mySourceVisibility = new String[classesToMove.length];
|
||||
for (int i = 0; i < classesToMove.length; i++) {
|
||||
PsiClass psiClass = classesToMove[i];
|
||||
mySourceVisibility[i] = VisibilityUtil.getVisibilityModifier(psiClass.getModifierList());
|
||||
mySourcePackage[i] = JavaDirectoryService.getInstance().getPackage(psiClass.getContainingFile().getContainingDirectory());
|
||||
}
|
||||
}
|
||||
|
||||
protected UsageViewDescriptor createUsageViewDescriptor(UsageInfo[] usages) {
|
||||
return new MoveClassesOrPackagesViewDescriptor(new PsiElement[] { myClassToMove },
|
||||
return new MoveClassesOrPackagesViewDescriptor(myClassesToMove,
|
||||
mySearchInComments, mySearchInNonJavaFiles,
|
||||
myTargetClass.getQualifiedName());
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public UsageInfo[] findUsages() {
|
||||
List<UsageInfo> usages = new ArrayList<UsageInfo>();
|
||||
String newName = myTargetClass.getQualifiedName() + "." + myClassToMove.getName();
|
||||
Collections.addAll(usages, MoveClassesOrPackagesUtil.findUsages(myClassToMove, mySearchInComments,
|
||||
mySearchInNonJavaFiles, newName));
|
||||
for (Iterator<UsageInfo> iterator = usages.iterator(); iterator.hasNext();) {
|
||||
UsageInfo usageInfo = iterator.next();
|
||||
if (!(usageInfo instanceof NonCodeUsageInfo) && PsiTreeUtil.isAncestor(myClassToMove, usageInfo.getElement(), false)) {
|
||||
iterator.remove();
|
||||
}
|
||||
final List<UsageInfo> usages = new ArrayList<UsageInfo>();
|
||||
for (PsiClass classToMove : myClassesToMove) {
|
||||
final String newName = myTargetClass.getQualifiedName() + "." + classToMove.getName();
|
||||
Collections.addAll(usages, MoveClassesOrPackagesUtil.findUsages(classToMove, mySearchInComments,
|
||||
mySearchInNonJavaFiles, newName));
|
||||
}
|
||||
return usages.toArray(new UsageInfo[usages.size()]);
|
||||
}
|
||||
@@ -111,40 +112,45 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
|
||||
protected void refreshElements(final PsiElement[] elements) {
|
||||
assert elements.length == 1;
|
||||
ApplicationManager.getApplication().runReadAction(new Runnable() {
|
||||
public void run() {
|
||||
setClassToMove((PsiClass)elements[0]);
|
||||
final PsiClass[] classesToMove = new PsiClass[elements.length];
|
||||
for (int i = 0; i < classesToMove.length; i++) {
|
||||
classesToMove[i] = (PsiClass)elements[i];
|
||||
}
|
||||
setClassesToMove(classesToMove);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
protected void performRefactoring(UsageInfo[] usages) {
|
||||
if (!prepareWritable(usages)) return;
|
||||
|
||||
final List<PsiElement> importStatements = new ArrayList<PsiElement>();
|
||||
if (!CodeStyleSettingsManager.getSettings(myProject).INSERT_INNER_CLASS_IMPORTS) {
|
||||
usages = filterUsagesInImportStatements(usages, importStatements);
|
||||
}
|
||||
saveNonCodeUsages(usages);
|
||||
final Map<PsiElement, PsiElement> oldToNewElementsMapping = new HashMap<PsiElement, PsiElement>();
|
||||
try {
|
||||
saveNonCodeUsages(usages);
|
||||
ChangeContextUtil.encodeContextInfo(myClassToMove, true);
|
||||
PsiClass newClass = (PsiClass)myTargetClass.addBefore(myClassToMove, myTargetClass.getRBrace());
|
||||
PsiUtil.setModifierProperty(newClass, PsiModifier.STATIC, true);
|
||||
newClass = (PsiClass)ChangeContextUtil.decodeContextInfo(newClass, null, null);
|
||||
|
||||
retargetClassRefs(myClassToMove, newClass);
|
||||
|
||||
final List<PsiElement> importStatements = new ArrayList<PsiElement>();
|
||||
if (!CodeStyleSettingsManager.getSettings(myProject).INSERT_INNER_CLASS_IMPORTS) {
|
||||
usages = filterUsagesInImportStatements(usages, importStatements);
|
||||
for (PsiClass classToMove : myClassesToMove) {
|
||||
ChangeContextUtil.encodeContextInfo(classToMove, true);
|
||||
PsiClass newClass = (PsiClass)myTargetClass.addBefore(classToMove, myTargetClass.getRBrace());
|
||||
PsiUtil.setModifierProperty(newClass, PsiModifier.STATIC, true);
|
||||
newClass = (PsiClass)ChangeContextUtil.decodeContextInfo(newClass, null, null);
|
||||
oldToNewElementsMapping.put(classToMove, newClass);
|
||||
}
|
||||
|
||||
Map<PsiElement, PsiElement> oldToNewElementsMapping = new HashMap<PsiElement, PsiElement>();
|
||||
oldToNewElementsMapping.put(myClassToMove, newClass);
|
||||
myNonCodeUsages = MoveClassesOrPackagesProcessor.retargetUsages(usages, oldToNewElementsMapping);
|
||||
retargetNonCodeUsages(newClass);
|
||||
retargetNonCodeUsages(oldToNewElementsMapping);
|
||||
|
||||
JavaCodeStyleManager.getInstance(myProject).removeRedundantImports((PsiJavaFile)newClass.getContainingFile());
|
||||
retargetClassRefsInMoved(oldToNewElementsMapping);
|
||||
|
||||
myClassToMove.delete();
|
||||
for(PsiElement element: importStatements) {
|
||||
JavaCodeStyleManager.getInstance(myProject).removeRedundantImports((PsiJavaFile)myTargetClass.getContainingFile());
|
||||
for (PsiClass classToMove : myClassesToMove) {
|
||||
classToMove.delete();
|
||||
}
|
||||
|
||||
for (PsiElement element: importStatements) {
|
||||
if (element.isValid()) {
|
||||
element.delete();
|
||||
}
|
||||
@@ -157,7 +163,7 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
|
||||
private boolean prepareWritable(final UsageInfo[] usages) {
|
||||
Set<PsiElement> elementsToMakeWritable = new HashSet<PsiElement>();
|
||||
elementsToMakeWritable.add(myClassToMove);
|
||||
Collections.addAll(elementsToMakeWritable, myClassesToMove);
|
||||
elementsToMakeWritable.add(myTargetClass);
|
||||
for(UsageInfo usage: usages) {
|
||||
PsiElement element = usage.getElement();
|
||||
@@ -172,40 +178,44 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
|
||||
private void saveNonCodeUsages(final UsageInfo[] usages) {
|
||||
for(UsageInfo usageInfo: usages) {
|
||||
if (usageInfo instanceof NonCodeUsageInfo) {
|
||||
final NonCodeUsageInfo nonCodeUsage = (NonCodeUsageInfo)usageInfo;
|
||||
PsiElement element = nonCodeUsage.getElement();
|
||||
if (element != null && PsiTreeUtil.isAncestor(myClassToMove, element, false)) {
|
||||
List<NonCodeUsageInfo> list = element.getCopyableUserData(ourNonCodeUsageKey);
|
||||
if (list == null) {
|
||||
list = new ArrayList<NonCodeUsageInfo>();
|
||||
element.putCopyableUserData(ourNonCodeUsageKey, list);
|
||||
for (PsiClass classToMove : myClassesToMove) {
|
||||
for(UsageInfo usageInfo: usages) {
|
||||
if (usageInfo instanceof NonCodeUsageInfo) {
|
||||
final NonCodeUsageInfo nonCodeUsage = (NonCodeUsageInfo)usageInfo;
|
||||
PsiElement element = nonCodeUsage.getElement();
|
||||
if (element != null && PsiTreeUtil.isAncestor(classToMove, element, false)) {
|
||||
List<NonCodeUsageInfo> list = element.getCopyableUserData(ourNonCodeUsageKey);
|
||||
if (list == null) {
|
||||
list = new ArrayList<NonCodeUsageInfo>();
|
||||
element.putCopyableUserData(ourNonCodeUsageKey, list);
|
||||
}
|
||||
list.add(nonCodeUsage);
|
||||
}
|
||||
list.add(nonCodeUsage);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void retargetNonCodeUsages(final PsiClass newClass) {
|
||||
newClass.accept(new PsiRecursiveElementVisitor() {
|
||||
@Override public void visitElement(final PsiElement element) {
|
||||
super.visitElement(element);
|
||||
List<NonCodeUsageInfo> list = element.getCopyableUserData(ourNonCodeUsageKey);
|
||||
if (list != null) {
|
||||
for(NonCodeUsageInfo info: list) {
|
||||
for(int i=0; i<myNonCodeUsages.length; i++) {
|
||||
if (myNonCodeUsages [i] == info) {
|
||||
myNonCodeUsages [i] = info.replaceElement(element);
|
||||
break;
|
||||
private void retargetNonCodeUsages(final Map<PsiElement, PsiElement> oldToNewElementMap) {
|
||||
for (PsiElement newClass : oldToNewElementMap.values()) {
|
||||
newClass.accept(new PsiRecursiveElementVisitor() {
|
||||
@Override public void visitElement(final PsiElement element) {
|
||||
super.visitElement(element);
|
||||
List<NonCodeUsageInfo> list = element.getCopyableUserData(ourNonCodeUsageKey);
|
||||
if (list != null) {
|
||||
for(NonCodeUsageInfo info: list) {
|
||||
for(int i=0; i<myNonCodeUsages.length; i++) {
|
||||
if (myNonCodeUsages [i] == info) {
|
||||
myNonCodeUsages [i] = info.replaceElement(element);
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
element.putCopyableUserData(ourNonCodeUsageKey, null);
|
||||
}
|
||||
element.putCopyableUserData(ourNonCodeUsageKey, null);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
protected void performPsiSpoilingRefactoring() {
|
||||
@@ -220,24 +230,29 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
private static void retargetClassRefs(final PsiClass classToMove, final PsiClass newClass) {
|
||||
newClass.accept(new JavaRecursiveElementVisitor() {
|
||||
@Override public void visitReferenceElement(final PsiJavaCodeReferenceElement reference) {
|
||||
PsiElement element = reference.resolve();
|
||||
if (element instanceof PsiClass && PsiTreeUtil.isAncestor(classToMove, element, false)) {
|
||||
PsiClass newInnerClass = findMatchingClass(classToMove, newClass, (PsiClass) element);
|
||||
try {
|
||||
reference.bindToElement(newInnerClass);
|
||||
private static void retargetClassRefsInMoved(final Map<PsiElement, PsiElement> oldToNewElementsMapping) {
|
||||
for (final PsiElement newClass : oldToNewElementsMapping.values()) {
|
||||
newClass.accept(new JavaRecursiveElementVisitor() {
|
||||
@Override public void visitReferenceElement(final PsiJavaCodeReferenceElement reference) {
|
||||
PsiElement element = reference.resolve();
|
||||
if (element instanceof PsiClass) {
|
||||
for (PsiElement oldClass : oldToNewElementsMapping.keySet()) {
|
||||
if (PsiTreeUtil.isAncestor(oldClass, element, false)) {
|
||||
PsiClass newInnerClass = findMatchingClass((PsiClass)oldClass, (PsiClass)oldToNewElementsMapping.get(oldClass), (PsiClass)element);
|
||||
try {
|
||||
reference.bindToElement(newInnerClass);
|
||||
return;
|
||||
}
|
||||
catch (IncorrectOperationException ex) {
|
||||
LOG.error(ex);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
catch(IncorrectOperationException ex) {
|
||||
LOG.error(ex);
|
||||
}
|
||||
}
|
||||
else {
|
||||
super.visitReferenceElement(reference);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
private static PsiClass findMatchingClass(final PsiClass classToMove, final PsiClass newClass, final PsiClass innerClass) {
|
||||
@@ -268,7 +283,7 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
|
||||
protected String getCommandName() {
|
||||
return RefactoringBundle.message("move.class.to.inner.command.name",
|
||||
myClassToMove.getQualifiedName(),
|
||||
myClassesToMove[0].getQualifiedName(),
|
||||
myTargetClass.getQualifiedName());
|
||||
}
|
||||
|
||||
@@ -283,42 +298,46 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
public MultiMap<PsiElement, String> getConflicts(final UsageInfo[] usages) {
|
||||
MultiMap<PsiElement, String> conflicts = new MultiMap<PsiElement, String>();
|
||||
|
||||
final PsiClass innerClass = myTargetClass.findInnerClassByName(myClassToMove.getName(), false);
|
||||
if (innerClass != null) {
|
||||
conflicts.putValue(innerClass, RefactoringBundle.message("move.to.inner.duplicate.inner.class",
|
||||
CommonRefactoringUtil.htmlEmphasize(myTargetClass.getQualifiedName()),
|
||||
CommonRefactoringUtil.htmlEmphasize(myClassToMove.getName())));
|
||||
for (PsiClass classToMove : myClassesToMove) {
|
||||
final PsiClass innerClass = myTargetClass.findInnerClassByName(classToMove.getName(), false);
|
||||
if (innerClass != null) {
|
||||
conflicts.putValue(innerClass, RefactoringBundle.message("move.to.inner.duplicate.inner.class",
|
||||
CommonRefactoringUtil.htmlEmphasize(myTargetClass.getQualifiedName()),
|
||||
CommonRefactoringUtil.htmlEmphasize(classToMove.getName())));
|
||||
}
|
||||
}
|
||||
|
||||
String classToMoveVisibility = VisibilityUtil.getVisibilityModifier(myClassToMove.getModifierList());
|
||||
String targetClassVisibility = VisibilityUtil.getVisibilityModifier(myTargetClass.getModifierList());
|
||||
for (int i = 0; i < myClassesToMove.length; i++) {
|
||||
PsiClass classToMove = myClassesToMove[i];
|
||||
String classToMoveVisibility = VisibilityUtil.getVisibilityModifier(classToMove.getModifierList());
|
||||
String targetClassVisibility = VisibilityUtil.getVisibilityModifier(myTargetClass.getModifierList());
|
||||
|
||||
boolean moveToOtherPackage = !Comparing.equal(mySourcePackage, myTargetPackage);
|
||||
if (moveToOtherPackage) {
|
||||
PsiElement[] elementsToMove = new PsiElement[] { myClassToMove };
|
||||
myClassToMove.accept(new PackageLocalsUsageCollector(elementsToMove, new PackageWrapper(myTargetPackage), conflicts));
|
||||
}
|
||||
boolean moveToOtherPackage = !Comparing.equal(mySourcePackage[i], myTargetPackage);
|
||||
if (moveToOtherPackage) {
|
||||
classToMove.accept(new PackageLocalsUsageCollector(myClassesToMove, new PackageWrapper(myTargetPackage), conflicts));
|
||||
}
|
||||
|
||||
ConflictsCollector collector = new ConflictsCollector(conflicts);
|
||||
if ((moveToOtherPackage &&
|
||||
(classToMoveVisibility.equals(PsiModifier.PACKAGE_LOCAL) || targetClassVisibility.equals(PsiModifier.PACKAGE_LOCAL))) ||
|
||||
targetClassVisibility.equals(PsiModifier.PRIVATE)) {
|
||||
detectInaccessibleClassUsages(usages, collector);
|
||||
}
|
||||
if (moveToOtherPackage) {
|
||||
detectInaccessibleMemberUsages(collector);
|
||||
ConflictsCollector collector = new ConflictsCollector(classToMove, conflicts);
|
||||
if ((moveToOtherPackage &&
|
||||
(classToMoveVisibility.equals(PsiModifier.PACKAGE_LOCAL) || targetClassVisibility.equals(PsiModifier.PACKAGE_LOCAL))) ||
|
||||
targetClassVisibility.equals(PsiModifier.PRIVATE)) {
|
||||
detectInaccessibleClassUsages(usages, collector, mySourceVisibility[i]);
|
||||
}
|
||||
if (moveToOtherPackage) {
|
||||
detectInaccessibleMemberUsages(collector);
|
||||
}
|
||||
}
|
||||
|
||||
return conflicts;
|
||||
}
|
||||
|
||||
private void detectInaccessibleClassUsages(final UsageInfo[] usages, final ConflictsCollector collector) {
|
||||
private void detectInaccessibleClassUsages(final UsageInfo[] usages, final ConflictsCollector collector, final String visibility) {
|
||||
for(UsageInfo usage: usages) {
|
||||
if (usage instanceof MoveRenameUsageInfo && !(usage instanceof NonCodeUsageInfo)) {
|
||||
PsiElement element = usage.getElement();
|
||||
if (element == null || PsiTreeUtil.getParentOfType(element, PsiImportStatement.class) != null) continue;
|
||||
if (isInaccessibleFromTarget(element, mySourceVisibility)) {
|
||||
collector.addConflict(myClassToMove, element);
|
||||
if (isInaccessibleFromTarget(element, visibility)) {
|
||||
collector.addConflict(collector.getClassToMove(), element);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -331,7 +350,7 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
|
||||
private void detectInaccessibleMemberUsages(final ConflictsCollector collector) {
|
||||
PsiElement[] members = collectPackageLocalMembers();
|
||||
PsiElement[] members = collectPackageLocalMembers(collector.getClassToMove());
|
||||
for(PsiElement member: members) {
|
||||
ReferencesSearch.search(member).forEach(new Processor<PsiReference>() {
|
||||
public boolean process(final PsiReference psiReference) {
|
||||
@@ -345,8 +364,8 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
}
|
||||
}
|
||||
|
||||
private PsiElement[] collectPackageLocalMembers() {
|
||||
return PsiTreeUtil.collectElements(myClassToMove, new PsiElementFilter() {
|
||||
private static PsiElement[] collectPackageLocalMembers(PsiElement classToMove) {
|
||||
return PsiTreeUtil.collectElements(classToMove, new PsiElementFilter() {
|
||||
public boolean isAccepted(final PsiElement element) {
|
||||
if (element instanceof PsiMember) {
|
||||
PsiMember member = (PsiMember) element;
|
||||
@@ -359,11 +378,13 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
});
|
||||
}
|
||||
|
||||
private class ConflictsCollector {
|
||||
private static class ConflictsCollector {
|
||||
private final PsiClass myClassToMove;
|
||||
private final MultiMap<PsiElement, String> myConflicts;
|
||||
private final Set<PsiElement> myReportedContainers = new HashSet<PsiElement>();
|
||||
|
||||
public ConflictsCollector(final MultiMap<PsiElement, String> conflicts) {
|
||||
public ConflictsCollector(PsiClass classToMove, final MultiMap<PsiElement, String> conflicts) {
|
||||
myClassToMove = classToMove;
|
||||
myConflicts = conflicts;
|
||||
}
|
||||
|
||||
@@ -380,5 +401,9 @@ public class MoveClassToInnerProcessor extends BaseRefactoringProcessor {
|
||||
myConflicts.putValue(targetElement, message);
|
||||
}
|
||||
}
|
||||
|
||||
public PsiElement getClassToMove() {
|
||||
return myClassToMove;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
+6
-6
@@ -423,17 +423,17 @@ public class MoveClassesOrPackagesDialog extends RefactoringDialog {
|
||||
|
||||
private void invokeMoveToInner() {
|
||||
saveRefactoringSettings();
|
||||
PsiClass targetClass = findTargetClass();
|
||||
final PsiClass targetClass = findTargetClass();
|
||||
final PsiClass[] classesToMove = new PsiClass[myElementsToMove.length];
|
||||
for (int i = 0; i < myElementsToMove.length; i++) {
|
||||
PsiClass psiClass = (PsiClass)myElementsToMove[i];
|
||||
// fire callback after last element has been processed
|
||||
invokeRefactoring(createMoveToInnerProcessor(targetClass, psiClass, i == myElementsToMove.length - 1 ? myMoveCallback : null));
|
||||
classesToMove[i] = (PsiClass)myElementsToMove[i];
|
||||
}
|
||||
invokeRefactoring(createMoveToInnerProcessor(targetClass, classesToMove, myMoveCallback));
|
||||
}
|
||||
|
||||
//for scala plugin
|
||||
protected MoveClassToInnerProcessor createMoveToInnerProcessor(PsiClass destination, @NotNull PsiClass psiClass, @Nullable final MoveCallback callback) {
|
||||
return new MoveClassToInnerProcessor(getProject(), psiClass, destination, isSearchInComments(), isSearchInNonJavaFiles(), callback);
|
||||
protected MoveClassToInnerProcessor createMoveToInnerProcessor(PsiClass destination, @NotNull PsiClass[] classesToMove, @Nullable final MoveCallback callback) {
|
||||
return new MoveClassToInnerProcessor(getProject(), classesToMove, destination, isSearchInComments(), isSearchInNonJavaFiles(), callback);
|
||||
}
|
||||
|
||||
protected final boolean isSearchInNonJavaFiles() {
|
||||
|
||||
+17
@@ -0,0 +1,17 @@
|
||||
package pack2;
|
||||
|
||||
public class A {
|
||||
/**
|
||||
* pack2.A.Class0
|
||||
*/
|
||||
public static class Class1 {
|
||||
Class0 cl0;
|
||||
}
|
||||
|
||||
/**
|
||||
* pack2.A.Class1
|
||||
*/
|
||||
public static class Class0 {
|
||||
Class1 cl1;
|
||||
}
|
||||
}
|
||||
+12
@@ -0,0 +1,12 @@
|
||||
package packUser;
|
||||
|
||||
import pack2.A;
|
||||
|
||||
/**
|
||||
* pack2.A.Class1
|
||||
* pack2.A.Class0
|
||||
*/
|
||||
public class Class2 {
|
||||
A.Class1 myClass1;
|
||||
A.Class0 myClass0;
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package pack0;
|
||||
|
||||
import pack1.*;
|
||||
|
||||
/**
|
||||
* pack1.Class1
|
||||
*/
|
||||
public class Class0 {
|
||||
Class1 cl1;
|
||||
}
|
||||
+10
@@ -0,0 +1,10 @@
|
||||
package pack1;
|
||||
|
||||
import pack0.*;
|
||||
|
||||
/**
|
||||
* pack0.Class0
|
||||
*/
|
||||
public class Class1 {
|
||||
Class0 cl0;
|
||||
}
|
||||
+4
@@ -0,0 +1,4 @@
|
||||
package pack2;
|
||||
|
||||
public class A {
|
||||
}
|
||||
+13
@@ -0,0 +1,13 @@
|
||||
package packUser;
|
||||
|
||||
import pack1.Class1;
|
||||
import pack0.Class0;
|
||||
|
||||
/**
|
||||
* pack1.Class1
|
||||
* pack0.Class0
|
||||
*/
|
||||
public class Class2 {
|
||||
Class1 myClass1;
|
||||
Class0 myClass0;
|
||||
}
|
||||
@@ -35,6 +35,10 @@ public class MoveClassToInnerTest extends CodeInsightTestCase {
|
||||
doTest(new String[] { "pack1.Class1" }, "pack2.A");
|
||||
}
|
||||
|
||||
public void testSimultaneousMove() throws Exception {
|
||||
doTest(new String[] { "pack1.Class1", "pack0.Class0" }, "pack2.A");
|
||||
}
|
||||
|
||||
public void testMoveMultiple1() throws Exception {
|
||||
doTest(new String[] { "pack1.Class1", "pack1.Class2" }, "pack2.A");
|
||||
}
|
||||
@@ -112,7 +116,7 @@ public class MoveClassToInnerTest extends CodeInsightTestCase {
|
||||
prepareTest();
|
||||
PsiClass classToMove = myJavaFacade.findClass(className, ProjectScope.getAllScope(myProject));
|
||||
PsiClass targetClass = myJavaFacade.findClass(targetClassName, ProjectScope.getAllScope(myProject));
|
||||
MoveClassToInnerProcessor processor = new MoveClassToInnerProcessor(myProject, classToMove, targetClass, true, true, null);
|
||||
MoveClassToInnerProcessor processor = new MoveClassToInnerProcessor(myProject, new PsiClass[]{classToMove}, targetClass, true, true, null);
|
||||
UsageInfo[] usages = processor.findUsages();
|
||||
MultiMap<PsiElement,String> conflicts = processor.getConflicts(usages);
|
||||
assertSameElements(conflicts.values() , expectedConflicts);
|
||||
@@ -129,9 +133,7 @@ public class MoveClassToInnerTest extends CodeInsightTestCase {
|
||||
PsiClass targetClass = myJavaFacade.findClass(targetClassName, ProjectScope.getAllScope(myProject));
|
||||
assertNotNull(targetClass);
|
||||
|
||||
for(PsiClass psiClass: classes) {
|
||||
new MoveClassToInnerProcessor(myProject, psiClass, targetClass, true, true, null).run();
|
||||
}
|
||||
new MoveClassToInnerProcessor(myProject, classes, targetClass, true, true, null).run();
|
||||
PsiDocumentManager.getInstance(myProject).commitAllDocuments();
|
||||
FileDocumentManager.getInstance().saveAllDocuments();
|
||||
}
|
||||
|
||||
@@ -30,7 +30,7 @@ public class LanguageLevelUtil {
|
||||
}
|
||||
|
||||
@NotNull
|
||||
public static LanguageLevel getEffectiveLanguageLevel(final Module module) {
|
||||
public static LanguageLevel getEffectiveLanguageLevel(@NotNull final Module module) {
|
||||
ApplicationManager.getApplication().assertReadAccessAllowed();
|
||||
LanguageLevel level = LanguageLevelModuleExtension.getInstance(module).getLanguageLevel();
|
||||
if (level != null) return level;
|
||||
|
||||
@@ -119,13 +119,11 @@ public class TemplateSegments {
|
||||
}
|
||||
|
||||
public int getSegmentWithTheSameStart(int segmentNumber, int start) {
|
||||
for (int i = 0; i < mySegments.size(); i++) {
|
||||
if (i != segmentNumber) {
|
||||
final RangeMarker segment = mySegments.get(i);
|
||||
final int startOffset2 = segment.getStartOffset();
|
||||
if (start == startOffset2) {
|
||||
return i;
|
||||
}
|
||||
for (int i = segmentNumber + 1; i < mySegments.size(); i++) {
|
||||
final RangeMarker segment = mySegments.get(i);
|
||||
final int startOffset2 = segment.getStartOffset();
|
||||
if (start == startOffset2) {
|
||||
return i;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -242,8 +242,8 @@ module.source.roots.not.configured.title=No Source Roots Configured
|
||||
module.cannot.load.error=Cannot load module file ''{0}'':\n{1}
|
||||
module.corrupted.file.error=Invalid or corrupted module file ''{0}'':\n{1}
|
||||
module.corrupted.data.error=Corrupted module data at: {0}
|
||||
module.unknown.type.single.error=Cannot determine module type for the following module:\n\"{0}\"\nThe module will be treated as a Java module.
|
||||
module.unknown.type.multiple.error=Cannot determine module type for the following modules:\n{0}\nAll mentioned modules will be treated as JAVA modules.
|
||||
module.unknown.type.single.error=Cannot determine module type for the following module:\n\"{0}\"\nThe module will be treated as a Unknown module.
|
||||
module.unknown.type.multiple.error=Cannot determine module type for the following modules:\n{0}\nAll mentioned modules will be treated as Unknown modules.
|
||||
module.unknown.type.title=Unknown Module Type
|
||||
module.remove.from.project.confirmation=Would you like to remove module ''{0}'' from the project?
|
||||
element.kind.name.module=module
|
||||
|
||||
@@ -538,3 +538,4 @@ vcs.quicklist.pupup.section.local.history=Local History
|
||||
options.background.processes.title=Background processes
|
||||
options.background.processes.enable=Enable background processes
|
||||
options.check.changed.on.server.title="Changed on server" conflicts
|
||||
revision.changes.not.supported=Current VCS does not support viewing changes by revision
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2010 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -29,11 +29,13 @@ import com.intellij.openapi.vcs.changes.VcsAppendableDirtyScope;
|
||||
import com.intellij.openapi.vcs.checkin.CheckinEnvironment;
|
||||
import com.intellij.openapi.vcs.diff.DiffProvider;
|
||||
import com.intellij.openapi.vcs.diff.RevisionSelector;
|
||||
import com.intellij.openapi.vcs.history.VcsFileRevision;
|
||||
import com.intellij.openapi.vcs.history.VcsHistoryProvider;
|
||||
import com.intellij.openapi.vcs.history.VcsRevisionNumber;
|
||||
import com.intellij.openapi.vcs.merge.MergeProvider;
|
||||
import com.intellij.openapi.vcs.rollback.RollbackEnvironment;
|
||||
import com.intellij.openapi.vcs.update.UpdateEnvironment;
|
||||
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.containers.Convertor;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -466,5 +468,20 @@ public abstract class AbstractVcs extends StartedActivated {
|
||||
public boolean isVcsBackgroundOperationsAllowed(final VirtualFile root) {
|
||||
return true;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns all files for a revision where
|
||||
*
|
||||
* @param revision revision
|
||||
* @param file one of files from revision
|
||||
* @return committed change list from where you can get all committed files
|
||||
* @throws VcsException if VCS does not support such operation
|
||||
*
|
||||
* @since 9.0.2
|
||||
*/
|
||||
@Nullable
|
||||
public CommittedChangeList getRevisionChanges(final VcsFileRevision revision, final VirtualFile file) throws VcsException {
|
||||
throw new RevisionChangesNotSupportedException();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
+4
-8
@@ -13,17 +13,13 @@
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.spellchecker.tokenizer;
|
||||
|
||||
import com.intellij.lang.properties.psi.impl.PropertyValueImpl;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
package com.intellij.openapi.vcs;
|
||||
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
*/
|
||||
public class PropertyValueTokenizer extends Tokenizer<PropertyValueImpl> {
|
||||
@Override
|
||||
public Token[] tokenize(@NotNull PropertyValueImpl element) {
|
||||
return new Token[]{new Token<PropertyValueImpl>(element, element.getText(),false)};
|
||||
public class RevisionChangesNotSupportedException extends VcsException {
|
||||
public RevisionChangesNotSupportedException() {
|
||||
super(VcsBundle.message("revision.changes.not.supported"));
|
||||
}
|
||||
}
|
||||
+7
-1
@@ -31,7 +31,9 @@ import com.intellij.openapi.ui.DialogWrapper;
|
||||
import com.intellij.openapi.ui.Messages;
|
||||
import com.intellij.openapi.util.WriteExternalException;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.util.text.StringUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.Function;
|
||||
import org.jdom.Document;
|
||||
import org.jdom.Element;
|
||||
import org.jdom.output.EclipseJDOMUtil;
|
||||
@@ -78,7 +80,11 @@ public class ExportEclipseProjectsAction extends AnAction implements DumbAware {
|
||||
|
||||
//todo suggest smth with hierarchy modules
|
||||
if (!incompatibleModules.isEmpty()) {
|
||||
if (Messages.showOkCancelDialog(project, "Eclipse incompatible modules found. Would you like to proceed and possibly lose your configurations?", "Eclipse Incompatible Modules Found", Messages.getWarningIcon()) != DialogWrapper.OK_EXIT_CODE) {
|
||||
if (Messages.showOkCancelDialog(project, "<html><body>Eclipse incompatible modules found:<ul><br><li>" + StringUtil.join(incompatibleModules, new Function<Module, String>() {
|
||||
public String fun(Module module) {
|
||||
return module.getName();
|
||||
}
|
||||
}, "<br><li>") + "</ul><br>Would you like to proceed and possibly lose your configurations?</body></html>", "Eclipse Incompatible Modules Found", Messages.getWarningIcon()) != DialogWrapper.OK_EXIT_CODE) {
|
||||
return;
|
||||
}
|
||||
} else if (modules.isEmpty()){
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2010 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -31,11 +31,13 @@ import com.intellij.openapi.vcs.changes.CommitExecutor;
|
||||
import com.intellij.openapi.vcs.checkin.CheckinEnvironment;
|
||||
import com.intellij.openapi.vcs.diff.DiffProvider;
|
||||
import com.intellij.openapi.vcs.diff.RevisionSelector;
|
||||
import com.intellij.openapi.vcs.history.VcsFileRevision;
|
||||
import com.intellij.openapi.vcs.history.VcsHistoryProvider;
|
||||
import com.intellij.openapi.vcs.history.VcsRevisionNumber;
|
||||
import com.intellij.openapi.vcs.merge.MergeProvider;
|
||||
import com.intellij.openapi.vcs.rollback.RollbackEnvironment;
|
||||
import com.intellij.openapi.vcs.update.UpdateEnvironment;
|
||||
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.util.EventDispatcher;
|
||||
@@ -43,6 +45,7 @@ import com.intellij.util.containers.ComparatorDelegate;
|
||||
import com.intellij.util.containers.Convertor;
|
||||
import git4idea.annotate.GitAnnotationProvider;
|
||||
import git4idea.changes.GitChangeProvider;
|
||||
import git4idea.changes.GitChangeUtils;
|
||||
import git4idea.changes.GitCommittedChangeListProvider;
|
||||
import git4idea.changes.GitOutgoingChangesProvider;
|
||||
import git4idea.checkin.GitCheckinEnvironment;
|
||||
@@ -690,4 +693,11 @@ public class GitVcs extends AbstractVcs {
|
||||
public List<CommitExecutor> getCommitExecutors() {
|
||||
return Collections.<CommitExecutor>singletonList(myCommitAndPushExecutor);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommittedChangeList getRevisionChanges(final VcsFileRevision revision, final VirtualFile file) throws VcsException {
|
||||
final Project project = getProject();
|
||||
final VirtualFile vcsRoot = GitUtil.getGitRoot(file);
|
||||
return GitChangeUtils.getRevisionChanges(project, vcsRoot, revision.getRevisionNumber().asString());
|
||||
}
|
||||
}
|
||||
|
||||
+37
-37
@@ -26,43 +26,43 @@
|
||||
</CLASSES>
|
||||
<JAVADOC />
|
||||
<SOURCES>
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-plugin-descriptor/target/generated-sources/modello" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-toolchain/src/test/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-profile/target/generated-sources/modello" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-script/maven-script-ant/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-project/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-script/maven-script-beanshell/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-settings/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-compat/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-artifact-manager/src/test/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-model/target/generated-sources/modello" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-settings/src/test/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-plugin-parameter-documenter/src/test/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-artifact-manager/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-profile/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-plugin-parameter-documenter/target/generated-sources/modello" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-reporting/maven-reporting-api/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-artifact/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-core/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-core/src/test/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/apache-maven/src/test/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-plugin-api/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-artifact-test/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-toolchain/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-monitor/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-model/src/test/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-plugin-descriptor/src/test/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-toolchain/target/generated-sources/modello" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-settings/target/generated-sources/modello" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-plugin-registry/target/generated-sources/modello" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-plugin-registry/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-core-it-runner/src/test/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-project/src/test/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-artifact/src/test/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-plugin-descriptor/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-repository-metadata/target/generated-sources/modello" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-error-diagnostics/src/main/java" />
|
||||
<root url="file://C:/maven/maven-2.2/components/maven-script/maven-script-ant/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-artifact-test/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-plugin-parameter-documenter/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-reporting/maven-reporting-api/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-script/maven-script-ant/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-model/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-core/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-plugin-registry/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-model/target/generated-sources/modello" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-plugin-api/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-repository-metadata/target/generated-sources/modello" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-plugin-descriptor/target/generated-sources/modello" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-plugin-parameter-documenter/target/generated-sources/modello" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-project/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-toolchain/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-script/maven-script-ant/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-artifact/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-profile/target/generated-sources/modello" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-project/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-profile/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-monitor/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-plugin-registry/target/generated-sources/modello" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-core/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-settings/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/apache-maven/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-settings/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-artifact/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-toolchain/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-toolchain/target/generated-sources/modello" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-settings/target/generated-sources/modello" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-plugin-descriptor/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-core-it-runner/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-script/maven-script-beanshell/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-plugin-descriptor/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-artifact-manager/src/test/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-compat/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-artifact-manager/src/main/java" />
|
||||
<root url="file://$MODULE_DIR$/../../../../maven/maven-2.2/components/maven-error-diagnostics/src/main/java" />
|
||||
</SOURCES>
|
||||
</library>
|
||||
</orderEntry>
|
||||
|
||||
@@ -16,12 +16,12 @@
|
||||
package org.jetbrains.idea.maven.dom;
|
||||
|
||||
import com.intellij.javaee.ExternalResourceManager;
|
||||
import com.intellij.javaee.ExternalResourceManagerEx;
|
||||
import com.intellij.javaee.ResourceRegistrar;
|
||||
import com.intellij.javaee.StandardResourceProvider;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.idea.maven.utils.MavenLog;
|
||||
|
||||
public class MavenSchemaProvider implements StandardResourceProvider {
|
||||
public static final String MAVEN_PROJECT_SCHEMA_URL = "http://maven.apache.org/xsd/maven-4.0.0.xsd";
|
||||
@@ -38,11 +38,12 @@ public class MavenSchemaProvider implements StandardResourceProvider {
|
||||
|
||||
@NotNull
|
||||
public static VirtualFile getSchemaFile(@NotNull String url) {
|
||||
String location = ExternalResourceManager.getInstance().getResourceLocation(url);
|
||||
String location = ((ExternalResourceManagerEx)ExternalResourceManager.getInstance()).getStdResource(url, null);
|
||||
assert location != null : "cannot find a standard resource for " + url;
|
||||
|
||||
VirtualFile result = VfsUtil.findRelativeFile(location, null);
|
||||
if (result == null) {
|
||||
MavenLog.LOG.error("Cannot find a schema file for URL: " + url + " location: " + location);
|
||||
}
|
||||
assert result != null : "cannot find a schema file for URL: " + url + " location: " + location;
|
||||
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -8,9 +8,9 @@ import org.jetbrains.idea.maven.utils.MavenJDOMUtil;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class GroovyImporter extends MavenImporter {
|
||||
public GroovyImporter() {
|
||||
super("org.codehaus.groovy.maven", "gmaven-plugin");
|
||||
public abstract class GroovyImporter extends MavenImporter {
|
||||
public GroovyImporter(String pluginGroupID, String pluginArtifactID) {
|
||||
super(pluginGroupID, pluginArtifactID);
|
||||
}
|
||||
|
||||
public boolean isApplicable(MavenProject project) {
|
||||
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright 2000-2010 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.idea.maven.importing;
|
||||
|
||||
import com.intellij.openapi.module.Module;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.idea.maven.project.*;
|
||||
import org.jetbrains.idea.maven.utils.MavenJDOMUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class Groovy_1_0_Importer extends GroovyImporter {
|
||||
public Groovy_1_0_Importer() {
|
||||
super("org.codehaus.groovy.maven", "gmaven-plugin");
|
||||
}
|
||||
}
|
||||
+30
@@ -0,0 +1,30 @@
|
||||
/*
|
||||
* Copyright 2000-2010 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package org.jetbrains.idea.maven.importing;
|
||||
|
||||
import com.intellij.openapi.module.Module;
|
||||
import org.jdom.Element;
|
||||
import org.jetbrains.idea.maven.project.*;
|
||||
import org.jetbrains.idea.maven.utils.MavenJDOMUtil;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
|
||||
public class Groovy_1_1_plus_Importer extends GroovyImporter {
|
||||
public Groovy_1_1_plus_Importer() {
|
||||
super("org.codehaus.gmaven", "gmaven-plugin");
|
||||
}
|
||||
}
|
||||
+1
-1
@@ -53,7 +53,7 @@ public class TransferListenerAdapter implements TransferListener {
|
||||
}
|
||||
|
||||
protected void doUpdateProgress(long downloaded, long total) {
|
||||
myIndicator.setText2(ProjectBundle.message("maven.transfer.progress", downloaded, total, myRepository, myResource));
|
||||
myIndicator.setText2(ProjectBundle.message("maven.transfer.progress", downloaded, total == 0 ? "?" : total, myRepository, myResource));
|
||||
}
|
||||
|
||||
public void transferProgress(TransferEvent event, byte[] bytes, int i) {
|
||||
|
||||
@@ -1,6 +1,7 @@
|
||||
<!DOCTYPE idea-plugin PUBLIC "Plugin/DTD" "http://plugins.intellij.net/plugin.dtd">
|
||||
<idea-plugin url="http://www.jetbrains.com/idea">
|
||||
<extensions xmlns="org.jetbrains.idea.maven">
|
||||
<importer implementation="org.jetbrains.idea.maven.importing.GroovyImporter"/>
|
||||
<importer implementation="org.jetbrains.idea.maven.importing.Groovy_1_0_Importer"/>
|
||||
<importer implementation="org.jetbrains.idea.maven.importing.Groovy_1_1_plus_Importer"/>
|
||||
</extensions>
|
||||
</idea-plugin>
|
||||
+46
-1
@@ -416,4 +416,49 @@ public class GroovyImporterTest extends MavenImportingTestCase {
|
||||
assertExcludes("project",
|
||||
"target/generated-sources/groovy-stubs");
|
||||
}
|
||||
}
|
||||
|
||||
public void testDoNotAddGroovySpecificGeneratedSourcesForGMaven_1_2() throws Exception {
|
||||
createStdProjectFolders();
|
||||
createProjectSubDirs("target/generated-sources/xxx/yyy",
|
||||
"target/generated-sources/groovy-stubs/main/foo",
|
||||
"target/generated-sources/groovy-stubs/test/bar");
|
||||
|
||||
importProject("<groupId>test</groupId>" +
|
||||
"<artifactId>project</artifactId>" +
|
||||
"<version>1</version>" +
|
||||
|
||||
"<build>" +
|
||||
" <plugins>" +
|
||||
" <plugin>" +
|
||||
" <groupId>org.codehaus.gmaven</groupId>" +
|
||||
" <artifactId>gmaven-plugin</artifactId>" +
|
||||
" <version>1.2</version>" +
|
||||
" <executions>" +
|
||||
" <execution>" +
|
||||
" <goals>" +
|
||||
" <goal>generateStubs</goal>" +
|
||||
" <goal>compile</goal>" +
|
||||
" <goal>generateTestStubs</goal>" +
|
||||
" <goal>testCompile</goal>" +
|
||||
" </goals>" +
|
||||
" </execution>" +
|
||||
" </executions>" +
|
||||
" </plugin>" +
|
||||
" </plugins>" +
|
||||
"</build>");
|
||||
|
||||
assertModules("project");
|
||||
|
||||
assertSources("project",
|
||||
"src/main/java",
|
||||
"src/main/resources",
|
||||
"target/generated-sources/xxx");
|
||||
assertTestSources("project",
|
||||
"src/test/java",
|
||||
"src/test/resources");
|
||||
|
||||
assertExcludes("project",
|
||||
"target/generated-sources/groovy-stubs");
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
* Copyright 2000-2010 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
@@ -43,12 +43,14 @@ import com.intellij.openapi.vcs.annotate.AnnotationProvider;
|
||||
import com.intellij.openapi.vcs.changes.*;
|
||||
import com.intellij.openapi.vcs.checkin.CheckinEnvironment;
|
||||
import com.intellij.openapi.vcs.diff.DiffProvider;
|
||||
import com.intellij.openapi.vcs.history.VcsFileRevision;
|
||||
import com.intellij.openapi.vcs.history.VcsHistoryProvider;
|
||||
import com.intellij.openapi.vcs.history.VcsRevisionNumber;
|
||||
import com.intellij.openapi.vcs.merge.MergeProvider;
|
||||
import com.intellij.openapi.vcs.rollback.RollbackEnvironment;
|
||||
import com.intellij.openapi.vcs.update.UpdateEnvironment;
|
||||
import com.intellij.openapi.vcs.versionBrowser.ChangeBrowserSettings;
|
||||
import com.intellij.openapi.vcs.versionBrowser.CommittedChangeList;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.util.ThreeState;
|
||||
@@ -60,16 +62,14 @@ import com.intellij.util.messages.Topic;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
import org.jetbrains.idea.svn.actions.ShowAllSubmittedFilesAction;
|
||||
import org.jetbrains.idea.svn.actions.ShowPropertiesDiffWithLocalAction;
|
||||
import org.jetbrains.idea.svn.actions.SvnMergeProvider;
|
||||
import org.jetbrains.idea.svn.annotate.SvnAnnotationProvider;
|
||||
import org.jetbrains.idea.svn.checkin.SvnCheckinEnvironment;
|
||||
import org.jetbrains.idea.svn.dialogs.SvnFormatWorker;
|
||||
import org.jetbrains.idea.svn.dialogs.WCInfo;
|
||||
import org.jetbrains.idea.svn.history.LoadedRevisionsCache;
|
||||
import org.jetbrains.idea.svn.history.SvnChangeList;
|
||||
import org.jetbrains.idea.svn.history.SvnCommittedChangesProvider;
|
||||
import org.jetbrains.idea.svn.history.SvnHistoryProvider;
|
||||
import org.jetbrains.idea.svn.history.*;
|
||||
import org.jetbrains.idea.svn.rollback.SvnRollbackEnvironment;
|
||||
import org.jetbrains.idea.svn.update.SvnIntegrateEnvironment;
|
||||
import org.jetbrains.idea.svn.update.SvnUpdateEnvironment;
|
||||
@@ -963,4 +963,9 @@ public class SvnVcs extends AbstractVcs {
|
||||
public boolean isVcsBackgroundOperationsAllowed(VirtualFile root) {
|
||||
return ThreeState.YES.equals(myAuthNotifier.isAuthenticatedFor(root));
|
||||
}
|
||||
|
||||
@Override
|
||||
public CommittedChangeList getRevisionChanges(VcsFileRevision revision, VirtualFile file) throws VcsException {
|
||||
return ShowAllSubmittedFilesAction.loadRevisions(getProject(), (SvnFileRevision)revision, file);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -51,4 +51,6 @@ public abstract class ExternalResourceManagerEx extends ExternalResourceManager
|
||||
|
||||
@Nullable
|
||||
public abstract String getUserResourse(Project project, String url, String version);
|
||||
@Nullable
|
||||
public abstract String getStdResource(String url, String version);
|
||||
}
|
||||
|
||||
@@ -131,17 +131,12 @@ public class ExternalResourceManagerImpl extends ExternalResourceManagerEx imple
|
||||
|
||||
public String getResourceLocation(@NonNls String url, String version) {
|
||||
String result = getUserResourse(url, version);
|
||||
Map<String, String> map;
|
||||
|
||||
if (result == null) {
|
||||
map = getMap(myStdResources.getValue(), version, false);
|
||||
result = map != null ? map.get(url) : null;
|
||||
result = getStdResource(url, version);
|
||||
}
|
||||
|
||||
if (result == null) {
|
||||
result = url;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -152,6 +147,13 @@ public class ExternalResourceManagerImpl extends ExternalResourceManagerEx imple
|
||||
return resourse == null ? getUserResourse(url, version) : resourse;
|
||||
}
|
||||
|
||||
@Override
|
||||
@Nullable
|
||||
public String getStdResource(String url, String version) {
|
||||
Map<String, String> map = getMap(myStdResources.getValue(), version, false);
|
||||
return map != null ? map.get(url) : null;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private String getUserResourse(String url, String version) {
|
||||
Map<String, String> map = getMap(myResources, version, false);
|
||||
|
||||
Reference in New Issue
Block a user