Search in sources :

Example 1 with JavaBuilderExtension

use of org.jetbrains.jps.builders.java.JavaBuilderExtension in project intellij-community by JetBrains.

the class CompilerEncodingConfiguration method computeModuleCharsetMap.

private Map<JpsModule, Set<String>> computeModuleCharsetMap() {
    final Map<JpsModule, Set<String>> map = new THashMap<>();
    final Iterable<JavaBuilderExtension> builderExtensions = JpsServiceManager.getInstance().getExtensions(JavaBuilderExtension.class);
    for (Map.Entry<String, String> entry : myUrlToCharset.entrySet()) {
        final String fileUrl = entry.getKey();
        final String charset = entry.getValue();
        File file = JpsPathUtil.urlToFile(fileUrl);
        if (charset == null || (!file.isDirectory() && !shouldHonorEncodingForCompilation(builderExtensions, file))) {
            continue;
        }
        final JavaSourceRootDescriptor rootDescriptor = myRootsIndex.findJavaRootDescriptor(null, file);
        if (rootDescriptor == null) {
            continue;
        }
        final JpsModule module = rootDescriptor.target.getModule();
        Set<String> set = map.get(module);
        if (set == null) {
            set = new LinkedHashSet<>();
            map.put(module, set);
            // need to search parents only once because
            // file parent's charset, if explicitly defined, has higher priority than the charset assigned to individual files
            // we deliberately check parents until the source roots
            final File sourceRoot = rootDescriptor.root;
            File current = FileUtilRt.getParentFile(file);
            String parentCharset = null;
            while (current != null) {
                final String currentCharset = lookupCharsetMap(current);
                if (currentCharset != null) {
                    parentCharset = currentCharset;
                }
                if (FileUtil.filesEqual(current, sourceRoot)) {
                    break;
                }
                current = FileUtilRt.getParentFile(current);
            }
            if (parentCharset != null) {
                set.add(parentCharset);
            }
        }
        set.add(charset);
    }
    for (JpsModule module : myJpsModel.getProject().getModules()) {
        for (JpsModuleSourceRoot srcRoot : module.getSourceRoots()) {
            final String encoding = getEncoding(srcRoot.getFile());
            if (encoding != null) {
                Set<String> charsets = map.get(module);
                if (charsets == null) {
                    charsets = new LinkedHashSet<>();
                    map.put(module, charsets);
                }
                charsets.add(encoding);
            }
        }
    }
    return map;
}
Also used : JavaBuilderExtension(org.jetbrains.jps.builders.java.JavaBuilderExtension) JpsModule(org.jetbrains.jps.model.module.JpsModule) JpsModuleSourceRoot(org.jetbrains.jps.model.module.JpsModuleSourceRoot) THashMap(gnu.trove.THashMap) JavaSourceRootDescriptor(org.jetbrains.jps.builders.java.JavaSourceRootDescriptor) THashMap(gnu.trove.THashMap) File(java.io.File)

Aggregations

THashMap (gnu.trove.THashMap)1 File (java.io.File)1 JavaBuilderExtension (org.jetbrains.jps.builders.java.JavaBuilderExtension)1 JavaSourceRootDescriptor (org.jetbrains.jps.builders.java.JavaSourceRootDescriptor)1 JpsModule (org.jetbrains.jps.model.module.JpsModule)1 JpsModuleSourceRoot (org.jetbrains.jps.model.module.JpsModuleSourceRoot)1