mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
properties: create resource bundle by default only if files have the same extension IDEA-163295
This commit is contained in:
+28
-30
@@ -23,6 +23,7 @@ import com.intellij.lang.properties.xml.XmlProperty;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.fileTypes.StdFileTypes;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.VirtualFileManager;
|
||||
import com.intellij.pom.PomTarget;
|
||||
@@ -38,6 +39,8 @@ import org.jetbrains.annotations.NotNull;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* @author Konstantin Bulenkov
|
||||
@@ -67,9 +70,10 @@ public class PropertiesImplUtil extends PropertiesUtil {
|
||||
|
||||
|
||||
final String baseName = manager.getBaseName(containingFile);
|
||||
final String extension = containingFile.getVirtualFile().getExtension();
|
||||
final PsiDirectory directory = ReadAction.compute(() -> containingFile.getContainingDirectory());
|
||||
if (directory == null) return ResourceBundleWithCachedFiles.EMPTY;
|
||||
final ResourceBundleWithCachedFiles bundle = getResourceBundle(baseName, directory);
|
||||
final ResourceBundleWithCachedFiles bundle = getResourceBundle(baseName, extension, directory);
|
||||
return bundle == null
|
||||
? new ResourceBundleWithCachedFiles(new ResourceBundleImpl(representative), Collections.singletonList(representative))
|
||||
: bundle;
|
||||
@@ -82,34 +86,19 @@ public class PropertiesImplUtil extends PropertiesUtil {
|
||||
|
||||
@Nullable
|
||||
private static ResourceBundleWithCachedFiles getResourceBundle(@NotNull final String baseName,
|
||||
@NotNull final PsiDirectory baseDirectory) {
|
||||
PropertiesFile defaultPropertiesFile = null;
|
||||
@Nullable final String extension,
|
||||
@NotNull final PsiDirectory baseDirectory) {
|
||||
final ResourceBundleManager bundleBaseNameManager = ResourceBundleManager.getInstance(baseDirectory.getProject());
|
||||
final PsiFile[] psiFiles = ReadAction.compute(() -> baseDirectory.getFiles());
|
||||
final List<PropertiesFile> bundleFiles = new ArrayList<>(1);
|
||||
for (final PsiFile psiFile : psiFiles) {
|
||||
final PropertiesFile propertiesFile = getPropertiesFile(psiFile);
|
||||
if (propertiesFile == null) {
|
||||
continue;
|
||||
}
|
||||
if (baseName.equals(bundleBaseNameManager.getBaseName(psiFile))) {
|
||||
if (defaultPropertiesFile == null) {
|
||||
defaultPropertiesFile = propertiesFile;
|
||||
} else {
|
||||
final int nameDiff = defaultPropertiesFile.getName().compareTo(propertiesFile.getName());
|
||||
if (nameDiff > 0) {
|
||||
defaultPropertiesFile = propertiesFile;
|
||||
} else if (nameDiff == 0) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
bundleFiles.add(propertiesFile);
|
||||
}
|
||||
}
|
||||
if (defaultPropertiesFile == null) {
|
||||
return null;
|
||||
}
|
||||
return new ResourceBundleWithCachedFiles(new ResourceBundleImpl(defaultPropertiesFile), bundleFiles);
|
||||
final List<PropertiesFile> bundleFiles = Stream
|
||||
.of(ReadAction.compute(() -> baseDirectory.getFiles()))
|
||||
.filter(f -> Comparing.strEqual(f.getVirtualFile().getExtension(), extension))
|
||||
.filter(PropertiesImplUtil::isPropertiesFile)
|
||||
.filter(Objects::nonNull)
|
||||
.filter(f -> Comparing.equal(bundleBaseNameManager.getBaseName(f), baseName))
|
||||
.map(PropertiesImplUtil::getPropertiesFile)
|
||||
.collect(Collectors.toList());
|
||||
if (bundleFiles == null) return null;
|
||||
return new ResourceBundleWithCachedFiles(new ResourceBundleImpl(bundleFiles.get(0)), bundleFiles);
|
||||
}
|
||||
|
||||
public static boolean isPropertiesFile(@Nullable PsiFile file) {
|
||||
@@ -170,8 +159,17 @@ public class PropertiesImplUtil extends PropertiesUtil {
|
||||
if (baseDirectory == null) {
|
||||
return null;
|
||||
}
|
||||
final ResourceBundleWithCachedFiles rb = getResourceBundle(baseName, baseDirectory);
|
||||
return rb == null ? null : rb.getBundle();
|
||||
final ResourceBundleManager bundleBaseNameManager = ResourceBundleManager.getInstance(project);
|
||||
|
||||
for (PsiFile file : baseDirectory.getFiles()) {
|
||||
final PropertiesFile propertiesFile = getPropertiesFile(file);
|
||||
if (propertiesFile == null) continue;
|
||||
final String currBaseName = bundleBaseNameManager.getBaseName(file);
|
||||
if (currBaseName.equals(baseName)) {
|
||||
return getResourceBundle(propertiesFile);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static boolean isAlphaSorted(final Collection<? extends IProperty> properties) {
|
||||
|
||||
+1
-26
@@ -20,14 +20,9 @@
|
||||
package com.intellij.lang.properties;
|
||||
|
||||
import com.intellij.lang.properties.psi.PropertiesFile;
|
||||
import com.intellij.openapi.application.ReadAction;
|
||||
import com.intellij.openapi.util.Comparing;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.util.SmartList;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.List;
|
||||
|
||||
public class ResourceBundleImpl extends ResourceBundle {
|
||||
@@ -41,27 +36,7 @@ public class ResourceBundleImpl extends ResourceBundle {
|
||||
@NotNull
|
||||
@Override
|
||||
public List<PropertiesFile> getPropertiesFiles() {
|
||||
if (ResourceBundleManager.getInstance(getProject()).isDefaultDissociated(myDefaultPropertiesFile.getVirtualFile())) {
|
||||
return Collections.singletonList(myDefaultPropertiesFile);
|
||||
}
|
||||
PsiFile[] children = ReadAction.compute(() -> myDefaultPropertiesFile.getParent().getFiles());
|
||||
final String baseName = getBaseName();
|
||||
List<PropertiesFile> result = new SmartList<>();
|
||||
for (PsiFile file : children) {
|
||||
if (!file.isValid()) continue;
|
||||
PropertiesFile propertiesFile = PropertiesImplUtil.getPropertiesFile(file);
|
||||
if (propertiesFile == null) {
|
||||
continue;
|
||||
}
|
||||
if (Comparing.strEqual(PropertiesUtil.getDefaultBaseName(file.getVirtualFile()), baseName)) {
|
||||
result.add(propertiesFile);
|
||||
if (!propertiesFile.equals(myDefaultPropertiesFile) &&
|
||||
Comparing.equal(propertiesFile.getName(), myDefaultPropertiesFile.getName())) {
|
||||
return Collections.singletonList(myDefaultPropertiesFile);
|
||||
}
|
||||
}
|
||||
}
|
||||
return result;
|
||||
return PropertiesImplUtil.getResourceBundleWithCachedFiles(myDefaultPropertiesFile).getFiles();
|
||||
}
|
||||
|
||||
@NotNull
|
||||
|
||||
@@ -59,6 +59,23 @@ public class ResourceBundleTest extends LightPlatformCodeInsightFixtureTestCase
|
||||
assertEquals(toCheckFile.getText(), "new_key=value");
|
||||
}
|
||||
|
||||
public void testDifferentPropertiesDontCombinedToResourceBundle() {
|
||||
final PsiFile xmlFile = myFixture.addFileToProject("p.xml", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
|
||||
"<!DOCTYPE properties SYSTEM \"http://java.sun.com/dtd/properties.dtd\">\n" +
|
||||
"<properties>\n" +
|
||||
"</properties>");
|
||||
final PsiFile propFile = myFixture.addFileToProject("p.properties", "");
|
||||
|
||||
final PropertiesFile xmlPropFile = PropertiesImplUtil.getPropertiesFile(xmlFile);
|
||||
final PropertiesFile propertiesFile = PropertiesImplUtil.getPropertiesFile(propFile);
|
||||
|
||||
assertNotNull(xmlPropFile);
|
||||
assertNotNull(propertiesFile);
|
||||
|
||||
assertEquals(xmlPropFile, assertOneElement(xmlPropFile.getResourceBundle().getPropertiesFiles()));
|
||||
assertEquals(propertiesFile, assertOneElement(propertiesFile.getResourceBundle().getPropertiesFiles()));
|
||||
}
|
||||
|
||||
private void doTestRenameResourceBundleEntryFile(String fileNameToRenameBefore,
|
||||
String fileNameToCheckBefore,
|
||||
String fileNameToRenameAfter,
|
||||
|
||||
Reference in New Issue
Block a user