是否有用于eclipse的插件,可让我从界面快速生成新类?
无需在新的类对话框中进行键入
理想情况下,让我选择一个像Impl这样的标准名称来生成它
我还没有看到执行此操作的任何插件,但是对我来说,这似乎是一个合理的捷径。
以下内容可以构成插件直接从所选接口生成类的基础。它可以在我的box(TM)上使用。
当前假定类将使用带有“ Impl”后缀的接口名称,并且如果该类型已经存在,则失败(记录原因)。
我可以想到的一些增强功能:
该插件向上下文菜单添加了一个用于编辑器,视图和文本选择的命令,如果选择不能解析为界面,则禁用该项目。也可以使用激活它ctrl-6
(您显然可以更改plugin.xml中的键绑定以适合您的心情)。
插件代码如下:
package name.seller.rich.classwizard.actions;
import java.util.Collections;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.expressions.EvaluationContext;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.jdt.core.ICompilationUnit;
import org.eclipse.jdt.core.IJavaElement;
import org.eclipse.jdt.core.IType;
import org.eclipse.jdt.core.JavaModelException;
import org.eclipse.jdt.internal.ui.JavaPlugin;
import org.eclipse.jdt.internal.ui.actions.SelectionConverter;
import org.eclipse.jdt.ui.wizards.NewClassWizardPage;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.IWorkbenchPart;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.handlers.HandlerUtil;
import org.eclipse.ui.ide.IDE;
import org.eclipse.ui.wizards.newresource.BasicNewResourceWizard;
public class GenerateClassHandler extends AbstractHandler {
public GenerateClassHandler() {
}
public Object execute(ExecutionEvent event) throws ExecutionException {
NewClassWizardPage page = new NewClassWizardPage();
EvaluationContext evaluationContext = (EvaluationContext) event
.getApplicationContext();
IWorkbenchPart activePart = (IWorkbenchPart) evaluationContext
.getVariable("activePart");
try {
IStructuredSelection selection = SelectionConverter
.getStructuredSelection(activePart);
IType type = getFirstType(selection);
if (type != null && type.exists() && type.isInterface()) {
page.init(selection);
String typeName = type.getElementName() + "Impl";
// TODO handle existing type
page.setTypeName(typeName, true);
// generate constructors and methods, allow modification
page.setMethodStubSelection(false, true, true, true);
page.setSuperInterfaces(Collections.singletonList(type
.getFullyQualifiedName()), true);
try {
page.createType(new NullProgressMonitor());
IResource resource = page.getModifiedResource();
if (resource != null) {
IWorkbenchWindow window = HandlerUtil
.getActiveWorkbenchWindowChecked(event);
BasicNewResourceWizard
.selectAndReveal(resource, window);
openResource((IFile) resource, window);
}
} catch (CoreException e) {
// TODO if we get this the type already exists, open a
// dialogue to allow the type name to be modified or give
// up?
logException(e);
}
}
} catch (JavaModelException e) {
logException(e);
} catch (InterruptedException e) {
logException(e);
}
return null;
}
protected void openResource(final IFile resource,
IWorkbenchWindow window) {
final IWorkbenchPage activePage = window.getActivePage();
if (activePage != null) {
final Display display = window.getShell().getDisplay();
if (display != null) {
display.asyncExec(new Runnable() {
public void run() {
try {
IDE.openEditor(activePage, resource, true);
} catch (PartInitException e) {
logException(e);
}
}
});
}
}
}
@Override
public void setEnabled(Object context) {
if (context != null && context instanceof EvaluationContext) {
EvaluationContext evaluationContext = (EvaluationContext) context;
IWorkbenchPart activePart = (IWorkbenchPart) evaluationContext
.getVariable("activePart");
try {
IStructuredSelection selection = SelectionConverter
.getStructuredSelection(activePart);
IType type = getFirstType(selection);
if (type != null) {
setBaseEnabled(type.isInterface());
return;
}
} catch (JavaModelException e) {
logException(e);
}
}
setBaseEnabled(false);
}
private IType getFirstType(IStructuredSelection selection) {
IJavaElement[] elements = SelectionConverter.getElements(selection);
if (elements != null && elements.length > 0) {
if (elements[0] != null && elements[0] instanceof IType) {
return (IType) elements[0];
}
try {
if (elements[0] != null
&& elements[0] instanceof ICompilationUnit) {
IType[] types = ((ICompilationUnit) elements[0])
.getAllTypes();
if (types != null && types.length > 0) {
return types[0];
}
}
} catch (JavaModelException e) {
logException(e);
}
}
return null;
}
protected void logException(Exception e) {
JavaPlugin.log(e);
}
}
贡献命令的plugin.xml是:
<?xml version="1.0" encoding="UTF-8"?>
<?eclipse version="3.0"?>
<plugin>
<extension
point="org.eclipse.ui.commands">
<command
name="Generate Class"
categoryId="name.seller.rich.classwizard.category"
id="name.seller.rich.classwizard.generateClassCommand">
</command>
</extension>
<extension
point="org.eclipse.ui.handlers">
<handler
commandId="name.seller.rich.classwizard.generateClassCommand"
class="name.seller.rich.classwizard.actions.GenerateClassHandler">
</handler>
</extension>
<extension
point="org.eclipse.ui.bindings">
<key
commandId="name.seller.rich.classwizard.generateClassCommand"
contextId="org.eclipse.ui.contexts.window"
sequence="M1+6"
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration">
</key>
</extension>
<extension
point="org.eclipse.ui.menus">
<menuContribution
locationURI="popup:org.eclipse.ui.popup.any?after=additions">
<command
commandId="name.seller.rich.classwizard.generateClassCommand"
mnemonic="G">
</command>
</menuContribution>
</extension>
</plugin>
manifest.mf如下所示:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Classwizard
Bundle-SymbolicName: name.seller.rich.classwizard; singleton:=true
Bundle-Version: 1.0.0
Require-Bundle: org.eclipse.ui,
org.eclipse.core.runtime,
org.eclipse.jdt.core;bundle-version="3.5.0",
org.eclipse.core.expressions;bundle-version="3.4.100",
org.eclipse.jface.text;bundle-version="3.5.0",
org.eclipse.jdt.ui;bundle-version="3.5.0",
org.eclipse.ui.ide;bundle-version="3.5.0",
org.eclipse.ui.editors;bundle-version="3.5.0",
org.eclipse.core.resources;bundle-version="3.5.0"
Eclipse-AutoStart: true
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
问题内容: 我想快速创建一个像这样的json: 如何创建此json? 问题答案: 创建您的对象,在这种情况下为字典: 从对象创建JSON数据: 如果需要,请使用JSON数据作为字符串:
我无法创建正确的对象。我有一个存储时间的日历。例如,他想要一个时间表来保存这样一个物体 如何,点击保存按钮后,发送这样一个对象到: 接口: https://stackblitz.com/edit/angular-ivy-e92ezv?file=src/app/app.component.ts
问题内容: 我真的是Swift的新手,我刚刚读到类是通过引用传递的,并且复制了数组/字符串等。 通过引用进行传递是否与在Objective-C或Java中通过“ a”引用进行传递的方式相同,还是通过引用进行正确传递? 问题答案: Swift中的事物类型 规则是: 类实例是 引用类型 (即, 您 对类实例的引用实际上是一个 指针 ) 函数是参考类型 其他一切都是 价值类型 ; “其他所有内容”仅表示
问题内容: 今天,我和一个朋友吵了一架,他声称可以创建接口对象。当我说这不可能的时候,他给我看了下面的代码,看起来与匿名类相似。现在的问题是,正确的答案是什么? 这真的可以称为创建接口“对象”吗? 问题答案: 不,这是创建实现该接口的匿名类的实例。 这是Java语言规范第15.9节中的明确答案: 不合格和合格的类实例创建表达式都可以选择以类主体结尾。这样的类实例创建表达式声明一个匿名类(第15.9
本文向大家介绍bootstrap快速制作后台界面,包括了bootstrap快速制作后台界面的使用技巧和注意事项,需要的朋友参考一下 最近看了bootstrap的一个小的视频,快速的做出一个后台界面;介绍了一些典型的用法; 里面涉及了: 下拉菜单、胶囊菜单、胶囊菜单垂直显示、栅格排列、导航栏、字体图标、 图片样式、输入组、折叠菜单panel、面包屑、表格样式、分页组件样式; 下面将跟着项目做出的小例
主要内容:Eclipse 快速修复Eclipse 快速修复 当您在 Eclipse 编辑器中键入字符时,它会分析文档内容中是否存在潜在的错误和警告。java 编辑器使用 java 语法来检测代码中的错误。当它发现错误或警告时: 使用红色波浪线突出显示错误。 使用黄色波浪线突出显示警告。 显示错误和警告问题 向垂直标尺添加带有警告标志或错误标志的灯泡。 快速修复对话框提供了可能更正的列表。可以通过以下方式调用快速修复对话框 将鼠标