diff --git a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java index 164d43dce300..16768174d072 100644 --- a/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java +++ b/java/java-impl/src/com/intellij/refactoring/copy/CopyClassesHandler.java @@ -128,9 +128,7 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase { if (classes != null) { topLevelClasses = ArrayUtil.mergeArrays(classes, topLevelClasses, PsiClass.ARRAY_FACTORY); } - if (topLevelClasses != null) { - result.put(containingFile, topLevelClasses); - } + result.put(containingFile, topLevelClasses); } public void doCopy(PsiElement[] elements, PsiDirectory defaultTargetDirectory) { @@ -361,19 +359,26 @@ public class CopyClassesHandler extends CopyHandlerDelegateBase { } private static PsiFile copy(@NotNull PsiFile file, PsiDirectory directory, String name, String relativePath) { - final String fileName; - if (name != null) { - fileName = file instanceof PsiClassOwner ? name + "." + file.getViewProvider().getVirtualFile().getExtension() : name; - } - else { - fileName = file.getName(); - } + final String fileName = getNewFileName(file, name); if (relativePath != null && !relativePath.isEmpty()) { return buildRelativeDir(directory, relativePath).findOrCreateTargetDirectory().copyFileFrom(fileName, file); } return directory.copyFileFrom(fileName, file); } + private static String getNewFileName(PsiFile file, String name) { + if (name != null) { + if (file instanceof PsiClassOwner) { + final PsiClass[] classes = ((PsiClassOwner)file).getClasses(); + if (classes.length > 0 && !(classes[0] instanceof SyntheticElement)) { + return name + "." + file.getViewProvider().getVirtualFile().getExtension(); + } + } + return name; + } + return file.getName(); + } + @NotNull private static MoveDirectoryWithClassesProcessor.TargetDirectoryWrapper buildRelativeDir(final @NotNull PsiDirectory directory, final @NotNull String relativePath) { diff --git a/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java b/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java index 0d11360e8661..b633502aefd5 100644 --- a/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java +++ b/plugins/eclipse/src/org/jetbrains/idea/eclipse/conversion/EclipseClasspathReader.java @@ -50,6 +50,7 @@ import java.util.ArrayList; import java.util.Collection; import java.util.List; import java.util.Set; +import java.util.regex.PatternSyntaxException; import static org.jetbrains.idea.eclipse.conversion.EPathUtil.*; @@ -150,7 +151,13 @@ public class EclipseClasspathReader { } else { String srcUrl = VfsUtil.pathToUrl(myRootPath + "/" + path); - final boolean isTestFolder = testPattern != null && testPattern.length() > 0 && path.matches(testPattern); + boolean isTestFolder = false; + try { + isTestFolder = testPattern != null && testPattern.length() > 0 && path.matches(testPattern); + } + catch (PatternSyntaxException e) { + isTestFolder = false; + } final EclipseProjectFinder.LinkedResource linkedResource = EclipseProjectFinder.findLinkedResource(myRootPath, path); if (linkedResource != null) { if (linkedResource.containsPathVariable()) {