diff --git a/java/idea-ui/src/com/intellij/framework/addSupport/FrameworkSupportInModuleConfigurable.java b/java/idea-ui/src/com/intellij/framework/addSupport/FrameworkSupportInModuleConfigurable.java index 816c16aea28d..b1ad3f66192f 100644 --- a/java/idea-ui/src/com/intellij/framework/addSupport/FrameworkSupportInModuleConfigurable.java +++ b/java/idea-ui/src/com/intellij/framework/addSupport/FrameworkSupportInModuleConfigurable.java @@ -46,6 +46,9 @@ public abstract class FrameworkSupportInModuleConfigurable implements Disposable return FrameworkLibraryVersionFilter.ALL; } + public void onFrameworkSelectionChanged(boolean selected) { + } + public boolean isOnlyLibraryAdded() { return false; } diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java index e7ad42d35b14..f50c98ae37a6 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/AddSupportForFrameworksPanel.java @@ -81,12 +81,11 @@ public class AddSupportForFrameworksPanel implements Disposable { if (!(node instanceof FrameworkSupportNode)) return; final FrameworkSupportNode frameworkSupportNode = (FrameworkSupportNode)node; - updateOptionsPanel(); - final FrameworkSupportInModuleConfigurable configurable = frameworkSupportNode.getConfigurable(); - if (configurable instanceof OldFrameworkSupportProviderWrapper.FrameworkSupportConfigurableWrapper) { - ((OldFrameworkSupportProviderWrapper.FrameworkSupportConfigurableWrapper)configurable).getConfigurable().onFrameworkSelectionChanged( - node.isChecked()); + if (frameworkSupportNode == getSelectedNode()) { + updateOptionsPanel(); } + final FrameworkSupportInModuleConfigurable configurable = frameworkSupportNode.getConfigurable(); + configurable.onFrameworkSelectionChanged(node.isChecked()); myModel.onFrameworkSelectionChanged(frameworkSupportNode); onFrameworkStateChanged(); } @@ -144,6 +143,7 @@ public class AddSupportForFrameworksPanel implements Disposable { initializeOptionsPanel(node); showCard(node.getProvider().getFrameworkType().getId()); UIUtil.setEnabled(myOptionsPanel, node.isChecked(), true); + node.getConfigurable().onFrameworkSelectionChanged(node.isChecked()); } else { showCard(EMPTY_CARD); diff --git a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/OldFrameworkSupportProviderWrapper.java b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/OldFrameworkSupportProviderWrapper.java index 2c5b8b22201d..00950ea16ea5 100644 --- a/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/OldFrameworkSupportProviderWrapper.java +++ b/java/idea-ui/src/com/intellij/ide/util/newProjectWizard/OldFrameworkSupportProviderWrapper.java @@ -151,6 +151,11 @@ public class OldFrameworkSupportProviderWrapper extends FrameworkSupportInModule return myConfigurable; } + @Override + public void onFrameworkSelectionChanged(boolean selected) { + myConfigurable.onFrameworkSelectionChanged(selected); + } + @Override public boolean isVisible() { return myConfigurable.isVisible(); diff --git a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/FacetBasedPackagingSourceItemsProvider.java b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/FacetBasedPackagingSourceItemsProvider.java index 2fb47877608e..3d15845a4f3a 100644 --- a/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/FacetBasedPackagingSourceItemsProvider.java +++ b/java/idea-ui/src/com/intellij/openapi/roots/ui/configuration/artifacts/sourceItems/FacetBasedPackagingSourceItemsProvider.java @@ -89,12 +89,13 @@ public abstract class FacetBasedPackagingSourceItemsProvider, n.invite(this); } } + + @Override + public void visit(@NotNull ArrangementNameMatchCondition condition) { + } }); Object key = typeRef.get() == null ? NO_TYPE : typeRef.get(); Set modifiers = MODIFIERS_BY_TYPE.get(key); diff --git a/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java b/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java index b119aaa29112..3a5b37151950 100644 --- a/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java +++ b/java/java-impl/src/com/intellij/psi/impl/file/JavaDirectoryServiceImpl.java @@ -42,6 +42,8 @@ import com.intellij.psi.util.PsiUtil; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; +import java.util.Collections; +import java.util.Map; import java.util.Properties; public class JavaDirectoryServiceImpl extends CoreJavaDirectoryService { @@ -72,7 +74,15 @@ public class JavaDirectoryServiceImpl extends CoreJavaDirectoryService { @NotNull String name, @NotNull String templateName, boolean askForUndefinedVariables) throws IncorrectOperationException { - return createClassFromTemplate(dir, name, templateName, askForUndefinedVariables); + return createClass(dir, name, templateName, askForUndefinedVariables, Collections.emptyMap()); + } + + @Override + public PsiClass createClass(@NotNull PsiDirectory dir, + @NotNull String name, + @NotNull String templateName, + boolean askForUndefinedVariables, @NotNull final Map additionalProperties) throws IncorrectOperationException { + return createClassFromTemplate(dir, name, templateName, askForUndefinedVariables, additionalProperties); } @Override @@ -109,13 +119,13 @@ public class JavaDirectoryServiceImpl extends CoreJavaDirectoryService { } private static PsiClass createClassFromTemplate(@NotNull PsiDirectory dir, String name, String templateName) throws IncorrectOperationException { - return createClassFromTemplate(dir, name, templateName, false); + return createClassFromTemplate(dir, name, templateName, false, Collections.emptyMap()); } private static PsiClass createClassFromTemplate(@NotNull PsiDirectory dir, String name, String templateName, - boolean askToDefineVariables) throws IncorrectOperationException { + boolean askToDefineVariables, @NotNull Map additionalProperties) throws IncorrectOperationException { //checkCreateClassOrInterface(dir, name); FileTemplate template = FileTemplateManager.getInstance().getInternalTemplate(templateName); @@ -123,6 +133,9 @@ public class JavaDirectoryServiceImpl extends CoreJavaDirectoryService { Properties defaultProperties = FileTemplateManager.getInstance().getDefaultProperties(dir.getProject()); Properties properties = new Properties(defaultProperties); properties.setProperty(FileTemplate.ATTRIBUTE_NAME, name); + for (Map.Entry entry : additionalProperties.entrySet()) { + properties.setProperty(entry.getKey(), entry.getValue()); + } String ext = StdFileTypes.JAVA.getDefaultExtension(); String fileName = name + "." + ext; diff --git a/java/java-psi-api/src/com/intellij/psi/JavaDirectoryService.java b/java/java-psi-api/src/com/intellij/psi/JavaDirectoryService.java index 098d60d49896..1f669eabf1e4 100644 --- a/java/java-psi-api/src/com/intellij/psi/JavaDirectoryService.java +++ b/java/java-psi-api/src/com/intellij/psi/JavaDirectoryService.java @@ -25,6 +25,8 @@ import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; +import java.util.Map; + public abstract class JavaDirectoryService { public static JavaDirectoryService getInstance() { return ServiceManager.getService(JavaDirectoryService.class); @@ -75,6 +77,15 @@ public abstract class JavaDirectoryService { */ public abstract PsiClass createClass(@NotNull PsiDirectory dir, @NotNull String name, @NotNull String templateName, boolean askForUndefinedVariables) throws IncorrectOperationException; + /** + * @param additionalProperties additional properties to be substituted in the template + */ + public abstract PsiClass createClass(@NotNull PsiDirectory dir, + @NotNull String name, + @NotNull String templateName, + boolean askForUndefinedVariables, + @NotNull final Map additionalProperties) throws IncorrectOperationException; + /** * Checks if it's possible to create a class with the specified name in the directory, * and throws an exception if the creation is not possible. Does not actually modify diff --git a/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java b/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java index 0c5c1ee2ac2e..be7fec104b72 100644 --- a/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java +++ b/java/java-psi-impl/src/com/intellij/core/CoreJavaDirectoryService.java @@ -28,6 +28,7 @@ import org.jetbrains.annotations.NotNull; import java.util.ArrayList; import java.util.List; +import java.util.Map; /** * @author yole @@ -85,6 +86,14 @@ public class CoreJavaDirectoryService extends JavaDirectoryService { throw new UnsupportedOperationException(); } + @Override + public PsiClass createClass(@NotNull PsiDirectory dir, + @NotNull String name, + @NotNull String templateName, + boolean askForUndefinedVariables, @NotNull final Map additionalProperties) throws IncorrectOperationException { + throw new UnsupportedOperationException(); + } + @Override public void checkCreateClass(@NotNull PsiDirectory dir, @NotNull String name) throws IncorrectOperationException { throw new UnsupportedOperationException(); diff --git a/java/java-tests/testSrc/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderTestCase.java b/java/java-tests/testSrc/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderTestCase.java index 3e717d3985f8..9a14e602a230 100644 --- a/java/java-tests/testSrc/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderTestCase.java +++ b/java/java-tests/testSrc/com/intellij/ide/util/frameworkSupport/FrameworkSupportProviderTestCase.java @@ -99,10 +99,7 @@ public abstract class FrameworkSupportProviderTestCase extends IdeaTestCase { protected FrameworkSupportInModuleConfigurable selectFramework(@NotNull FrameworkSupportInModuleProvider provider) { final FrameworkSupportInModuleConfigurable configurable = getOrCreateConfigurable(provider); myNodes.get(provider.getFrameworkType()).setChecked(true); - if (configurable instanceof OldFrameworkSupportProviderWrapper.FrameworkSupportConfigurableWrapper) { - ((OldFrameworkSupportProviderWrapper.FrameworkSupportConfigurableWrapper)configurable).getConfigurable().onFrameworkSelectionChanged( - true); - } + configurable.onFrameworkSelectionChanged(true); return configurable; } diff --git a/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerByNameTest.groovy b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerByNameTest.groovy new file mode 100644 index 000000000000..a16ef3024c7d --- /dev/null +++ b/java/java-tests/testSrc/com/intellij/psi/codeStyle/arrangement/JavaRearrangerByNameTest.groovy @@ -0,0 +1,72 @@ +/* + * 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.psi.codeStyle.arrangement + +import com.intellij.psi.codeStyle.arrangement.match.ArrangementModifier +import org.junit.Before + +import static com.intellij.psi.codeStyle.arrangement.match.ArrangementModifier.PROTECTED +import static com.intellij.psi.codeStyle.arrangement.match.ArrangementModifier.PUBLIC + +/** + * @author Denis Zhdanov + * @since 11/14/12 1:29 PM + */ +class JavaRearrangerByNameTest extends AbstractJavaRearrangerTest { + + @Before + void setUp() { + super.setUp() + commonSettings.BLANK_LINES_AROUND_METHOD = 0 + commonSettings.BLANK_LINES_AROUND_CLASS = 0 + } + + void "test only name condition"() { + doTest( + initial: '''\ +class Test { + public void setI() {} + public void getI() {} + public void test() {} +}''', + expected: '''\ +class Test { + public void getI() {} + public void setI() {} + public void test() {} +}''', + rules: [rule("get.*")] + ) + } + + void "test name condition and others"() { + doTest( + initial: '''\ +class Test { + private void getInner() {} + public void getOuter() {} + protected void test() {} +}''', + expected: '''\ +class Test { + public void getOuter() {} + protected void test() {} + private void getInner() {} +}''', + rules: [rule("get.*", PUBLIC), rule(PROTECTED)] + ) + } +} diff --git a/platform/icons/src/nodes/inspectionResults.png b/platform/icons/src/nodes/inspectionResults.png new file mode 100644 index 000000000000..ecb606c9105b Binary files /dev/null and b/platform/icons/src/nodes/inspectionResults.png differ diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/ArrangementConditionInfo.java b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/ArrangementConditionInfo.java index 7825b47a5f96..c1d99426e213 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/ArrangementConditionInfo.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/ArrangementConditionInfo.java @@ -18,6 +18,7 @@ package com.intellij.psi.codeStyle.arrangement; import com.intellij.psi.codeStyle.arrangement.model.ArrangementAtomMatchCondition; import com.intellij.psi.codeStyle.arrangement.model.ArrangementCompositeMatchCondition; import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchCondition; +import com.intellij.psi.codeStyle.arrangement.model.ArrangementNameMatchCondition; import com.intellij.util.containers.ContainerUtilRt; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -32,13 +33,19 @@ import java.util.Set; public class ArrangementConditionInfo { @NotNull private final Set myAtomConditions = ContainerUtilRt.newHashSet(); - @NotNull private final Set myConditions = ContainerUtilRt.newHashSet(); + @NotNull private final Set myConditions = ContainerUtilRt.newHashSet(); + + @Nullable private ArrangementNameMatchCondition myNameCondition; + public void setNameCondition(@Nullable ArrangementNameMatchCondition condition) { + myNameCondition = condition; + } + public void addAtomCondition(@NotNull ArrangementAtomMatchCondition condition) { myAtomConditions.add(condition); myConditions.add(condition.getValue()); } - + public boolean hasCondition(@NotNull Object condition) { return myConditions.contains(condition); } @@ -59,13 +66,17 @@ public class ArrangementConditionInfo { @Nullable public ArrangementMatchCondition buildCondition() { if (myAtomConditions.isEmpty()) { - return null; + return myNameCondition == null ? null : myNameCondition; } - if (myAtomConditions.size() == 1) { + else if (myAtomConditions.size() == 1 && myNameCondition == null) { return myAtomConditions.iterator().next(); } else { - return new ArrangementCompositeMatchCondition(myAtomConditions); + ArrangementCompositeMatchCondition result = new ArrangementCompositeMatchCondition(myAtomConditions); + if (myNameCondition != null) { + result.addOperand(myNameCondition); + } + return result; } } } diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/ArrangementUtil.java b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/ArrangementUtil.java index 6815eeb2ff48..f6b265e6d85c 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/ArrangementUtil.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/ArrangementUtil.java @@ -75,6 +75,11 @@ public class ArrangementUtil { operand.invite(this); } } + + @Override + public void visit(@NotNull ArrangementNameMatchCondition condition) { + result.addOperand(condition); + } }; for (ArrangementMatchCondition node : nodes) { node.invite(visitor); @@ -175,6 +180,11 @@ public class ArrangementUtil { operand.invite(this); } } + + @Override + public void visit(@NotNull ArrangementNameMatchCondition condition) { + result.setNameCondition(condition); + } }); return result; } diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/match/DefaultArrangementEntryMatcherSerializer.java b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/match/DefaultArrangementEntryMatcherSerializer.java index e0de01da9ec3..4f1123958cde 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/match/DefaultArrangementEntryMatcherSerializer.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/match/DefaultArrangementEntryMatcherSerializer.java @@ -16,6 +16,7 @@ package com.intellij.psi.codeStyle.arrangement.match; import com.intellij.openapi.diagnostic.Logger; +import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.codeStyle.arrangement.model.*; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.containers.HashSet; @@ -74,7 +75,8 @@ public class DefaultArrangementEntryMatcherSerializer { private static final Logger LOG = Logger.getInstance("#" + DefaultArrangementEntryMatcherSerializer.class.getName()); @NotNull private static final String COMPOSITE_CONDITION_NAME = "AND"; - + @NotNull private static final String PATTERN_CONDITION_NAME = "NAME"; + private static final Set ATOM_SETTINGS_TYPES = new HashSet(); static { @@ -113,7 +115,10 @@ public class DefaultArrangementEntryMatcherSerializer { @Nullable private static ArrangementMatchCondition deserializeCondition(@NotNull Element matcherElement) { String name = matcherElement.getName(); - if (!COMPOSITE_CONDITION_NAME.equals(name)) { + if (PATTERN_CONDITION_NAME.equals(name)) { + return new ArrangementNameMatchCondition(StringUtil.unescapeStringCharacters(matcherElement.getText())); + } + else if (!COMPOSITE_CONDITION_NAME.equals(name)) { if (ATOM_SETTINGS_TYPES.contains(name)) { return deserializeAtomCondition(matcherElement); } @@ -163,23 +168,13 @@ public class DefaultArrangementEntryMatcherSerializer { @Override public void visit(@NotNull ArrangementAtomMatchCondition condition) { Element element = new Element(condition.getType().toString()).setText(condition.getValue().toString()); - if (result == null) { - result = element; - } - if (parent != null) { - parent.addContent(element); - } + register(element); } @Override public void visit(@NotNull ArrangementCompositeMatchCondition condition) { Element composite = new Element(COMPOSITE_CONDITION_NAME); - if (result == null) { - result = composite; - } - if (parent != null) { - parent.addContent(composite); - } + register(composite); parent = composite; List operands = new ArrayList(condition.getOperands()); ContainerUtil.sort(operands, CONDITION_COMPARATOR); @@ -187,5 +182,20 @@ public class DefaultArrangementEntryMatcherSerializer { c.invite(this); } } + + @Override + public void visit(@NotNull ArrangementNameMatchCondition condition) { + Element element = new Element(PATTERN_CONDITION_NAME).setText(StringUtil.escapeStringCharacters(condition.getPattern())); + register(element); + } + + private void register(@NotNull Element element) { + if (result == null) { + result = element; + } + if (parent != null) { + parent.addContent(element); + } + } } } diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/match/StdArrangementEntryMatcher.java b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/match/StdArrangementEntryMatcher.java index 8dddc51d3378..373c267c84c0 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/match/StdArrangementEntryMatcher.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/match/StdArrangementEntryMatcher.java @@ -16,13 +16,10 @@ package com.intellij.psi.codeStyle.arrangement.match; import com.intellij.psi.codeStyle.arrangement.ArrangementEntry; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementAtomMatchCondition; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementCompositeMatchCondition; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchCondition; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchConditionVisitor; +import com.intellij.psi.codeStyle.arrangement.model.*; +import com.intellij.util.containers.ContainerUtilRt; import org.jetbrains.annotations.NotNull; -import java.util.ArrayList; import java.util.EnumSet; import java.util.List; import java.util.Set; @@ -88,11 +85,12 @@ public class StdArrangementEntryMatcher implements ArrangementEntryMatcher { private static class MyVisitor implements ArrangementMatchConditionVisitor { - @NotNull private final List myMatchers = new ArrayList(); - @NotNull private final Set myTypes = EnumSet.noneOf(ArrangementEntryType.class); - @NotNull private final Set myModifiers = EnumSet.noneOf(ArrangementModifier.class); + @NotNull private final List myMatchers = ContainerUtilRt.newArrayList(); + @NotNull private final Set myTypes = EnumSet.noneOf(ArrangementEntryType.class); + @NotNull private final Set myModifiers = EnumSet.noneOf(ArrangementModifier.class); + @NotNull private final List myNamePatterns = ContainerUtilRt.newArrayList(); - private boolean nestedComposite; + private boolean nestedComposite; @Override public void visit(@NotNull ArrangementAtomMatchCondition condition) { @@ -118,16 +116,31 @@ public class StdArrangementEntryMatcher implements ArrangementEntryMatcher { } } + @Override + public void visit(@NotNull ArrangementNameMatchCondition condition) { + myNamePatterns.add(condition.getPattern()); + } + @SuppressWarnings("ConstantConditions") @NotNull public ArrangementEntryMatcher getMatcher() { ByTypeArrangementEntryMatcher byType = myTypes.isEmpty() ? null : new ByTypeArrangementEntryMatcher(myTypes); ByModifierArrangementEntryMatcher byModifiers = myModifiers.isEmpty() ? null : new ByModifierArrangementEntryMatcher(myModifiers); - if (byType == null && byModifiers == null && myMatchers.isEmpty()) { + ByNameArrangementEntryMatcher byName = myNamePatterns.size() != 1 ? null : new ByNameArrangementEntryMatcher(myNamePatterns.get(0)); + int i = countNonNulls(byType, byModifiers, byName); + if (i == 0 && myMatchers.isEmpty()) { return ArrangementEntryMatcher.EMPTY; } - if (myMatchers.isEmpty() && (byType == null ^ byModifiers == null)) { - return byModifiers == null ? byType : byModifiers; + if (myMatchers.isEmpty() && i == 1) { + if (byType != null) { + return byType; + } + else if (byModifiers != null) { + return byModifiers; + } + else { + return byName; + } } else if (myMatchers.size() == 1) { return myMatchers.get(0); @@ -143,8 +156,21 @@ public class StdArrangementEntryMatcher implements ArrangementEntryMatcher { if (byModifiers != null) { result.addMatcher(byModifiers); } + if (byName != null) { + result.addMatcher(byName); + } return result; } } + + private static int countNonNulls(Object... data) { + int result = 0; + for (Object o : data) { + if (o != null) { + result++; + } + } + return result; + } } } diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementAtomMatchCondition.java b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementAtomMatchCondition.java index e7abc5d5f806..7e4d5936896c 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementAtomMatchCondition.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementAtomMatchCondition.java @@ -52,10 +52,6 @@ public class ArrangementAtomMatchCondition implements ArrangementMatchCondition visitor.visit(this); } - public boolean isInverted() { - return myInverted; - } - public void setInverted(boolean inverted) { myInverted = inverted; } diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementMatchConditionVisitor.java b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementMatchConditionVisitor.java index 38b188ed8ff8..9106c81f5e70 100644 --- a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementMatchConditionVisitor.java +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementMatchConditionVisitor.java @@ -26,4 +26,6 @@ public interface ArrangementMatchConditionVisitor { void visit(@NotNull ArrangementAtomMatchCondition condition); void visit(@NotNull ArrangementCompositeMatchCondition condition); + + void visit(@NotNull ArrangementNameMatchCondition condition); } diff --git a/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementNameMatchCondition.java b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementNameMatchCondition.java new file mode 100644 index 000000000000..892b69e51242 --- /dev/null +++ b/platform/lang-api/src/com/intellij/psi/codeStyle/arrangement/model/ArrangementNameMatchCondition.java @@ -0,0 +1,70 @@ +/* + * 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.psi.codeStyle.arrangement.model; + +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.codeStyle.arrangement.NameAwareArrangementEntry; +import org.jetbrains.annotations.NotNull; + +/** + * Condition which works on {@link NameAwareArrangementEntry} + * + * @author Denis Zhdanov + * @since 11/14/12 12:18 PM + */ +public class ArrangementNameMatchCondition implements ArrangementMatchCondition { + + @NotNull private final String myPattern; + + public ArrangementNameMatchCondition(@NotNull String pattern) { + myPattern = pattern; + } + + @NotNull + public String getPattern() { + return myPattern; + } + + @Override + public void invite(@NotNull ArrangementMatchConditionVisitor visitor) { + visitor.visit(this); + } + + @NotNull + @Override + public ArrangementMatchCondition clone() { + return new ArrangementNameMatchCondition(myPattern); + } + + @Override + public int hashCode() { + return myPattern.hashCode(); + } + + @Override + public boolean equals(Object o) { + if (this == o) return true; + if (o == null || getClass() != o.getClass()) return false; + + ArrangementNameMatchCondition condition = (ArrangementNameMatchCondition)o; + return myPattern.equals(condition.myPattern); + } + + @Override + public String toString() { + return String.format("name like '%s'", StringUtil.escapeStringCharacters(myPattern)); + } +} diff --git a/platform/lang-api/testSources/com/intellij/psi/codeStyle/arrangement/match/DefaultArrangementEntryMatcherSerializerTest.java b/platform/lang-api/testSources/com/intellij/psi/codeStyle/arrangement/match/DefaultArrangementEntryMatcherSerializerTest.java index 9b7bcac2bbf0..eddbd4eaf1dd 100644 --- a/platform/lang-api/testSources/com/intellij/psi/codeStyle/arrangement/match/DefaultArrangementEntryMatcherSerializerTest.java +++ b/platform/lang-api/testSources/com/intellij/psi/codeStyle/arrangement/match/DefaultArrangementEntryMatcherSerializerTest.java @@ -19,6 +19,7 @@ import com.intellij.openapi.util.Comparing; import com.intellij.psi.codeStyle.arrangement.model.ArrangementAtomMatchCondition; import com.intellij.psi.codeStyle.arrangement.model.ArrangementCompositeMatchCondition; import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchCondition; +import com.intellij.psi.codeStyle.arrangement.model.ArrangementNameMatchCondition; import org.jdom.Element; import org.jetbrains.annotations.NotNull; import org.junit.Test; @@ -106,6 +107,21 @@ public class DefaultArrangementEntryMatcherSerializerTest { checkElements(element, actual); } + @Test + public void nameConditionOnly() { + ArrangementNameMatchCondition condition = new ArrangementNameMatchCondition("get*"); + doTest(condition); + } + + @Test + public void compositeConditionWithName() { + ArrangementCompositeMatchCondition condition = new ArrangementCompositeMatchCondition(); + condition.addOperand(new ArrangementAtomMatchCondition(TYPE, METHOD)); + condition.addOperand(new ArrangementAtomMatchCondition(MODIFIER, SYNCHRONIZED)); + condition.addOperand(new ArrangementNameMatchCondition("get*")); + doTest(condition); + } + private static void checkElements(@NotNull Element expected, @NotNull Element actual) { assertTrue( String.format("Tag name mismatch - expected: '%s', actual: '%s'", expected.getName(), actual.getName()), diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementAndMatchConditionComponent.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementAndMatchConditionComponent.java index 9eb3bc766d80..5a29993af850 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementAndMatchConditionComponent.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementAndMatchConditionComponent.java @@ -20,10 +20,7 @@ import com.intellij.application.options.codeStyle.arrangement.ArrangementConstan import com.intellij.application.options.codeStyle.arrangement.ArrangementNodeDisplayManager; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.codeStyle.arrangement.match.StdArrangementMatchRule; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementAtomMatchCondition; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementCompositeMatchCondition; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchCondition; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchConditionVisitor; +import com.intellij.psi.codeStyle.arrangement.model.*; import com.intellij.util.ui.GridBag; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; @@ -61,16 +58,11 @@ public class ArrangementAndMatchConditionComponent extends JPanel implements Arr setOpaque(false); setLayout(new GridBagLayout()); final Map operands = new HashMap(); + final List nameConditions = new ArrayList(); ArrangementMatchConditionVisitor visitor = new ArrangementMatchConditionVisitor() { - @Override - public void visit(@NotNull ArrangementAtomMatchCondition condition) { - operands.put(condition.getValue(), condition); - } - - @Override - public void visit(@NotNull ArrangementCompositeMatchCondition condition) { - operands.put(condition, condition); - } + @Override public void visit(@NotNull ArrangementAtomMatchCondition condition) { operands.put(condition.getValue(), condition); } + @Override public void visit(@NotNull ArrangementCompositeMatchCondition condition) { operands.put(condition, condition); } + @Override public void visit(@NotNull ArrangementNameMatchCondition condition) { nameConditions.add(condition); } }; for (ArrangementMatchCondition operand : setting.getOperands()) { operand.invite(visitor); @@ -86,6 +78,12 @@ public class ArrangementAndMatchConditionComponent extends JPanel implements Arr JComponent uiComponent = component.getUiComponent(); add(uiComponent, constraints); } + for (ArrangementNameMatchCondition condition : nameConditions) { + ArrangementMatchConditionComponent component = factory.getComponent(condition, rule, true); + myComponents.add(component); + JComponent uiComponent = component.getUiComponent(); + add(uiComponent, constraints); + } } @NotNull diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchNodeComponentFactory.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchNodeComponentFactory.java index dfbbf5b9181d..061f330cb0b7 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchNodeComponentFactory.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchNodeComponentFactory.java @@ -24,10 +24,7 @@ import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.util.Ref; import com.intellij.psi.codeStyle.arrangement.match.StdArrangementEntryMatcher; import com.intellij.psi.codeStyle.arrangement.match.StdArrangementMatchRule; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementAtomMatchCondition; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementCompositeMatchCondition; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchCondition; -import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchConditionVisitor; +import com.intellij.psi.codeStyle.arrangement.model.*; import com.intellij.util.Consumer; import org.jetbrains.annotations.NotNull; @@ -83,6 +80,11 @@ public class ArrangementMatchNodeComponentFactory { public void visit(@NotNull ArrangementCompositeMatchCondition condition) { ref.set(new ArrangementAndMatchConditionComponent(rule, condition, ArrangementMatchNodeComponentFactory.this, myDisplayManager)); } + + @Override + public void visit(@NotNull ArrangementNameMatchCondition condition) { + ref.set(new ArrangementNameConditionComponent(condition)); + } }); return ref.get(); } diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchingRulesControl.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchingRulesControl.java index 8801c99bc5f9..c997deed0e9a 100644 --- a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchingRulesControl.java +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementMatchingRulesControl.java @@ -294,12 +294,21 @@ public class ArrangementMatchingRulesControl extends JBTable { } public void showEditor(int rowToEdit) { + if (myEditorRow == rowToEdit + 1) { + return; + } + if (myEditorRow >= 0) { + if (myEditorRow < rowToEdit) { + rowToEdit--; + } + hideEditor(); + } myEditorRow = rowToEdit + 1; ArrangementEditorComponent editor = new ArrangementEditorComponent(this, myEditorRow, myEditor); Container parent = getParent(); int width = getBounds().width; if (parent instanceof JViewport) { - width -=((JScrollPane)parent.getParent()).getVerticalScrollBar().getWidth(); + width -= ((JScrollPane)parent.getParent()).getVerticalScrollBar().getWidth(); } editor.applyAvailableWidth(width); myEditor.updateState(rowToEdit); @@ -310,7 +319,7 @@ public class ArrangementMatchingRulesControl extends JBTable { finally { mySkipSelectionChange = false; } - + Rectangle bounds = getRowsBounds(rowToEdit, myEditorRow); if (bounds != null) { myRepresentationCallback.ensureVisible(bounds); diff --git a/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementNameConditionComponent.java b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementNameConditionComponent.java new file mode 100644 index 000000000000..a3b7a4bc6810 --- /dev/null +++ b/platform/lang-impl/src/com/intellij/application/options/codeStyle/arrangement/match/ArrangementNameConditionComponent.java @@ -0,0 +1,89 @@ +/* + * 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.application.options.codeStyle.arrangement.match; + +import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchCondition; +import com.intellij.psi.codeStyle.arrangement.model.ArrangementNameMatchCondition; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.annotations.Nullable; + +import javax.swing.*; +import java.awt.*; +import java.awt.event.MouseEvent; + +/** + * @author Denis Zhdanov + * @since 11/14/12 12:24 PM + */ +public class ArrangementNameConditionComponent implements ArrangementMatchConditionComponent { + + @NotNull private final ArrangementNameMatchCondition myCondition; + + public ArrangementNameConditionComponent(@NotNull ArrangementNameMatchCondition condition) { + myCondition = condition; + } + + @NotNull + @Override + public ArrangementMatchCondition getMatchCondition() { + return myCondition; + } + + @NotNull + @Override + public JComponent getUiComponent() { + // TODO den implement + return null; + } + + @Nullable + @Override + public Rectangle getScreenBounds() { + // TODO den implement + return null; + } + + @Override + public void setSelected(boolean selected) { + // TODO den implement + } + + @Nullable + @Override + public Rectangle onMouseMove(@NotNull MouseEvent event) { + // TODO den implement + return null; + } + + @Override + public void onMouseRelease(@NotNull MouseEvent event) { + // TODO den implement + } + + @Nullable + @Override + public Rectangle onMouseExited() { + // TODO den implement + return null; + } + + @Nullable + @Override + public Rectangle onMouseEntered(@NotNull MouseEvent e) { + // TODO den implement + return null; + } +} diff --git a/platform/lang-impl/src/com/intellij/codeInspection/actions/ViewOfflineResultsAction.java b/platform/lang-impl/src/com/intellij/codeInspection/actions/ViewOfflineResultsAction.java index c8639b269623..8c4a1797a26a 100644 --- a/platform/lang-impl/src/com/intellij/codeInspection/actions/ViewOfflineResultsAction.java +++ b/platform/lang-impl/src/com/intellij/codeInspection/actions/ViewOfflineResultsAction.java @@ -37,13 +37,14 @@ import com.intellij.codeInspection.offlineViewer.OfflineInspectionRVContentProvi import com.intellij.codeInspection.offlineViewer.OfflineViewParseUtil; import com.intellij.codeInspection.reference.RefManagerImpl; import com.intellij.codeInspection.ui.InspectionResultsView; -import com.intellij.ide.util.BrowseFilesListener; +import com.intellij.icons.AllIcons; import com.intellij.openapi.actionSystem.*; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.diagnostic.Logger; import com.intellij.openapi.fileChooser.FileChooser; import com.intellij.openapi.fileChooser.FileChooserDescriptor; import com.intellij.openapi.fileEditor.impl.LoadTextUtil; +import com.intellij.openapi.fileTypes.StdFileTypes; import com.intellij.openapi.progress.ProcessCanceledException; import com.intellij.openapi.progress.ProgressManager; import com.intellij.openapi.project.DumbAware; @@ -83,7 +84,17 @@ public class ViewOfflineResultsAction extends AnAction implements DumbAware { LOG.assertTrue(project != null); - final FileChooserDescriptor descriptor = new FileChooserDescriptor(false, true, false, false, false, false); + final FileChooserDescriptor descriptor = new FileChooserDescriptor(false, true, false, false, false, false){ + @Override + public Icon getIcon(VirtualFile file) { + if (file.isDirectory()) { + if (file.findChild(InspectionApplication.DESCRIPTIONS + "." + StdFileTypes.XML.getDefaultExtension()) != null) { + return AllIcons.Nodes.InspectionResults; + } + } + return super.getIcon(file); + } + }; descriptor.setTitle("Select Path"); descriptor.setDescription("Select directory which contains exported inspections results"); final VirtualFile virtualFile = FileChooser.chooseFile(descriptor, project, null); diff --git a/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubProjectGeneratorPeer.form b/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubProjectGeneratorPeer.form index ad2eb05b53f0..384c66c6e9b5 100644 --- a/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubProjectGeneratorPeer.form +++ b/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubProjectGeneratorPeer.form @@ -39,19 +39,19 @@ - - - - - - - - + + + + + + + + diff --git a/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubProjectGeneratorPeer.java b/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubProjectGeneratorPeer.java index 5a65f1476856..7cf1cb26030a 100644 --- a/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubProjectGeneratorPeer.java +++ b/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubProjectGeneratorPeer.java @@ -3,6 +3,11 @@ package com.intellij.lang.javascript.boilerplate; import com.google.common.collect.ImmutableCollection; import com.google.common.collect.ImmutableSet; import com.google.common.collect.Sets; +import com.intellij.icons.AllIcons; +import com.intellij.openapi.actionSystem.ActionToolbar; +import com.intellij.openapi.actionSystem.AnAction; +import com.intellij.openapi.actionSystem.AnActionEvent; +import com.intellij.openapi.actionSystem.impl.ActionButton; import com.intellij.openapi.ui.ValidationInfo; import com.intellij.openapi.util.Pair; import com.intellij.platform.WebProjectGenerator; @@ -10,13 +15,13 @@ import com.intellij.platform.templates.github.GithubTagInfo; import com.intellij.ui.ListCellRendererWrapper; import com.intellij.util.ObjectUtils; import com.intellij.util.containers.ContainerUtil; +import com.intellij.util.ui.AsyncProcessIcon; import com.intellij.util.ui.UIUtil; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; import javax.swing.*; -import java.awt.event.ActionEvent; -import java.awt.event.ActionListener; +import java.awt.*; import java.util.Collections; import java.util.Comparator; import java.util.List; @@ -27,13 +32,21 @@ import java.util.Set; */ public class GithubProjectGeneratorPeer implements WebProjectGenerator.GeneratorPeer { + private static final String CONTROL_PLACE = "Github.Project.Generator.Reload"; + + private enum UpdateStatus { + UPDATING, IDLE + } + private final List myListeners = ContainerUtil.newArrayList(); private final GithubTagInfo myMasterTag; + private final GithubTagListProvider myTagListProvider; + private final AsyncProcessIcon myLoadingVersionIcon = new AsyncProcessIcon("Getting github tags"); private JComboBox myComboBox; private JComponent myComponent; private JLabel myErrorMessage; - private JButton myReloadButton; private JPanel myVersionPanel; + private JPanel myActionPanel; public GithubProjectGeneratorPeer(@NotNull AbstractGithubTagDownloadedProjectGenerator generator) { String ghUserName = generator.getGithubUserName(); @@ -52,23 +65,19 @@ public class GithubProjectGeneratorPeer implements WebProjectGenerator.Generator } }); - final GithubTagListProvider provider = new GithubTagListProvider(ghUserName, ghRepoName); - ImmutableSet cachedTags = provider.getCachedTags(); + myTagListProvider = new GithubTagListProvider(ghUserName, ghRepoName); + fillActionPanel(); + ImmutableSet cachedTags = myTagListProvider.getCachedTags(); if (cachedTags != null) { - updateTagList(cachedTags); + tagsUpdated(cachedTags); } myErrorMessage.setText(null); - myReloadButton.addActionListener(new ActionListener() { - @Override - public void actionPerformed(ActionEvent e) { - provider.updateTagListAsynchronously(GithubProjectGeneratorPeer.this); - } - }); - provider.updateTagListAsynchronously(this); + reloadTagsInBackground(); } - void updateTagList(@NotNull ImmutableSet tags) { + void tagsUpdated(@NotNull ImmutableSet tags) { + show(UpdateStatus.IDLE); if (!shouldUpdate(tags)) { return; } @@ -170,4 +179,63 @@ public class GithubProjectGeneratorPeer implements WebProjectGenerator.Generator myListeners.add(listener); } + private void reloadTagsInBackground() { + show(UpdateStatus.UPDATING); + myTagListProvider.updateTagListAsynchronously(this); + } + + private void show(@NotNull UpdateStatus status) { + CardLayout cardLayout = (CardLayout) myActionPanel.getLayout(); + cardLayout.show(myActionPanel, status.name()); + if (status == UpdateStatus.UPDATING) { + myLoadingVersionIcon.resume(); + } + } + + private void fillActionPanel() { + myActionPanel.add(createReloadButtonPanel(), UpdateStatus.IDLE.name()); + myActionPanel.add(createReloadInProgressPanel(), UpdateStatus.UPDATING.name()); + show(UpdateStatus.IDLE); + } + + @NotNull + private JPanel createReloadButtonPanel() { + ReloadAction reloadAction = new ReloadAction(); + ActionButton reloadButton = new ActionButton( + reloadAction, + reloadAction.getTemplatePresentation().clone(), + CONTROL_PLACE, + ActionToolbar.DEFAULT_MINIMUM_BUTTON_SIZE + ); + JPanel panel = new JPanel(new BorderLayout(0, 0)); + panel.add(reloadButton, BorderLayout.WEST); + return panel; + } + + @NotNull + private JPanel createReloadInProgressPanel() { + JPanel panel = new JPanel(new BorderLayout(3, 0)); + myLoadingVersionIcon.suspend(); + panel.add(myLoadingVersionIcon, BorderLayout.CENTER); + panel.add(new JLabel("Loading..."), BorderLayout.EAST); + return panel; + } + + private class ReloadAction extends AnAction { + + private ReloadAction() { + super("Reload versions", null, AllIcons.Actions.Refresh); + } + + @Override + public void actionPerformed(AnActionEvent e) { + GithubProjectGeneratorPeer.this.reloadTagsInBackground(); + } + + @Override + public void update(AnActionEvent e) { + e.getPresentation().setEnabled(true); + } + } + } diff --git a/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubTagListProvider.java b/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubTagListProvider.java index f29a9900c430..2b9f43098c62 100644 --- a/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubTagListProvider.java +++ b/platform/lang-impl/src/com/intellij/lang/javascript/boilerplate/GithubTagListProvider.java @@ -72,7 +72,7 @@ public class GithubTagListProvider { LOG.info(getGeneratorName() + "Cache has been successfully updated"); UIUtil.invokeLaterIfNeeded(new Runnable() { public void run() { - peer.updateTagList(tags); + peer.tagsUpdated(tags); } }); return; diff --git a/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEngine.java b/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEngine.java index 4ae7318b5a72..c678fcc8a800 100644 --- a/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEngine.java +++ b/platform/lang-impl/src/com/intellij/psi/codeStyle/arrangement/engine/ArrangementEngine.java @@ -217,7 +217,7 @@ public class ArrangementEngine { } else { if (dependencies.size() == 1 && dependencies.get(0) == entry.getParent()) { - // Handle a situation when the entry is condifured to be at the first parent's children. + // Handle a situation when the entry is configured to be at the first parent's children. arranged.add(entry); } else { diff --git a/platform/lang-impl/src/com/intellij/refactoring/inline/GenericInlineHandler.java b/platform/lang-impl/src/com/intellij/refactoring/inline/GenericInlineHandler.java index 79c2b3f1c479..5fdb8097969c 100644 --- a/platform/lang-impl/src/com/intellij/refactoring/inline/GenericInlineHandler.java +++ b/platform/lang-impl/src/com/intellij/refactoring/inline/GenericInlineHandler.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -143,6 +143,10 @@ public class GenericInlineHandler { Collection allReferences) { final Map inliners = new HashMap(); for (PsiReference ref : allReferences) { + if (ref == null) { + LOG.error("element: " + element.getClass()+ ", allReferences contains null!"); + continue; + } PsiElement refElement = ref.getElement(); LOG.assertTrue(refElement != null, ref.getClass().getName()); diff --git a/platform/testFramework/testSrc/com/intellij/psi/codeStyle/arrangement/AbstractRearrangerTest.groovy b/platform/testFramework/testSrc/com/intellij/psi/codeStyle/arrangement/AbstractRearrangerTest.groovy index 33e4f360281a..744bfc6485bc 100644 --- a/platform/testFramework/testSrc/com/intellij/psi/codeStyle/arrangement/AbstractRearrangerTest.groovy +++ b/platform/testFramework/testSrc/com/intellij/psi/codeStyle/arrangement/AbstractRearrangerTest.groovy @@ -29,6 +29,7 @@ import com.intellij.psi.codeStyle.arrangement.match.StdArrangementEntryMatcher import com.intellij.psi.codeStyle.arrangement.match.StdArrangementMatchRule import com.intellij.psi.codeStyle.arrangement.model.ArrangementAtomMatchCondition import com.intellij.psi.codeStyle.arrangement.model.ArrangementMatchCondition +import com.intellij.psi.codeStyle.arrangement.model.ArrangementNameMatchCondition import com.intellij.psi.codeStyle.arrangement.order.ArrangementEntryOrderType import com.intellij.testFramework.fixtures.LightPlatformCodeInsightFixtureTestCase import org.jetbrains.annotations.NotNull @@ -59,17 +60,29 @@ abstract class AbstractRearrangerTest extends LightPlatformCodeInsightFixtureTes } @NotNull - protected ArrangementGroupingRule group(@NotNull ArrangementGroupingType type) { + protected static ArrangementGroupingRule group(@NotNull ArrangementGroupingType type) { group(type, ArrangementEntryOrderType.KEEP) } @NotNull - protected ArrangementGroupingRule group(@NotNull ArrangementGroupingType type, @NotNull ArrangementEntryOrderType order) { + protected static ArrangementGroupingRule group(@NotNull ArrangementGroupingType type, @NotNull ArrangementEntryOrderType order) { new ArrangementGroupingRule(type, order) } - + @NotNull - protected StdArrangementMatchRule rule(@NotNull Object ... conditions) { + protected static StdArrangementMatchRule rule(@NotNull String name) { + new StdArrangementMatchRule(new StdArrangementEntryMatcher(new ArrangementNameMatchCondition(name))) + } + + @NotNull + protected static StdArrangementMatchRule rule(@NotNull String name, Object ... conditions) { + def c = conditions.collect { atom(it) } + c << new ArrangementNameMatchCondition(name) + new StdArrangementMatchRule(new StdArrangementEntryMatcher(ArrangementUtil.combine(c as ArrangementMatchCondition[]))) + } + + @NotNull + protected static StdArrangementMatchRule rule(@NotNull Object ... conditions) { def condition if (conditions.length == 1) { condition = atom(conditions[0]) @@ -82,7 +95,7 @@ abstract class AbstractRearrangerTest extends LightPlatformCodeInsightFixtureTes } @NotNull - protected ArrangementAtomMatchCondition atom(@NotNull Object condition) { + protected static ArrangementAtomMatchCondition atom(@NotNull Object condition) { new ArrangementAtomMatchCondition(ArrangementUtil.parseType(condition), condition) } diff --git a/platform/util/src/com/intellij/icons/AllIcons.java b/platform/util/src/com/intellij/icons/AllIcons.java index 163315b8d733..7d66c5504ed6 100644 --- a/platform/util/src/com/intellij/icons/AllIcons.java +++ b/platform/util/src/com/intellij/icons/AllIcons.java @@ -179,51 +179,51 @@ public class AllIcons { public static final Icon Class_filter = IconLoader.getIcon("/debugger/class_filter.png"); // 16x16 public static final Icon Console = IconLoader.getIcon("/debugger/console.png"); // 16x16 public static final Icon Db_array = IconLoader.getIcon("/debugger/db_array.png"); // 16x16 - public static final Icon Db_dep_exception_breakpoint = IconLoader.getIcon("/debugger/db_dep_exception_breakpoint.png"); // 16x16 - public static final Icon Db_dep_field_breakpoint = IconLoader.getIcon("/debugger/db_dep_field_breakpoint.png"); // 16x16 - public static final Icon Db_dep_line_breakpoint = IconLoader.getIcon("/debugger/db_dep_line_breakpoint.png"); // 16x16 - public static final Icon Db_dep_method_breakpoint = IconLoader.getIcon("/debugger/db_dep_method_breakpoint.png"); // 16x16 - public static final Icon Db_disabled_breakpoint = IconLoader.getIcon("/debugger/db_disabled_breakpoint.png"); // 16x16 + public static final Icon Db_dep_exception_breakpoint = IconLoader.getIcon("/debugger/db_dep_exception_breakpoint.png"); // 12x12 + public static final Icon Db_dep_field_breakpoint = IconLoader.getIcon("/debugger/db_dep_field_breakpoint.png"); // 12x12 + public static final Icon Db_dep_line_breakpoint = IconLoader.getIcon("/debugger/db_dep_line_breakpoint.png"); // 12x12 + public static final Icon Db_dep_method_breakpoint = IconLoader.getIcon("/debugger/db_dep_method_breakpoint.png"); // 12x12 + public static final Icon Db_disabled_breakpoint = IconLoader.getIcon("/debugger/db_disabled_breakpoint.png"); // 12x12 public static final Icon Db_disabled_breakpoint_process = IconLoader.getIcon("/debugger/db_disabled_breakpoint_process.png"); // 16x16 - public static final Icon Db_disabled_exception_breakpoint = IconLoader.getIcon("/debugger/db_disabled_exception_breakpoint.png"); // 16x16 - public static final Icon Db_disabled_field_breakpoint = IconLoader.getIcon("/debugger/db_disabled_field_breakpoint.png"); // 16x16 - public static final Icon Db_disabled_method_breakpoint = IconLoader.getIcon("/debugger/db_disabled_method_breakpoint.png"); // 16x16 - public static final Icon Db_exception_breakpoint = IconLoader.getIcon("/debugger/db_exception_breakpoint.png"); // 16x16 - public static final Icon Db_field_breakpoint = IconLoader.getIcon("/debugger/db_field_breakpoint.png"); // 16x16 + public static final Icon Db_disabled_exception_breakpoint = IconLoader.getIcon("/debugger/db_disabled_exception_breakpoint.png"); // 12x12 + public static final Icon Db_disabled_field_breakpoint = IconLoader.getIcon("/debugger/db_disabled_field_breakpoint.png"); // 12x12 + public static final Icon Db_disabled_method_breakpoint = IconLoader.getIcon("/debugger/db_disabled_method_breakpoint.png"); // 12x12 + public static final Icon Db_exception_breakpoint = IconLoader.getIcon("/debugger/db_exception_breakpoint.png"); // 12x12 + public static final Icon Db_field_breakpoint = IconLoader.getIcon("/debugger/db_field_breakpoint.png"); // 12x12 public static final Icon Db_field_warning_breakpoint = IconLoader.getIcon("/debugger/db_field_warning_breakpoint.png"); // 16x16 - public static final Icon Db_invalid_breakpoint = IconLoader.getIcon("/debugger/db_invalid_breakpoint.png"); // 16x16 - public static final Icon Db_invalid_field_breakpoint = IconLoader.getIcon("/debugger/db_invalid_field_breakpoint.png"); // 16x16 - public static final Icon Db_invalid_method_breakpoint = IconLoader.getIcon("/debugger/db_invalid_method_breakpoint.png"); // 16x16 - public static final Icon Db_method_breakpoint = IconLoader.getIcon("/debugger/db_method_breakpoint.png"); // 16x16 + public static final Icon Db_invalid_breakpoint = IconLoader.getIcon("/debugger/db_invalid_breakpoint.png"); // 12x12 + public static final Icon Db_invalid_field_breakpoint = IconLoader.getIcon("/debugger/db_invalid_field_breakpoint.png"); // 12x12 + public static final Icon Db_invalid_method_breakpoint = IconLoader.getIcon("/debugger/db_invalid_method_breakpoint.png"); // 12x12 + public static final Icon Db_method_breakpoint = IconLoader.getIcon("/debugger/db_method_breakpoint.png"); // 12x12 public static final Icon Db_method_warning_breakpoint = IconLoader.getIcon("/debugger/db_method_warning_breakpoint.png"); // 16x16 - public static final Icon Db_muted_breakpoint = IconLoader.getIcon("/debugger/db_muted_breakpoint.png"); // 16x16 - public static final Icon Db_muted_dep_exception_breakpoint = IconLoader.getIcon("/debugger/db_muted_dep_exception_breakpoint.png"); // 16x16 - public static final Icon Db_muted_dep_field_breakpoint = IconLoader.getIcon("/debugger/db_muted_dep_field_breakpoint.png"); // 16x16 - public static final Icon Db_muted_dep_line_breakpoint = IconLoader.getIcon("/debugger/db_muted_dep_line_breakpoint.png"); // 16x16 - public static final Icon Db_muted_dep_method_breakpoint = IconLoader.getIcon("/debugger/db_muted_dep_method_breakpoint.png"); // 16x16 - public static final Icon Db_muted_disabled_breakpoint = IconLoader.getIcon("/debugger/db_muted_disabled_breakpoint.png"); // 16x16 + public static final Icon Db_muted_breakpoint = IconLoader.getIcon("/debugger/db_muted_breakpoint.png"); // 12x12 + public static final Icon Db_muted_dep_exception_breakpoint = IconLoader.getIcon("/debugger/db_muted_dep_exception_breakpoint.png"); // 12x12 + public static final Icon Db_muted_dep_field_breakpoint = IconLoader.getIcon("/debugger/db_muted_dep_field_breakpoint.png"); // 12x12 + public static final Icon Db_muted_dep_line_breakpoint = IconLoader.getIcon("/debugger/db_muted_dep_line_breakpoint.png"); // 12x12 + public static final Icon Db_muted_dep_method_breakpoint = IconLoader.getIcon("/debugger/db_muted_dep_method_breakpoint.png"); // 12x12 + public static final Icon Db_muted_disabled_breakpoint = IconLoader.getIcon("/debugger/db_muted_disabled_breakpoint.png"); // 12x12 public static final Icon Db_muted_disabled_breakpoint_process = IconLoader.getIcon("/debugger/db_muted_disabled_breakpoint_process.png"); // 16x16 - public static final Icon Db_muted_disabled_exception_breakpoint = IconLoader.getIcon("/debugger/db_muted_disabled_exception_breakpoint.png"); // 16x16 - public static final Icon Db_muted_disabled_field_breakpoint = IconLoader.getIcon("/debugger/db_muted_disabled_field_breakpoint.png"); // 16x16 - public static final Icon Db_muted_disabled_method_breakpoint = IconLoader.getIcon("/debugger/db_muted_disabled_method_breakpoint.png"); // 16x16 - public static final Icon Db_muted_exception_breakpoint = IconLoader.getIcon("/debugger/db_muted_exception_breakpoint.png"); // 16x16 - public static final Icon Db_muted_field_breakpoint = IconLoader.getIcon("/debugger/db_muted_field_breakpoint.png"); // 16x16 + public static final Icon Db_muted_disabled_exception_breakpoint = IconLoader.getIcon("/debugger/db_muted_disabled_exception_breakpoint.png"); // 12x12 + public static final Icon Db_muted_disabled_field_breakpoint = IconLoader.getIcon("/debugger/db_muted_disabled_field_breakpoint.png"); // 12x12 + public static final Icon Db_muted_disabled_method_breakpoint = IconLoader.getIcon("/debugger/db_muted_disabled_method_breakpoint.png"); // 12x12 + public static final Icon Db_muted_exception_breakpoint = IconLoader.getIcon("/debugger/db_muted_exception_breakpoint.png"); // 12x12 + public static final Icon Db_muted_field_breakpoint = IconLoader.getIcon("/debugger/db_muted_field_breakpoint.png"); // 12x12 public static final Icon Db_muted_field_warning_breakpoint = IconLoader.getIcon("/debugger/db_muted_field_warning_breakpoint.png"); // 16x16 - public static final Icon Db_muted_invalid_breakpoint = IconLoader.getIcon("/debugger/db_muted_invalid_breakpoint.png"); // 16x16 - public static final Icon Db_muted_invalid_field_breakpoint = IconLoader.getIcon("/debugger/db_muted_invalid_field_breakpoint.png"); // 16x16 - public static final Icon Db_muted_invalid_method_breakpoint = IconLoader.getIcon("/debugger/db_muted_invalid_method_breakpoint.png"); // 16x16 - public static final Icon Db_muted_method_breakpoint = IconLoader.getIcon("/debugger/db_muted_method_breakpoint.png"); // 16x16 + public static final Icon Db_muted_invalid_breakpoint = IconLoader.getIcon("/debugger/db_muted_invalid_breakpoint.png"); // 12x12 + public static final Icon Db_muted_invalid_field_breakpoint = IconLoader.getIcon("/debugger/db_muted_invalid_field_breakpoint.png"); // 12x12 + public static final Icon Db_muted_invalid_method_breakpoint = IconLoader.getIcon("/debugger/db_muted_invalid_method_breakpoint.png"); // 12x12 + public static final Icon Db_muted_method_breakpoint = IconLoader.getIcon("/debugger/db_muted_method_breakpoint.png"); // 12x12 public static final Icon Db_muted_method_warning_breakpoint = IconLoader.getIcon("/debugger/db_muted_method_warning_breakpoint.png"); // 16x16 - public static final Icon Db_muted_verified_breakpoint = IconLoader.getIcon("/debugger/db_muted_verified_breakpoint.png"); // 16x16 - public static final Icon Db_muted_verified_field_breakpoint = IconLoader.getIcon("/debugger/db_muted_verified_field_breakpoint.png"); // 16x16 - public static final Icon Db_muted_verified_method_breakpoint = IconLoader.getIcon("/debugger/db_muted_verified_method_breakpoint.png"); // 16x16 + public static final Icon Db_muted_verified_breakpoint = IconLoader.getIcon("/debugger/db_muted_verified_breakpoint.png"); // 12x12 + public static final Icon Db_muted_verified_field_breakpoint = IconLoader.getIcon("/debugger/db_muted_verified_field_breakpoint.png"); // 12x12 + public static final Icon Db_muted_verified_method_breakpoint = IconLoader.getIcon("/debugger/db_muted_verified_method_breakpoint.png"); // 12x12 public static final Icon Db_muted_verified_warning_breakpoint = IconLoader.getIcon("/debugger/db_muted_verified_warning_breakpoint.png"); // 16x16 - public static final Icon Db_obsolete = IconLoader.getIcon("/debugger/db_obsolete.png"); // 16x16 + public static final Icon Db_obsolete = IconLoader.getIcon("/debugger/db_obsolete.png"); // 12x12 public static final Icon Db_primitive = IconLoader.getIcon("/debugger/db_primitive.png"); // 16x16 - public static final Icon Db_set_breakpoint = IconLoader.getIcon("/debugger/db_set_breakpoint.png"); // 16x16 - public static final Icon Db_verified_breakpoint = IconLoader.getIcon("/debugger/db_verified_breakpoint.png"); // 16x16 - public static final Icon Db_verified_field_breakpoint = IconLoader.getIcon("/debugger/db_verified_field_breakpoint.png"); // 16x16 - public static final Icon Db_verified_method_breakpoint = IconLoader.getIcon("/debugger/db_verified_method_breakpoint.png"); // 16x16 + public static final Icon Db_set_breakpoint = IconLoader.getIcon("/debugger/db_set_breakpoint.png"); // 12x12 + public static final Icon Db_verified_breakpoint = IconLoader.getIcon("/debugger/db_verified_breakpoint.png"); // 12x12 + public static final Icon Db_verified_field_breakpoint = IconLoader.getIcon("/debugger/db_verified_field_breakpoint.png"); // 12x12 + public static final Icon Db_verified_method_breakpoint = IconLoader.getIcon("/debugger/db_verified_method_breakpoint.png"); // 12x12 public static final Icon Db_verified_warning_breakpoint = IconLoader.getIcon("/debugger/db_verified_warning_breakpoint.png"); // 16x16 public static final Icon Disable_value_calculation = IconLoader.getIcon("/debugger/disable_value_calculation.png"); // 16x16 public static final Icon EvaluateExpression = IconLoader.getIcon("/debugger/evaluateExpression.png"); // 16x16 @@ -516,6 +516,7 @@ public class AllIcons { public static final Icon Empty = IconLoader.getIcon("/icons/inspector/empty.gif"); // 9x9 public static final Icon SortByCategory = IconLoader.getIcon("/icons/inspector/sortByCategory.png"); // 16x16 public static final Icon SortByName = IconLoader.getIcon("/icons/inspector/sortByName.png"); // 16x16 + } } @@ -530,6 +531,7 @@ public class AllIcons { } public static final Icon EmptyFatalError = IconLoader.getIcon("/ide/emptyFatalError.png"); // 16x16 + public static final Icon Error = IconLoader.getIcon("/ide/error.png"); // 16x16 public static final Icon Error_notifications = IconLoader.getIcon("/ide/error_notifications.png"); // 16x16 public static final Icon ErrorPoint = IconLoader.getIcon("/ide/errorPoint.png"); // 6x6 public static final Icon FatalError_read = IconLoader.getIcon("/ide/fatalError-read.png"); // 16x16 @@ -652,7 +654,7 @@ public class AllIcons { public static final Icon DeleteContentFolderRollover = IconLoader.getIcon("/modules/deleteContentFolderRollover.png"); // 9x9 public static final Icon DeleteContentRoot = IconLoader.getIcon("/modules/deleteContentRoot.png"); // 11x11 public static final Icon DeleteContentRootRollover = IconLoader.getIcon("/modules/deleteContentRootRollover.png"); // 11x11 - public static final Icon Edit = IconLoader.getIcon("/modules/edit.png"); // 16x16 + public static final Icon Edit = IconLoader.getIcon("/modules/edit.png"); // 14x14 public static final Icon ExcludeRoot = IconLoader.getIcon("/modules/excludeRoot.png"); // 16x16 public static final Icon Library = IconLoader.getIcon("/modules/library.png"); // 16x16 public static final Icon Merge = IconLoader.getIcon("/modules/merge.png"); // 16x16 @@ -734,6 +736,7 @@ public class AllIcons { public static final Icon IdeaModule = IconLoader.getIcon("/nodes/ideaModule.png"); // 16x16 public static final Icon IdeaProject = IconLoader.getIcon("/nodes/ideaProject.png"); // 16x16 public static final Icon IdeaWorkspace = IconLoader.getIcon("/nodes/ideaWorkspace.png"); // 16x16 + public static final Icon InspectionResults = IconLoader.getIcon("/nodes/inspectionResults.png"); // 16x16 public static final Icon Interface = IconLoader.getIcon("/nodes/interface.png"); // 16x16 public static final Icon J2eeParameter = IconLoader.getIcon("/nodes/j2eeParameter.png"); // 16x16 public static final Icon JarDirectory = IconLoader.getIcon("/nodes/jarDirectory.png"); // 16x16 @@ -992,6 +995,7 @@ public class AllIcons { public static final Icon AddLink = IconLoader.getIcon("/toolbarDecorator/mac/addLink.png"); // 16x16 public static final Icon AddPackage = IconLoader.getIcon("/toolbarDecorator/mac/addPackage.png"); // 16x16 public static final Icon AddPattern = IconLoader.getIcon("/toolbarDecorator/mac/addPattern.png"); // 16x16 + public static final Icon AddRemoteDatasource = IconLoader.getIcon("/toolbarDecorator/mac/addRemoteDatasource.png"); // 16x16 public static final Icon AddYouTrack = IconLoader.getIcon("/toolbarDecorator/mac/addYouTrack.png"); // 16x16 public static final Icon Analyze = IconLoader.getIcon("/toolbarDecorator/mac/analyze.png"); // 14x14 public static final Icon Edit = IconLoader.getIcon("/toolbarDecorator/mac/edit.png"); // 14x14 diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java index 777603b11017..9eff6a5a9b22 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/completion/GroovyCompletionData.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -87,6 +87,7 @@ public class GroovyCompletionData { } if (parent instanceof GrExpression && parent.getParent() instanceof GrAnnotationNameValuePair) { + addKeywords(result, false, PsiKeyword.TRUE, PsiKeyword.FALSE, PsiKeyword.NULL); return; } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java index c3771e2650b2..180ddf59e8f0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/auxiliary/modifiers/GrModifierListImpl.java @@ -45,6 +45,8 @@ import org.jetbrains.plugins.groovy.lang.psi.impl.GrStubElementBase; import org.jetbrains.plugins.groovy.lang.psi.stubs.GrModifierListStub; import org.jetbrains.plugins.groovy.lang.psi.util.GroovyCommonClassNames; +import java.util.ArrayList; + /** * @autor: Dmitry.Krasilschikov * @date: 18.03.2007 @@ -119,22 +121,14 @@ public class GrModifierListImpl extends GrStubElementBase im @NotNull public PsiElement[] getModifiers() { - PsiElement[] modifiersKeywords = findChildrenByType(TokenSets.MODIFIERS, PsiElement.class); - GrAnnotation[] modifiersAnnotations = findChildrenByClass(GrAnnotation.class); - - if (modifiersAnnotations.length == 0) return modifiersKeywords; - - PsiElement[] res = new PsiElement[modifiersAnnotations.length + modifiersKeywords.length]; - - int i = 0; - for (PsiElement modifiersKeyword : modifiersKeywords) { - res[i++] = modifiersKeyword; - } - for (GrAnnotation modifiersAnnotation : modifiersAnnotations) { - res[i++] = modifiersAnnotation; + final ArrayList result = new ArrayList(); + for (PsiElement cur = getFirstChild(); cur != null; cur = cur.getNextSibling()) { + if (cur instanceof GrAnnotation || TokenSets.MODIFIERS.contains(cur.getNode().getElementType())) { + result.add(cur); + } } - return res; + return result.toArray(new PsiElement[result.size()]); } public boolean hasExplicitVisibilityModifiers() { @@ -276,9 +270,9 @@ public class GrModifierListImpl extends GrStubElementBase im @Nullable private PsiElement findAnchor(String name) { final int myPriority = PRIORITY.get(name); - final PsiElement[] modifiers = getModifiers(); PsiElement anchor = null; - for (PsiElement modifier : modifiers) { + + for (PsiElement modifier : getModifiers()) { final int otherPriority = PRIORITY.get(modifier.getText()); if (otherPriority <= myPriority) { anchor = modifier; diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/clauses/GrTraditionalForClauseImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/clauses/GrTraditionalForClauseImpl.java index 5e19681aa2f8..6bc2a2cc0867 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/clauses/GrTraditionalForClauseImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/statements/clauses/GrTraditionalForClauseImpl.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * 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. @@ -19,7 +19,6 @@ package org.jetbrains.plugins.groovy.lang.psi.impl.statements.clauses; import com.intellij.lang.ASTNode; import com.intellij.util.IncorrectOperationException; import org.jetbrains.annotations.NotNull; -import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.lexer.GroovyTokenTypes; import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor; import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.GrCondition; @@ -50,62 +49,46 @@ public class GrTraditionalForClauseImpl extends GroovyPsiElementImpl implements } public GrCondition getInitialization() { - final ASTNode first = getFirstSemicolon(); - for (ASTNode child = getNode().getFirstChildNode(); child != null && child != first; child = child.getTreeNext()) { - if (child.getPsi() instanceof GrCondition) { - return (GrCondition)child.getPsi(); - } - } - return null; + return getConditionInner(0); } public GrExpression getCondition() { - final ASTNode first = getFirstSemicolon(); - if (first == null) return null; - for (ASTNode child = first.getTreeNext(); child != null; child = child.getTreeNext()) { - if (child.getPsi() instanceof GrExpression) { - return (GrExpression) child.getPsi(); - } - } - - return null; + final GrCondition condition = getConditionInner(1); + return condition instanceof GrExpression ? (GrExpression)condition : null; } public GrExpression getUpdate() { - final ASTNode second = getSecondSemicolon(); - if (second == null) return null; - - for (ASTNode child = second; child != null; child = child.getTreeNext()) { - if (child.getPsi() instanceof GrExpression) { - return (GrExpression)child.getPsi(); - } - } - return null; + final GrCondition condition = getConditionInner(2); + return condition instanceof GrExpression ? (GrExpression)condition : null; } - @Nullable - private ASTNode getFirstSemicolon() { + private GrCondition getConditionInner(final int i) { + int passed = 0; + boolean waitForSemicolon = false; + for (ASTNode child = getNode().getFirstChildNode(); child != null; child = child.getTreeNext()) { if (child.getElementType() == GroovyTokenTypes.mSEMI) { - return child; - } - } + if (waitForSemicolon) { + waitForSemicolon = false; + } + else { + if (passed == i) { + return null; + } - return null; - } - - @Nullable - private ASTNode getSecondSemicolon() { - boolean firstPassed = false; - for (ASTNode child = getNode().getFirstChildNode(); child != null; child = child.getTreeNext()) { - if (child.getElementType() == GroovyTokenTypes.mSEMI) { - if (firstPassed) { - return child; - } else { - firstPassed = true; + passed++; } } + else if (child.getPsi() instanceof GrCondition) { + if (passed == i) { + return (GrCondition)child.getPsi(); + } + + passed++; + waitForSemicolon = true; + } } + return null; } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/KeywordCompletionTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/KeywordCompletionTest.groovy index 46137e30c004..037ae8579a43 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/KeywordCompletionTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/completion/KeywordCompletionTest.groovy @@ -1,6 +1,7 @@ /* - * Copyright 2000-2007 JetBrains s.r.o. - * Licensed under the Apache License, Version 2.0 (the "License") + * 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 * @@ -96,6 +97,8 @@ public class KeywordCompletionTest extends CompletionTestBase { void testAfterLabel() { doTest() } void testKeywordsInParentheses() { doTest() } void testCompletionInTupleVar(){ doTest() } + void testAnnotationArg() { doTest() } + void testDefaultAnnotationArg(){ doTest() } String basePath = TestUtils.testDataPath + 'groovy/oldCompletion/keyword' diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy index 844685ed4197..fd8ce92b19e9 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/highlighting/GroovyHighlightingTest.groovy @@ -731,20 +731,6 @@ new Base() { ''') } - void testDelegateWithDeprecated() { - testHighlighting('''\ -interface Foo { - @Deprecated - void foo() -} - - -class FooImpl implements Foo { - @Delegate(deprecated = false) Foo delegate -} -''') - } - void testAbstractMethodWithBody() { testHighlighting('''\ interface A { diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/DelegateTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/DelegateTest.groovy index d8c7701e0fda..47a771532ca9 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/DelegateTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/resolve/DelegateTest.groovy @@ -241,16 +241,34 @@ public abstract class Bar implements Foo { public class FooBar extends Bar implements Foo { } ''') - def file = myFixture.configureByText('Baz.groovy', '''\ + assertAllMethodsImplemented('Baz.groovy', '''\ class Baz { @Delegate(deprecated = true) FooBar bare } -''') as GroovyFile +''') + } + + private void assertAllMethodsImplemented(String fileName, String text) { + def file = myFixture.configureByText(fileName, text) as GroovyFile assertNotNull(file) final clazz = file.classes[0] assertNotNull(clazz) assertEmpty OverrideImplementUtil.getMethodSignaturesToImplement(clazz) } + + void testDeprecatedFalse() { + myFixture.addFileToProject('Foo.groovy', '''\ +interface Foo { + @Deprecated + void foo() +} +''') + assertAllMethodsImplemented('text.groovy', '''\ +class FooImpl implements Foo { + @Delegate(deprecated = false) Foo delegate +} +''') + } } diff --git a/plugins/groovy/testdata/groovy/oldCompletion/keyword/annotationArg.test b/plugins/groovy/testdata/groovy/oldCompletion/keyword/annotationArg.test new file mode 100644 index 000000000000..e374a4d3bbe3 --- /dev/null +++ b/plugins/groovy/testdata/groovy/oldCompletion/keyword/annotationArg.test @@ -0,0 +1,8 @@ +class A { + @Delegated(deprecated = ) + Del d +} +----- +false +null +true \ No newline at end of file diff --git a/plugins/groovy/testdata/groovy/oldCompletion/keyword/defaultAnnotationArg.test b/plugins/groovy/testdata/groovy/oldCompletion/keyword/defaultAnnotationArg.test new file mode 100644 index 000000000000..924658508709 --- /dev/null +++ b/plugins/groovy/testdata/groovy/oldCompletion/keyword/defaultAnnotationArg.test @@ -0,0 +1,8 @@ +class A { + @Delegated() + Del d +} +----- +false +null +true \ No newline at end of file diff --git a/plugins/groovy/testdata/groovy/stubGenerator/delegateToMethodWithTypeParams.test b/plugins/groovy/testdata/groovy/stubGenerator/delegateToMethodWithTypeParams.test index f9a8fd237db3..fa3b0bc9e65d 100644 --- a/plugins/groovy/testdata/groovy/stubGenerator/delegateToMethodWithTypeParams.test +++ b/plugins/groovy/testdata/groovy/stubGenerator/delegateToMethodWithTypeParams.test @@ -60,14 +60,6 @@ public void clear() { return ; } -public boolean equals(java.lang.Object o) { -return false; -} - -public int hashCode() { -return 0; -} - public java.lang.String get(int index) { return null; } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomUtil.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomUtil.java index 143136dd6233..e2360f823332 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomUtil.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/MavenDomUtil.java @@ -298,13 +298,6 @@ public class MavenDomUtil { return children[index]; } - @Nullable - public static PropertiesFile getPropertiesFile(@NotNull Project project, @NotNull String fileName) { - VirtualFile file = MavenPropertiesVirtualFileSystem.getInstance().findFileByPath(fileName); - if (file == null) return null; - return getPropertiesFile(project, file); - } - @Nullable public static PropertiesFile getPropertiesFile(@NotNull Project project, @NotNull VirtualFile file) { PsiFile psiFile = PsiManager.getInstance(project).findFile(file); @@ -312,12 +305,6 @@ public class MavenDomUtil { return (PropertiesFile)psiFile; } - @Nullable - public static IProperty findProperty(@NotNull Project project, @NotNull String fileName, @NotNull String propName) { - PropertiesFile propertiesFile = getPropertiesFile(project, fileName); - return propertiesFile == null ? null : propertiesFile.findPropertyByKey(propName); - } - @Nullable public static IProperty findProperty(@NotNull Project project, @NotNull VirtualFile file, @NotNull String propName) { PropertiesFile propertiesFile = getPropertiesFile(project, file); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java index d6f9888c1954..43d555c9dcf8 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/dom/references/MavenPropertyPsiReference.java @@ -185,21 +185,22 @@ public class MavenPropertyPsiReference extends MavenPsiReference { if (result != null) return result; } - IProperty property = MavenDomUtil.findProperty(myProject, MavenPropertiesVirtualFileSystem.SYSTEM_PROPERTIES_FILE, myText); + MavenPropertiesVirtualFileSystem mavenPropertiesVirtualFileSystem = MavenPropertiesVirtualFileSystem.getInstance(); + + IProperty property = mavenPropertiesVirtualFileSystem.findSystemProperty(myProject, myText); if (property != null) return property.getPsiElement(); if (myText.startsWith("env.")) { - property = MavenDomUtil.findProperty(myProject, MavenPropertiesVirtualFileSystem.ENV_PROPERTIES_FILE, - myText.substring("env.".length())); + property = mavenPropertiesVirtualFileSystem.findEnvProperty(myProject, myText.substring("env.".length())); if (property != null) return property.getPsiElement(); } String textWithEnv = "env." + myText; - property = MavenDomUtil.findProperty(myProject, MavenPropertiesVirtualFileSystem.SYSTEM_PROPERTIES_FILE, textWithEnv); + property = mavenPropertiesVirtualFileSystem.findSystemProperty(myProject, textWithEnv); if (property != null) return property.getPsiElement(); - property = MavenDomUtil.findProperty(myProject, MavenPropertiesVirtualFileSystem.ENV_PROPERTIES_FILE, textWithEnv); + property = mavenPropertiesVirtualFileSystem.findEnvProperty(myProject, textWithEnv); if (property != null) return property.getPsiElement(); if (!hasPrefix) { @@ -390,7 +391,8 @@ public class MavenPropertyPsiReference extends MavenPsiReference { } private void collectSystemEnvProperties(String propertiesFileName, @Nullable String prefix, List result) { - PropertiesFile file = MavenDomUtil.getPropertiesFile(myProject, propertiesFileName); + VirtualFile virtualFile = MavenPropertiesVirtualFileSystem.getInstance().findFileByPath(propertiesFileName); + PropertiesFile file = MavenDomUtil.getPropertiesFile(myProject, virtualFile); collectPropertiesFileVariants(file, prefix, result); } diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java index 64976f06bce4..3b661033de7d 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/utils/MavenUtil.java @@ -203,29 +203,6 @@ public class MavenUtil { Notifications.Bus.notify(new Notification(MAVEN_NOTIFICATION_GROUP, title, e.getMessage(), NotificationType.ERROR), project); } - public static Properties getSystemProperties() { - Properties result = (Properties)System.getProperties().clone(); - for (String each : new THashSet((Set)result.keySet())) { - if (each.startsWith("idea.")) { - result.remove(each); - } - } - return result; - } - - public static Properties getEnvProperties() { - Properties reuslt = new Properties(); - for (Map.Entry each : System.getenv().entrySet()) { - if (isMagicalProperty(each.getKey())) continue; - reuslt.put(each.getKey(), each.getValue()); - } - return reuslt; - } - - private static boolean isMagicalProperty(String key) { - return key.startsWith("="); - } - public static File getPluginSystemDir(String folder) { // PathManager.getSystemPath() may return relative path return new File(PathManager.getSystemPath(), "Maven" + "/" + folder).getAbsoluteFile(); diff --git a/plugins/maven/src/main/java/org/jetbrains/idea/maven/vfs/MavenPropertiesVirtualFileSystem.java b/plugins/maven/src/main/java/org/jetbrains/idea/maven/vfs/MavenPropertiesVirtualFileSystem.java index 83d0da5856a2..a1089fcfcf02 100644 --- a/plugins/maven/src/main/java/org/jetbrains/idea/maven/vfs/MavenPropertiesVirtualFileSystem.java +++ b/plugins/maven/src/main/java/org/jetbrains/idea/maven/vfs/MavenPropertiesVirtualFileSystem.java @@ -15,16 +15,19 @@ */ package org.jetbrains.idea.maven.vfs; +import com.intellij.lang.properties.IProperty; +import com.intellij.openapi.project.Project; +import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.vfs.ex.dummy.DummyFileSystem; -import gnu.trove.THashMap; import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.annotations.Nullable; -import org.jetbrains.idea.maven.utils.MavenUtil; +import org.jetbrains.idea.maven.dom.MavenDomUtil; import java.util.Map; +import java.util.Properties; public class MavenPropertiesVirtualFileSystem extends DummyFileSystem { @NonNls public static final String PROTOCOL = "maven-properties"; @@ -34,7 +37,8 @@ public class MavenPropertiesVirtualFileSystem extends DummyFileSystem { public static final String[] PROPERTIES_FILES = new String[]{SYSTEM_PROPERTIES_FILE, ENV_PROPERTIES_FILE}; - private final Map myFiles = new THashMap(); + private VirtualFile mySystemPropertiesFile; + private VirtualFile myEnvPropertiesFile; public static MavenPropertiesVirtualFileSystem getInstance() { return (MavenPropertiesVirtualFileSystem)VirtualFileManager.getInstance().getFileSystem(PROTOCOL); @@ -45,27 +49,65 @@ public class MavenPropertiesVirtualFileSystem extends DummyFileSystem { return PROTOCOL; } + public VirtualFile getSystemPropertiesFile() { + if (mySystemPropertiesFile == null) { + Properties systemProperties = new Properties(); + + for (Map.Entry entry : System.getProperties().entrySet()) { + if (entry.getKey() instanceof String && entry.getValue() instanceof String) { + String key = (String)entry.getKey(); + if (!key.startsWith("idea.")) { + systemProperties.setProperty(key, (String)entry.getValue()); + } + } + } + + mySystemPropertiesFile = new MavenPropertiesVirtualFile(SYSTEM_PROPERTIES_FILE, systemProperties, this); + } + + return mySystemPropertiesFile; + } + + public VirtualFile getEnvPropertiesFile() { + if (myEnvPropertiesFile == null) { + Properties envProperties = new Properties(); + + for (Map.Entry each : System.getenv().entrySet()) { + if (each.getKey().startsWith("=")) continue; + envProperties.setProperty(each.getKey(), SystemInfo.isWindows ? each.getValue().toUpperCase() : each.getValue()); + } + + myEnvPropertiesFile = new MavenPropertiesVirtualFile(ENV_PROPERTIES_FILE, envProperties, this); + } + + return myEnvPropertiesFile; + } + //@Override //public boolean isPhysical() { // return false; //} public synchronized VirtualFile findFileByPath(@NotNull @NonNls String path) { - VirtualFile result = myFiles.get(path); - if (result != null) return result; - - result = createFile(path); - if (result != null) { - myFiles.put(path, result); + if (path.equals(SYSTEM_PROPERTIES_FILE)) { + return getSystemPropertiesFile(); } - return result; + + if (path.equals(ENV_PROPERTIES_FILE)) { + return getEnvPropertiesFile(); + } + + return null; } @Nullable - private VirtualFile createFile(String path) { - if (SYSTEM_PROPERTIES_FILE.equals(path)) return new MavenPropertiesVirtualFile(path, MavenUtil.getSystemProperties(), this); - if (ENV_PROPERTIES_FILE.equals(path)) return new MavenPropertiesVirtualFile(path, MavenUtil.getEnvProperties(), this); - return null; + public IProperty findSystemProperty(Project project, @NotNull String propertyName) { + return MavenDomUtil.findProperty(project, getSystemPropertiesFile(), propertyName); + } + + @Nullable + public IProperty findEnvProperty(Project project, @NotNull String propertyName) { + return MavenDomUtil.findProperty(project, getEnvPropertiesFile(), propertyName); } //protected void deleteFile(Object requestor, VirtualFile vFile) throws IOException { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.java index c04b7c4379c4..d615d908c5ed 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/dom/MavenPropertyCompletionAndResolutionTest.java @@ -15,9 +15,13 @@ */ package org.jetbrains.idea.maven.dom; +import com.intellij.lang.properties.IProperty; +import com.intellij.openapi.util.SystemInfo; import com.intellij.openapi.vfs.VirtualFile; import com.intellij.psi.PsiDirectory; +import com.intellij.psi.PsiElement; import com.intellij.psi.PsiManager; +import com.intellij.psi.PsiReference; import org.jetbrains.idea.maven.dom.model.MavenDomProfiles; import org.jetbrains.idea.maven.dom.model.MavenDomProfilesModel; import org.jetbrains.idea.maven.dom.model.MavenDomSettingsModel; @@ -689,9 +693,7 @@ public class MavenPropertyCompletionAndResolutionTest extends MavenDomTestCase { "${user.home}"); - assertResolved(myProjectPom, MavenDomUtil.findProperty(myProject, - MavenPropertiesVirtualFileSystem.SYSTEM_PROPERTIES_FILE, - "user.home").getPsiElement()); + assertResolved(myProjectPom, MavenPropertiesVirtualFileSystem.getInstance().findSystemProperty(myProject, "user.home").getPsiElement()); } public void testEnvProperties() throws Exception { @@ -701,9 +703,47 @@ public class MavenPropertyCompletionAndResolutionTest extends MavenDomTestCase { "${env." + getEnvVar() + "}"); - assertResolved(myProjectPom, MavenDomUtil.findProperty(myProject, - MavenPropertiesVirtualFileSystem.ENV_PROPERTIES_FILE, - getEnvVar()).getPsiElement()); + assertResolved(myProjectPom, MavenPropertiesVirtualFileSystem.getInstance().findEnvProperty(myProject, getEnvVar()).getPsiElement()); + } + + public void testUpperCaseEnvPropertiesOnWindows() throws Exception { + if (!SystemInfo.isWindows) return; + + createProjectPom("test" + + "project" + + "1" + + + "${env.PATH}"); + + PsiReference ref = getReferenceAtCaret(myProjectPom); + assertNotNull(ref); + + PsiElement resolved = ref.resolve(); + assertEquals(System.getenv("Path"), ((IProperty)resolved).getValue()); + } + + public void testCaseInsencitiveOnWindows() throws Exception { + if (!SystemInfo.isWindows) return; + + createProjectPom("test" + + "project" + + "1" + + + "${env.PaTH}"); + + assertUnresolved(myProjectPom); + } + + public void testNotUpperCaseEnvPropertiesOnWindows() throws Exception { + if (!SystemInfo.isWindows) return; + + createProjectPom("test" + + "project" + + "1" + + + "${env.Path}"); + + assertUnresolved(myProjectPom); } public void testHighlightUnresolvedProperties() throws Exception { diff --git a/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectReaderTest.java b/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectReaderTest.java index 006275f7646d..d102aecd4d5f 100644 --- a/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectReaderTest.java +++ b/plugins/maven/src/test/java/org/jetbrains/idea/maven/project/MavenProjectReaderTest.java @@ -1294,7 +1294,7 @@ public class MavenProjectReaderTest extends MavenTestCase { } public void testActivatingProfilesByEnvProperty() throws Exception { - String value = MavenUtil.getEnvProperties().getProperty(getEnvVar()); + String value = System.getenv(getEnvVar()); createProjectPom("" + " " + diff --git a/xml/impl/src/com/intellij/xml/XmlFileTypeFactory.java b/xml/impl/src/com/intellij/xml/XmlFileTypeFactory.java index 1ff865325449..fa5d933726e3 100644 --- a/xml/impl/src/com/intellij/xml/XmlFileTypeFactory.java +++ b/xml/impl/src/com/intellij/xml/XmlFileTypeFactory.java @@ -34,7 +34,7 @@ public class XmlFileTypeFactory extends FileTypeFactory { consumer.consume(XHtmlFileType.INSTANCE, "xhtml"); consumer.consume(DTDFileType.INSTANCE, "dtd;ent;mod;elt"); - consumer.consume(XmlFileType.INSTANCE, "xml;xsd;tld;xsl;jnlp;wsdl;jhm;ant;xul;xslt;rng"); + consumer.consume(XmlFileType.INSTANCE, "xml;xsd;tld;xsl;jnlp;wsdl;jhm;ant;xul;xslt;rng;fxml"); TypedHandler.registerBaseLanguageQuoteHandler(XMLLanguage.class, TypedHandler.getQuoteHandlerForType(XmlFileType.INSTANCE)); } }