모든 프로젝트 파일 (IFile)을 읽기 전용 상태로로드하는 Eclipse 플러그인을 개발 중입니다. 사용자가 JavaEditor에 뭔가를 쓰기 시작할 때Eclipse 플러그인 IFile 읽기 전용 속성 변경
ResourceAttributes resAttr = new ResourceAttributes();
resAttr.setReadOnly(true);
classFile.setResourceAttributes(resAttr);
는 이제 메시지 상자가 표시됩니다
File ABC.java is read-only. Do you wish to make it writable?
내가 읽기 전용하면 안되는 파일이 있기 때문에 사용자가 답변을 캡처 할 .
IElementChangedListener를 구현하기 위해 IFile 읽기 전용 속성이 변경되었는지 여부를 알 수 없습니다.
class SinfoniaCloudElementChangedListener implements IElementChangedListener {
@Override
public void elementChanged(ElementChangedEvent event) {
Activator.logInfo("SinfoniaCloudElementChangedListener - elementChanged");
try {
handleDelta(event.getDelta());
} catch (JavaModelException e) {
Activator.logError("Error handling delta for ElementChangeListener. ", e);
}
}
private void handleDelta(IJavaElementDelta delta) throws JavaModelException {
IJavaElement element = delta.getElement();
if (element instanceof ICompilationUnit) {
IJavaProject project = element.getJavaProject();
if (project.getElementName().equals(SinfoniaProject.getProjectName(true)) == false) {
return;
}
ICompilationUnit cu = (ICompilationUnit) element;
for (IType type : cu.getAllTypes()) {
if (type != IType.CLASS_FILE)
continue;
switch (delta.getKind()) {
case IJavaElementDelta.CHANGED:
Activator.logInfo("CHANGED - Element:" + cu.getElementName());
// ?????????????????????????????
break;
default:
// do nothing
break;
}
}
}
for (IJavaElementDelta child : delta.getAffectedChildren()) {
handleDelta(child);
}
}
}
감사합니다.
앤드류 제안 IElementChangedListener으로 당
==
그러나 나는하여 IResource 읽기 전용 속성이 변경 아닌지 확인하는 방법을 모르는 여전히 해요, IResourceChangeListener로 대체했습니다.class ABCResourceChangeListener implements IResourceChangeListener {
@Override
public void resourceChanged(IResourceChangeEvent event) {
IResource res = event.getResource();
try {
switch (event.getType()) {
case IResourceChangeEvent.PRE_CLOSE:
System.out.print("Project ");
System.out.print(res.getFullPath());
System.out.println(" is about to close.");
break;
case IResourceChangeEvent.PRE_DELETE:
System.out.print("Project ");
System.out.print(res.getFullPath());
System.out.println(" is about to be deleted.");
break;
case IResourceChangeEvent.POST_CHANGE:
System.out.println("Resources have changed.");
event.getDelta().accept(new DeltaPrinter());
break;
case IResourceChangeEvent.PRE_BUILD:
System.out.println("Build about to run.");
event.getDelta().accept(new DeltaPrinter());
break;
case IResourceChangeEvent.POST_BUILD:
System.out.println("Build complete.");
event.getDelta().accept(new DeltaPrinter());
break;
}
} catch (CoreException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class DeltaPrinter implements IResourceDeltaVisitor {
public boolean visit(IResourceDelta delta) {
IResource res = delta.getResource();
switch (delta.getKind()) {
case IResourceDelta.ADDED:
System.out.print("Resource ");
System.out.print(res.getFullPath());
System.out.println(" was added.");
break;
case IResourceDelta.REMOVED:
System.out.print("Resource ");
System.out.print(res.getFullPath());
System.out.println(" was removed.");
break;
case IResourceDelta.CHANGED:
System.out.print("Resource ");
System.out.print(res.getFullPath());
System.out.println(" has changed.");
int flags = delta.getFlags();
if ((flags & IResourceDelta.CONTENT) != 0) {
System.out.println("--> Content Change");
// ?????????????????????????
}
if ((flags & IResourceDelta.REPLACED) != 0) {
System.out.println("--> Content Replaced");
}
if ((flags & IResourceDelta.MARKERS) != 0) {
System.out.println("--> Marker Change");
IMarkerDelta[] markers = delta.getMarkerDeltas();
// if interested in markers, check these deltas
for (int j=0; j<markers.length;j++) {
IMarkerDelta markerDelta = markers[j];
if (markerDelta.isSubtypeOf(IMarker.SOURCE_ID)) {
switch (markerDelta.getKind()) {
case IResourceDelta.ADDED :
System.out.println("--> Marker Delta Added ");
break;
case IResourceDelta.REMOVED :
System.out.println("--> Marker Delta Removed ");
break;
case IResourceDelta.CHANGED:
System.out.println("--> Marker Delta Changed ");
break;
}
}
}
}
break;
}
return true; // visit the children
}
}
안녕하세요, IElementChangedListener를 IResourceChangeListener로 변경 했으므로 getFlags 메서드를 가져오고 있습니다. 그러나 나는 아직도 IFile 읽기 전용 속성이 변경되었는지 여부를 확인하는 방법을 모르겠다. –