diff --git a/java/java-psi-impl/src/com/intellij/core/JavaCoreApplicationEnvironment.java b/java/java-psi-impl/src/com/intellij/core/JavaCoreApplicationEnvironment.java index 8e7fcdbd090c..902322272ea8 100644 --- a/java/java-psi-impl/src/com/intellij/core/JavaCoreApplicationEnvironment.java +++ b/java/java-psi-impl/src/com/intellij/core/JavaCoreApplicationEnvironment.java @@ -15,12 +15,16 @@ */ package com.intellij.core; +import com.intellij.codeInsight.folding.JavaCodeFoldingSettings; +import com.intellij.codeInsight.folding.impl.JavaCodeFoldingSettingsBase; +import com.intellij.codeInsight.folding.impl.JavaFoldingBuilderBase; import com.intellij.codeInsight.runner.JavaMainMethodProvider; import com.intellij.ide.highlighter.ArchiveFileType; import com.intellij.ide.highlighter.JavaClassFileType; import com.intellij.ide.highlighter.JavaFileType; import com.intellij.lang.LanguageASTFactory; import com.intellij.lang.LanguageParserDefinitions; +import com.intellij.lang.folding.LanguageFolding; import com.intellij.lang.java.JavaLanguage; import com.intellij.lang.java.JavaParserDefinition; import com.intellij.navigation.ItemPresentationProviders; @@ -29,9 +33,8 @@ import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileTypes.PlainTextFileType; import com.intellij.openapi.fileTypes.PlainTextLanguage; import com.intellij.openapi.fileTypes.PlainTextParserDefinition; +import com.intellij.openapi.project.Project; import com.intellij.openapi.projectRoots.JavaVersionService; -import com.intellij.openapi.util.ClassExtension; -import com.intellij.openapi.util.Disposer; import com.intellij.psi.*; import com.intellij.psi.augment.PsiAugmentProvider; import com.intellij.psi.impl.EmptySubstitutorImpl; @@ -84,19 +87,22 @@ public class JavaCoreApplicationEnvironment extends CoreApplicationEnvironment { addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiField.class, new FieldPresentationProvider()); addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiLocalVariable.class, new VariablePresentationProvider()); addExplicitExtension(ItemPresentationProviders.INSTANCE, PsiParameter.class, new VariablePresentationProvider()); + + registerApplicationService(JavaCodeFoldingSettings.class, new JavaCodeFoldingSettingsBase()); + addExplicitExtension(LanguageFolding.INSTANCE, JavaLanguage.INSTANCE, new JavaFoldingBuilderBase() { + @Override + protected boolean shouldShowExplicitLambdaType(PsiAnonymousClass anonymousClass, PsiNewExpression expression) { + return false; + } + + @Override + protected boolean isBelowRightMargin(Project project, int lineLength) { + return false; + } + }); } protected CoreJavaDirectoryService createJavaDirectoryService() { return new CoreJavaDirectoryService(); } - - public void addExplicitExtension(final ClassExtension instance, final Class clazz, final T object) { - instance.addExplicitExtension(clazz, object); - Disposer.register(getParentDisposable(), new Disposable() { - @Override - public void dispose() { - instance.removeExplicitExtension(clazz, object); - } - }); - } } diff --git a/platform/core-impl/src/com/intellij/core/CoreApplicationEnvironment.java b/platform/core-impl/src/com/intellij/core/CoreApplicationEnvironment.java index e7ce3d36f774..2d204dc21458 100644 --- a/platform/core-impl/src/com/intellij/core/CoreApplicationEnvironment.java +++ b/platform/core-impl/src/com/intellij/core/CoreApplicationEnvironment.java @@ -35,7 +35,9 @@ import com.intellij.openapi.extensions.ExtensionsArea; import com.intellij.openapi.fileEditor.FileDocumentManager; import com.intellij.openapi.fileTypes.*; import com.intellij.openapi.progress.*; +import com.intellij.openapi.util.ClassExtension; import com.intellij.openapi.util.Disposer; +import com.intellij.openapi.util.KeyedExtensionCollector; import com.intellij.openapi.util.StaticGetter; import com.intellij.openapi.vfs.VirtualFileManager; import com.intellij.openapi.vfs.VirtualFileSystem; @@ -276,13 +278,7 @@ public class CoreApplicationEnvironment { } public void addExplicitExtension(final LanguageExtension instance, final Language language, final T object) { - instance.addExplicitExtension(language, object); - Disposer.register(myParentDisposable, new Disposable() { - @Override - public void dispose() { - instance.removeExplicitExtension(language, object); - } - }); + doAddExplicitExtension(instance, language, object); } public void registerParserDefinition(Language language, ParserDefinition parserDefinition) { @@ -290,15 +286,23 @@ public class CoreApplicationEnvironment { } public void addExplicitExtension(@NotNull final FileTypeExtension instance, @NotNull final FileType fileType, @NotNull final T object) { - instance.addExplicitExtension(fileType, object); + doAddExplicitExtension(instance, fileType, object); + } + + private void doAddExplicitExtension(@NotNull final KeyedExtensionCollector instance, @NotNull final U key, @NotNull final T object) { + instance.addExplicitExtension(key, object); Disposer.register(myParentDisposable, new Disposable() { @Override public void dispose() { - instance.removeExplicitExtension(fileType, object); + instance.removeExplicitExtension(key, object); } }); } + public void addExplicitExtension(@NotNull final ClassExtension instance, @NotNull final Class aClass, @NotNull final T object) { + doAddExplicitExtension(instance, aClass, object); + } + public void addExtension(ExtensionPointName name, final T extension) { final ExtensionPoint extensionPoint = Extensions.getRootArea().getExtensionPoint(name); extensionPoint.registerExtension(extension); diff --git a/xml/xml-psi-impl/src/com/intellij/xml/XmlCoreEnvironment.java b/xml/xml-psi-impl/src/com/intellij/xml/XmlCoreEnvironment.java index 5ae81dd96174..5389f2114ea5 100644 --- a/xml/xml-psi-impl/src/com/intellij/xml/XmlCoreEnvironment.java +++ b/xml/xml-psi-impl/src/com/intellij/xml/XmlCoreEnvironment.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.xml; +import com.intellij.application.options.editor.XmlFoldingSettings; import com.intellij.codeInspection.XmlSuppressionProvider; import com.intellij.core.CoreApplicationEnvironment; import com.intellij.core.CoreProjectEnvironment; @@ -13,16 +29,14 @@ import com.intellij.lang.LanguageParserDefinitions; import com.intellij.lang.dtd.DTDLanguage; import com.intellij.lang.dtd.DTDParserDefinition; import com.intellij.lang.dtd.DtdSyntaxHighlighterFactory; +import com.intellij.lang.folding.LanguageFolding; import com.intellij.lang.html.HTMLLanguage; import com.intellij.lang.html.HTMLParserDefinition; import com.intellij.lang.html.HtmlSyntaxHighlighterFactory; import com.intellij.lang.xhtml.XHTMLLanguage; import com.intellij.lang.xhtml.XHTMLParserDefinition; import com.intellij.lang.xhtml.XhtmlSyntaxHighlighterFactory; -import com.intellij.lang.xml.XMLLanguage; -import com.intellij.lang.xml.XMLParserDefinition; -import com.intellij.lang.xml.XmlASTFactory; -import com.intellij.lang.xml.XmlSyntaxHighlighterFactory; +import com.intellij.lang.xml.*; import com.intellij.lexer.HtmlEmbeddedTokenTypesProvider; import com.intellij.openapi.extensions.Extensions; import com.intellij.openapi.fileTypes.SyntaxHighlighterFactory; @@ -85,6 +99,11 @@ public class XmlCoreEnvironment { appEnvironment.addExtension(StandardResourceProvider.EP_NAME, new InternalResourceProvider()); appEnvironment.registerApplicationService(ExternalResourceManager.class, createExternalResourceManager()); + appEnvironment.registerApplicationService(XmlFoldingSettings.class, new XmlFoldingSettings()); + appEnvironment.addExplicitExtension(LanguageFolding.INSTANCE, XMLLanguage.INSTANCE, new XmlFoldingBuilder()); + appEnvironment.addExplicitExtension(LanguageFolding.INSTANCE, HTMLLanguage.INSTANCE, new XmlFoldingBuilder()); + appEnvironment.addExplicitExtension(LanguageFolding.INSTANCE, XHTMLLanguage.INSTANCE, new XmlFoldingBuilder()); + appEnvironment.addExplicitExtension(LanguageFolding.INSTANCE, DTDLanguage.INSTANCE, new XmlFoldingBuilder()); } protected ExternalResourceManagerEx createExternalResourceManager() {