use of com.intellij.lang.properties.PropertiesReferenceManager in project intellij-community by JetBrains.
the class I18nUtil method propertiesFilesByBundleName.
@NotNull
public static List<PropertiesFile> propertiesFilesByBundleName(final String resourceBundleName, final PsiElement context) {
PsiFile containingFile = context.getContainingFile();
PsiElement containingFileContext = InjectedLanguageManager.getInstance(containingFile.getProject()).getInjectionHost(containingFile);
if (containingFileContext != null)
containingFile = containingFileContext.getContainingFile();
VirtualFile virtualFile = containingFile.getVirtualFile();
if (virtualFile == null) {
virtualFile = containingFile.getOriginalFile().getVirtualFile();
}
if (virtualFile != null) {
Project project = containingFile.getProject();
final Module module = ProjectRootManager.getInstance(project).getFileIndex().getModuleForFile(virtualFile);
if (module != null) {
PropertiesReferenceManager refManager = PropertiesReferenceManager.getInstance(project);
return refManager.findPropertiesFiles(module, resourceBundleName);
}
}
return Collections.emptyList();
}
use of com.intellij.lang.properties.PropertiesReferenceManager in project intellij-community by JetBrains.
the class FormEditingUtil method collectUsedLocales.
public static Locale[] collectUsedLocales(final Module module, final IRootContainer rootContainer) {
final Set<Locale> locales = new HashSet<>();
final PropertiesReferenceManager propManager = PropertiesReferenceManager.getInstance(module.getProject());
for (String bundleName : collectUsedBundleNames(rootContainer)) {
List<PropertiesFile> propFiles = propManager.findPropertiesFiles(module, bundleName.replace('/', '.'));
for (PropertiesFile propFile : propFiles) {
locales.add(propFile.getLocale());
}
}
return locales.toArray(new Locale[locales.size()]);
}
use of com.intellij.lang.properties.PropertiesReferenceManager in project intellij-community by JetBrains.
the class PreviewFormAction method showPreviewFrame.
private static void showPreviewFrame(@NotNull final Module module, @NotNull final VirtualFile formFile, @Nullable final Locale stringDescriptorLocale) {
final String tempPath;
try {
final File tempDirectory = FileUtil.createTempDirectory("FormPreview", "");
tempPath = tempDirectory.getAbsolutePath();
CopyResourcesUtil.copyFormsRuntime(tempPath, true);
} catch (IOException e) {
Messages.showErrorDialog(module.getProject(), UIDesignerBundle.message("error.cannot.preview.form", formFile.getPath().replace('/', File.separatorChar), e.toString()), CommonBundle.getErrorTitle());
return;
}
final PathsList sources = OrderEnumerator.orderEntries(module).withoutSdk().withoutLibraries().withoutDepModules().getSourcePathsList();
final String classPath = OrderEnumerator.orderEntries(module).recursively().getPathsList().getPathsString() + File.pathSeparator + sources.getPathsString() + File.pathSeparator + /* resources bundles */
tempPath;
final InstrumentationClassFinder finder = createClassFinder(classPath);
try {
final Document doc = FileDocumentManager.getInstance().getDocument(formFile);
final LwRootContainer rootContainer;
try {
rootContainer = Utils.getRootContainer(doc.getText(), new CompiledClassPropertiesProvider(finder.getLoader()));
} catch (Exception e) {
Messages.showErrorDialog(module.getProject(), UIDesignerBundle.message("error.cannot.read.form", formFile.getPath().replace('/', File.separatorChar), e.getMessage()), CommonBundle.getErrorTitle());
return;
}
if (rootContainer.getComponentCount() == 0) {
Messages.showErrorDialog(module.getProject(), UIDesignerBundle.message("error.cannot.preview.empty.form", formFile.getPath().replace('/', File.separatorChar)), CommonBundle.getErrorTitle());
return;
}
setPreviewBindings(rootContainer, CLASS_TO_BIND_NAME);
// 2. Copy previewer class and all its superclasses into TEMP directory and instrument it.
try {
PreviewNestedFormLoader nestedFormLoader = new PreviewNestedFormLoader(module, tempPath, finder);
final File tempFile = CopyResourcesUtil.copyClass(tempPath, CLASS_TO_BIND_NAME, true);
//CopyResourcesUtil.copyClass(tempPath, CLASS_TO_BIND_NAME + "$1", true);
CopyResourcesUtil.copyClass(tempPath, CLASS_TO_BIND_NAME + "$MyExitAction", true);
CopyResourcesUtil.copyClass(tempPath, CLASS_TO_BIND_NAME + "$MyPackAction", true);
CopyResourcesUtil.copyClass(tempPath, CLASS_TO_BIND_NAME + "$MySetLafAction", true);
Locale locale = Locale.getDefault();
if (locale.getCountry().length() > 0 && locale.getLanguage().length() > 0) {
CopyResourcesUtil.copyProperties(tempPath, RUNTIME_BUNDLE_PREFIX + "_" + locale.getLanguage() + "_" + locale.getCountry() + PropertiesFileType.DOT_DEFAULT_EXTENSION);
}
if (locale.getLanguage().length() > 0) {
CopyResourcesUtil.copyProperties(tempPath, RUNTIME_BUNDLE_PREFIX + "_" + locale.getLanguage() + PropertiesFileType.DOT_DEFAULT_EXTENSION);
}
CopyResourcesUtil.copyProperties(tempPath, RUNTIME_BUNDLE_PREFIX + "_" + locale.getLanguage() + PropertiesFileType.DOT_DEFAULT_EXTENSION);
CopyResourcesUtil.copyProperties(tempPath, RUNTIME_BUNDLE_PREFIX + PropertiesFileType.DOT_DEFAULT_EXTENSION);
final AsmCodeGenerator codeGenerator = new AsmCodeGenerator(rootContainer, finder, nestedFormLoader, true, new PsiClassWriter(module));
codeGenerator.patchFile(tempFile);
final FormErrorInfo[] errors = codeGenerator.getErrors();
if (errors.length != 0) {
Messages.showErrorDialog(module.getProject(), UIDesignerBundle.message("error.cannot.preview.form", formFile.getPath().replace('/', File.separatorChar), errors[0].getErrorMessage()), CommonBundle.getErrorTitle());
return;
}
} catch (Exception e) {
LOG.debug(e);
Messages.showErrorDialog(module.getProject(), UIDesignerBundle.message("error.cannot.preview.form", formFile.getPath().replace('/', File.separatorChar), e.getMessage() != null ? e.getMessage() : e.toString()), CommonBundle.getErrorTitle());
return;
}
// 2.5. Copy up-to-date properties files to the output directory.
final HashSet<String> bundleSet = new HashSet<>();
FormEditingUtil.iterateStringDescriptors(rootContainer, new FormEditingUtil.StringDescriptorVisitor<IComponent>() {
public boolean visit(final IComponent component, final StringDescriptor descriptor) {
if (descriptor.getBundleName() != null) {
bundleSet.add(descriptor.getDottedBundleName());
}
return true;
}
});
if (bundleSet.size() > 0) {
HashSet<VirtualFile> virtualFiles = new HashSet<>();
HashSet<Module> modules = new HashSet<>();
PropertiesReferenceManager manager = PropertiesReferenceManager.getInstance(module.getProject());
for (String bundleName : bundleSet) {
for (PropertiesFile propFile : manager.findPropertiesFiles(module, bundleName)) {
virtualFiles.add(propFile.getVirtualFile());
final Module moduleForFile = ModuleUtil.findModuleForFile(propFile.getVirtualFile(), module.getProject());
if (moduleForFile != null) {
modules.add(moduleForFile);
}
}
}
FileSetCompileScope scope = new FileSetCompileScope(virtualFiles, modules.toArray(new Module[modules.size()]));
CompilerManager.getInstance(module.getProject()).make(scope, new CompileStatusNotification() {
public void finished(boolean aborted, int errors, int warnings, final CompileContext compileContext) {
if (!aborted && errors == 0) {
runPreviewProcess(tempPath, sources, module, formFile, stringDescriptorLocale);
}
}
});
} else {
runPreviewProcess(tempPath, sources, module, formFile, stringDescriptorLocale);
}
} finally {
finder.releaseResources();
}
}
use of com.intellij.lang.properties.PropertiesReferenceManager in project intellij-community by JetBrains.
the class InvalidPropertyKeyFormInspection method checkDescriptor.
@Nullable
private static String checkDescriptor(final StringDescriptor descriptor, final Module module) {
final String bundleName = descriptor.getDottedBundleName();
final String key = descriptor.getKey();
if (bundleName == null && key == null)
return null;
if (bundleName == null) {
return UIDesignerBundle.message("inspection.invalid.property.in.form.quickfix.error.bundle.not.specified");
}
if (key == null) {
return UIDesignerBundle.message("inspection.invalid.property.in.form.quickfix.error.property.key.not.specified");
}
PropertiesReferenceManager manager = PropertiesReferenceManager.getInstance(module.getProject());
List<PropertiesFile> propFiles = manager.findPropertiesFiles(module, bundleName);
if (propFiles.size() == 0) {
return UIDesignerBundle.message("inspection.invalid.property.in.form.quickfix.error.bundle.not.found", bundleName);
}
for (PropertiesFile propFile : propFiles) {
final com.intellij.lang.properties.IProperty property = propFile.findPropertyByKey(key);
if (property == null) {
return UIDesignerBundle.message("inspection.invalid.property.in.form.quickfix.error.key.not.found", key, bundleName, propFile.getLocale().getDisplayName());
}
}
return null;
}
use of com.intellij.lang.properties.PropertiesReferenceManager in project intellij-community by JetBrains.
the class StringEditorDialog method saveModifiedPropertyValue.
@Nullable
public static String saveModifiedPropertyValue(final Module module, final StringDescriptor descriptor, final Locale locale, final String editedValue, final PsiFile formFile) {
final PropertiesReferenceManager manager = PropertiesReferenceManager.getInstance(module.getProject());
final PropertiesFile propFile = manager.findPropertiesFile(module, descriptor.getDottedBundleName(), locale);
if (propFile != null) {
final IProperty propertyByKey = propFile.findPropertyByKey(descriptor.getKey());
if (propertyByKey instanceof Property && !editedValue.equals(propertyByKey.getValue())) {
final Collection<PsiReference> references = findPropertyReferences((Property) propertyByKey, module);
String newKeyName = null;
if (references.size() > 1) {
final int rc = Messages.showYesNoCancelDialog(module.getProject(), UIDesignerBundle.message("edit.text.multiple.usages", propertyByKey.getUnescapedKey(), references.size()), UIDesignerBundle.message("edit.text.multiple.usages.title"), UIDesignerBundle.message("edit.text.change.all"), UIDesignerBundle.message("edit.text.make.unique"), CommonBundle.getCancelButtonText(), Messages.getWarningIcon());
if (rc == Messages.CANCEL) {
return null;
}
if (rc == Messages.NO) {
newKeyName = promptNewKeyName(module.getProject(), propFile, descriptor.getKey());
if (newKeyName == null)
return null;
}
}
final ReadonlyStatusHandler.OperationStatus operationStatus = ReadonlyStatusHandler.getInstance(module.getProject()).ensureFilesWritable(propFile.getVirtualFile());
if (operationStatus.hasReadonlyFiles()) {
return null;
}
final String newKeyName1 = newKeyName;
CommandProcessor.getInstance().executeCommand(module.getProject(), () -> {
UndoUtil.markPsiFileForUndo(formFile);
ApplicationManager.getApplication().runWriteAction(() -> {
PsiDocumentManager.getInstance(module.getProject()).commitAllDocuments();
try {
if (newKeyName1 != null) {
propFile.addProperty(newKeyName1, editedValue);
} else {
final IProperty propertyByKey1 = propFile.findPropertyByKey(descriptor.getKey());
if (propertyByKey1 != null) {
propertyByKey1.setValue(editedValue);
}
}
} catch (IncorrectOperationException e) {
LOG.error(e);
}
});
}, UIDesignerBundle.message("command.update.property"), null);
return newKeyName;
}
}
return null;
}
Aggregations