From fadd45111eaa5f9fb3fe0a6acae4ea1392a82529 Mon Sep 17 00:00:00 2001 From: Alexey Kudravtsev Date: Wed, 28 May 2014 20:48:06 +0400 Subject: [PATCH] moved properties to properties-psi --- java/java-tests/java-tests.iml | 2 +- .../properties-psi-api/icon-robots.txt | 1 + .../resources/schemas/properties.dtd | 0 .../properties-psi-impl.iml | 3 +- .../src/META-INF/plugin.xml | 11 +- .../TrailingSpacesInPropertyInspection.java | 12 +- .../DuplicatePropertyInspection.form | 0 .../DuplicatePropertyInspection.java | 12 +- .../unused/ImplicitPropertyUsageProvider.java | 5 +- .../unused/UnusedPropertyInspection.java | 12 +- .../lang/properties/PropertiesAnnotator.java | 4 +- .../lang/properties/PropertiesCommenter.java | 2 +- .../properties/PropertiesQuickFixFactory.java | 37 +++++ .../lang/properties/PropertiesUtilBase.java | 0 .../PropertySuppressableInspectionBase.java | 2 +- .../properties/PropertyValueManipulator.java | 0 .../lang/properties/RemovePropertyFix.java | 4 +- .../properties/RemovePropertyLocalFix.java | 2 +- .../PropertiesGroupingStructureViewModel.java | 2 +- .../editor/PropertiesValueHighlighter.java | 2 +- .../PropertiesValueHighlightingLexer.java | 2 +- .../editor/ResourceBundleAsVirtualFile.java | 8 +- ...esourceBundleFileStructureViewElement.java | 0 ...rceBundlePropertyStructureViewElement.java | 0 .../ResourceBundleStructureViewModel.java | 0 .../properties/editor/ResourceBundleUtil.java | 30 +--- .../PropertiesFindUsagesProvider.java | 2 +- .../findUsages/PropertySearcher.java | 2 +- .../parsing/PropertiesWordsScanner.java | 2 +- .../PropertiesRefactoringSettings.java | 2 +- .../PropertiesPsiCompletionUtil.java | 77 +++++++++ .../references/PropertyReference.java | 5 +- .../references/PropertyReferenceBase.java | 115 +------------ .../structureView/GroupByWordPrefixes.java | 0 .../PropertiesFileStructureViewElement.java | 0 .../PropertiesFileStructureViewModel.java | 0 .../structureView/PropertiesPrefixGroup.java | 0 .../PropertiesSeparatorManager.java | 2 +- .../PropertiesStructureViewElement.java | 0 .../xml/XmlPropertiesIconProvider.java | 15 ++ .../XmlPropertiesReferenceContributor.java | 2 +- .../CorePropertiesQuickFixFactory.java | 42 +++++ .../properties/PropertiesCoreEnvironment.java | 69 +++++++- .../impl/idCache/PropertiesFilterLexer.java | 2 +- .../impl/idCache/PropertiesIdIndexer.java | 2 +- .../impl/idCache/PropertiesTodoIndexer.java | 2 +- plugins/properties/properties.iml | 1 - .../LastSelectedPropertiesFileStore.java | 6 +- .../PropertiesCompletionContributor.java | 44 ----- .../properties/PropertiesFilesManager.java | 6 +- .../PropertiesQuickFixFactoryImpl.java | 42 +++++ .../editor/ResourceBundleEditorUtil.java | 52 ++++++ .../editor/ResourceBundleFileType.java | 11 +- .../psi/impl/PropertiesElementImpl.java | 36 ---- .../ResourceBundleKeyRenameHandler.java | 7 +- .../ResourceBundleRenameHandler.java | 6 +- .../PropertiesCompletionContributor.java | 154 ++++++++++++++++++ ...railingSpacesInPropertyInspectionTest.java | 16 ++ 58 files changed, 578 insertions(+), 297 deletions(-) create mode 100644 plugins/properties/properties-psi-api/icon-robots.txt rename plugins/properties/{ => properties-psi-api}/resources/schemas/properties.dtd (100%) rename plugins/properties/{ => properties-psi-impl}/src/META-INF/plugin.xml (91%) rename plugins/properties/{src/com/intellij/lang/properties => properties-psi-impl/src/com/intellij/codeInspection}/TrailingSpacesInPropertyInspection.java (92%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.form (100%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java (98%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/codeInspection/unused/ImplicitPropertyUsageProvider.java (83%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/codeInspection/unused/UnusedPropertyInspection.java (91%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/PropertiesAnnotator.java (97%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/PropertiesCommenter.java (96%) create mode 100644 plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesQuickFixFactory.java rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/PropertiesUtilBase.java (100%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java (99%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/PropertyValueManipulator.java (100%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/RemovePropertyFix.java (94%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/RemovePropertyLocalFix.java (97%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/editor/PropertiesGroupingStructureViewModel.java (95%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/editor/PropertiesValueHighlighter.java (95%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/editor/PropertiesValueHighlightingLexer.java (97%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java (93%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/editor/ResourceBundleFileStructureViewElement.java (100%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/editor/ResourceBundlePropertyStructureViewElement.java (100%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewModel.java (100%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/editor/ResourceBundleUtil.java (72%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/findUsages/PropertiesFindUsagesProvider.java (97%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/findUsages/PropertySearcher.java (95%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/parsing/PropertiesWordsScanner.java (96%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/refactoring/PropertiesRefactoringSettings.java (97%) create mode 100644 plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertiesPsiCompletionUtil.java rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/references/PropertyReference.java (90%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/references/PropertyReferenceBase.java (55%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/structureView/GroupByWordPrefixes.java (100%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/structureView/PropertiesFileStructureViewElement.java (100%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/structureView/PropertiesFileStructureViewModel.java (100%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/structureView/PropertiesPrefixGroup.java (100%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/structureView/PropertiesSeparatorManager.java (99%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/structureView/PropertiesStructureViewElement.java (100%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/xml/XmlPropertiesIconProvider.java (56%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/lang/properties/xml/XmlPropertiesReferenceContributor.java (98%) create mode 100644 plugins/properties/properties-psi-impl/src/com/intellij/properties/CorePropertiesQuickFixFactory.java rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesFilterLexer.java (97%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesIdIndexer.java (96%) rename plugins/properties/{ => properties-psi-impl}/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesTodoIndexer.java (96%) delete mode 100644 plugins/properties/src/com/intellij/lang/properties/PropertiesCompletionContributor.java create mode 100644 plugins/properties/src/com/intellij/lang/properties/PropertiesQuickFixFactoryImpl.java create mode 100644 plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditorUtil.java delete mode 100644 plugins/properties/src/com/intellij/lang/properties/psi/impl/PropertiesElementImpl.java create mode 100644 plugins/properties/src/com/intellij/lang/properties/references/PropertiesCompletionContributor.java diff --git a/java/java-tests/java-tests.iml b/java/java-tests/java-tests.iml index 294b5ded0521..248b1d3b1836 100644 --- a/java/java-tests/java-tests.iml +++ b/java/java-tests/java-tests.iml @@ -14,7 +14,7 @@ - + diff --git a/plugins/properties/properties-psi-api/icon-robots.txt b/plugins/properties/properties-psi-api/icon-robots.txt new file mode 100644 index 000000000000..0b7559b8c7ea --- /dev/null +++ b/plugins/properties/properties-psi-api/icon-robots.txt @@ -0,0 +1 @@ +name: Properties diff --git a/plugins/properties/resources/schemas/properties.dtd b/plugins/properties/properties-psi-api/resources/schemas/properties.dtd similarity index 100% rename from plugins/properties/resources/schemas/properties.dtd rename to plugins/properties/properties-psi-api/resources/schemas/properties.dtd diff --git a/plugins/properties/properties-psi-impl/properties-psi-impl.iml b/plugins/properties/properties-psi-impl/properties-psi-impl.iml index 1eeaef3aa08f..76596cc333fe 100644 --- a/plugins/properties/properties-psi-impl/properties-psi-impl.iml +++ b/plugins/properties/properties-psi-impl/properties-psi-impl.iml @@ -7,7 +7,7 @@ - + @@ -15,6 +15,7 @@ + diff --git a/plugins/properties/src/META-INF/plugin.xml b/plugins/properties/properties-psi-impl/src/META-INF/plugin.xml similarity index 91% rename from plugins/properties/src/META-INF/plugin.xml rename to plugins/properties/properties-psi-impl/src/META-INF/plugin.xml index f7afc05befff..d4dc21ce5b02 100644 --- a/plugins/properties/src/META-INF/plugin.xml +++ b/plugins/properties/properties-psi-impl/src/META-INF/plugin.xml @@ -12,13 +12,16 @@ + - + - @@ -66,12 +69,12 @@ + implementationClass="com.intellij.codeInspection.TrailingSpacesInPropertyInspection"/> - + diff --git a/plugins/properties/src/com/intellij/lang/properties/TrailingSpacesInPropertyInspection.java b/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/TrailingSpacesInPropertyInspection.java similarity index 92% rename from plugins/properties/src/com/intellij/lang/properties/TrailingSpacesInPropertyInspection.java rename to plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/TrailingSpacesInPropertyInspection.java index 9ff99a9e0576..4ca736aabbcd 100644 --- a/plugins/properties/src/com/intellij/lang/properties/TrailingSpacesInPropertyInspection.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/TrailingSpacesInPropertyInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2010 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -13,15 +13,13 @@ * See the License for the specific language governing permissions and * limitations under the License. */ -package com.intellij.lang.properties; +package com.intellij.codeInspection; -import com.intellij.codeInspection.InspectionManager; -import com.intellij.codeInspection.LocalQuickFix; -import com.intellij.codeInspection.ProblemDescriptor; -import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.lang.ASTNode; +import com.intellij.lang.properties.IProperty; +import com.intellij.lang.properties.PropertiesBundle; +import com.intellij.lang.properties.PropertySuppressableInspectionBase; import com.intellij.lang.properties.psi.PropertiesFile; -import com.intellij.lang.properties.psi.Property; import com.intellij.lang.properties.psi.impl.PropertyImpl; import com.intellij.openapi.editor.Document; import com.intellij.openapi.progress.ProgressManager; diff --git a/plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.form b/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.form similarity index 100% rename from plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.form rename to plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.form diff --git a/plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java b/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java similarity index 98% rename from plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java rename to plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java index 192f455ba615..d226349a8285 100644 --- a/plugins/properties/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/duplicatePropertyInspection/DuplicatePropertyInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,7 +16,7 @@ package com.intellij.codeInspection.duplicatePropertyInspection; import com.intellij.codeInspection.*; -import com.intellij.codeInspection.ex.GlobalInspectionContextImpl; +import com.intellij.codeInspection.ex.GlobalInspectionContextBase; import com.intellij.codeInspection.reference.RefManager; import com.intellij.concurrency.JobLauncher; import com.intellij.lang.properties.IProperty; @@ -27,7 +27,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Document; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtil; +import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; @@ -70,7 +70,7 @@ public class DuplicatePropertyInspection extends GlobalSimpleInspectionTool { @NotNull ProblemsHolder problemsHolder, @NotNull GlobalInspectionContext globalContext, @NotNull ProblemDescriptionsProcessor problemDescriptionsProcessor) { - checkFile(file, manager, (GlobalInspectionContextImpl)globalContext, globalContext.getRefManager(), problemDescriptionsProcessor); + checkFile(file, manager, (GlobalInspectionContextBase)globalContext, globalContext.getRefManager(), problemDescriptionsProcessor); } @SuppressWarnings({"HardCodedStringLiteral"}) @@ -135,7 +135,7 @@ public class DuplicatePropertyInspection extends GlobalSimpleInspectionTool { private void checkFile(final PsiFile file, final InspectionManager manager, - GlobalInspectionContextImpl context, + GlobalInspectionContextBase context, final RefManager refManager, final ProblemDescriptionsProcessor processor) { if (!(file instanceof PropertiesFile)) return; @@ -143,7 +143,7 @@ public class DuplicatePropertyInspection extends GlobalSimpleInspectionTool { final PsiSearchHelper searchHelper = PsiSearchHelper.SERVICE.getInstance(file.getProject()); final PropertiesFile propertiesFile = (PropertiesFile)file; final List properties = propertiesFile.getProperties(); - Module module = ModuleUtil.findModuleForPsiElement(file); + Module module = ModuleUtilCore.findModuleForPsiElement(file); if (module == null) return; final GlobalSearchScope scope = CURRENT_FILE ? GlobalSearchScope.fileScope(file) diff --git a/plugins/properties/src/com/intellij/codeInspection/unused/ImplicitPropertyUsageProvider.java b/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/unused/ImplicitPropertyUsageProvider.java similarity index 83% rename from plugins/properties/src/com/intellij/codeInspection/unused/ImplicitPropertyUsageProvider.java rename to plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/unused/ImplicitPropertyUsageProvider.java index ee0b9f593638..f3f8cff01f79 100644 --- a/plugins/properties/src/com/intellij/codeInspection/unused/ImplicitPropertyUsageProvider.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/unused/ImplicitPropertyUsageProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,8 +22,7 @@ import com.intellij.openapi.extensions.ExtensionPointName; * @author Max Medvedev */ public abstract class ImplicitPropertyUsageProvider { - private static final ExtensionPointName EP_NAME = - ExtensionPointName.create("com.intellij.properties.implicitPropertyUsageProvider"); + public static final ExtensionPointName EP_NAME = ExtensionPointName.create("com.intellij.properties.implicitPropertyUsageProvider"); public static boolean isImplicitlyUsed(Property property) { for (ImplicitPropertyUsageProvider provider : EP_NAME.getExtensions()) { diff --git a/plugins/properties/src/com/intellij/codeInspection/unused/UnusedPropertyInspection.java b/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/unused/UnusedPropertyInspection.java similarity index 91% rename from plugins/properties/src/com/intellij/codeInspection/unused/UnusedPropertyInspection.java rename to plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/unused/UnusedPropertyInspection.java index 2f8370defdba..53e241ef24bd 100644 --- a/plugins/properties/src/com/intellij/codeInspection/unused/UnusedPropertyInspection.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/codeInspection/unused/UnusedPropertyInspection.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,17 +16,18 @@ package com.intellij.codeInspection.unused; import com.intellij.codeInspection.LocalInspectionToolSession; +import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.ProblemHighlightType; import com.intellij.codeInspection.ProblemsHolder; import com.intellij.lang.ASTNode; import com.intellij.lang.properties.PropertiesBundle; +import com.intellij.lang.properties.PropertiesQuickFixFactory; import com.intellij.lang.properties.PropertySuppressableInspectionBase; -import com.intellij.lang.properties.RemovePropertyLocalFix; import com.intellij.lang.properties.findUsages.PropertySearcher; import com.intellij.lang.properties.psi.Property; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.module.Module; -import com.intellij.openapi.module.ModuleUtil; +import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.progress.ProgressIndicator; import com.intellij.openapi.progress.ProgressManager; import com.intellij.psi.PsiElement; @@ -61,7 +62,7 @@ public class UnusedPropertyInspection extends PropertySuppressableInspectionBase final boolean isOnTheFly, @NotNull final LocalInspectionToolSession session) { final PsiFile file = session.getFile(); - Module module = ModuleUtil.findModuleForPsiElement(file); + Module module = ModuleUtilCore.findModuleForPsiElement(file); if (module == null) return super.buildVisitor(holder, isOnTheFly, session); Object[] extensions = Extensions.getExtensions("com.intellij.referencesSearch"); final PropertySearcher searcher = @@ -104,7 +105,8 @@ public class UnusedPropertyInspection extends PropertySuppressableInspectionBase PsiElement key = nodes.length == 0 ? property : nodes[0].getPsi(); String description = PropertiesBundle.message("unused.property.problem.descriptor.name"); - holder.registerProblem(key, description, ProblemHighlightType.LIKE_UNUSED_SYMBOL, RemovePropertyLocalFix.INSTANCE); + LocalQuickFix fix = PropertiesQuickFixFactory.getInstance().createRemovePropertyLocalFix(); + holder.registerProblem(key, description, ProblemHighlightType.LIKE_UNUSED_SYMBOL, fix); } }; } diff --git a/plugins/properties/src/com/intellij/lang/properties/PropertiesAnnotator.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesAnnotator.java similarity index 97% rename from plugins/properties/src/com/intellij/lang/properties/PropertiesAnnotator.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesAnnotator.java index 316a0f8c09b7..c5cdf72cbdf4 100644 --- a/plugins/properties/src/com/intellij/lang/properties/PropertiesAnnotator.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesAnnotator.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -54,7 +54,7 @@ public class PropertiesAnnotator implements Annotator { ASTNode keyNode = ((PropertyImpl)property).getKeyNode(); if (others.size() != 1) { Annotation annotation = holder.createErrorAnnotation(keyNode, PropertiesBundle.message("duplicate.property.key.error.message")); - annotation.registerFix(new RemovePropertyFix(property)); + annotation.registerFix(PropertiesQuickFixFactory.getInstance().createRemovePropertyFix(property)); } highlightTokens(property, keyNode, holder, new PropertiesHighlighter()); diff --git a/plugins/properties/src/com/intellij/lang/properties/PropertiesCommenter.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesCommenter.java similarity index 96% rename from plugins/properties/src/com/intellij/lang/properties/PropertiesCommenter.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesCommenter.java index a80c90f8ed02..8e63111ff8e1 100644 --- a/plugins/properties/src/com/intellij/lang/properties/PropertiesCommenter.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesCommenter.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesQuickFixFactory.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesQuickFixFactory.java new file mode 100644 index 000000000000..cd714a4bcf63 --- /dev/null +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesQuickFixFactory.java @@ -0,0 +1,37 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.lang.properties; + +import com.intellij.codeInsight.intention.IntentionAction; +import com.intellij.codeInspection.LocalQuickFix; +import com.intellij.lang.properties.psi.PropertiesFile; +import com.intellij.lang.properties.psi.Property; +import com.intellij.openapi.components.ServiceManager; +import com.intellij.psi.PsiElement; + +import java.util.List; + +public abstract class PropertiesQuickFixFactory { + public static PropertiesQuickFixFactory getInstance() { + return ServiceManager.getService(PropertiesQuickFixFactory.class); + } + + public abstract LocalQuickFix createCreatePropertyFix(PsiElement element, String key, List files); + + public abstract IntentionAction createRemovePropertyFix(Property property); + + public abstract LocalQuickFix createRemovePropertyLocalFix(); +} diff --git a/plugins/properties/src/com/intellij/lang/properties/PropertiesUtilBase.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesUtilBase.java similarity index 100% rename from plugins/properties/src/com/intellij/lang/properties/PropertiesUtilBase.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertiesUtilBase.java diff --git a/plugins/properties/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java similarity index 99% rename from plugins/properties/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java index 7aff26844901..0c26c67267e7 100644 --- a/plugins/properties/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertySuppressableInspectionBase.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2010 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/src/com/intellij/lang/properties/PropertyValueManipulator.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertyValueManipulator.java similarity index 100% rename from plugins/properties/src/com/intellij/lang/properties/PropertyValueManipulator.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/PropertyValueManipulator.java diff --git a/plugins/properties/src/com/intellij/lang/properties/RemovePropertyFix.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/RemovePropertyFix.java similarity index 94% rename from plugins/properties/src/com/intellij/lang/properties/RemovePropertyFix.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/RemovePropertyFix.java index a5fd365f58c5..e183e7ce5cc9 100644 --- a/plugins/properties/src/com/intellij/lang/properties/RemovePropertyFix.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/RemovePropertyFix.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -27,7 +27,7 @@ import org.jetbrains.annotations.NotNull; /** * @author cdr */ -class RemovePropertyFix implements IntentionAction { +public class RemovePropertyFix implements IntentionAction { private final Property myProperty; public RemovePropertyFix(@NotNull final Property origProperty) { diff --git a/plugins/properties/src/com/intellij/lang/properties/RemovePropertyLocalFix.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/RemovePropertyLocalFix.java similarity index 97% rename from plugins/properties/src/com/intellij/lang/properties/RemovePropertyLocalFix.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/RemovePropertyLocalFix.java index 5c8c581f44cb..8b5a583c5900 100644 --- a/plugins/properties/src/com/intellij/lang/properties/RemovePropertyLocalFix.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/RemovePropertyLocalFix.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/PropertiesGroupingStructureViewModel.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/PropertiesGroupingStructureViewModel.java similarity index 95% rename from plugins/properties/src/com/intellij/lang/properties/editor/PropertiesGroupingStructureViewModel.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/PropertiesGroupingStructureViewModel.java index f9dcf034c015..2faf98d6a126 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/PropertiesGroupingStructureViewModel.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/PropertiesGroupingStructureViewModel.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/PropertiesValueHighlighter.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/PropertiesValueHighlighter.java similarity index 95% rename from plugins/properties/src/com/intellij/lang/properties/editor/PropertiesValueHighlighter.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/PropertiesValueHighlighter.java index 0a937f07e62a..8e17f6c514e2 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/PropertiesValueHighlighter.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/PropertiesValueHighlighter.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/PropertiesValueHighlightingLexer.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/PropertiesValueHighlightingLexer.java similarity index 97% rename from plugins/properties/src/com/intellij/lang/properties/editor/PropertiesValueHighlightingLexer.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/PropertiesValueHighlightingLexer.java index a4e105adbc6c..6c55ffeb9697 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/PropertiesValueHighlightingLexer.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/PropertiesValueHighlightingLexer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java similarity index 93% rename from plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java index 2f799368084c..f46d207dc935 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundleAsVirtualFile.java @@ -19,9 +19,7 @@ */ package com.intellij.lang.properties.editor; -import com.intellij.ide.presentation.Presentation; import com.intellij.lang.properties.ResourceBundle; -import com.intellij.openapi.vfs.LocalFileSystem; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileSystem; import org.jetbrains.annotations.NotNull; @@ -30,14 +28,14 @@ import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; -@Presentation(icon = "AllIcons.Nodes.ResourceBundle") public class ResourceBundleAsVirtualFile extends VirtualFile { private final ResourceBundle myResourceBundle; - public ResourceBundleAsVirtualFile(ResourceBundle resourceBundle) { + public ResourceBundleAsVirtualFile(@NotNull ResourceBundle resourceBundle) { myResourceBundle = resourceBundle; } + @NotNull public ResourceBundle getResourceBundle() { return myResourceBundle; } @@ -45,7 +43,7 @@ public class ResourceBundleAsVirtualFile extends VirtualFile { @Override @NotNull public VirtualFileSystem getFileSystem() { - return LocalFileSystem.getInstance(); + return myResourceBundle.getBaseDirectory().getFileSystem(); } @Override diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleFileStructureViewElement.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundleFileStructureViewElement.java similarity index 100% rename from plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleFileStructureViewElement.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundleFileStructureViewElement.java diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundlePropertyStructureViewElement.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundlePropertyStructureViewElement.java similarity index 100% rename from plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundlePropertyStructureViewElement.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundlePropertyStructureViewElement.java diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewModel.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewModel.java similarity index 100% rename from plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewModel.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundleStructureViewModel.java diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleUtil.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundleUtil.java similarity index 72% rename from plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleUtil.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundleUtil.java index ab2035c70b2f..53a9bd4dc31a 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleUtil.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/editor/ResourceBundleUtil.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -20,8 +20,6 @@ import com.intellij.lang.properties.ResourceBundle; import com.intellij.lang.properties.psi.PropertiesFile; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; -import com.intellij.openapi.fileEditor.FileEditor; -import com.intellij.openapi.fileEditor.FileEditorManager; import com.intellij.openapi.project.Project; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiElement; @@ -68,30 +66,4 @@ public class ResourceBundleUtil { } return null; } - - /** - * Tries to derive {@link ResourceBundleEditor resource bundle editor} identified by the given context. - * - * @param dataContext target data context - * @return resource bundle editor identified by the given context; null otherwise - */ - @Nullable - public static ResourceBundleEditor getEditor(@NotNull DataContext dataContext) { - Project project = CommonDataKeys.PROJECT.getData(dataContext); - if (project == null) { - return null; - } - - VirtualFile virtualFile = CommonDataKeys.VIRTUAL_FILE.getData(dataContext); - if (virtualFile == null) { - return null; - } - FileEditor[] editors = FileEditorManager.getInstance(project).getEditors(virtualFile); - if (editors.length != 1 || (!(editors[0] instanceof ResourceBundleEditor))) { - return null; - } - - return (ResourceBundleEditor)editors[0]; - } - } diff --git a/plugins/properties/src/com/intellij/lang/properties/findUsages/PropertiesFindUsagesProvider.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/findUsages/PropertiesFindUsagesProvider.java similarity index 97% rename from plugins/properties/src/com/intellij/lang/properties/findUsages/PropertiesFindUsagesProvider.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/findUsages/PropertiesFindUsagesProvider.java index 99e73384850c..a2d38d2986f0 100644 --- a/plugins/properties/src/com/intellij/lang/properties/findUsages/PropertiesFindUsagesProvider.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/findUsages/PropertiesFindUsagesProvider.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2013 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/src/com/intellij/lang/properties/findUsages/PropertySearcher.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/findUsages/PropertySearcher.java similarity index 95% rename from plugins/properties/src/com/intellij/lang/properties/findUsages/PropertySearcher.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/findUsages/PropertySearcher.java index 0239356a7a17..4fa4830597c5 100644 --- a/plugins/properties/src/com/intellij/lang/properties/findUsages/PropertySearcher.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/findUsages/PropertySearcher.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/src/com/intellij/lang/properties/parsing/PropertiesWordsScanner.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertiesWordsScanner.java similarity index 96% rename from plugins/properties/src/com/intellij/lang/properties/parsing/PropertiesWordsScanner.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertiesWordsScanner.java index c4d54d61e10e..cc22eb1f6944 100644 --- a/plugins/properties/src/com/intellij/lang/properties/parsing/PropertiesWordsScanner.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/parsing/PropertiesWordsScanner.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/src/com/intellij/lang/properties/refactoring/PropertiesRefactoringSettings.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/refactoring/PropertiesRefactoringSettings.java similarity index 97% rename from plugins/properties/src/com/intellij/lang/properties/refactoring/PropertiesRefactoringSettings.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/refactoring/PropertiesRefactoringSettings.java index 650f2ac0555c..bf84c6b25a12 100644 --- a/plugins/properties/src/com/intellij/lang/properties/refactoring/PropertiesRefactoringSettings.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/refactoring/PropertiesRefactoringSettings.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertiesPsiCompletionUtil.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertiesPsiCompletionUtil.java new file mode 100644 index 000000000000..4fe5ce2f8e8d --- /dev/null +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertiesPsiCompletionUtil.java @@ -0,0 +1,77 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.lang.properties.references; + +import com.intellij.lang.properties.IProperty; +import com.intellij.lang.properties.PropertiesFileProcessor; +import com.intellij.lang.properties.PropertiesReferenceManager; +import com.intellij.lang.properties.psi.PropertiesFile; +import com.intellij.openapi.roots.ProjectRootManager; +import com.intellij.openapi.util.Comparing; +import gnu.trove.THashSet; +import gnu.trove.TObjectHashingStrategy; + +import java.util.List; +import java.util.Set; + +public class PropertiesPsiCompletionUtil { + public static void addVariantsFromFile(PropertyReferenceBase propertyReference, + final PropertiesFile propertiesFile, + final Set variants) { + if (propertiesFile == null) return; + if (!ProjectRootManager.getInstance(propertyReference.getElement().getProject()).getFileIndex().isInContent(propertiesFile.getVirtualFile())) return; + List properties = propertiesFile.getProperties(); + for (IProperty property : properties) { + propertyReference.addKey(property, variants); + } + } + + static Set getPropertiesKeys(final PropertyReferenceBase propertyReference) { + final Set variants = new THashSet(new TObjectHashingStrategy() { + public int computeHashCode(final Object object) { + if (object instanceof IProperty) { + final String key = ((IProperty)object).getKey(); + return key == null ? 0 : key.hashCode(); + } + else { + return 0; + } + } + + public boolean equals(final Object o1, final Object o2) { + return o1 instanceof IProperty && o2 instanceof IProperty && + Comparing.equal(((IProperty)o1).getKey(), ((IProperty)o2).getKey(), true); + } + }); + List propertiesFileList = propertyReference.getPropertiesFiles(); + if (propertiesFileList == null) { + PropertiesReferenceManager + .getInstance(propertyReference.getElement().getProject()).processAllPropertiesFiles(new PropertiesFileProcessor() { + @Override + public boolean process(String baseName, PropertiesFile propertiesFile) { + addVariantsFromFile(propertyReference, propertiesFile, variants); + return true; + } + }); + } + else { + for (PropertiesFile propFile : propertiesFileList) { + addVariantsFromFile(propertyReference, propFile, variants); + } + } + return variants; + } +} diff --git a/plugins/properties/src/com/intellij/lang/properties/references/PropertyReference.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertyReference.java similarity index 90% rename from plugins/properties/src/com/intellij/lang/properties/references/PropertyReference.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertyReference.java index ff5fcfdd698d..4c2d1e383170 100644 --- a/plugins/properties/src/com/intellij/lang/properties/references/PropertyReference.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertyReference.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -17,6 +17,7 @@ package com.intellij.lang.properties.references; import com.intellij.codeInspection.LocalQuickFix; import com.intellij.codeInspection.LocalQuickFixProvider; +import com.intellij.lang.properties.PropertiesQuickFixFactory; import com.intellij.lang.properties.psi.PropertiesFile; import com.intellij.openapi.util.TextRange; import com.intellij.psi.PsiElement; @@ -55,7 +56,7 @@ public class PropertyReference extends PropertyReferenceBase implements LocalQui public LocalQuickFix[] getQuickFixes() { List propertiesFiles = retrievePropertyFilesByBundleName(myBundleName, getElement()); - CreatePropertyFix fix = new CreatePropertyFix(myElement, myKey, propertiesFiles); + LocalQuickFix fix = PropertiesQuickFixFactory.getInstance().createCreatePropertyFix(myElement, myKey, propertiesFiles); return new LocalQuickFix[] {fix}; } } diff --git a/plugins/properties/src/com/intellij/lang/properties/references/PropertyReferenceBase.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertyReferenceBase.java similarity index 55% rename from plugins/properties/src/com/intellij/lang/properties/references/PropertyReferenceBase.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertyReferenceBase.java index bcc1e84a049a..a740d8ece66f 100644 --- a/plugins/properties/src/com/intellij/lang/properties/references/PropertyReferenceBase.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/references/PropertyReferenceBase.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -16,25 +16,18 @@ package com.intellij.lang.properties.references; import com.intellij.codeInsight.daemon.EmptyResolveMessageProvider; -import com.intellij.codeInsight.lookup.*; -import com.intellij.icons.AllIcons; -import com.intellij.lang.properties.*; +import com.intellij.lang.properties.IProperty; +import com.intellij.lang.properties.PropertiesBundle; +import com.intellij.lang.properties.PropertiesImplUtil; import com.intellij.lang.properties.psi.PropertiesFile; import com.intellij.openapi.diagnostic.Logger; -import com.intellij.openapi.editor.colors.EditorColorsManager; -import com.intellij.openapi.editor.markup.TextAttributes; -import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.Comparing; import com.intellij.openapi.util.TextRange; -import com.intellij.openapi.util.text.StringUtil; import com.intellij.pom.references.PomService; import com.intellij.psi.*; +import com.intellij.util.ArrayUtil; import com.intellij.util.IncorrectOperationException; -import com.intellij.util.NullableFunction; -import com.intellij.util.PlatformIcons; import com.intellij.util.containers.ContainerUtil; -import gnu.trove.THashSet; -import gnu.trove.TObjectHashingStrategy; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -48,48 +41,6 @@ import java.util.Set; */ public abstract class PropertyReferenceBase implements PsiPolyVariantReference, EmptyResolveMessageProvider { private static final Logger LOG = Logger.getInstance("#com.intellij.lang.properties.references.PropertyReferenceBase"); - private static final LookupElementRenderer LOOKUP_ELEMENT_RENDERER = new LookupElementRenderer() { - @Override - public void renderElement(LookupElement element, LookupElementPresentation presentation) { - IProperty property = (IProperty)element.getObject(); - presentation.setIcon(PlatformIcons.PROPERTY_ICON); - String key = StringUtil.notNullize(property.getUnescapedKey()); - presentation.setItemText(key); - - PropertiesFile propertiesFile = property.getPropertiesFile(); - ResourceBundle resourceBundle = propertiesFile.getResourceBundle(); - String value = property.getValue(); - boolean hasBundle = resourceBundle != EmptyResourceBundle.getInstance(); - if (hasBundle) { - PropertiesFile defaultPropertiesFile = resourceBundle.getDefaultPropertiesFile(propertiesFile.getProject()); - IProperty defaultProperty = defaultPropertiesFile.findPropertyByKey(key); - if (defaultProperty != null) { - value = defaultProperty.getValue(); - } - } - - if (hasBundle) { - presentation.setTypeText(resourceBundle.getBaseName(), AllIcons.FileTypes.Properties); - } - - if (presentation instanceof RealLookupElementPresentation && value != null) { - value = "=" + value; - int limit = 1000; - if (value.length() > limit || !((RealLookupElementPresentation)presentation).hasEnoughSpaceFor(value, false)) { - if (value.length() > limit) { - value = value.substring(0, limit); - } - while (value.length() > 0 && !((RealLookupElementPresentation)presentation).hasEnoughSpaceFor(value + "...", false)) { - value = value.substring(0, value.length() - 1); - } - value += "..."; - } - } - - TextAttributes attrs = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(PropertiesHighlighter.PROPERTY_VALUE); - presentation.setTailText(value, attrs.getForegroundColor()); - } - }; protected final String myKey; protected final PsiElement myElement; protected boolean mySoft; @@ -174,15 +125,6 @@ public abstract class PropertyReferenceBase implements PsiPolyVariantReference, variants.add(property); } - protected void addVariantsFromFile(final PropertiesFile propertiesFile, final Set variants) { - if (propertiesFile == null) return; - if (!ProjectRootManager.getInstance(myElement.getProject()).getFileIndex().isInContent(propertiesFile.getVirtualFile())) return; - List properties = propertiesFile.getProperties(); - for (IProperty property : properties) { - addKey(property, variants); - } - } - protected void setSoft(final boolean soft) { mySoft = soft; } @@ -239,51 +181,6 @@ public abstract class PropertyReferenceBase implements PsiPolyVariantReference, @NotNull public Object[] getVariants() { - final Set variants = new THashSet(new TObjectHashingStrategy() { - public int computeHashCode(final Object object) { - if (object instanceof IProperty) { - final String key = ((IProperty)object).getKey(); - return key == null ? 0 : key.hashCode(); - } - else { - return 0; - } - } - - public boolean equals(final Object o1, final Object o2) { - return o1 instanceof IProperty && o2 instanceof IProperty && - Comparing.equal(((IProperty)o1).getKey(), ((IProperty)o2).getKey(), true); - } - }); - List propertiesFileList = getPropertiesFiles(); - if (propertiesFileList == null) { - PropertiesReferenceManager.getInstance(myElement.getProject()).processAllPropertiesFiles(new PropertiesFileProcessor() { - @Override - public boolean process(String baseName, PropertiesFile propertiesFile) { - addVariantsFromFile(propertiesFile, variants); - return true; - } - }); - } - else { - for (PropertiesFile propFile : propertiesFileList) { - addVariantsFromFile(propFile, variants); - } - } - return getVariants(variants); - } - - protected static Object[] getVariants(Set variants) { - return ContainerUtil.mapNotNull(variants, new NullableFunction() { - @Override - public LookupElement fun(Object o) { - if (o instanceof String) return LookupElementBuilder.create((String)o).withIcon(PlatformIcons.PROPERTY_ICON); - IProperty property = (IProperty)o; - String key = property.getKey(); - if (key == null) return null; - - return LookupElementBuilder.create(property, key).withRenderer(LOOKUP_ELEMENT_RENDERER); - } - }).toArray(); + return ArrayUtil.EMPTY_OBJECT_ARRAY; } } diff --git a/plugins/properties/src/com/intellij/lang/properties/structureView/GroupByWordPrefixes.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/GroupByWordPrefixes.java similarity index 100% rename from plugins/properties/src/com/intellij/lang/properties/structureView/GroupByWordPrefixes.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/GroupByWordPrefixes.java diff --git a/plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesFileStructureViewElement.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/PropertiesFileStructureViewElement.java similarity index 100% rename from plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesFileStructureViewElement.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/PropertiesFileStructureViewElement.java diff --git a/plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesFileStructureViewModel.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/PropertiesFileStructureViewModel.java similarity index 100% rename from plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesFileStructureViewModel.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/PropertiesFileStructureViewModel.java diff --git a/plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesPrefixGroup.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/PropertiesPrefixGroup.java similarity index 100% rename from plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesPrefixGroup.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/PropertiesPrefixGroup.java diff --git a/plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesSeparatorManager.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/PropertiesSeparatorManager.java similarity index 99% rename from plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesSeparatorManager.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/PropertiesSeparatorManager.java index 91c7d883d1f0..f5e636811b92 100644 --- a/plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesSeparatorManager.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/PropertiesSeparatorManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesStructureViewElement.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/PropertiesStructureViewElement.java similarity index 100% rename from plugins/properties/src/com/intellij/lang/properties/structureView/PropertiesStructureViewElement.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/structureView/PropertiesStructureViewElement.java diff --git a/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesIconProvider.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/xml/XmlPropertiesIconProvider.java similarity index 56% rename from plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesIconProvider.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/xml/XmlPropertiesIconProvider.java index a6757d050995..c54eeb0d77ec 100644 --- a/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesIconProvider.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/xml/XmlPropertiesIconProvider.java @@ -1,3 +1,18 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.intellij.lang.properties.xml; import com.intellij.ide.IconProvider; diff --git a/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesReferenceContributor.java b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/xml/XmlPropertiesReferenceContributor.java similarity index 98% rename from plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesReferenceContributor.java rename to plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/xml/XmlPropertiesReferenceContributor.java index bb66ee580205..20fb07eeb7a7 100644 --- a/plugins/properties/src/com/intellij/lang/properties/xml/XmlPropertiesReferenceContributor.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/lang/properties/xml/XmlPropertiesReferenceContributor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2011 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/properties/CorePropertiesQuickFixFactory.java b/plugins/properties/properties-psi-impl/src/com/intellij/properties/CorePropertiesQuickFixFactory.java new file mode 100644 index 000000000000..0b859fc06226 --- /dev/null +++ b/plugins/properties/properties-psi-impl/src/com/intellij/properties/CorePropertiesQuickFixFactory.java @@ -0,0 +1,42 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.properties; + +import com.intellij.codeInsight.intention.IntentionAction; +import com.intellij.codeInspection.LocalQuickFix; +import com.intellij.lang.properties.PropertiesQuickFixFactory; +import com.intellij.lang.properties.psi.PropertiesFile; +import com.intellij.lang.properties.psi.Property; +import com.intellij.psi.PsiElement; + +import java.util.List; + +public class CorePropertiesQuickFixFactory extends PropertiesQuickFixFactory { + @Override + public LocalQuickFix createCreatePropertyFix(PsiElement element, String key, List files) { + throw new UnsupportedOperationException(); + } + + @Override + public IntentionAction createRemovePropertyFix(Property property) { + throw new UnsupportedOperationException(); + } + + @Override + public LocalQuickFix createRemovePropertyLocalFix() { + throw new UnsupportedOperationException(); + } +} diff --git a/plugins/properties/properties-psi-impl/src/com/intellij/properties/PropertiesCoreEnvironment.java b/plugins/properties/properties-psi-impl/src/com/intellij/properties/PropertiesCoreEnvironment.java index 0c88bfb44c81..fbf3a223d96a 100644 --- a/plugins/properties/properties-psi-impl/src/com/intellij/properties/PropertiesCoreEnvironment.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/properties/PropertiesCoreEnvironment.java @@ -1,33 +1,96 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.intellij.properties; import com.intellij.core.CoreApplicationEnvironment; import com.intellij.core.CoreProjectEnvironment; +import com.intellij.ide.IconProvider; +import com.intellij.lang.LanguageASTFactory; +import com.intellij.lang.LanguageAnnotators; +import com.intellij.lang.LanguageCommenters; import com.intellij.lang.LanguageParserDefinitions; -import com.intellij.lang.properties.PropertiesFileType; -import com.intellij.lang.properties.PropertiesLanguage; +import com.intellij.lang.findUsages.LanguageFindUsages; +import com.intellij.lang.folding.LanguageFolding; +import com.intellij.lang.properties.*; +import com.intellij.lang.properties.editor.PropertiesFoldingBuilder; +import com.intellij.lang.properties.findUsages.PropertiesFindUsagesProvider; +import com.intellij.lang.properties.parsing.PropertiesElementTypes; import com.intellij.lang.properties.parsing.PropertiesParserDefinition; import com.intellij.lang.properties.psi.PropertyKeyIndex; +import com.intellij.lang.properties.psi.impl.PropertiesASTFactory; +import com.intellij.lang.properties.psi.impl.PropertyImpl; +import com.intellij.lang.properties.psi.impl.PropertyValueImpl; +import com.intellij.lang.properties.refactoring.PropertiesRefactoringSettings; +import com.intellij.lang.properties.structureView.PropertiesSeparatorManager; +import com.intellij.lang.properties.xml.XmlPropertiesIconProvider; import com.intellij.lang.properties.xml.XmlPropertiesIndex; +import com.intellij.lang.properties.xml.XmlPropertiesReferenceContributor; import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory; +import com.intellij.psi.ElementManipulators; +import com.intellij.psi.PsiReferenceContributor; +import com.intellij.psi.impl.cache.impl.id.IdIndexers; +import com.intellij.psi.impl.cache.impl.idCache.PropertiesIdIndexer; +import com.intellij.psi.impl.cache.impl.idCache.PropertiesTodoIndexer; +import com.intellij.psi.impl.cache.impl.todo.TodoIndexers; +import com.intellij.psi.stubs.StubElementTypeHolderEP; import com.intellij.psi.stubs.StubIndexExtension; import com.intellij.util.indexing.FileBasedIndexExtension; /** * @author Anna Bulenkova */ +@SuppressWarnings("UnusedDeclaration") // upsource public class PropertiesCoreEnvironment { public static class ApplicationEnvironment { public ApplicationEnvironment(CoreApplicationEnvironment appEnvironment) { appEnvironment.registerFileType(PropertiesFileType.INSTANCE, "properties"); - SyntaxHighlighterFactory.LANGUAGE_FACTORY.addExplicitExtension(PropertiesLanguage.INSTANCE, new PropertiesSyntaxHighlighterFactory()); + appEnvironment.addExplicitExtension(SyntaxHighlighterFactory.LANGUAGE_FACTORY, PropertiesLanguage.INSTANCE, + new PropertiesSyntaxHighlighterFactory()); appEnvironment.addExplicitExtension(LanguageParserDefinitions.INSTANCE, PropertiesLanguage.INSTANCE, new PropertiesParserDefinition()); appEnvironment.addExtension(FileBasedIndexExtension.EXTENSION_POINT_NAME, new XmlPropertiesIndex()); appEnvironment.addExtension(StubIndexExtension.EP_NAME, new PropertyKeyIndex()); + + appEnvironment.registerApplicationService(PropertiesQuickFixFactory.class, new CorePropertiesQuickFixFactory()); + appEnvironment.registerApplicationService(PropertiesRefactoringSettings.class, new PropertiesRefactoringSettings()); + appEnvironment.registerApplicationService(PropertiesSeparatorManager.class, new PropertiesSeparatorManager()); + appEnvironment.addExplicitExtension(LanguageAnnotators.INSTANCE, PropertiesLanguage.INSTANCE, new PropertiesAnnotator()); + appEnvironment.addExplicitExtension(LanguageFindUsages.INSTANCE, PropertiesLanguage.INSTANCE, new PropertiesFindUsagesProvider()); + + appEnvironment.addExplicitExtension(LanguageASTFactory.INSTANCE, PropertiesLanguage.INSTANCE, new PropertiesASTFactory()); + appEnvironment.addExplicitExtension(LanguageFolding.INSTANCE, PropertiesLanguage.INSTANCE, new PropertiesFoldingBuilder()); + appEnvironment.addExplicitExtension(ElementManipulators.INSTANCE, PropertyImpl.class, new PropertyManipulator()); + appEnvironment.addExplicitExtension(ElementManipulators.INSTANCE, PropertyValueImpl.class, new PropertyValueManipulator()); + + appEnvironment.addExtension(PsiReferenceContributor.EP_NAME, new XmlPropertiesReferenceContributor()); + + final StubElementTypeHolderEP stubElementTypeHolderBean = new StubElementTypeHolderEP(); + stubElementTypeHolderBean.holderClass = PropertiesElementTypes.class.getName(); + appEnvironment.addExtension(StubElementTypeHolderEP.EP_NAME, stubElementTypeHolderBean); + + appEnvironment.addExplicitExtension(LanguageCommenters.INSTANCE, PropertiesLanguage.INSTANCE, new PropertiesCommenter()); + appEnvironment.addExplicitExtension(IdIndexers.INSTANCE, PropertiesFileType.INSTANCE, new PropertiesIdIndexer()); + appEnvironment.addExplicitExtension(TodoIndexers.INSTANCE, PropertiesFileType.INSTANCE, new PropertiesTodoIndexer()); + + appEnvironment.addExtension(IconProvider.EXTENSION_POINT_NAME, new XmlPropertiesIconProvider()); } } public static class ProjectEnvironment { public ProjectEnvironment(CoreProjectEnvironment projectEnvironment) { + projectEnvironment.getProject().registerService(PropertiesReferenceManager.class); } } } diff --git a/plugins/properties/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesFilterLexer.java b/plugins/properties/properties-psi-impl/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesFilterLexer.java similarity index 97% rename from plugins/properties/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesFilterLexer.java rename to plugins/properties/properties-psi-impl/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesFilterLexer.java index 10e2134e72da..07c81ea24c28 100644 --- a/plugins/properties/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesFilterLexer.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesFilterLexer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesIdIndexer.java b/plugins/properties/properties-psi-impl/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesIdIndexer.java similarity index 96% rename from plugins/properties/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesIdIndexer.java rename to plugins/properties/properties-psi-impl/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesIdIndexer.java index 4224983fc769..18887efc2df3 100644 --- a/plugins/properties/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesIdIndexer.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesIdIndexer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesTodoIndexer.java b/plugins/properties/properties-psi-impl/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesTodoIndexer.java similarity index 96% rename from plugins/properties/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesTodoIndexer.java rename to plugins/properties/properties-psi-impl/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesTodoIndexer.java index b810a435f22f..19fa8101dd93 100644 --- a/plugins/properties/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesTodoIndexer.java +++ b/plugins/properties/properties-psi-impl/src/com/intellij/psi/impl/cache/impl/idCache/PropertiesTodoIndexer.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. diff --git a/plugins/properties/properties.iml b/plugins/properties/properties.iml index d5b88b83bbb2..5549251d37b9 100644 --- a/plugins/properties/properties.iml +++ b/plugins/properties/properties.iml @@ -3,7 +3,6 @@ - diff --git a/plugins/properties/src/com/intellij/lang/properties/LastSelectedPropertiesFileStore.java b/plugins/properties/src/com/intellij/lang/properties/LastSelectedPropertiesFileStore.java index 37eb79ed07f3..6fd19b2d9c89 100644 --- a/plugins/properties/src/com/intellij/lang/properties/LastSelectedPropertiesFileStore.java +++ b/plugins/properties/src/com/intellij/lang/properties/LastSelectedPropertiesFileStore.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2012 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -18,7 +18,7 @@ package com.intellij.lang.properties; import com.intellij.injected.editor.VirtualFileWindow; import com.intellij.lang.properties.psi.PropertiesFile; import com.intellij.openapi.components.*; -import com.intellij.openapi.module.ModuleUtil; +import com.intellij.openapi.module.ModuleUtilCore; import com.intellij.openapi.roots.ProjectFileIndex; import com.intellij.openapi.roots.ProjectRootManager; import com.intellij.openapi.util.io.FileUtil; @@ -71,7 +71,7 @@ public class LastSelectedPropertiesFileStore implements PersistentStateComponent if (lastSelectedFileUrl != null) { VirtualFile lastFile = VirtualFileManager.getInstance().findFileByUrl(lastSelectedFileUrl); final ProjectFileIndex fileIndex = ProjectRootManager.getInstance(context.getProject()).getFileIndex(); - if (lastFile != null && ModuleUtil.findModuleForPsiElement(context) == fileIndex.getModuleForFile(lastFile)) { + if (lastFile != null && ModuleUtilCore.findModuleForPsiElement(context) == fileIndex.getModuleForFile(lastFile)) { return lastSelectedFileUrl; } } diff --git a/plugins/properties/src/com/intellij/lang/properties/PropertiesCompletionContributor.java b/plugins/properties/src/com/intellij/lang/properties/PropertiesCompletionContributor.java deleted file mode 100644 index 370b6b6856c0..000000000000 --- a/plugins/properties/src/com/intellij/lang/properties/PropertiesCompletionContributor.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * Copyright 2000-2012 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.lang.properties; - -import com.intellij.codeInsight.completion.*; -import com.intellij.lang.properties.psi.PropertiesFile; -import com.intellij.util.Consumer; -import org.jetbrains.annotations.NotNull; - -/** - * @author peter - */ -public class PropertiesCompletionContributor extends CompletionContributor { - @Override - public void fillCompletionVariants(CompletionParameters parameters, final CompletionResultSet result) { - if (parameters.isExtendedCompletion()) { - CompletionService.getCompletionService().getVariantsFromContributors(parameters.delegateToClassName(), null, new Consumer() { - public void consume(final CompletionResult completionResult) { - result.passResult(completionResult); - } - }); - } - } - - @Override - public void beforeCompletion(@NotNull CompletionInitializationContext context) { - if (context.getFile() instanceof PropertiesFile) { - context.setDummyIdentifier(CompletionUtil.DUMMY_IDENTIFIER_TRIMMED); - } - } -} diff --git a/plugins/properties/src/com/intellij/lang/properties/PropertiesFilesManager.java b/plugins/properties/src/com/intellij/lang/properties/PropertiesFilesManager.java index 789cfc6934c4..60d337681a31 100644 --- a/plugins/properties/src/com/intellij/lang/properties/PropertiesFilesManager.java +++ b/plugins/properties/src/com/intellij/lang/properties/PropertiesFilesManager.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -79,8 +79,4 @@ public class PropertiesFilesManager extends AbstractProjectComponent { public String getComponentName() { return "PropertiesFileManager"; } - - public boolean processAllPropertiesFiles(final PropertiesFileProcessor processor) { - return PropertiesReferenceManager.getInstance(myProject).processAllPropertiesFiles(processor); - } } diff --git a/plugins/properties/src/com/intellij/lang/properties/PropertiesQuickFixFactoryImpl.java b/plugins/properties/src/com/intellij/lang/properties/PropertiesQuickFixFactoryImpl.java new file mode 100644 index 000000000000..8b2d3e3c6cd1 --- /dev/null +++ b/plugins/properties/src/com/intellij/lang/properties/PropertiesQuickFixFactoryImpl.java @@ -0,0 +1,42 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.lang.properties; + +import com.intellij.codeInsight.intention.IntentionAction; +import com.intellij.codeInspection.LocalQuickFix; +import com.intellij.lang.properties.psi.PropertiesFile; +import com.intellij.lang.properties.psi.Property; +import com.intellij.lang.properties.references.CreatePropertyFix; +import com.intellij.psi.PsiElement; + +import java.util.List; + +public class PropertiesQuickFixFactoryImpl extends PropertiesQuickFixFactory { + @Override + public LocalQuickFix createCreatePropertyFix(PsiElement element, String key, List files) { + return new CreatePropertyFix(element, key, files); + } + + @Override + public IntentionAction createRemovePropertyFix(Property property) { + return new RemovePropertyFix(property); + } + + @Override + public LocalQuickFix createRemovePropertyLocalFix() { + return new RemovePropertyLocalFix(); + } +} diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditorUtil.java b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditorUtil.java new file mode 100644 index 000000000000..9c0298375f8a --- /dev/null +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleEditorUtil.java @@ -0,0 +1,52 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.lang.properties.editor; + +import com.intellij.openapi.actionSystem.CommonDataKeys; +import com.intellij.openapi.actionSystem.DataContext; +import com.intellij.openapi.fileEditor.FileEditor; +import com.intellij.openapi.fileEditor.FileEditorManager; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.vfs.VirtualFile; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +public class ResourceBundleEditorUtil { + /** + * Tries to derive {@link com.intellij.lang.properties.editor.ResourceBundleEditor resource bundle editor} identified by the given context. + * + * @param dataContext target data context + * @return resource bundle editor identified by the given context; null otherwise + */ + @Nullable + public static ResourceBundleEditor getEditor(@NotNull DataContext dataContext) { + Project project = CommonDataKeys.PROJECT.getData(dataContext); + if (project == null) { + return null; + } + + VirtualFile virtualFile = CommonDataKeys.VIRTUAL_FILE.getData(dataContext); + if (virtualFile == null) { + return null; + } + FileEditor[] editors = FileEditorManager.getInstance(project).getEditors(virtualFile); + if (editors.length != 1 || (!(editors[0] instanceof ResourceBundleEditor))) { + return null; + } + + return (ResourceBundleEditor)editors[0]; + } +} diff --git a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleFileType.java b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleFileType.java index 9defcbcdd09e..17a80f527b9b 100644 --- a/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleFileType.java +++ b/plugins/properties/src/com/intellij/lang/properties/editor/ResourceBundleFileType.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -15,11 +15,9 @@ */ package com.intellij.lang.properties.editor; -import com.intellij.openapi.fileTypes.SyntaxHighlighter; -import com.intellij.openapi.fileTypes.ex.FakeFileType; -import com.intellij.openapi.project.Project; -import com.intellij.openapi.vfs.VirtualFile; import com.intellij.lang.properties.PropertiesBundle; +import com.intellij.openapi.fileTypes.ex.FakeFileType; +import com.intellij.openapi.vfs.VirtualFile; import org.jetbrains.annotations.NotNull; /** @@ -40,7 +38,4 @@ class ResourceBundleFileType extends FakeFileType { return file instanceof ResourceBundleAsVirtualFile; } - public SyntaxHighlighter getHighlighter(Project project, final VirtualFile virtualFile) { - return null; - } } diff --git a/plugins/properties/src/com/intellij/lang/properties/psi/impl/PropertiesElementImpl.java b/plugins/properties/src/com/intellij/lang/properties/psi/impl/PropertiesElementImpl.java deleted file mode 100644 index eb328115b0d9..000000000000 --- a/plugins/properties/src/com/intellij/lang/properties/psi/impl/PropertiesElementImpl.java +++ /dev/null @@ -1,36 +0,0 @@ -/* - * Copyright 2000-2009 JetBrains s.r.o. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package com.intellij.lang.properties.psi.impl; - -import com.intellij.extapi.psi.ASTWrapperPsiElement; -import com.intellij.lang.ASTNode; -import com.intellij.lang.Language; -import com.intellij.openapi.fileTypes.StdFileTypes; -import org.jetbrains.annotations.NotNull; - -/** - * @author max - */ -public class PropertiesElementImpl extends ASTWrapperPsiElement { - public PropertiesElementImpl(final ASTNode node) { - super(node); - } - - @NotNull - public Language getLanguage() { - return StdFileTypes.PROPERTIES.getLanguage(); - } -} diff --git a/plugins/properties/src/com/intellij/lang/properties/refactoring/ResourceBundleKeyRenameHandler.java b/plugins/properties/src/com/intellij/lang/properties/refactoring/ResourceBundleKeyRenameHandler.java index 303ed3cfc3b3..7d7dbc14aead 100644 --- a/plugins/properties/src/com/intellij/lang/properties/refactoring/ResourceBundleKeyRenameHandler.java +++ b/plugins/properties/src/com/intellij/lang/properties/refactoring/ResourceBundleKeyRenameHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2010 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -19,6 +19,7 @@ import com.intellij.lang.properties.IProperty; import com.intellij.lang.properties.PropertiesBundle; import com.intellij.lang.properties.ResourceBundle; import com.intellij.lang.properties.editor.ResourceBundleEditor; +import com.intellij.lang.properties.editor.ResourceBundleEditorUtil; import com.intellij.lang.properties.editor.ResourceBundleUtil; import com.intellij.lang.properties.psi.PropertiesFile; import com.intellij.openapi.actionSystem.DataContext; @@ -46,7 +47,7 @@ public class ResourceBundleKeyRenameHandler implements RenameHandler { @Override public boolean isAvailableOnDataContext(DataContext dataContext) { - ResourceBundleEditor editor = ResourceBundleUtil.getEditor(dataContext); + ResourceBundleEditor editor = ResourceBundleEditorUtil.getEditor(dataContext); if (editor == null) { return false; } @@ -60,7 +61,7 @@ public class ResourceBundleKeyRenameHandler implements RenameHandler { @Override public void invoke(@NotNull Project project, Editor editor, PsiFile file, DataContext dataContext) { - ResourceBundleEditor bundleEditor = ResourceBundleUtil.getEditor(dataContext); + ResourceBundleEditor bundleEditor = ResourceBundleEditorUtil.getEditor(dataContext); if (bundleEditor == null) { return; } diff --git a/plugins/properties/src/com/intellij/lang/properties/refactoring/ResourceBundleRenameHandler.java b/plugins/properties/src/com/intellij/lang/properties/refactoring/ResourceBundleRenameHandler.java index 31c821c15959..fe555a7a2ca7 100644 --- a/plugins/properties/src/com/intellij/lang/properties/refactoring/ResourceBundleRenameHandler.java +++ b/plugins/properties/src/com/intellij/lang/properties/refactoring/ResourceBundleRenameHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2014 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -24,11 +24,11 @@ import com.intellij.lang.properties.PropertiesBundle; import com.intellij.lang.properties.ResourceBundle; import com.intellij.lang.properties.editor.ResourceBundleAsVirtualFile; import com.intellij.lang.properties.editor.ResourceBundleEditor; +import com.intellij.lang.properties.editor.ResourceBundleEditorUtil; import com.intellij.lang.properties.editor.ResourceBundleUtil; import com.intellij.lang.properties.psi.PropertiesFile; import com.intellij.openapi.actionSystem.CommonDataKeys; import com.intellij.openapi.actionSystem.DataContext; -import com.intellij.openapi.actionSystem.PlatformDataKeys; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.editor.Editor; import com.intellij.openapi.fileEditor.FileEditorStateLevel; @@ -60,7 +60,7 @@ public class ResourceBundleRenameHandler implements RenameHandler { final VirtualFile virtualFile = CommonDataKeys.VIRTUAL_FILE.getData(dataContext); - ResourceBundleEditor editor = ResourceBundleUtil.getEditor(dataContext); + ResourceBundleEditor editor = ResourceBundleEditorUtil.getEditor(dataContext); return (editor == null || editor.getState(FileEditorStateLevel.NAVIGATION).getPropertyName() == null /* user selected non-bundle key element */) && bundle.getPropertiesFiles(project).size() > 1 && (virtualFile instanceof ResourceBundleAsVirtualFile || virtualFile == null); } diff --git a/plugins/properties/src/com/intellij/lang/properties/references/PropertiesCompletionContributor.java b/plugins/properties/src/com/intellij/lang/properties/references/PropertiesCompletionContributor.java new file mode 100644 index 000000000000..e356771d5812 --- /dev/null +++ b/plugins/properties/src/com/intellij/lang/properties/references/PropertiesCompletionContributor.java @@ -0,0 +1,154 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.intellij.lang.properties.references; + +import com.intellij.codeInsight.completion.*; +import com.intellij.codeInsight.lookup.*; +import com.intellij.icons.AllIcons; +import com.intellij.lang.properties.EmptyResourceBundle; +import com.intellij.lang.properties.IProperty; +import com.intellij.lang.properties.PropertiesHighlighter; +import com.intellij.lang.properties.ResourceBundle; +import com.intellij.lang.properties.psi.PropertiesFile; +import com.intellij.openapi.editor.colors.EditorColorsManager; +import com.intellij.openapi.editor.markup.TextAttributes; +import com.intellij.openapi.util.Condition; +import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.PsiElement; +import com.intellij.psi.PsiReference; +import com.intellij.util.*; +import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.containers.FilteringIterator; +import org.jetbrains.annotations.NotNull; + +import java.util.Arrays; +import java.util.Set; + +import static com.intellij.patterns.PlatformPatterns.psiElement; + +/** + * @author peter + */ +public class PropertiesCompletionContributor extends CompletionContributor { + public PropertiesCompletionContributor() { + extend(null, psiElement(), new CompletionProvider() { + @Override + protected void addCompletions(@NotNull CompletionParameters parameters, + ProcessingContext context, + @NotNull CompletionResultSet result) { + doAdd(parameters, result); + } + }); + } + + private static final Condition PROPERTY_REFERENCE = FilteringIterator.instanceOf(PropertyReference.class); + private void doAdd(CompletionParameters parameters, final CompletionResultSet result) { + PsiElement position = parameters.getPosition(); + PsiReference[] references = ArrayUtil.mergeArrays(position.getReferences(), position.getParent().getReferences()); + PropertyReference propertyReference = (PropertyReference)ContainerUtil.find(references, PROPERTY_REFERENCE); + if (propertyReference != null) { + final int startOffset = parameters.getOffset(); + PsiElement element = propertyReference.getElement(); + final int offsetInElement = startOffset - element.getTextRange().getStartOffset(); + TextRange range = propertyReference.getRangeInElement(); + final String prefix = element.getText().substring(range.getStartOffset(), offsetInElement); + + LookupElement[] variants = getVariants(propertyReference); + result.withPrefixMatcher(prefix).addAllElements(Arrays.asList(variants)); + if (variants.length != 0) { + result.stopHere(); + } + } + //if (parameters.isExtendedCompletion()) { + // CompletionService.getCompletionService().getVariantsFromContributors(parameters.delegateToClassName(), null, new Consumer() { + // public void consume(final CompletionResult completionResult) { + // result.passResult(completionResult); + // } + // }); + //} + } + + public static final LookupElementRenderer LOOKUP_ELEMENT_RENDERER = new LookupElementRenderer() { + @Override + public void renderElement(LookupElement element, LookupElementPresentation presentation) { + IProperty property = (IProperty)element.getObject(); + presentation.setIcon(PlatformIcons.PROPERTY_ICON); + String key = StringUtil.notNullize(property.getUnescapedKey()); + presentation.setItemText(key); + + PropertiesFile propertiesFile = property.getPropertiesFile(); + ResourceBundle resourceBundle = propertiesFile.getResourceBundle(); + String value = property.getValue(); + boolean hasBundle = resourceBundle != EmptyResourceBundle.getInstance(); + if (hasBundle) { + PropertiesFile defaultPropertiesFile = resourceBundle.getDefaultPropertiesFile(propertiesFile.getProject()); + IProperty defaultProperty = defaultPropertiesFile.findPropertyByKey(key); + if (defaultProperty != null) { + value = defaultProperty.getValue(); + } + } + + if (hasBundle) { + presentation.setTypeText(resourceBundle.getBaseName(), AllIcons.FileTypes.Properties); + } + + if (presentation instanceof RealLookupElementPresentation && value != null) { + value = "=" + value; + int limit = 1000; + if (value.length() > limit || !((RealLookupElementPresentation)presentation).hasEnoughSpaceFor(value, false)) { + if (value.length() > limit) { + value = value.substring(0, limit); + } + while (value.length() > 0 && !((RealLookupElementPresentation)presentation).hasEnoughSpaceFor(value + "...", false)) { + value = value.substring(0, value.length() - 1); + } + value += "..."; + } + } + + TextAttributes attrs = EditorColorsManager.getInstance().getGlobalScheme().getAttributes(PropertiesHighlighter.PROPERTY_VALUE); + presentation.setTailText(value, attrs.getForegroundColor()); + } + }; + + @NotNull + public static LookupElement[] getVariants(final PropertyReferenceBase propertyReference) { + final Set variants = PropertiesPsiCompletionUtil.getPropertiesKeys(propertyReference); + return getVariants(variants); + } + + public static LookupElement[] getVariants(Set variants) { + return ContainerUtil.map2Array(variants, LookupElement.class, new NullableFunction < Object, LookupElement > () { + @Override + public LookupElement fun(Object o) { + if (o instanceof String) return LookupElementBuilder.create((String)o).withIcon(PlatformIcons.PROPERTY_ICON); + IProperty property = (IProperty)o; + String key = property.getKey(); + if (key == null) return null; + + return LookupElementBuilder.create(property, key).withRenderer(LOOKUP_ELEMENT_RENDERER); + } + }); + } + + @Override + public void beforeCompletion(@NotNull CompletionInitializationContext context) { + if (context.getFile() instanceof PropertiesFile) { + context.setDummyIdentifier(CompletionUtil.DUMMY_IDENTIFIER_TRIMMED); + } + } +} diff --git a/plugins/properties/testSrc/com/intellij/lang/properties/TrailingSpacesInPropertyInspectionTest.java b/plugins/properties/testSrc/com/intellij/lang/properties/TrailingSpacesInPropertyInspectionTest.java index 19dc8911a117..54064eeca265 100644 --- a/plugins/properties/testSrc/com/intellij/lang/properties/TrailingSpacesInPropertyInspectionTest.java +++ b/plugins/properties/testSrc/com/intellij/lang/properties/TrailingSpacesInPropertyInspectionTest.java @@ -1,5 +1,21 @@ +/* + * Copyright 2000-2014 JetBrains s.r.o. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ package com.intellij.lang.properties; +import com.intellij.codeInspection.TrailingSpacesInPropertyInspection; import com.intellij.openapi.application.PluginPathManager; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.testFramework.PlatformTestCase;