1 /*******************************************************************************
2 * Copyright (c) 2000, 2009 IBM Corporation and others.
3 * All rights reserved. This program and the accompanying materials
4 * are made available under the terms of the Eclipse Public License v1.0
5 * which accompanies this distribution, and is available at
6 * http://www.eclipse.org/legal/epl-v10.html
9 * IBM Corporation - initial API and implementation
10 *******************************************************************************/
12 package org.eclipse.jdt.internal.ui.javaeditor;
14 import org.eclipse.jface.text.IRegion;
15 import org.eclipse.jface.text.ITextViewer;
16 import org.eclipse.jface.text.Region;
17 import org.eclipse.jface.text.hyperlink.AbstractHyperlinkDetector;
18 import org.eclipse.jface.text.hyperlink.IHyperlink;
20 import org.eclipse.ui.IEditorSite;
22 import org.eclipse.ui.texteditor.ITextEditor;
24 import org.eclipse.jdt.core.ITypeRoot;
25 import org.eclipse.jdt.core.dom.ASTNode;
26 import org.eclipse.jdt.core.dom.CompilationUnit;
27 import org.eclipse.jdt.core.dom.NodeFinder;
28 import org.eclipse.jdt.core.dom.QualifiedName;
29 import org.eclipse.jdt.core.dom.SimpleName;
30 import org.eclipse.jdt.core.dom.StringLiteral;
32 import org.eclipse.jdt.internal.corext.refactoring.nls.AccessorClassReference;
33 import org.eclipse.jdt.internal.corext.refactoring.nls.NLSHintHelper;
35 import org.eclipse.jdt.ui.JavaUI;
36 import org.eclipse.jdt.ui.SharedASTProvider;
41 * NLS hyperlink detector.
45 public class NLSKeyHyperlinkDetector extends AbstractHyperlinkDetector {
49 * @see org.eclipse.jface.text.hyperlink.IHyperlinkDetector#detectHyperlinks(org.eclipse.jface.text.ITextViewer, org.eclipse.jface.text.IRegion, boolean)
51 public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
52 ITextEditor textEditor= (ITextEditor)getAdapter(ITextEditor.class);
53 if (region == null || textEditor == null)
56 IEditorSite site= textEditor.getEditorSite();
60 ITypeRoot javaElement= getInputJavaElement(textEditor);
61 if (javaElement == null)
64 CompilationUnit ast= SharedASTProvider.getAST(javaElement, SharedASTProvider.WAIT_NO, null);
68 ASTNode node= NodeFinder.perform(ast, region.getOffset(), 1);
69 if (!(node instanceof StringLiteral) && !(node instanceof SimpleName))
72 if (node.getLocationInParent() == QualifiedName.QUALIFIER_PROPERTY)
75 IRegion nlsKeyRegion= new Region(node.getStartPosition(), node.getLength());
76 AccessorClassReference ref= NLSHintHelper.getAccessorClassReference(ast, nlsKeyRegion);
80 if (node instanceof StringLiteral) {
81 keyName= ((StringLiteral)node).getLiteralValue();
83 keyName= ((SimpleName)node).getIdentifier();
86 return new IHyperlink[] {new NLSKeyHyperlink(nlsKeyRegion, keyName, ref, textEditor)};
91 private ITypeRoot getInputJavaElement(ITextEditor editor) {
92 return JavaUI.getEditorInputTypeRoot(editor.getEditorInput());