package com.intellij.flex.uiDesigner; import com.intellij.openapi.application.ApplicationManager; import com.intellij.openapi.components.impl.ComponentManagerImpl; import com.intellij.openapi.extensions.AreaInstance; import com.intellij.openapi.extensions.ExtensionPointName; import com.intellij.openapi.extensions.Extensions; import com.intellij.util.Consumer; import org.jetbrains.annotations.NotNull; class DesignerApplication extends ComponentManagerImpl implements AreaInstance, Consumer<Integer> { private AdlUtil.AdlProcessHandler processHandler; DesignerApplication() { super(ApplicationManager.getApplication()); } @NotNull @Override public <T> T[] getExtensions(@NotNull ExtensionPointName<T> extensionPointName) { return Extensions.getArea(this).getExtensionPoint(extensionPointName).getExtensions(); } void setProcessHandler(@NotNull AdlUtil.AdlProcessHandler processHandler) { this.processHandler = processHandler; processHandler.adlExitHandler = this; } @Override public void consume(Integer exitCode) { processHandler = null; DesignerApplicationManager.getInstance().disposeApplication(); if (exitCode != 0) { AdlUtil.describeAdlExit(exitCode); } } @Override public void dispose() { try { super.dispose(); } finally { if (processHandler != null) { processHandler.adlExitHandler = null; processHandler.destroyProcess(); processHandler = null; } } } }