IDEA-76898: Some characters in archive names are replaced by underscore

This commit is contained in:
nik
2011-12-27 14:44:13 +04:00
parent 5cdcbf70db
commit e43d5d34e3
5 changed files with 16 additions and 7 deletions
@@ -33,6 +33,7 @@ import com.intellij.packaging.artifacts.ArtifactProperties;
import com.intellij.packaging.artifacts.ArtifactType;
import com.intellij.packaging.elements.*;
import com.intellij.packaging.impl.elements.*;
import com.intellij.util.PathUtil;
import com.intellij.util.Processor;
import com.intellij.util.SmartList;
import com.intellij.util.containers.ContainerUtil;
@@ -554,5 +555,9 @@ public class ArtifactUtil {
}
return result;
}
public static String suggestArtifactFileName(String artifactName) {
return PathUtil.suggestFileName(artifactName, true, true);
}
}
@@ -15,13 +15,13 @@
*/
package com.intellij.packaging.impl.artifacts;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.packaging.artifacts.ArtifactTemplate;
import com.intellij.packaging.artifacts.ArtifactType;
import com.intellij.packaging.elements.CompositePackagingElement;
import com.intellij.packaging.elements.PackagingElementOutputKind;
import com.intellij.packaging.elements.PackagingElementResolvingContext;
import com.intellij.packaging.impl.elements.ArchivePackagingElement;
import com.intellij.util.PathUtil;
import org.jetbrains.annotations.NotNull;
import javax.swing.*;
@@ -54,7 +54,7 @@ public class JarArtifactType extends ArtifactType {
@NotNull
@Override
public CompositePackagingElement<?> createRootElement(@NotNull String artifactName) {
return new ArchivePackagingElement(FileUtil.sanitizeFileName(artifactName) + ".jar");
return new ArchivePackagingElement(ArtifactUtil.suggestArtifactFileName(artifactName) + ".jar");
}
@NotNull
@@ -24,7 +24,6 @@ import com.intellij.openapi.roots.OrderRootType;
import com.intellij.openapi.roots.ProjectRootManager;
import com.intellij.openapi.roots.libraries.Library;
import com.intellij.openapi.ui.Messages;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.openapi.vfs.VfsUtil;
import com.intellij.openapi.vfs.VirtualFile;
import com.intellij.packaging.artifacts.ArtifactTemplate;
@@ -94,7 +93,7 @@ public class JarFromModulesTemplate extends ArtifactTemplate {
String name = modules.length == 1 ? modules[0].getName() : project.getName();
final PackagingElementFactory factory = PackagingElementFactory.getInstance();
final CompositePackagingElement<?> archive = factory.createArchive(FileUtil.sanitizeFileName(name) + ".jar");
final CompositePackagingElement<?> archive = factory.createArchive(ArtifactUtil.suggestArtifactFileName(name) + ".jar");
OrderEnumerator orderEnumerator = ProjectRootManager.getInstance(project).orderEntries(Arrays.asList(modules));
@@ -429,14 +429,14 @@ public class ArtifactEditorImpl implements ArtifactEditorEx {
setOutputPath(ArtifactUtil.getDefaultArtifactOutputPath(newArtifactName, myProject));
final CompositePackagingElement<?> root = getRootElement();
if (root instanceof ArchivePackagingElement) {
String oldFileName = FileUtil.sanitizeFileName(oldArtifactName);
String oldFileName = ArtifactUtil.suggestArtifactFileName(oldArtifactName);
final String name = ((ArchivePackagingElement)root).getArchiveFileName();
final String fileName = FileUtil.getNameWithoutExtension(name);
final String extension = FileUtil.getExtension(name);
if (fileName.equals(oldFileName) && extension.length() > 0) {
myLayoutTreeComponent.editLayout(new Runnable() {
public void run() {
((ArchivePackagingElement)getRootElement()).setArchiveFileName(FileUtil.sanitizeFileName(newArtifactName) + "." + extension);
((ArchivePackagingElement)getRootElement()).setArchiveFileName(ArtifactUtil.suggestArtifactFileName(newArtifactName) + "." + extension);
}
});
myLayoutTreeComponent.updateRootNode();
@@ -101,10 +101,15 @@ public class PathUtil {
@NotNull
public static String suggestFileName(@NotNull String text) {
return suggestFileName(text, false, false);
}
@NotNull
public static String suggestFileName(@NotNull String text, final boolean allowDots, final boolean allowSpaces) {
StringBuilder result = new StringBuilder();
for (int i = 0; i < text.length(); i++) {
char c = text.charAt(i);
if (!isValidFileNameChar(c) || c == '.' || Character.isWhitespace(c)) {
if (!isValidFileNameChar(c) || (!allowDots && c == '.') || (!allowSpaces && Character.isWhitespace(c))) {
result.append('_');
}
else {