如何在Eclipse中创建自定义超链接功能

时间:2012-10-15 17:45:10

标签: eclipse eclipse-plugin hyperlink

我想知道如何在Eclipse UI中创建和实现自定义超链接 - 我不想制作完整的自定义编辑器,如果可能的话 - 只需添加到我当前的ctrl +点击系列的能力字符并自动直接导航到匹配的引用。

我对制作Eclipse插件并不是很熟悉,但我猜这是必需的。

我很喜欢正则表达式,如果有帮助的话。

我想有可能使用某种声明性语法(匹配此模式的文本链接到这些文件中看起来像这样的任何行,或者某些东西)

我想要做的两件事是找到一个基于函数的jsp文件,该函数返回一个匹配其中一个jsp文件的字符串,或者在源代码中找到一个或多个使用特定名称的JavaScript函数(这些看起来它们可能比声明性语法支持的更复杂)

如果已经有一个或多个插件允许我声明这样的“规则”,那也可以,但是关于该主题的一个或多个教程将非常好 - 谢谢!

3 个答案:

答案 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。