mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
[nik] getEncoding(File file) method introduced
This commit is contained in:
@@ -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();
|
||||
|
||||
+32
-3
@@ -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;
|
||||
|
||||
+3
-1
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user