[nik] getEncoding(File file) method introduced

This commit is contained in:
Alexander Doroshko
2012-12-06 19:05:08 +04:00
parent 07010c54c8
commit 73d330fd4f
3 changed files with 37 additions and 5 deletions
@@ -3,6 +3,7 @@ package org.jetbrains.jps.model;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import java.io.File;
import java.util.Map;
/**
@@ -10,7 +11,7 @@ import java.util.Map;
*/
public interface JpsEncodingProjectConfiguration extends JpsElement {
@Nullable
String getEncoding(@NotNull String url);
String getEncoding(@NotNull File file);
@Nullable
String getProjectEncoding();
@@ -1,11 +1,17 @@
package org.jetbrains.jps.model.impl;
import com.intellij.openapi.util.io.FileUtilRt;
import org.jetbrains.annotations.NotNull;
import org.jetbrains.annotations.Nullable;
import org.jetbrains.jps.model.JpsElementChildRole;
import org.jetbrains.jps.model.JpsEncodingConfigurationService;
import org.jetbrains.jps.model.JpsEncodingProjectConfiguration;
import org.jetbrains.jps.model.JpsModel;
import org.jetbrains.jps.model.ex.JpsElementBase;
import org.jetbrains.jps.model.ex.JpsElementChildRoleBase;
import org.jetbrains.jps.util.JpsPathUtil;
import java.io.File;
import java.util.Collections;
import java.util.HashMap;
import java.util.Map;
@@ -13,7 +19,8 @@ import java.util.Map;
/**
* @author nik
*/
public class JpsEncodingProjectConfigurationImpl extends JpsElementBase<JpsEncodingProjectConfigurationImpl> implements JpsEncodingProjectConfiguration {
public class JpsEncodingProjectConfigurationImpl extends JpsElementBase<JpsEncodingProjectConfigurationImpl>
implements JpsEncodingProjectConfiguration {
public static final JpsElementChildRole<JpsEncodingProjectConfiguration> ROLE = JpsElementChildRoleBase.create("encoding configuration");
private final Map<String, String> myUrlToEncoding = new HashMap<String, String>();
private final String myProjectEncoding;
@@ -23,9 +30,30 @@ public class JpsEncodingProjectConfigurationImpl extends JpsElementBase<JpsEncod
myProjectEncoding = projectEncoding;
}
@Nullable
@Override
public String getEncoding(@NotNull String url) {
return myUrlToEncoding.get(url);
public String getEncoding(@NotNull File file) {
if (!myUrlToEncoding.isEmpty()) {
File current = file;
while (current != null) {
String encoding = myUrlToEncoding.get(JpsPathUtil.pathToUrl(FileUtilRt.toSystemIndependentName(current.getPath())));
if (encoding != null) {
return encoding;
}
current = FileUtilRt.getParentFile(current);
}
}
if (myProjectEncoding != null) {
return myProjectEncoding;
}
final JpsModel model = getModel();
assert model != null;
return JpsEncodingConfigurationService.getInstance().getGlobalEncoding(model.getGlobal());
}
@NotNull
@@ -34,6 +62,7 @@ public class JpsEncodingProjectConfigurationImpl extends JpsElementBase<JpsEncod
return Collections.unmodifiableMap(myUrlToEncoding);
}
@Nullable
@Override
public String getProjectEncoding() {
return myProjectEncoding;
@@ -92,7 +92,9 @@ public class JpsProjectSerializationTest extends JpsSerializationTestCase {
JpsEncodingProjectConfiguration configuration = service.getEncodingConfiguration(myProject);
assertNotNull(configuration);
assertEquals("UTF-8", configuration.getProjectEncoding());
assertEquals("windows-1251", configuration.getEncoding(getUrl("util")));
assertEquals("windows-1251", configuration.getEncoding(new File(getAbsolutePath("util"))));
assertEquals("windows-1251", configuration.getEncoding(new File(getAbsolutePath("util/foo/bar/file.txt"))));
assertEquals("UTF-8", configuration.getEncoding(new File(getAbsolutePath("other"))));
}
public void testSaveProject() {