mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-18 09:34:34 +07:00
Merge branch 'master' of git.labs.intellij.net:idea/community
This commit is contained in:
+1
-1
@@ -84,7 +84,7 @@ public class GenerateConstructorHandler extends GenerateMembersHandlerBase {
|
||||
if (baseClass != null){
|
||||
ArrayList<PsiMethod> array = new ArrayList<PsiMethod>();
|
||||
for (PsiMethod method : baseClass.getConstructors()) {
|
||||
if (JavaPsiFacade.getInstance(method.getProject()).getResolveHelper().isAccessible(method, aClass, aClass)) {
|
||||
if (JavaPsiFacade.getInstance(method.getProject()).getResolveHelper().isAccessible(method, aClass, null)) {
|
||||
array.add(method);
|
||||
}
|
||||
}
|
||||
|
||||
+36
-7
@@ -21,12 +21,18 @@ import com.intellij.codeInsight.intention.IntentionAction;
|
||||
import com.intellij.openapi.editor.Editor;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.psi.*;
|
||||
import com.intellij.psi.util.MethodSignature;
|
||||
import com.intellij.psi.util.MethodSignatureUtil;
|
||||
import com.intellij.psi.util.PsiTreeUtil;
|
||||
import com.intellij.psi.util.TypeConversionUtil;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
import com.intellij.util.containers.HashMap;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
import java.util.Map;
|
||||
import java.util.Set;
|
||||
|
||||
public class UnimplementInterfaceAction implements IntentionAction {
|
||||
@@ -55,7 +61,10 @@ public class UnimplementInterfaceAction implements IntentionAction {
|
||||
|
||||
if (psiClass.getExtendsList() != referenceList && psiClass.getImplementsList() != referenceList) return false;
|
||||
|
||||
final PsiElement target = psiReference.resolve();
|
||||
PsiJavaCodeReferenceElement referenceElement = getTopLevelRef(psiReference, referenceList);
|
||||
if (referenceElement == null) return false;
|
||||
|
||||
final PsiElement target = referenceElement.resolve();
|
||||
if (target == null || !(target instanceof PsiClass)) return false;
|
||||
|
||||
PsiClass targetClass = (PsiClass)target;
|
||||
@@ -69,6 +78,18 @@ public class UnimplementInterfaceAction implements IntentionAction {
|
||||
return true;
|
||||
}
|
||||
|
||||
@Nullable
|
||||
private static PsiJavaCodeReferenceElement getTopLevelRef(PsiReference psiReference, PsiReferenceList referenceList) {
|
||||
PsiElement element = psiReference.getElement();
|
||||
while (element.getParent() != referenceList) {
|
||||
element = element.getParent();
|
||||
if (element == null) return null;
|
||||
}
|
||||
|
||||
if (!(element instanceof PsiJavaCodeReferenceElement)) return null;
|
||||
return (PsiJavaCodeReferenceElement)element;
|
||||
}
|
||||
|
||||
public void invoke(@NotNull final Project project, final Editor editor, final PsiFile file) throws IncorrectOperationException {
|
||||
if (!CodeInsightUtilBase.preparePsiElementForWrite(file)) return;
|
||||
|
||||
@@ -83,12 +104,22 @@ public class UnimplementInterfaceAction implements IntentionAction {
|
||||
|
||||
if (psiClass.getExtendsList() != referenceList && psiClass.getImplementsList() != referenceList) return;
|
||||
|
||||
final PsiElement target = psiReference.resolve();
|
||||
PsiJavaCodeReferenceElement element = getTopLevelRef(psiReference, referenceList);
|
||||
if (element == null) return;
|
||||
|
||||
final PsiElement target = element.resolve();
|
||||
if (target == null || !(target instanceof PsiClass)) return;
|
||||
|
||||
PsiClass targetClass = (PsiClass)target;
|
||||
|
||||
psiReference.getElement().delete();
|
||||
final Map<PsiMethod, PsiMethod> implementations = new HashMap<PsiMethod, PsiMethod>();
|
||||
for (PsiMethod psiMethod : targetClass.getAllMethods()) {
|
||||
final PsiMethod implementingMethod = MethodSignatureUtil.findMethodBySuperMethod(psiClass, psiMethod, false);
|
||||
if (implementingMethod != null) {
|
||||
implementations.put(psiMethod, implementingMethod);
|
||||
}
|
||||
}
|
||||
element.delete();
|
||||
|
||||
final Set<PsiMethod> superMethods = new HashSet<PsiMethod>();
|
||||
for (PsiClass aClass : psiClass.getSupers()) {
|
||||
@@ -97,10 +128,8 @@ public class UnimplementInterfaceAction implements IntentionAction {
|
||||
final PsiMethod[] psiMethods = targetClass.getAllMethods();
|
||||
for (PsiMethod psiMethod : psiMethods) {
|
||||
if (superMethods.contains(psiMethod)) continue;
|
||||
final PsiMethod[] implementingMethods = psiClass.findMethodsBySignature(psiMethod, false);
|
||||
for (PsiMethod implementingMethod : implementingMethods) {
|
||||
implementingMethod.delete();
|
||||
}
|
||||
final PsiMethod impl = implementations.get(psiMethod);
|
||||
if (impl != null) impl.delete();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -125,7 +125,7 @@ public class CopyClassesHandler implements CopyHandlerDelegate {
|
||||
CopyClassDialog dialog = new CopyClassDialog(classes.values().iterator().next()[0], defaultTargetDirectory, project, false){
|
||||
@Override
|
||||
protected String getQualifiedName() {
|
||||
if (commonPath != null) {
|
||||
if (commonPath != null && !commonPath.isEmpty()) {
|
||||
return StringUtil.getQualifiedName(super.getQualifiedName(), commonPath.replaceAll("/", "."));
|
||||
}
|
||||
return super.getQualifiedName();
|
||||
|
||||
+26
-1
@@ -34,6 +34,7 @@ import com.intellij.refactoring.JavaRefactoringSettings;
|
||||
import com.intellij.refactoring.RefactoringBundle;
|
||||
import com.intellij.refactoring.move.MoveCallback;
|
||||
import com.intellij.refactoring.move.MoveHandlerDelegate;
|
||||
import com.intellij.refactoring.move.moveFilesOrDirectories.MoveFilesOrDirectoriesUtil;
|
||||
import com.intellij.refactoring.util.CommonRefactoringUtil;
|
||||
import com.intellij.refactoring.util.RadioUpDownListener;
|
||||
import com.intellij.refactoring.util.RefactoringUtil;
|
||||
@@ -131,8 +132,13 @@ public class MoveClassesOrPackagesHandlerBase extends MoveHandlerDelegate {
|
||||
processor.run();
|
||||
}
|
||||
else {
|
||||
final boolean containsJava = hasJavaFiles(directories[0]);
|
||||
if (!containsJava) {
|
||||
MoveFilesOrDirectoriesUtil.doMove(project, new PsiElement[] {directories[0]}, new PsiElement[]{targetContainer}, callback);
|
||||
return;
|
||||
}
|
||||
final MoveClassesOrPackagesToNewDirectoryDialog dlg =
|
||||
new MoveClassesOrPackagesToNewDirectoryDialog(directories[0], new PsiElement[2], false, callback) {
|
||||
new MoveClassesOrPackagesToNewDirectoryDialog(directories[0], new PsiElement[0], false, callback) {
|
||||
@Override
|
||||
protected void performRefactoring(Project project,
|
||||
final PsiDirectory targetDirectory,
|
||||
@@ -161,6 +167,25 @@ public class MoveClassesOrPackagesHandlerBase extends MoveHandlerDelegate {
|
||||
MoveClassesOrPackagesImpl.doMove(project, elements, targetContainer, callback);
|
||||
}
|
||||
|
||||
public static boolean hasJavaFiles(PsiDirectory directory) {
|
||||
final boolean [] containsJava = new boolean[]{false};
|
||||
directory.accept(new JavaRecursiveElementWalkingVisitor() {
|
||||
@Override
|
||||
public void visitElement(PsiElement element) {
|
||||
if (containsJava[0]) return;
|
||||
if (element instanceof PsiFile || element instanceof PsiDirectory) {
|
||||
super.visitElement(element);
|
||||
}
|
||||
}
|
||||
|
||||
@Override
|
||||
public void visitJavaFile(PsiJavaFile file) {
|
||||
containsJava[0] = true;
|
||||
}
|
||||
});
|
||||
return containsJava[0];
|
||||
}
|
||||
|
||||
@Override
|
||||
public PsiElement adjustTargetForMove(DataContext dataContext, PsiElement targetContainer) {
|
||||
if (targetContainer instanceof PsiPackage) {
|
||||
|
||||
+2
@@ -24,6 +24,7 @@ import com.intellij.psi.impl.file.JavaDirectoryServiceImpl;
|
||||
import com.intellij.psi.util.PsiUtilBase;
|
||||
import com.intellij.refactoring.copy.JavaCopyFilesOrDirectoriesHandler;
|
||||
import com.intellij.refactoring.move.MoveCallback;
|
||||
import com.intellij.refactoring.move.moveClassesOrPackages.MoveClassesOrPackagesHandlerBase;
|
||||
import com.intellij.util.ArrayUtil;
|
||||
import com.intellij.util.Function;
|
||||
import com.intellij.util.IncorrectOperationException;
|
||||
@@ -41,6 +42,7 @@ public class JavaMoveFilesOrDirectoriesHandler extends MoveFilesOrDirectoriesHan
|
||||
for (PsiElement element : srcElements) {
|
||||
if (element instanceof PsiDirectory) {
|
||||
allJava &= JavaCopyFilesOrDirectoriesHandler.hasPackages((PsiDirectory)element);
|
||||
allJava &= MoveClassesOrPackagesHandlerBase.hasJavaFiles((PsiDirectory)element);
|
||||
}
|
||||
else if (element instanceof PsiFile) {
|
||||
allJava &= element instanceof PsiJavaFile && !JspPsiUtil.isInJspFile(element) &&
|
||||
|
||||
Reference in New Issue
Block a user