register folding builder in env

This commit is contained in:
Alexey Kudravtsev
2014-05-29 13:22:57 +04:00
parent ab8b58221a
commit b9fa2ab2fa
3 changed files with 54 additions and 25 deletions
@@ -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 <T> void addExplicitExtension(final ClassExtension<T> instance, final Class clazz, final T object) {
instance.addExplicitExtension(clazz, object);
Disposer.register(getParentDisposable(), new Disposable() {
@Override
public void dispose() {
instance.removeExplicitExtension(clazz, object);
}
});
}
}
@@ -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 <T> void addExplicitExtension(final LanguageExtension<T> 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 <T> void addExplicitExtension(@NotNull final FileTypeExtension<T> instance, @NotNull final FileType fileType, @NotNull final T object) {
instance.addExplicitExtension(fileType, object);
doAddExplicitExtension(instance, fileType, object);
}
private <T,U> void doAddExplicitExtension(@NotNull final KeyedExtensionCollector<T,U> 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 <T> void addExplicitExtension(@NotNull final ClassExtension<T> instance, @NotNull final Class aClass, @NotNull final T object) {
doAddExplicitExtension(instance, aClass, object);
}
public <T> void addExtension(ExtensionPointName<T> name, final T extension) {
final ExtensionPoint<T> extensionPoint = Extensions.getRootArea().getExtensionPoint(name);
extensionPoint.registerExtension(extension);
@@ -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() {