mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
register extensions area and extension points for module; register some more components
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
/*
|
||||
* 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.openapi.components;
|
||||
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class ExtensionAreas {
|
||||
@NonNls public static final String IDEA_PROJECT = "IDEA_PROJECT";
|
||||
@NonNls public static final String IDEA_MODULE = "IDEA_MODULE";
|
||||
}
|
||||
@@ -21,6 +21,7 @@ import com.intellij.mock.*;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.ModalityState;
|
||||
import com.intellij.openapi.components.ExtensionAreas;
|
||||
import com.intellij.openapi.editor.Document;
|
||||
import com.intellij.openapi.editor.impl.DocumentImpl;
|
||||
import com.intellij.openapi.extensions.ExtensionPoint;
|
||||
@@ -97,7 +98,7 @@ public class CoreEnvironment {
|
||||
myLocalFileSystem = new CoreLocalFileSystem();
|
||||
myJarFileSystem = new CoreJarFileSystem();
|
||||
|
||||
Extensions.registerAreaClass("IDEA_PROJECT", null);
|
||||
Extensions.registerAreaClass(ExtensionAreas.IDEA_PROJECT, null);
|
||||
myProject = new MockProject(myApplication.getPicoContainer(), myParentDisposable);
|
||||
|
||||
final MutablePicoContainer appContainer = myApplication.getPicoContainer();
|
||||
@@ -198,7 +199,7 @@ public class CoreEnvironment {
|
||||
addExplicitExtension(LanguageParserDefinitions.INSTANCE, definition.getFileNodeType().getLanguage(), definition);
|
||||
}
|
||||
|
||||
protected <T> void registerComponentInstance(final MutablePicoContainer container, final Class<T> key, final T implementation) {
|
||||
public static <T> void registerComponentInstance(final MutablePicoContainer container, final Class<T> key, final T implementation) {
|
||||
container.unregisterComponent(key);
|
||||
container.registerComponentInstance(key, implementation);
|
||||
}
|
||||
@@ -234,20 +235,20 @@ public class CoreEnvironment {
|
||||
});
|
||||
}
|
||||
|
||||
protected <T> void registerExtensionPoint(final ExtensionsArea area, final ExtensionPointName<T> extensionPointName,
|
||||
final Class<? extends T> aClass) {
|
||||
public static <T> void registerExtensionPoint(final ExtensionsArea area, final ExtensionPointName<T> extensionPointName,
|
||||
final Class<? extends T> aClass) {
|
||||
final String name = extensionPointName.getName();
|
||||
registerExtensionPoint(area, name, aClass);
|
||||
}
|
||||
|
||||
protected <T> void registerExtensionPoint(ExtensionsArea area, String name, Class<? extends T> aClass) {
|
||||
public static <T> void registerExtensionPoint(ExtensionsArea area, String name, Class<? extends T> aClass) {
|
||||
if (!area.hasExtensionPoint(name)) {
|
||||
ExtensionPoint.Kind kind = aClass.isInterface() || (aClass.getModifiers() & Modifier.ABSTRACT) != 0 ? ExtensionPoint.Kind.INTERFACE : ExtensionPoint.Kind.BEAN_CLASS;
|
||||
area.registerExtensionPoint(name, aClass.getName(), kind);
|
||||
}
|
||||
}
|
||||
|
||||
protected <T> void registerProjectExtensionPoint(final ExtensionPointName<T> extensionPointName,
|
||||
public <T> void registerProjectExtensionPoint(final ExtensionPointName<T> extensionPointName,
|
||||
final Class<? extends T> aClass) {
|
||||
registerExtensionPoint(Extensions.getArea(myProject), extensionPointName, aClass);
|
||||
}
|
||||
|
||||
@@ -16,6 +16,7 @@
|
||||
package com.intellij.mock;
|
||||
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.components.ExtensionAreas;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.project.Project;
|
||||
@@ -35,7 +36,7 @@ public class MockProject extends MockComponentManager implements Project {
|
||||
|
||||
public MockProject(PicoContainer parent, @NotNull Disposable parentDisposable) {
|
||||
super(parent, parentDisposable);
|
||||
Extensions.instantiateArea("IDEA_PROJECT", this, null);
|
||||
Extensions.instantiateArea(ExtensionAreas.IDEA_PROJECT, this, null);
|
||||
Disposer.register(parentDisposable, new Disposable() {
|
||||
@Override
|
||||
public void dispose() {
|
||||
|
||||
@@ -20,6 +20,7 @@ import com.intellij.ide.highlighter.ModuleFileType;
|
||||
import com.intellij.ide.plugins.IdeaPluginDescriptor;
|
||||
import com.intellij.ide.plugins.PluginManager;
|
||||
import com.intellij.openapi.application.impl.ApplicationInfoImpl;
|
||||
import com.intellij.openapi.components.ExtensionAreas;
|
||||
import com.intellij.openapi.components.impl.ComponentManagerImpl;
|
||||
import com.intellij.openapi.components.impl.ModulePathMacroManager;
|
||||
import com.intellij.openapi.components.impl.stores.IComponentStore;
|
||||
@@ -85,7 +86,7 @@ public class ModuleImpl extends ComponentManagerImpl implements ModuleEx {
|
||||
}
|
||||
|
||||
protected void bootstrapPicoContainer() {
|
||||
Extensions.instantiateArea(PluginManager.AREA_IDEA_MODULE, this, (AreaInstance)getParentComponentManager());
|
||||
Extensions.instantiateArea(ExtensionAreas.IDEA_MODULE, this, (AreaInstance)getParentComponentManager());
|
||||
super.bootstrapPicoContainer();
|
||||
getPicoContainer().registerComponentImplementation(IComponentStore.class, ModuleStoreImpl.class);
|
||||
getPicoContainer().registerComponentImplementation(ModulePathMacroManager.class);
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
/*
|
||||
* Copyright 2000-2011 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.
|
||||
@@ -28,6 +28,7 @@ import com.intellij.notification.Notifications;
|
||||
import com.intellij.openapi.application.Application;
|
||||
import com.intellij.openapi.application.ApplicationManager;
|
||||
import com.intellij.openapi.application.PathManager;
|
||||
import com.intellij.openapi.components.ExtensionAreas;
|
||||
import com.intellij.openapi.diagnostic.Logger;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.extensions.LogProvider;
|
||||
@@ -74,8 +75,6 @@ import java.util.zip.ZipInputStream;
|
||||
@SuppressWarnings({"UseOfSystemOutOrSystemErr", "CallToPrintStackTrace"}) // No logger is loaded at this time so we have to use these.
|
||||
public class PluginManager {
|
||||
|
||||
@NonNls public static final String AREA_IDEA_PROJECT = "IDEA_PROJECT";
|
||||
@NonNls public static final String AREA_IDEA_MODULE = "IDEA_MODULE";
|
||||
@NonNls private static final String PROPERTY_PLUGIN_PATH = "plugin.path";
|
||||
private static final Object PLUGIN_CLASSES_LOCK = new Object();
|
||||
private static String myPluginError = null;
|
||||
@@ -318,8 +317,8 @@ public class PluginManager {
|
||||
|
||||
private static void configureExtensions() {
|
||||
Extensions.setLogProvider(new IdeaLogProvider());
|
||||
Extensions.registerAreaClass(AREA_IDEA_PROJECT, null);
|
||||
Extensions.registerAreaClass(AREA_IDEA_MODULE, AREA_IDEA_PROJECT);
|
||||
Extensions.registerAreaClass(ExtensionAreas.IDEA_PROJECT, null);
|
||||
Extensions.registerAreaClass(ExtensionAreas.IDEA_MODULE, ExtensionAreas.IDEA_PROJECT);
|
||||
}
|
||||
|
||||
private static boolean shouldLoadPlugins() {
|
||||
|
||||
@@ -26,6 +26,7 @@ import com.intellij.openapi.application.PathMacros;
|
||||
import com.intellij.openapi.application.ex.ApplicationEx;
|
||||
import com.intellij.openapi.application.ex.ApplicationManagerEx;
|
||||
import com.intellij.openapi.application.impl.ApplicationInfoImpl;
|
||||
import com.intellij.openapi.components.ExtensionAreas;
|
||||
import com.intellij.openapi.components.ProjectComponent;
|
||||
import com.intellij.openapi.components.StorageScheme;
|
||||
import com.intellij.openapi.components.TrackingPathMacroSubstitutor;
|
||||
@@ -131,7 +132,7 @@ public class ProjectImpl extends ComponentManagerImpl implements ProjectEx {
|
||||
|
||||
@Override
|
||||
protected void bootstrapPicoContainer() {
|
||||
Extensions.instantiateArea(PluginManager.AREA_IDEA_PROJECT, this, null);
|
||||
Extensions.instantiateArea(ExtensionAreas.IDEA_PROJECT, this, null);
|
||||
super.bootstrapPicoContainer();
|
||||
final MutablePicoContainer picoContainer = getPicoContainer();
|
||||
|
||||
|
||||
@@ -18,6 +18,8 @@ package com.intellij.core;
|
||||
import com.intellij.openapi.application.ex.PathManagerEx;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.roots.ContentEntry;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.vfs.StandardFileSystems;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.testFramework.UsefulTestCase;
|
||||
@@ -39,6 +41,8 @@ public class CoreModuleManagerTest extends UsefulTestCase {
|
||||
final Module[] modules = moduleManager.getModules();
|
||||
assertEquals(1, modules.length);
|
||||
|
||||
//
|
||||
ModuleRootManager rootManager = ModuleRootManager.getInstance(modules[0]);
|
||||
final ContentEntry[] contentEntries = rootManager.getContentEntries();
|
||||
assertEquals(1, contentEntries.length);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -17,9 +17,18 @@ package com.intellij.core;
|
||||
|
||||
import com.intellij.mock.MockComponentManager;
|
||||
import com.intellij.openapi.Disposable;
|
||||
import com.intellij.openapi.components.ExtensionAreas;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.module.impl.ModuleEx;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.roots.ModuleExtension;
|
||||
import com.intellij.openapi.roots.ModuleRootManager;
|
||||
import com.intellij.openapi.roots.impl.DirectoryIndex;
|
||||
import com.intellij.openapi.roots.impl.ModuleRootManagerImpl;
|
||||
import com.intellij.openapi.roots.impl.ProjectRootManagerImpl;
|
||||
import com.intellij.openapi.util.Disposer;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.openapi.vfs.pointers.VirtualFilePointerManager;
|
||||
import com.intellij.psi.search.GlobalSearchScope;
|
||||
import org.jetbrains.annotations.NotNull;
|
||||
|
||||
@@ -34,6 +43,21 @@ public class CoreModule extends MockComponentManager implements ModuleEx {
|
||||
super(project.getPicoContainer(), parentDisposable);
|
||||
myProject = project;
|
||||
myPath = moduleFilePath;
|
||||
|
||||
Extensions.instantiateArea(ExtensionAreas.IDEA_MODULE, this, null);
|
||||
CoreEnvironment.registerExtensionPoint(Extensions.getArea(this), ModuleExtension.EP_NAME, ModuleExtension.class);
|
||||
Disposer.register(parentDisposable, new Disposable() {
|
||||
@Override
|
||||
public void dispose() {
|
||||
Extensions.disposeArea(CoreModule.this);
|
||||
}
|
||||
});
|
||||
|
||||
ModuleRootManagerImpl moduleRootManager = new ModuleRootManagerImpl(this,
|
||||
DirectoryIndex.getInstance(project),
|
||||
ProjectRootManagerImpl.getInstanceImpl(project),
|
||||
VirtualFilePointerManager.getInstance());
|
||||
CoreEnvironment.registerComponentInstance(getPicoContainer(), ModuleRootManager.class, moduleRootManager);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -16,19 +16,33 @@
|
||||
package com.intellij.core;
|
||||
|
||||
import com.intellij.application.options.PathMacrosImpl;
|
||||
import com.intellij.mock.MockProject;
|
||||
import com.intellij.openapi.application.PathMacros;
|
||||
import com.intellij.openapi.components.ExtensionAreas;
|
||||
import com.intellij.openapi.components.PathMacroManager;
|
||||
import com.intellij.openapi.components.impl.ProjectPathMacroManager;
|
||||
import com.intellij.openapi.extensions.Extensions;
|
||||
import com.intellij.openapi.module.ModuleManager;
|
||||
import com.intellij.openapi.roots.ProjectRootManager;
|
||||
import com.intellij.openapi.roots.impl.DirectoryIndex;
|
||||
import com.intellij.openapi.roots.impl.DirectoryIndexExcludePolicy;
|
||||
import com.intellij.openapi.roots.impl.DirectoryIndexImpl;
|
||||
import com.intellij.openapi.roots.impl.ProjectRootManagerImpl;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class ProjectModelEnvironment {
|
||||
public static void register(CoreEnvironment env) {
|
||||
Extensions.registerAreaClass(ExtensionAreas.IDEA_MODULE, null);
|
||||
PathMacrosImpl pathMacros = new PathMacrosImpl();
|
||||
env.registerApplicationComponent(PathMacros.class, pathMacros);
|
||||
env.registerProjectComponent(ModuleManager.class, new CoreModuleManager(env.getProject(), env.getParentDisposable()));
|
||||
env.registerProjectComponent(PathMacroManager.class, new ProjectPathMacroManager(pathMacros, env.getProject()));
|
||||
final MockProject project = env.getProject();
|
||||
env.registerProjectComponent(ModuleManager.class, new CoreModuleManager(project, env.getParentDisposable()));
|
||||
env.registerProjectComponent(PathMacroManager.class, new ProjectPathMacroManager(pathMacros, project));
|
||||
env.registerProjectExtensionPoint(DirectoryIndexExcludePolicy.EP_NAME, DirectoryIndexExcludePolicy.class);
|
||||
DirectoryIndex index = new DirectoryIndexImpl(project);
|
||||
env.registerProjectComponent(DirectoryIndex.class, index);
|
||||
env.registerProjectComponent(ProjectRootManager.class, new ProjectRootManagerImpl(project, index));
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user