private void register(ModeController modeController) { modeController.addExtension( IScriptEditorStarter.class, new IScriptEditorStarter() { public String startEditor(final String pScriptInput) { final ScriptModel scriptModel = new ScriptModel(pScriptInput); final ScriptEditorPanel scriptEditorPanel = new ScriptEditorPanel(scriptModel, false); scriptEditorPanel.setVisible(true); return scriptModel.getScript(); } public ComboBoxEditor createComboBoxEditor(Dimension minimumSize) { final ScriptComboBoxEditor scriptComboBoxEditor = new ScriptComboBoxEditor(); if (minimumSize != null) scriptComboBoxEditor.setMinimumSize(minimumSize); return scriptComboBoxEditor; } }); modeController.addExtension( IScriptStarter.class, new IScriptStarter() { public void executeScript(NodeModel node, String script) { ScriptingEngine.executeScript(node, script); } }); registerScriptAddOns(); if (!modeController.getController().getViewController().isHeadless()) { final IUserInputListenerFactory userInputListenerFactory = modeController.getUserInputListenerFactory(); addPropertiesToOptionPanel(); final MenuBuilder menuBuilder = userInputListenerFactory.getMenuBuilder(); modeController.addAction(new ScriptEditor()); modeController.addAction(new ExecuteScriptForAllNodes()); modeController.addAction(new ExecuteScriptForSelectionAction()); final ManageAddOnsAction manageAddOnsAction = new ManageAddOnsAction(); modeController.addAction(manageAddOnsAction); modeController.addExtension( AddOnInstaller.class, new AddOnInstaller() { public void install(final URL url) { final ManageAddOnsDialog dialog = manageAddOnsAction.getDialog(); // FIXME: method does not exist --> boercher // dialog.install(url); } }); final ScriptingConfiguration configuration = new ScriptingConfiguration(); ScriptingEngine.setClasspath(configuration.getClasspath()); ScriptCompiler.compileScriptsOnPath(configuration.getClasspath()); modeController.addMenuContributor( new IMenuContributor() { public void updateMenus(ModeController modeController, MenuBuilder builder) { registerScripts(menuBuilder, configuration); } }); createUserScriptsDirectory(); } FilterController.getCurrentFilterController() .getConditionFactory() .addConditionController(10, new ScriptConditionController()); }
public void apply(final Object target) { DefaultServiceRegistry services = new DefaultServiceRegistry(); services.add(ScriptPluginFactory.class, DefaultScriptPluginFactory.this); services.add(ScriptHandlerFactory.class, scriptHandlerFactory); services.add(ClassLoaderScope.class, targetScope); services.add(LoggingManagerInternal.class, loggingManagerFactory.create()); services.add(Instantiator.class, instantiator); services.add(ScriptHandler.class, scriptHandler); services.add(FileLookup.class, fileLookup); services.add(ModelRuleSourceDetector.class, modelRuleSourceDetector); ScriptSource withImports = importsReader.withImports(scriptSource); PluginDependenciesService pluginDependenciesService = new PluginDependenciesService(getSource()); services.add(PluginDependenciesService.class, pluginDependenciesService); ScriptCompiler compiler = scriptCompilerFactory.createCompiler(withImports); compiler.setClassloader(baseScope.getExportClassLoader()); boolean supportsPluginsBlock = ProjectScript.class.isAssignableFrom(scriptType); String onPluginBlockError = supportsPluginsBlock ? null : "Only Project build scripts can contain plugins {} blocks"; PluginsAndBuildscriptTransformer scriptBlockTransformer = new PluginsAndBuildscriptTransformer( classpathClosureName, onPluginBlockError, documentationRegistry); StatementExtractingScriptTransformer classpathScriptTransformer = new StatementExtractingScriptTransformer(classpathClosureName, scriptBlockTransformer); compiler.setTransformer(classpathScriptTransformer); ScriptRunner<? extends BasicScript> classPathScriptRunner = compiler.compile(scriptType); classPathScriptRunner.getScript().init(target, services); classPathScriptRunner.run(); List<PluginRequest> pluginRequests = pluginDependenciesService.getRequests(); PluginAwareInternal pluginAware = target instanceof PluginAwareInternal ? (PluginAwareInternal) target : null; pluginRequestApplicator.applyPlugins(pluginRequests, scriptHandler, pluginAware, targetScope); compiler.setClassloader(targetScope.getLocalClassLoader()); BuildScriptTransformer transformer = new BuildScriptTransformer( "no_" + classpathScriptTransformer.getId(), classpathScriptTransformer.invert(), scriptSource); compiler.setTransformer(transformer); // TODO - find a less tangled way of getting this in here, see the verifier impl for why it's // needed compiler.setVerifier(new ClosureCreationInterceptingVerifier()); ScriptRunner<? extends BasicScript> runner = compiler.compile(scriptType); BasicScript script = runner.getScript(); script.init(target, services); if (ownerScript && target instanceof ScriptAware) { ((ScriptAware) target).setScript(script); } runner.run(); }