gpt4 book ai didi

java - 从自定义 IStorage 实现获取 IProject

转载 作者:行者123 更新时间:2023-11-30 02:42:57 31 4
gpt4 key购买 nike

我目前正在开发一个 Eclipse Neon 编辑器插件。目前我正在尝试从文件系统中打开文件,这些文件不是在 Eclipse 内部创建的。为此,我需要通过以下方法获取 IProject:

public static IProject getProject(IStorage storage) {
if (storage instanceof IFile) {
return ((IFile) storage).getProject();
}
else if (storage instanceof IJarEntryResource) {
return ((IJarEntryResource) storage).getPackageFragmentRoot().getJavaProject().getProject();
}
else if (storage instanceof FileStorage) {
// ????
}
else {
throw new IllegalArgumentException("Unknown IStorage implementation");
}
}

这里FileStorageIStorage接口(interface)的一个自己的实现。看起来像这样:

public class FileStorage implements IStorage {
private final FileStoreEditorInput editorInput;

FileStorage( FileStoreEditorInput editorInput ) {
this.editorInput = editorInput;
}

@Override
public <T> T getAdapter( Class<T> adapter ) {
return Platform.getAdapterManager().getAdapter( this, adapter );
}

@Override
public boolean isReadOnly() {
return false;
}

@Override
public String getName() {
return editorInput.getName();
}

@Override
public IPath getFullPath() {
return new Path( URIUtil.toFile( editorInput.getURI() ).getAbsolutePath() );
}

@Override
public InputStream getContents() {
try {
return editorInput.getURI().toURL().openStream();
} catch( IOException e ) {
throw new UncheckedIOException( e );
}
}
}

有没有办法从这个FileStorage获取IProject

最佳答案

您可以尝试使用以下方法获取文件的 IFile:

IPath path = ... absolute path to the file

IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
IFile file = root.getFileForLocation(path);
if (file != null) {
IProject project = file.getProject();
...
}

但这仅适用于工作空间内的文件。对于工作区之外的任何内容,您都不能拥有项目。

关于java - 从自定义 IStorage 实现获取 IProject,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41119757/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com