我想知道如何在Eclipse UI中创建和实现自定义超链接 - 我不想制作完整的自定义编辑器,如果可能的话 - 只需添加到我当前的ctrl +点击系列的能力字符并自动直接导航到匹配的引用。
我对制作Eclipse插件并不是很熟悉,但我猜这是必需的。
我很喜欢正则表达式,如果有帮助的话。
我想有可能使用某种声明性语法(匹配此模式的文本链接到这些文件中看起来像这样的任何行,或者某些东西)
我想要做的两件事是找到一个基于函数的jsp文件,该函数返回一个匹配其中一个jsp文件的字符串,或者在源代码中找到一个或多个使用特定名称的JavaScript函数(这些看起来它们可能比声明性语法支持的更复杂)
如果已经有一个或多个插件允许我声明这样的“规则”,那也可以,但是关于该主题的一个或多个教程将非常好 - 谢谢!
答案 0 :(得分:2)
您想要实施hyperlink detector。您必须创建一个Eclipse插件,它实现了该扩展点。该扩展点的“class”属性需要指向实现IHyperlinkDetector的类。你最好的选择可能是延长AbstractHyperlinkDetector。
IBM还有一个small tutorial。要小心,从2006年开始,自那时起可能会有一些小的API更改。
答案 1 :(得分:1)
谁发现这就像我一样,但仍然没有让它发挥作用:
使用扩展点为HyperlinkDetectors
定义CustomTextEditor
时,请确保CustomSourceViewerConfiguration
扩展TextSourceViewerConfiguration
,而不仅仅是SourceViewerConfiguration
。
因为这是包含通过扩展点配置HyperlinkDetectors
的注册表调用的类。
要激活它们,此类需要IPreferenceStore
,因此您还必须在构造函数中使用CustomSourceViewerConfiguration
初始化IPreferenceStore
并调用super(iPrefStore);
答案 2 :(得分:0)
maarten的答案部分正确,但您还需要覆盖public class ApplicationDbContext : IdentityDbContext<ApplicationUser, ApplicationRole, string, IdentityUserLogin, IdentityUserRole, IdentityUserClaim>
{
public ApplicationDbContext()
: base("DefaultConnection")
{
}
public DbSet<ApplicationModel> Applications { get; set; }
public DbSet<TokenModel> Tokens { get; set; }
public DbSet<UserApllicationModel> UsersApplications { get; set; }
public DbSet<RoleApllicationModel> RolesApplications { get; set; }
static ApplicationDbContext()
{
// Set the database intializer which is run once during application start
// This seeds the database with admin user credentials and admin role
Database.SetInitializer<ApplicationDbContext>(new ApplicationDbInitializer());
}
public static ApplicationDbContext Create()
{
return new ApplicationDbContext();
}
protected override void OnModelCreating(DbModelBuilder modelBuilder)
{
base.OnModelCreating(modelBuilder);
modelBuilder.Entity<ApplicationUser>().ToTable("SSO_USUARIOS");
modelBuilder.Entity<ApplicationRole>().ToTable("SSO_ROLE");
modelBuilder.Entity<IdentityUserLogin>().ToTable("SSO_USUARIO_LOGINS");
modelBuilder.Entity<IdentityUserRole>().ToTable("SSO_USUARIOS_ROLES");
modelBuilder.Entity<IdentityUserClaim>().ToTable("SSO_USUARIO_CLAIMS");
}
}
孩子的getHyperlinkDetectorTargets()
方法(maarten案例中为TextSourceViewerConfiguration
)。这样的事情:
CustomSourceViewerConfiguration
@Override
protected Map<String, IAdaptable> getHyperlinkDetectorTargets(
ISourceViewer sourceViewer) {
Map<String, IAdaptable> targets =
super.getHyperlinkDetectorTargets(sourceViewer);
targets.put("editortest.editors.MyEditor", edit);
return targets;
}
这是editortest.editors.MyEditor
中定义的目标的ID。该解决方案适用于最新的Eclipse Oxygen。