mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
kill the rest of DataAccessor framework, use DataKeys everywhere consistently
This commit is contained in:
@@ -1,36 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.ide;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.psi.JavaDirectoryService;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiPackage;
|
||||
|
||||
public class JavaDataAccessors {
|
||||
public static final DataAccessor<PsiPackage> FILE_PACKAGE = new DataAccessor<PsiPackage>() {
|
||||
public PsiPackage getImpl(DataContext dataContext) throws NoDataException {
|
||||
PsiFile psiFile = DataAccessors.PSI_FILE.getNotNull(dataContext);
|
||||
PsiDirectory containingDirectory = psiFile.getContainingDirectory();
|
||||
if (containingDirectory == null || !containingDirectory.isValid()) return null;
|
||||
return JavaDirectoryService.getInstance().getPackage(containingDirectory);
|
||||
}
|
||||
};
|
||||
|
||||
private JavaDataAccessors() {
|
||||
}
|
||||
}
|
||||
@@ -15,14 +15,13 @@
|
||||
*/
|
||||
package com.intellij.ide.macro;
|
||||
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.psi.PsiPackage;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.JavaDataAccessors;
|
||||
|
||||
public class FileFQPackage extends Macro {
|
||||
public String expand(DataContext dataContext) throws Macro.ExecutionCancelledException {
|
||||
PsiPackage aPackage = JavaDataAccessors.FILE_PACKAGE.from(dataContext);
|
||||
public String expand(DataContext dataContext) {
|
||||
PsiPackage aPackage = FilePackageMacro.getFilePackage(dataContext);
|
||||
if (aPackage == null) return null;
|
||||
return aPackage.getQualifiedName();
|
||||
}
|
||||
|
||||
@@ -15,10 +15,14 @@
|
||||
*/
|
||||
package com.intellij.ide.macro;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.psi.PsiPackage;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.ide.JavaDataAccessors;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.DataKeys;
|
||||
import com.intellij.psi.JavaDirectoryService;
|
||||
import com.intellij.psi.PsiDirectory;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiPackage;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
|
||||
public final class FilePackageMacro extends Macro {
|
||||
public String getName() {
|
||||
@@ -30,8 +34,17 @@ public final class FilePackageMacro extends Macro {
|
||||
}
|
||||
|
||||
public String expand(DataContext dataContext) {
|
||||
PsiPackage aPackage = JavaDataAccessors.FILE_PACKAGE.from(dataContext);
|
||||
PsiPackage aPackage = getFilePackage(dataContext);
|
||||
if (aPackage == null) return null;
|
||||
return aPackage.getName();
|
||||
}
|
||||
|
||||
@Nullable
|
||||
static PsiPackage getFilePackage(DataContext dataContext) {
|
||||
PsiFile psiFile = DataKeys.PSI_FILE.getData(dataContext);
|
||||
if (psiFile == null) return null;
|
||||
PsiDirectory containingDirectory = psiFile.getContainingDirectory();
|
||||
if (containingDirectory == null || !containingDirectory.isValid()) return null;
|
||||
return JavaDirectoryService.getInstance().getPackage(containingDirectory);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,68 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.intellij.ide;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.LangDataKeys;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.module.Module;
|
||||
import com.intellij.openapi.project.Project;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import com.intellij.psi.PsiFile;
|
||||
import com.intellij.psi.PsiManager;
|
||||
|
||||
/**
|
||||
* @author yole
|
||||
*/
|
||||
public class DataAccessors {
|
||||
@Deprecated
|
||||
public static final DataAccessor<Project> PROJECT = new DataAccessor.SimpleDataAccessor<Project>(PlatformDataKeys.PROJECT.getName());
|
||||
@Deprecated
|
||||
public static final DataAccessor<Module> MODULE = new DataAccessor.SimpleDataAccessor<Module>(LangDataKeys.MODULE.getName());
|
||||
public static final DataAccessor<PsiManager> PSI_MANAGER = new DataAccessor<PsiManager>() {
|
||||
public PsiManager getImpl(DataContext dataContext) throws NoDataException {
|
||||
return PsiManager.getInstance(PROJECT.getNotNull(dataContext));
|
||||
}
|
||||
};
|
||||
public static final DataAccessor<PsiFile> PSI_FILE = new DataAccessor<PsiFile>() {
|
||||
public PsiFile getImpl(DataContext dataContext) throws NoDataException {
|
||||
return PSI_MANAGER.getNotNull(dataContext).findFile(VIRTUAL_FILE.getNotNull(dataContext));
|
||||
}
|
||||
};
|
||||
public static final DataAccessor<VirtualFile> VIRTUAL_FILE = new DataAccessor.SimpleDataAccessor<VirtualFile>(PlatformDataKeys.VIRTUAL_FILE.getName());
|
||||
public static final DataAccessor<VirtualFile> VIRTUAL_DIR_OR_PARENT = new DataAccessor<VirtualFile>() {
|
||||
public VirtualFile getImpl(DataContext dataContext) throws NoDataException {
|
||||
VirtualFile virtualFile = VIRTUAL_FILE.getNotNull(dataContext);
|
||||
return virtualFile.isDirectory() ? virtualFile : virtualFile.getParent();
|
||||
}
|
||||
};
|
||||
public static final DataAccessor<VirtualFile> PROJECT_BASE_DIR = new DataAccessor<VirtualFile>() {
|
||||
public VirtualFile getImpl(DataContext dataContext) throws NoDataException {
|
||||
Project project = PROJECT.getNotNull(dataContext);
|
||||
return project.getBaseDir();
|
||||
}
|
||||
};
|
||||
public static final DataAccessor<String> MODULE_FILE_PATH = new DataAccessor<String>() {
|
||||
public String getImpl(DataContext dataContext) throws NoDataException {
|
||||
Module module = MODULE.getNotNull(dataContext);
|
||||
return module.getModuleFilePath();
|
||||
}
|
||||
};
|
||||
|
||||
private DataAccessors() {
|
||||
}
|
||||
}
|
||||
@@ -16,7 +16,6 @@
|
||||
|
||||
package com.intellij.ide.macro;
|
||||
|
||||
import com.intellij.ide.DataAccessors;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -31,16 +30,7 @@ public final class FileDirMacro extends Macro {
|
||||
}
|
||||
|
||||
public String expand(DataContext dataContext) {
|
||||
//Project project = (Project)dataContext.getData(DataConstants.PROJECT);
|
||||
//if (project == null) return null;
|
||||
//VirtualFile file = (VirtualFile)dataContext.getData(DataConstantsEx.VIRTUAL_FILE);
|
||||
//if (file == null) return null;
|
||||
//if (!file.isDirectory()) {
|
||||
// file = file.getParent();
|
||||
// if (file == null) return null;
|
||||
//}
|
||||
VirtualFile dir = DataAccessors.VIRTUAL_DIR_OR_PARENT.from(dataContext);
|
||||
if (dir == null) return null;
|
||||
return getPath(dir);
|
||||
VirtualFile vFile = getVirtualDirOrParent(dataContext);
|
||||
return vFile != null ? getPath(vFile) : null;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -16,9 +16,9 @@
|
||||
|
||||
package com.intellij.ide.macro;
|
||||
|
||||
import com.intellij.ide.DataAccessors;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.util.io.FileUtil;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
@@ -33,20 +33,12 @@ public class FileRelativeDirMacro extends Macro {
|
||||
}
|
||||
|
||||
public String expand(DataContext dataContext) {
|
||||
//Project project = (Project)dataContext.getData(DataConstants.PROJECT);
|
||||
//if (project == null) return null;
|
||||
//VirtualFile file = (VirtualFile)dataContext.getData(DataConstantsEx.VIRTUAL_FILE);
|
||||
//if (file == null) return null;
|
||||
//if (!file.isDirectory()){
|
||||
// file = file.getParent();
|
||||
// if (file == null) return null;
|
||||
//}
|
||||
final VirtualFile baseDir = DataAccessors.PROJECT_BASE_DIR.from(dataContext);
|
||||
final VirtualFile baseDir = PlatformDataKeys.PROJECT_FILE_DIRECTORY.getData(dataContext);
|
||||
if (baseDir == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
VirtualFile dir = DataAccessors.VIRTUAL_DIR_OR_PARENT.from(dataContext);
|
||||
VirtualFile dir = getVirtualDirOrParent(dataContext);
|
||||
if (dir == null) return null;
|
||||
return FileUtil.getRelativePath(VfsUtil.virtualToIoFile(baseDir), VfsUtil.virtualToIoFile(dir));
|
||||
}
|
||||
|
||||
@@ -17,6 +17,7 @@
|
||||
package com.intellij.ide.macro;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.extensions.ExtensionPointName;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.NonNls;
|
||||
@@ -61,6 +62,15 @@ public abstract class Macro {
|
||||
return new File(getPath(file));
|
||||
}
|
||||
|
||||
@Nullable
|
||||
protected static VirtualFile getVirtualDirOrParent(DataContext dataContext) {
|
||||
VirtualFile vFile = PlatformDataKeys.VIRTUAL_FILE.getData(dataContext);
|
||||
if (vFile != null && !vFile.isDirectory()) {
|
||||
vFile = vFile.getParent();
|
||||
}
|
||||
return vFile;
|
||||
}
|
||||
|
||||
public static class Silent extends Macro {
|
||||
private final Macro myDelegate;
|
||||
private final String myValue;
|
||||
|
||||
@@ -16,9 +16,10 @@
|
||||
|
||||
package com.intellij.ide.macro;
|
||||
|
||||
import com.intellij.ide.DataAccessors;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.LangDataKeys;
|
||||
import com.intellij.openapi.module.Module;
|
||||
|
||||
import java.io.File;
|
||||
|
||||
@@ -32,7 +33,8 @@ public final class ModuleFileDirMacro extends Macro {
|
||||
}
|
||||
|
||||
public String expand(DataContext dataContext) {
|
||||
final String path = DataAccessors.MODULE_FILE_PATH.from(dataContext);
|
||||
final Module module = LangDataKeys.MODULE.getData(dataContext);
|
||||
final String path = module != null ? module.getModuleFilePath() : null;
|
||||
if (path == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -16,9 +16,10 @@
|
||||
|
||||
package com.intellij.ide.macro;
|
||||
|
||||
import com.intellij.ide.DataAccessors;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.LangDataKeys;
|
||||
import com.intellij.openapi.module.Module;
|
||||
|
||||
public final class ModuleFilePathMacro extends Macro {
|
||||
public String getName() {
|
||||
@@ -30,6 +31,7 @@ public final class ModuleFilePathMacro extends Macro {
|
||||
}
|
||||
|
||||
public String expand(DataContext dataContext) {
|
||||
return DataAccessors.MODULE_FILE_PATH.from(dataContext);
|
||||
final Module module = LangDataKeys.MODULE.getData(dataContext);
|
||||
return module != null ? module.getModuleFilePath() : null;
|
||||
}
|
||||
}
|
||||
@@ -16,9 +16,9 @@
|
||||
|
||||
package com.intellij.ide.macro;
|
||||
|
||||
import com.intellij.ide.DataAccessors;
|
||||
import com.intellij.ide.IdeBundle;
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.actionSystem.PlatformDataKeys;
|
||||
import com.intellij.openapi.vfs.VfsUtil;
|
||||
import com.intellij.openapi.vfs.VirtualFile;
|
||||
import org.jetbrains.annotations.Nullable;
|
||||
@@ -34,7 +34,7 @@ public final class ProjectFileDirMacro extends Macro {
|
||||
|
||||
@Nullable
|
||||
public String expand(DataContext dataContext) {
|
||||
final VirtualFile baseDir = DataAccessors.PROJECT_BASE_DIR.from(dataContext);
|
||||
final VirtualFile baseDir = PlatformDataKeys.PROJECT_FILE_DIRECTORY.getData(dataContext);
|
||||
if (baseDir == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@@ -1,121 +0,0 @@
|
||||
/*
|
||||
* Copyright 2000-2009 JetBrains s.r.o.
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
package com.intellij.ide;
|
||||
|
||||
import com.intellij.openapi.actionSystem.DataContext;
|
||||
import com.intellij.openapi.util.Condition;
|
||||
import com.intellij.util.Function;
|
||||
import static com.intellij.util.containers.ContainerUtil.map;
|
||||
import static com.intellij.util.containers.ContainerUtil.skipNulls;
|
||||
|
||||
import java.lang.reflect.Array;
|
||||
import java.util.List;
|
||||
|
||||
public abstract class DataAccessor<T> {
|
||||
|
||||
public final T from(DataContext dataContext) {
|
||||
try {
|
||||
return getNotNull(dataContext);
|
||||
} catch(NoDataException e) {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
protected abstract T getImpl(DataContext dataContext) throws NoDataException;
|
||||
|
||||
public final T getNotNull(DataContext dataContext) throws NoDataException {
|
||||
T data = getImpl(dataContext);
|
||||
if (data == null) throw new NoDataException(toString());
|
||||
return data;
|
||||
}
|
||||
|
||||
public static <T, Original> DataAccessor<T> createConvertor(final DataAccessor<Original> original,
|
||||
final Function<Original, T> convertor) {
|
||||
return new DataAccessor<T>(){
|
||||
public T getImpl(DataContext dataContext) throws NoDataException {
|
||||
return convertor.fun(original.getNotNull(dataContext));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static <T, Original> DataAccessor<T[]> createArrayConvertor(final DataAccessor<Original[]> original, final Function<Original, T> convertor, final Class<T> aClass) {
|
||||
return new DataAccessor<T[]>() {
|
||||
public T[] getImpl(DataContext dataContext) throws NoDataException {
|
||||
List<T> converted = skipNulls(map(original.getNotNull(dataContext), convertor));
|
||||
return converted.toArray((T[])Array.newInstance(aClass, converted.size()));
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
public static <T> DataAccessor<T> createConditionalAccessor(DataAccessor<T> accessor, Condition<T> condition) {
|
||||
return new ConditionalDataAccessor<T>(accessor, condition);
|
||||
}
|
||||
|
||||
public static class SimpleDataAccessor<T> extends DataAccessor<T> {
|
||||
private final String myDataConstant;
|
||||
|
||||
public SimpleDataAccessor(String dataConstant) {
|
||||
myDataConstant = dataConstant;
|
||||
}
|
||||
|
||||
public T getImpl(DataContext dataContext) throws NoDataException {
|
||||
T data = (T)dataContext.getData(myDataConstant);
|
||||
if (data == null) throw new NoDataException(myDataConstant);
|
||||
return data;
|
||||
}
|
||||
}
|
||||
|
||||
public static class SubClassDataAccessor<Super, Sub> extends DataAccessor<Sub> {
|
||||
private final DataAccessor<Super> myOriginal;
|
||||
private final Class<Sub> mySubClass;
|
||||
|
||||
SubClassDataAccessor(DataAccessor<Super> original, Class<Sub> subClass) {
|
||||
myOriginal = original;
|
||||
mySubClass = subClass;
|
||||
}
|
||||
|
||||
public Sub getImpl(DataContext dataContext) throws NoDataException {
|
||||
Object data = myOriginal.getNotNull(dataContext);
|
||||
if (!mySubClass.isInstance(data)) return null;
|
||||
return (Sub)data;
|
||||
}
|
||||
|
||||
public static <Super, Sub extends Super> DataAccessor<Sub> create(DataAccessor<Super> accessor, Class<Sub> subClass) {
|
||||
return new SubClassDataAccessor<Super, Sub>(accessor, subClass);
|
||||
}
|
||||
}
|
||||
|
||||
private static class ConditionalDataAccessor<T> extends DataAccessor<T> {
|
||||
private final DataAccessor<T> myOriginal;
|
||||
private final Condition<T> myCondition;
|
||||
|
||||
public ConditionalDataAccessor(DataAccessor<T> original, Condition<T> condition) {
|
||||
myOriginal = original;
|
||||
myCondition = condition;
|
||||
}
|
||||
|
||||
public T getImpl(DataContext dataContext) throws NoDataException {
|
||||
T value = myOriginal.getNotNull(dataContext);
|
||||
return myCondition.value(value) ? value : null;
|
||||
}
|
||||
}
|
||||
|
||||
public static class NoDataException extends Exception {
|
||||
public NoDataException(String missingData) {
|
||||
super(IdeBundle.message("exception.missing.data", missingData));
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user