diff --git a/java/testFramework/src/com/intellij/mock/MockPsiDirectory.java b/java/testFramework/src/com/intellij/mock/MockPsiDirectory.java index b451b291693c..25093f641839 100644 --- a/java/testFramework/src/com/intellij/mock/MockPsiDirectory.java +++ b/java/testFramework/src/com/intellij/mock/MockPsiDirectory.java @@ -5,9 +5,11 @@ package com.intellij.mock; import com.intellij.navigation.ItemPresentation; import com.intellij.openapi.Disposable; +import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.*; import com.intellij.psi.search.PsiElementProcessor; +import com.intellij.testFramework.LightVirtualFile; import com.intellij.util.IncorrectOperationException; import com.intellij.lang.Language; import org.jetbrains.annotations.NonNls; @@ -19,10 +21,18 @@ import org.jetbrains.annotations.Nullable; */ public class MockPsiDirectory extends MockPsiElement implements PsiDirectory { private final PsiPackage myPackage; + private final Project myProject; public MockPsiDirectory(final PsiPackage aPackage, @NotNull Disposable parentDisposable) { super(parentDisposable); myPackage = aPackage; + myProject = null; + } + + public MockPsiDirectory(Project project, @NotNull Disposable parentDisposable) { + super(parentDisposable); + myProject = project; + myPackage = null; } @Override @@ -30,6 +40,12 @@ public class MockPsiDirectory extends MockPsiElement implements PsiDirectory { return true; } + @NotNull + @Override + public Project getProject() { + return myProject != null ? myProject : super.getProject(); + } + @NotNull @Override public Language getLanguage() { @@ -110,7 +126,7 @@ public class MockPsiDirectory extends MockPsiElement implements PsiDirectory { @Override @NotNull public VirtualFile getVirtualFile() { - throw new UnsupportedOperationException("Method getVirtualFile is not yet implemented in " + getClass().getName()); + return new LightVirtualFile(); } @Override diff --git a/platform/lang-api/src/com/intellij/refactoring/rename/RenameInputValidatorRegistry.java b/platform/lang-api/src/com/intellij/refactoring/rename/RenameInputValidatorRegistry.java index c5d7042322ac..8320ce6dab3e 100644 --- a/platform/lang-api/src/com/intellij/refactoring/rename/RenameInputValidatorRegistry.java +++ b/platform/lang-api/src/com/intellij/refactoring/rename/RenameInputValidatorRegistry.java @@ -24,42 +24,59 @@ import com.intellij.openapi.util.Condition; import com.intellij.psi.PsiElement; import com.intellij.util.Function; import com.intellij.util.ProcessingContext; +import com.intellij.util.containers.hash.LinkedHashMap; import org.jetbrains.annotations.Nullable; +import java.util.ArrayList; +import java.util.List; + public class RenameInputValidatorRegistry { private RenameInputValidatorRegistry() { } @Nullable public static Condition getInputValidator(final PsiElement element) { + final LinkedHashMap acceptedValidators = new LinkedHashMap(); for(final RenameInputValidator validator: Extensions.getExtensions(RenameInputValidator.EP_NAME)) { final ProcessingContext context = new ProcessingContext(); if (validator.getPattern().accepts(element, context)) { - return new Condition() { - @Override - public boolean value(final String s) { - return validator.isInputValid(s, element, context); - } - }; + acceptedValidators.put(validator, context); } } - return null; + return acceptedValidators.isEmpty() ? null : new Condition() { + @Override + public boolean value(final String s) { + for (RenameInputValidator validator : acceptedValidators.keySet()) { + if (!validator.isInputValid(s, element, acceptedValidators.get(validator))) { + return false; + } + } + return true; + } + }; } @Nullable public static Function getInputErrorValidator(final PsiElement element) { + final LinkedHashMap acceptedValidators = new LinkedHashMap(); for(final RenameInputValidator validator: Extensions.getExtensions(RenameInputValidator.EP_NAME)) { - if (!(validator instanceof RenameInputValidatorEx)) continue; final ProcessingContext context = new ProcessingContext(); - if (validator.getPattern().accepts(element, context)) { - return new Function() { - @Override - public String fun(String newName) { - return ((RenameInputValidatorEx)validator).getErrorMessage(newName, element.getProject()); - } - }; + if (validator instanceof RenameInputValidatorEx && validator.getPattern().accepts(element, context)) { + acceptedValidators.put((RenameInputValidatorEx)validator, context); } } - return null; + + return acceptedValidators.isEmpty() ? null : new Function() { + @Override + public String fun(String newName) { + for (RenameInputValidatorEx validator : acceptedValidators.keySet()) { + final String message = validator.getErrorMessage(newName, element.getProject()); + if (message != null) { + return message; + } + } + return null; + } + }; } }