IStructuredSelection으로 프로젝트를 선택한 경우 .toArray()를 사용하여 Object [] - 내용을 가져온 다음 각 Object를 IAdaptable로 캐스팅 한 다음 다시 IXavaProject로 캐스팅하면 문제가 해결되고 모든 작업이 완료됩니다. 메소드/클래스와 인터페이스 ...Eclipse 플러그인 - 캐스트 대신 어댑터를 사용하면 어떤 이점이 있습니까?
대신 (IJavaProject) adaptable.getAdapter (IJavaProject.class)를 사용하면 일부 인터페이스 메소드가 손실됩니까?
어댑터가 정확히 무엇을합니까 ("주어진 클래스 매개 변수의 인스턴스 인 객체를 반환합니다 ..."). 왜 모든 사람들이 캐스트 대신 그것을 사용하도록 권장합니까? 여기에 관련 코드 당신이 IProject
또는 IJavaProject
대신 그들은 코드가보기 또는 편집기를 제시하고자하는 방법에 더 적합 일부 내부 클래스입니다 같은 것들을 구현하지 않는 선택에서 얻을
IAdaptable adaptable = (IAdaptable) selectedObject;
IJavaProject javaProject = (IJavaProject) adaptable.getAdapter(IJavaProject.class);
final IProject iProject = javaProject.getProject();
iProject.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
final IJavaProject javaRefreshedProject = JavaCore.create(iProject);
//processing further using ASTParser and CompilationUnit
감사합니다 빠른 회신 :이 경우
당신은 모든 가능성에 대처하기 위해 다음과 같이 유틸리티 방법을 사용할 수 있습니다 사용합니다. 불행히도 플랫폼 어댑터를 이미 사용해 보았습니다. UI 선택없이 작업 공간 (루트)에서 직접 IProject를 가져 오려고했습니다. 그러나 UI 선택의 내용에 대한 간단한 캐스트가 가장 잘 작동하는 이유는 무엇입니까? 정보가 손실되는 위치를 찾으려고 노력할 것입니다. 하지만 디버깅하는 동안 그런 딥 변수를 분석하는 데는 많은 시간이 필요합니다. – Phil
'IWorkspaceRoot'를 사용하면'IWorkspaceRoot.getProjects()'를 호출 할 수 있습니다.하지만 이는 어댑터와 관련이 없습니다. 'IWorkspaceRoot'는 JDT 개념 인'IJavaProject'에 대해 아무것도 모릅니다. –
하지만 iproject의 isNatureEnabled를 확인하고 JavaCore.create (project)를 사용하면 JDT-IJavaProject가 될 수 있습니다. 하지만 내가 말했듯이,이 방법은 어떤 이유로 든 나를 위해 작동하지 않는다 ... 나는 CompilationUnit 방문자가 어댑터가 아니라 여기에 잘못이 있다고 생각한다 ... – Phil