2008. 5. 25.

이클립스 ViewPart 생성시의 예외 핸들링

이클립스 플러그인 개발-이클립스 ViewPart생성시의 예외 핸들링

이클립스 플러그인 개발 시 뷰파트 생성 시 발생하는 예외는 해당뷰에 예외의 내용이 출력된다. 그 원리가 궁금해 예외 스텍트레이스를 살펴 보았다. 중요하지 않은 부분은 생략하였고 예외를 재포장하거나 분기가 발생하는 부분의 스택트래이스 내용을 출력했다.

org.eclipse.core.internal.registry.osgi.RegistryStrategyOSGI.createExecutableExtension(RegistryStrategyOSGI.java:170)

org.eclipse.core.internal.registry.ConfigurationElementHandle.createExecutableExtension(ConfigurationElementHandle.java:51)
CoreException을 생성한다.

org.eclipse.ui.internal.WorkbenchPlugin.createExtension(WorkbenchPlugin.java:239)
CoreException인가 Exception인가를 구별

org.eclipse.ui.internal.ViewReference.createPartHelper(ViewReference.java:327)
  1.Excepion이Error의인스턴스이면서 LinkageError의 인스턴스가 아닌것을 확인
   → 에러 던짐
  2.content가 널이 아닌 경우
  3.site가 널이 아닌 경우
  4.actionBars가 널이 아닌경우
→2,3,4의 경우 해당 컴포지트를 dispise()하고 StatusManager를 실행한 후, PartInitException예외를 던진다.
   
org.eclipse.ui.internal.ViewReference.createPart(ViewReference.java:227)
  IStatus→Workbench하고File에Log를 작성한다.
  SutausManager이용화면에 출력
StatusManager.getManager().handle(displayStatus, StatusManager.SHOW);

ErrorViewPart생성및출력→Part를이용ViewSite생성→ActionBars생성

IViewDescriptor desc = factory.viewReg.find(getId());
String label = getId();
if (desc != null) {
label = desc.getLabel();
}
ErrorViewPart part = new ErrorViewPart(displayStatus);
PartPane pane = getPane();
ViewSite site = new ViewSite(this, part, factory.page, getId(),
PlatformUI.PLUGIN_ID, label);
site.setActionBars(new ViewActionBars(factory.page.getActionBars(),
site, (ViewPane) pane));
try {
part.init(site);
} catch (PartInitException e) {
StatusUtil.handleStatus(e, StatusManager.SHOW
| StatusManager.LOG);
return null;
}
Composite parent = (Composite) pane.getControl();
Composite content = new Composite(parent, SWT.NONE);
content.setLayout(new FillLayout());

try {
part.createPartControl(content);
} catch (Exception e) {
content.dispose();
StatusUtil.handleStatus(e, StatusManager.SHOW
| StatusManager.LOG);
return null;
}


여기서 예외처리는 종료하게 된다.

댓글 없음: