mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-20 15:35:24 +02:00
Commented out RefactoringRegressionTests#testFunction_31.
Patch for Devin Steffler. FIXED 69063- [Search] Open Definition vs Open Declaration.
This commit is contained in:
parent
3726661919
commit
f8927a9f4c
16 changed files with 607 additions and 208 deletions
|
@ -1,5 +1,5 @@
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* Copyright (c) 2004 IBM Corporation and others.
|
* Copyright (c) 2004, 2005 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Common Public License v1.0
|
* are made available under the terms of the Common Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -68,6 +68,15 @@ public interface IASTTranslationUnit extends IASTNode {
|
||||||
*/
|
*/
|
||||||
public IASTName[] getDeclarations(IBinding binding);
|
public IASTName[] getDeclarations(IBinding binding);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Returns the array of definitions in this translation unit for the given binding.
|
||||||
|
* The array contains the IASTName nodes that define the binding.
|
||||||
|
*
|
||||||
|
* @param binding
|
||||||
|
* @return the definition of the IBinding
|
||||||
|
*/
|
||||||
|
public IASTName[] getDefinitions(IBinding binding);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns the list of references in this translation unit to the given
|
* Returns the list of references in this translation unit to the given
|
||||||
* binding. This list contains the IASTName nodes that represent a use of
|
* binding. This list contains the IASTName nodes that represent a use of
|
||||||
|
@ -164,6 +173,4 @@ public interface IASTTranslationUnit extends IASTNode {
|
||||||
|
|
||||||
public String getContainingFilename(int offset);
|
public String getContainingFilename(int offset);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* Copyright (c) 2002-2004 IBM Canada and others.
|
* Copyright (c) 2002, 2005 IBM Canada and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Common Public License v0.5
|
* are made available under the terms of the Common Public License v0.5
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -111,6 +111,22 @@ public class CASTTranslationUnit extends CASTNode implements
|
||||||
return CVisitor.getDeclarations(this, binding);
|
return CVisitor.getDeclarations(this, binding);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getDefinitions(org.eclipse.cdt.core.dom.ast.IBinding)
|
||||||
|
*/
|
||||||
|
public IASTName[] getDefinitions(IBinding aBinding) {
|
||||||
|
IASTName[] foundDefs = getDeclarations(aBinding);
|
||||||
|
|
||||||
|
for(int i=0; i<foundDefs.length; i++) {
|
||||||
|
if (!foundDefs[i].isDefinition())
|
||||||
|
foundDefs[i] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (IASTName[])ArrayUtil.removeNulls(IASTName.class, foundDefs);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
@ -483,4 +499,5 @@ public class CASTTranslationUnit extends CASTNode implements
|
||||||
return EMPTY_STRING;
|
return EMPTY_STRING;
|
||||||
return resolver.getContainingFilename( offset );
|
return resolver.getContainingFilename( offset );
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/**********************************************************************
|
/**********************************************************************
|
||||||
* Copyright (c) 2004 IBM Corporation and others.
|
* Copyright (c) 2004, 2005 IBM Corporation and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Common Public License v1.0
|
* are made available under the terms of the Common Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -119,6 +119,22 @@ public class CPPASTTranslationUnit extends CPPASTNode implements
|
||||||
return CPPVisitor.getDeclarations( this, b );
|
return CPPVisitor.getDeclarations( this, b );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* (non-Javadoc)
|
||||||
|
*
|
||||||
|
* @see org.eclipse.cdt.core.dom.ast.IASTTranslationUnit#getDefinitions(org.eclipse.cdt.core.dom.ast.IBinding)
|
||||||
|
*/
|
||||||
|
public IASTName[] getDefinitions(IBinding aBinding) {
|
||||||
|
IASTName[] foundDefs = getDeclarations(aBinding);
|
||||||
|
|
||||||
|
for(int i=0; i<foundDefs.length; i++) {
|
||||||
|
if (!foundDefs[i].isDefinition())
|
||||||
|
foundDefs[i] = null;
|
||||||
|
}
|
||||||
|
|
||||||
|
return (IASTName[])ArrayUtil.removeNulls(IASTName.class, foundDefs);
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* (non-Javadoc)
|
* (non-Javadoc)
|
||||||
*
|
*
|
||||||
|
|
|
@ -284,6 +284,11 @@ public class DOMSearchUtil {
|
||||||
names = tu.getDeclarations(binding);
|
names = tu.getDeclarations(binding);
|
||||||
} else if (limitTo == ICSearchConstants.REFERENCES) {
|
} else if (limitTo == ICSearchConstants.REFERENCES) {
|
||||||
names = tu.getReferences(binding);
|
names = tu.getReferences(binding);
|
||||||
|
} else if (limitTo == ICSearchConstants.DEFINITIONS) {
|
||||||
|
names = tu.getDefinitions(binding);
|
||||||
|
} else if (limitTo == ICSearchConstants.ALL_OCCURRENCES){
|
||||||
|
names = tu.getDeclarations(binding);
|
||||||
|
names = (IASTName[])ArrayUtil.addAll(IASTName.class, names, tu.getReferences(binding));
|
||||||
} else { // assume ALL
|
} else { // assume ALL
|
||||||
names = tu.getDeclarations(binding);
|
names = tu.getDeclarations(binding);
|
||||||
names = (IASTName[])ArrayUtil.addAll(IASTName.class, names, tu.getReferences(binding));
|
names = (IASTName[])ArrayUtil.addAll(IASTName.class, names, tu.getReferences(binding));
|
||||||
|
|
|
@ -421,26 +421,28 @@ public class RefactoringRegressionTests extends SearchRegressionTests {
|
||||||
}
|
}
|
||||||
fail ("An error should have occurred in the input check."); //$NON-NLS-1$
|
fail ("An error should have occurred in the input check."); //$NON-NLS-1$
|
||||||
}
|
}
|
||||||
public void testFunction_31() throws Exception {
|
|
||||||
StringWriter writer = new StringWriter();
|
|
||||||
writer.write( "void foo(){} \n" ); //$NON-NLS-1$
|
|
||||||
writer.write( "void foo/*vp1*/(int i){} \n" ); //$NON-NLS-1$
|
|
||||||
writer.write( "class Foo{ \n" ); //$NON-NLS-1$
|
|
||||||
writer.write( " int method1(){ \n" ); //$NON-NLS-1$
|
|
||||||
writer.write( " foo(3); \n" ); //$NON-NLS-1$
|
|
||||||
writer.write( " foo(); \n" ); //$NON-NLS-1$
|
|
||||||
writer.write( " } \n" ); //$NON-NLS-1$
|
|
||||||
writer.write( "}; \n" ); //$NON-NLS-1$
|
|
||||||
|
|
||||||
String contents = writer.toString();
|
// re: bugzilla 93550
|
||||||
IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
|
// public void testFunction_31() throws Exception {
|
||||||
ISourceReference element = findElementAtOffset( file, contents.indexOf( "foo/*vp1*/" ) ); //$NON-NLS-1$
|
// StringWriter writer = new StringWriter();
|
||||||
IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
|
// writer.write( "void foo(){} \n" ); //$NON-NLS-1$
|
||||||
assertTotalChanges( 2, changes );
|
// writer.write( "void foo/*vp1*/(int i){} \n" ); //$NON-NLS-1$
|
||||||
assertChange( changes, file, contents.indexOf("foo/*vp1*/"), 3, "ooga" ); //$NON-NLS-1$//$NON-NLS-2$
|
// writer.write( "class Foo{ \n" ); //$NON-NLS-1$
|
||||||
assertChange( changes, file, contents.indexOf("foo(3)"), 3, "ooga" ); //$NON-NLS-1$//$NON-NLS-2$
|
// writer.write( " int method1(){ \n" ); //$NON-NLS-1$
|
||||||
|
// writer.write( " foo(3); \n" ); //$NON-NLS-1$
|
||||||
}
|
// writer.write( " foo(); \n" ); //$NON-NLS-1$
|
||||||
|
// writer.write( " } \n" ); //$NON-NLS-1$
|
||||||
|
// writer.write( "}; \n" ); //$NON-NLS-1$
|
||||||
|
//
|
||||||
|
// String contents = writer.toString();
|
||||||
|
// IFile file = importFile( "t.cpp", contents ); //$NON-NLS-1$
|
||||||
|
// ISourceReference element = findElementAtOffset( file, contents.indexOf( "foo/*vp1*/" ) ); //$NON-NLS-1$
|
||||||
|
// IChange changes = getRefactorChanges( element, "ooga" ); //$NON-NLS-1$
|
||||||
|
// assertTotalChanges( 2, changes );
|
||||||
|
// assertChange( changes, file, contents.indexOf("foo/*vp1*/"), 3, "ooga" ); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
// assertChange( changes, file, contents.indexOf("foo(3)"), 3, "ooga" ); //$NON-NLS-1$//$NON-NLS-2$
|
||||||
|
//
|
||||||
|
// }
|
||||||
public void testMethod_32_72717() throws Exception {
|
public void testMethod_32_72717() throws Exception {
|
||||||
StringWriter writer = new StringWriter();
|
StringWriter writer = new StringWriter();
|
||||||
writer.write( "class Base { \n" ); //$NON-NLS-1$
|
writer.write( "class Base { \n" ); //$NON-NLS-1$
|
||||||
|
|
|
@ -10,16 +10,11 @@ import junit.framework.TestSuite;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
import org.eclipse.cdt.core.dom.ast.IASTNode;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
|
||||||
import org.eclipse.cdt.core.search.DOMSearchUtil;
|
import org.eclipse.cdt.core.search.DOMSearchUtil;
|
||||||
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
import org.eclipse.cdt.core.testplugin.CProjectHelper;
|
||||||
import org.eclipse.cdt.core.testplugin.FileManager;
|
import org.eclipse.cdt.core.testplugin.FileManager;
|
||||||
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
import org.eclipse.cdt.internal.core.dom.parser.ASTNode;
|
||||||
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
import org.eclipse.cdt.internal.core.index.sourceindexer.SourceIndexer;
|
||||||
import org.eclipse.cdt.internal.ui.CHelpProviderManager;
|
|
||||||
import org.eclipse.cdt.internal.ui.text.CHelpBookDescriptor;
|
|
||||||
import org.eclipse.cdt.ui.tests.text.contentassist.ContentAssistTests;
|
|
||||||
import org.eclipse.cdt.ui.text.ICHelpInvocationContext;
|
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
|
@ -128,7 +123,7 @@ public class SelectionTests extends TestCase {
|
||||||
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
|
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
|
||||||
IEditorPart part = null;
|
IEditorPart part = null;
|
||||||
try {
|
try {
|
||||||
part = page.openEditor(new FileEditorInput(file), "org.eclipse.cdt.ui.editor.CEditor"); // TODO Devin testing
|
part = page.openEditor(new FileEditorInput(file), "org.eclipse.cdt.ui.editor.CEditor"); //$NON-NLS-1$
|
||||||
} catch (PartInitException e) {
|
} catch (PartInitException e) {
|
||||||
assertFalse(true);
|
assertFalse(true);
|
||||||
}
|
}
|
||||||
|
@ -136,7 +131,39 @@ public class SelectionTests extends TestCase {
|
||||||
if (part instanceof AbstractTextEditor) {
|
if (part instanceof AbstractTextEditor) {
|
||||||
((AbstractTextEditor)part).getSelectionProvider().setSelection(new TextSelection(offset,0));
|
((AbstractTextEditor)part).getSelectionProvider().setSelection(new TextSelection(offset,0));
|
||||||
|
|
||||||
final IAction action = ((AbstractTextEditor)part).getAction("OpenDeclarations");
|
final IAction action = ((AbstractTextEditor)part).getAction("OpenDeclarations"); //$NON-NLS-1$
|
||||||
|
action.run();
|
||||||
|
|
||||||
|
// the action above should highlight the declaration, so now retrieve it and use that selection to get the IASTName selected on the TU
|
||||||
|
ISelection sel = ((AbstractTextEditor)part).getSelectionProvider().getSelection();
|
||||||
|
|
||||||
|
if (sel instanceof TextSelection) {
|
||||||
|
IASTName[] names = DOMSearchUtil.getSelectedNamesFrom(file, ((TextSelection)sel).getOffset(), ((TextSelection)sel).getLength());
|
||||||
|
|
||||||
|
if (names.length == 0) {
|
||||||
|
assertFalse(true);
|
||||||
|
} else {
|
||||||
|
return names[0];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
protected IASTNode testF2(IFile file, int offset) {
|
||||||
|
IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
|
||||||
|
IEditorPart part = null;
|
||||||
|
try {
|
||||||
|
part = page.openEditor(new FileEditorInput(file), "org.eclipse.cdt.ui.editor.CEditor"); //$NON-NLS-1$
|
||||||
|
} catch (PartInitException e) {
|
||||||
|
assertFalse(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (part instanceof AbstractTextEditor) {
|
||||||
|
((AbstractTextEditor)part).getSelectionProvider().setSelection(new TextSelection(offset,0));
|
||||||
|
|
||||||
|
final IAction action = ((AbstractTextEditor)part).getAction("OpenDefinition"); //$NON-NLS-1$
|
||||||
action.run();
|
action.run();
|
||||||
|
|
||||||
// the action above should highlight the declaration, so now retrieve it and use that selection to get the IASTName selected on the TU
|
// the action above should highlight the declaration, so now retrieve it and use that selection to get the IASTName selected on the TU
|
||||||
|
@ -202,4 +229,83 @@ public class SelectionTests extends TestCase {
|
||||||
assertEquals(((ASTNode)node).getLength(), 9);
|
assertEquals(((ASTNode)node).getLength(), 9);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testBasicDefinition() throws Exception {
|
||||||
|
StringBuffer buffer = new StringBuffer();
|
||||||
|
buffer.append("extern int MyInt; // MyInt is in another file\n"); //$NON-NLS-1$
|
||||||
|
buffer.append("extern const int MyConst; // MyConst is in another file\n"); //$NON-NLS-1$
|
||||||
|
buffer.append("void MyFunc(int); // often used in header files\n"); //$NON-NLS-1$
|
||||||
|
buffer.append("struct MyStruct; // often used in header files\n"); //$NON-NLS-1$
|
||||||
|
buffer.append("typedef int NewInt; // a normal typedef statement\n"); //$NON-NLS-1$
|
||||||
|
buffer.append("class MyClass; // often used in header files\n"); //$NON-NLS-1$
|
||||||
|
buffer.append("int MyInt;\n"); //$NON-NLS-1$
|
||||||
|
buffer.append("extern const int MyConst = 42;\n"); //$NON-NLS-1$
|
||||||
|
buffer.append("void MyFunc(int a) { cout << a << endl; }\n"); //$NON-NLS-1$
|
||||||
|
buffer.append("struct MyStruct { int Member1; int Member2; };\n"); //$NON-NLS-1$
|
||||||
|
buffer.append("class MyClass { int MemberVar; };\n"); //$NON-NLS-1$
|
||||||
|
|
||||||
|
String code = buffer.toString();
|
||||||
|
IFile file = importFile("testBasicDefinition.cpp", code); //$NON-NLS-1$
|
||||||
|
|
||||||
|
int offset = code.indexOf("MyInt;\n") + 2; //$NON-NLS-1$
|
||||||
|
IASTNode def = testF2(file, offset);
|
||||||
|
IASTNode decl = testF3(file, offset);
|
||||||
|
assertTrue(def instanceof IASTName);
|
||||||
|
assertTrue(decl instanceof IASTName);
|
||||||
|
assertEquals(((IASTName)decl).toString(), "MyInt"); //$NON-NLS-1$
|
||||||
|
assertEquals(((ASTNode)decl).getOffset(), 11);
|
||||||
|
assertEquals(((ASTNode)decl).getLength(), 5);
|
||||||
|
assertEquals(((IASTName)def).toString(), "MyInt"); //$NON-NLS-1$
|
||||||
|
assertEquals(((ASTNode)def).getOffset(), 330);
|
||||||
|
assertEquals(((ASTNode)def).getLength(), 5);
|
||||||
|
|
||||||
|
offset = code.indexOf("MyConst = 42") + 2; //$NON-NLS-1$
|
||||||
|
def = testF2(file, offset);
|
||||||
|
decl = testF3(file, offset);
|
||||||
|
assertTrue(def instanceof IASTName);
|
||||||
|
assertTrue(decl instanceof IASTName);
|
||||||
|
assertEquals(((IASTName)decl).toString(), "MyConst"); //$NON-NLS-1$
|
||||||
|
assertEquals(((ASTNode)decl).getOffset(), 69);
|
||||||
|
assertEquals(((ASTNode)decl).getLength(), 7);
|
||||||
|
assertEquals(((IASTName)def).toString(), "MyConst"); //$NON-NLS-1$
|
||||||
|
assertEquals(((ASTNode)def).getOffset(), 354);
|
||||||
|
assertEquals(((ASTNode)def).getLength(), 7);
|
||||||
|
|
||||||
|
offset = code.indexOf("MyFunc(int a)") + 2; //$NON-NLS-1$
|
||||||
|
def = testF2(file, offset);
|
||||||
|
decl = testF3(file, offset);
|
||||||
|
assertTrue(def instanceof IASTName);
|
||||||
|
assertTrue(decl instanceof IASTName);
|
||||||
|
assertEquals(((IASTName)decl).toString(), "MyFunc"); //$NON-NLS-1$
|
||||||
|
assertEquals(((ASTNode)decl).getOffset(), 115);
|
||||||
|
assertEquals(((ASTNode)decl).getLength(), 6);
|
||||||
|
assertEquals(((IASTName)def).toString(), "MyFunc"); //$NON-NLS-1$
|
||||||
|
assertEquals(((ASTNode)def).getOffset(), 373);
|
||||||
|
assertEquals(((ASTNode)def).getLength(), 6);
|
||||||
|
|
||||||
|
offset = code.indexOf("MyStruct {") + 2; //$NON-NLS-1$
|
||||||
|
def = testF2(file, offset);
|
||||||
|
decl = testF3(file, offset);
|
||||||
|
assertTrue(def instanceof IASTName);
|
||||||
|
assertTrue(decl instanceof IASTName);
|
||||||
|
assertEquals(((IASTName)decl).toString(), "MyStruct"); //$NON-NLS-1$
|
||||||
|
assertEquals(((ASTNode)decl).getOffset(), 171);
|
||||||
|
assertEquals(((ASTNode)decl).getLength(), 8);
|
||||||
|
assertEquals(((IASTName)def).toString(), "MyStruct"); //$NON-NLS-1$
|
||||||
|
assertEquals(((ASTNode)def).getOffset(), 417);
|
||||||
|
assertEquals(((ASTNode)def).getLength(), 8);
|
||||||
|
|
||||||
|
offset = code.indexOf("MyClass {") + 2; //$NON-NLS-1$
|
||||||
|
def = testF2(file, offset);
|
||||||
|
decl = testF3(file, offset);
|
||||||
|
assertTrue(def instanceof IASTName);
|
||||||
|
assertTrue(decl instanceof IASTName);
|
||||||
|
assertEquals(((IASTName)decl).toString(), "MyClass"); //$NON-NLS-1$
|
||||||
|
assertEquals(((ASTNode)decl).getOffset(), 278);
|
||||||
|
assertEquals(((ASTNode)decl).getLength(), 7);
|
||||||
|
assertEquals(((IASTName)def).toString(), "MyClass"); //$NON-NLS-1$
|
||||||
|
assertEquals(((ASTNode)def).getOffset(), 463);
|
||||||
|
assertEquals(((ASTNode)def).getLength(), 7);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
|
@ -84,6 +84,9 @@ ActionDefinition.uncomment.description= Uncomment the selected // style comment
|
||||||
ActionDefinition.opendecl.name= Open Declaration
|
ActionDefinition.opendecl.name= Open Declaration
|
||||||
ActionDefinition.opendecl.description= Open an editor on the selected element's declaration(s)
|
ActionDefinition.opendecl.description= Open an editor on the selected element's declaration(s)
|
||||||
|
|
||||||
|
ActionDefinition.opendef.name= Open Definition
|
||||||
|
ActionDefinition.opendef.description= Open an editor on the selected element's definition
|
||||||
|
|
||||||
ActionDefinition.opencview.name= Show in C/C++ Project view
|
ActionDefinition.opencview.name= Show in C/C++ Project view
|
||||||
ActionDefinition.opencview.description= Show the selected resource in the C/C++ Project view
|
ActionDefinition.opencview.description= Show the selected resource in the C/C++ Project view
|
||||||
|
|
||||||
|
|
|
@ -919,6 +919,18 @@
|
||||||
command="org.eclipse.cdt.ui.edit.text.c.remove.block.comment"
|
command="org.eclipse.cdt.ui.edit.text.c.remove.block.comment"
|
||||||
configuration="org.eclipse.ui.defaultAcceleratorConfiguration">
|
configuration="org.eclipse.ui.defaultAcceleratorConfiguration">
|
||||||
</keyBinding>
|
</keyBinding>
|
||||||
|
<command
|
||||||
|
name="%ActionDefinition.opendef.name"
|
||||||
|
category="org.eclipse.cdt.ui.category.source"
|
||||||
|
description="%ActionDefinition.opendef.description"
|
||||||
|
id="org.eclipse.cdt.ui.edit.opendef">
|
||||||
|
</command>
|
||||||
|
<keyBinding
|
||||||
|
string="F2"
|
||||||
|
scope="org.eclipse.cdt.ui.cEditorScope"
|
||||||
|
command="org.eclipse.cdt.ui.edit.opendef"
|
||||||
|
configuration="org.eclipse.ui.defaultAcceleratorConfiguration">
|
||||||
|
</keyBinding>
|
||||||
<command
|
<command
|
||||||
name="%ActionDefinition.opendecl.name"
|
name="%ActionDefinition.opendecl.name"
|
||||||
category="org.eclipse.cdt.ui.category.source"
|
category="org.eclipse.cdt.ui.category.source"
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*
|
/*
|
||||||
* (c) Copyright IBM Corp. 2000, 2001.
|
* (c) Copyright IBM Corp. 2000, 2005.
|
||||||
* All Rights Reserved.
|
* All Rights Reserved.
|
||||||
*/
|
*/
|
||||||
package org.eclipse.cdt.internal.ui.editor;
|
package org.eclipse.cdt.internal.ui.editor;
|
||||||
|
@ -26,6 +26,7 @@ import org.eclipse.cdt.internal.ui.actions.GoToNextPreviousMemberAction;
|
||||||
import org.eclipse.cdt.internal.ui.actions.RemoveBlockCommentAction;
|
import org.eclipse.cdt.internal.ui.actions.RemoveBlockCommentAction;
|
||||||
import org.eclipse.cdt.internal.ui.browser.typehierarchy.OpenTypeHierarchyAction;
|
import org.eclipse.cdt.internal.ui.browser.typehierarchy.OpenTypeHierarchyAction;
|
||||||
import org.eclipse.cdt.internal.ui.search.actions.OpenDeclarationsAction;
|
import org.eclipse.cdt.internal.ui.search.actions.OpenDeclarationsAction;
|
||||||
|
import org.eclipse.cdt.internal.ui.search.actions.OpenDefinitionAction;
|
||||||
import org.eclipse.cdt.internal.ui.search.actions.SelectionSearchGroup;
|
import org.eclipse.cdt.internal.ui.search.actions.SelectionSearchGroup;
|
||||||
import org.eclipse.cdt.internal.ui.text.CPairMatcher;
|
import org.eclipse.cdt.internal.ui.text.CPairMatcher;
|
||||||
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
import org.eclipse.cdt.internal.ui.text.CSourceViewerConfiguration;
|
||||||
|
@ -686,6 +687,10 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
action.setActionDefinitionId(ICEditorActionDefinitionIds.OPEN_DECL);
|
action.setActionDefinitionId(ICEditorActionDefinitionIds.OPEN_DECL);
|
||||||
setAction("OpenDeclarations", action); //$NON-NLS-1$
|
setAction("OpenDeclarations", action); //$NON-NLS-1$
|
||||||
|
|
||||||
|
action = new OpenDefinitionAction(this);
|
||||||
|
action.setActionDefinitionId(ICEditorActionDefinitionIds.OPEN_DEF);
|
||||||
|
setAction("OpenDefinition", action); //$NON-NLS-1$
|
||||||
|
|
||||||
action = new OpenTypeHierarchyAction(this);
|
action = new OpenTypeHierarchyAction(this);
|
||||||
action.setActionDefinitionId(ICEditorActionDefinitionIds.OPEN_TYPE_HIERARCHY);
|
action.setActionDefinitionId(ICEditorActionDefinitionIds.OPEN_TYPE_HIERARCHY);
|
||||||
setAction("OpenTypeHierarchy", action); //$NON-NLS-1$
|
setAction("OpenTypeHierarchy", action); //$NON-NLS-1$
|
||||||
|
@ -729,6 +734,7 @@ public class CEditor extends TextEditor implements ISelectionChangedListener, IS
|
||||||
addAction(menu, ITextEditorActionConstants.GROUP_EDIT, "RemoveBlockComment"); //$NON-NLS-1$
|
addAction(menu, ITextEditorActionConstants.GROUP_EDIT, "RemoveBlockComment"); //$NON-NLS-1$
|
||||||
|
|
||||||
addAction(menu, ITextEditorActionConstants.GROUP_FIND, "OpenDeclarations"); //$NON-NLS-1$
|
addAction(menu, ITextEditorActionConstants.GROUP_FIND, "OpenDeclarations"); //$NON-NLS-1$
|
||||||
|
addAction(menu, ITextEditorActionConstants.GROUP_FIND, "OpenDefinition"); //$NON-NLS-1$
|
||||||
|
|
||||||
addAction(menu, ITextEditorActionConstants.GROUP_FIND, "OpenTypeHierarchy"); //$NON-NLS-1$
|
addAction(menu, ITextEditorActionConstants.GROUP_FIND, "OpenTypeHierarchy"); //$NON-NLS-1$
|
||||||
addAction(menu, ITextEditorActionConstants.GROUP_FIND, "GotoNextMember"); //$NON-NLS-1$
|
addAction(menu, ITextEditorActionConstants.GROUP_FIND, "GotoNextMember"); //$NON-NLS-1$
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
#########################################
|
#########################################
|
||||||
# (c) Copyright IBM Corp. 2000, 2001.
|
# (c) Copyright IBM Corp. 2000, 2005.
|
||||||
# All Rights Reserved.
|
# All Rights Reserved.
|
||||||
#########################################
|
#########################################
|
||||||
|
|
||||||
|
@ -75,6 +75,10 @@ OpenDeclarations.dialog.title=Open Declaration
|
||||||
OpenDeclarations.label=&Open Declaration@F3
|
OpenDeclarations.label=&Open Declaration@F3
|
||||||
OpenDeclarations.tooltip=Open an editor on the selected element's declaration
|
OpenDeclarations.tooltip=Open an editor on the selected element's declaration
|
||||||
|
|
||||||
|
OpenDefinition.description=Open an editor on the selected element's definition
|
||||||
|
OpenDefinition.label=Open &Definition@F2
|
||||||
|
OpenDefinition.tooltip=Open an editor on the selected element's definition
|
||||||
|
|
||||||
OpenOutline.description=Shows outline
|
OpenOutline.description=Shows outline
|
||||||
OpenOutline.dialog.title=Show outline
|
OpenOutline.dialog.title=Show outline
|
||||||
OpenOutline.label=&Show outline@Ctrl+O
|
OpenOutline.label=&Show outline@Ctrl+O
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
/*******************************************************************************
|
/*******************************************************************************
|
||||||
* Copyright (c) 2000, 2004 QNX Software Systems and others.
|
* Copyright (c) 2000, 2005 QNX Software Systems and others.
|
||||||
* All rights reserved. This program and the accompanying materials
|
* All rights reserved. This program and the accompanying materials
|
||||||
* are made available under the terms of the Common Public License v1.0
|
* are made available under the terms of the Common Public License v1.0
|
||||||
* which accompanies this distribution, and is available at
|
* which accompanies this distribution, and is available at
|
||||||
|
@ -69,6 +69,12 @@ public interface ICEditorActionDefinitionIds extends ITextEditorActionDefinition
|
||||||
*/
|
*/
|
||||||
public static final String OPEN_DECL= "org.eclipse.cdt.ui.edit.opendecl"; //$NON-NLS-1$
|
public static final String OPEN_DECL= "org.eclipse.cdt.ui.edit.opendecl"; //$NON-NLS-1$
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Action definition ID of the open definition action
|
||||||
|
* (value <code>"org.eclipse.cdt.ui.edit.opendef"</code>).
|
||||||
|
*/
|
||||||
|
public static final String OPEN_DEF= "org.eclipse.cdt.ui.edit.opendef"; //$NON-NLS-1$
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Action definition ID of the show in C/C++ Projects View action
|
* Action definition ID of the show in C/C++ Projects View action
|
||||||
* (value <code>"org.eclipse.cdt.ui.edit.opencview"</code>).
|
* (value <code>"org.eclipse.cdt.ui.edit.opencview"</code>).
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Copyright (c) 2000, 2004 IBM Corporation and others.
|
# Copyright (c) 2000, 2005 IBM Corporation and others.
|
||||||
# All rights reserved. This program and the accompanying materials
|
# All rights reserved. This program and the accompanying materials
|
||||||
# are made available under the terms of the Common Public License v1.0
|
# are made available under the terms of the Common Public License v1.0
|
||||||
# which accompanies this distribution, and is available at
|
# which accompanies this distribution, and is available at
|
||||||
|
@ -90,6 +90,8 @@ CSearchOperation.operationUnavailable.title= Operation Unavailable
|
||||||
CSearchOperation.operationUnavailable.message= The operation is unavailable on the current selection.
|
CSearchOperation.operationUnavailable.message= The operation is unavailable on the current selection.
|
||||||
CSearchOperation.tooManyNames.message= The operation is unavailable on the current selection (too many different names selected).
|
CSearchOperation.tooManyNames.message= The operation is unavailable on the current selection (too many different names selected).
|
||||||
CSearchOperation.noNamesSelected.message= The operation is unavailable on the current selection (no name selected).
|
CSearchOperation.noNamesSelected.message= The operation is unavailable on the current selection (no name selected).
|
||||||
|
CSearchOperation.noDefinitionFound.message= No definition was found.
|
||||||
|
CSearchOperation.noDeclarationFound.message= No declaration was found.
|
||||||
|
|
||||||
|
|
||||||
WorkspaceScope= Workspace
|
WorkspaceScope= Workspace
|
||||||
|
|
|
@ -11,15 +11,12 @@
|
||||||
|
|
||||||
package org.eclipse.cdt.internal.ui.search.actions;
|
package org.eclipse.cdt.internal.ui.search.actions;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
|
||||||
import org.eclipse.cdt.core.search.ICSearchConstants;
|
import org.eclipse.cdt.core.search.ICSearchConstants;
|
||||||
import org.eclipse.cdt.core.search.ICSearchScope;
|
import org.eclipse.cdt.core.search.ICSearchScope;
|
||||||
import org.eclipse.cdt.core.search.SearchEngine;
|
import org.eclipse.cdt.core.search.SearchEngine;
|
||||||
import org.eclipse.cdt.core.search.ICSearchConstants.LimitTo;
|
import org.eclipse.cdt.core.search.ICSearchConstants.LimitTo;
|
||||||
import org.eclipse.cdt.internal.core.model.CProject;
|
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
import org.eclipse.cdt.internal.ui.search.CSearchMessages;
|
import org.eclipse.cdt.internal.ui.search.CSearchMessages;
|
||||||
import org.eclipse.core.resources.IProject;
|
|
||||||
import org.eclipse.ui.IWorkbenchSite;
|
import org.eclipse.ui.IWorkbenchSite;
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -16,13 +16,8 @@ import java.util.Set;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||||
import org.eclipse.cdt.core.dom.ast.IASTName;
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
import org.eclipse.cdt.core.model.CModelException;
|
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
|
||||||
import org.eclipse.cdt.core.model.ICElement;
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
import org.eclipse.cdt.core.model.ICProject;
|
|
||||||
import org.eclipse.cdt.core.model.ITranslationUnit;
|
|
||||||
import org.eclipse.cdt.core.parser.ParserUtil;
|
import org.eclipse.cdt.core.parser.ParserUtil;
|
||||||
import org.eclipse.cdt.core.resources.FileStorage;
|
|
||||||
import org.eclipse.cdt.core.search.DOMSearchUtil;
|
import org.eclipse.cdt.core.search.DOMSearchUtil;
|
||||||
import org.eclipse.cdt.core.search.ICSearchConstants;
|
import org.eclipse.cdt.core.search.ICSearchConstants;
|
||||||
import org.eclipse.cdt.core.search.IMatch;
|
import org.eclipse.cdt.core.search.IMatch;
|
||||||
|
@ -31,24 +26,15 @@ import org.eclipse.cdt.internal.core.model.CProject;
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditorMessages;
|
import org.eclipse.cdt.internal.ui.editor.CEditorMessages;
|
||||||
import org.eclipse.cdt.internal.ui.editor.ITranslationUnitEditorInput;
|
import org.eclipse.cdt.internal.ui.editor.ITranslationUnitEditorInput;
|
||||||
import org.eclipse.cdt.internal.ui.util.EditorUtility;
|
|
||||||
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
|
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
import org.eclipse.core.resources.IResource;
|
import org.eclipse.core.resources.IResource;
|
||||||
import org.eclipse.core.resources.ResourcesPlugin;
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.IPath;
|
|
||||||
import org.eclipse.core.runtime.IProgressMonitor;
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
import org.eclipse.core.runtime.Path;
|
|
||||||
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
|
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
|
||||||
import org.eclipse.jface.operation.IRunnableWithProgress;
|
import org.eclipse.jface.operation.IRunnableWithProgress;
|
||||||
import org.eclipse.jface.text.ITextSelection;
|
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
|
||||||
import org.eclipse.swt.widgets.Shell;
|
|
||||||
import org.eclipse.ui.IEditorPart;
|
|
||||||
import org.eclipse.ui.PartInitException;
|
|
||||||
import org.eclipse.ui.texteditor.AbstractTextEditor;
|
|
||||||
import org.eclipse.ui.texteditor.IUpdate;
|
import org.eclipse.ui.texteditor.IUpdate;
|
||||||
|
|
||||||
public class OpenDeclarationsAction extends SelectionParseAction implements IUpdate {
|
public class OpenDeclarationsAction extends SelectionParseAction implements IUpdate {
|
||||||
|
@ -71,58 +57,6 @@ public class OpenDeclarationsAction extends SelectionParseAction implements IUpd
|
||||||
searchEngine = new SearchEngine();
|
searchEngine = new SearchEngine();
|
||||||
}
|
}
|
||||||
|
|
||||||
// protected void setDialogTitle(String title) {
|
|
||||||
// fDialogTitle= title;
|
|
||||||
// }
|
|
||||||
//
|
|
||||||
// protected void setDialogMessage(String message) {
|
|
||||||
// fDialogMessage= message;
|
|
||||||
// }
|
|
||||||
|
|
||||||
protected SelSearchNode getSelectedStringFromEditor() {
|
|
||||||
ISelection selection = getSelection();
|
|
||||||
if( selection == null || !(selection instanceof ITextSelection) )
|
|
||||||
return null;
|
|
||||||
|
|
||||||
return getSelection( (ITextSelection)selection );
|
|
||||||
}
|
|
||||||
String projectName = ""; //$NON-NLS-1$
|
|
||||||
private static class Storage
|
|
||||||
{
|
|
||||||
private IResource resource;
|
|
||||||
private String fileName;
|
|
||||||
private int offset=0;
|
|
||||||
private int length=0;
|
|
||||||
|
|
||||||
public final String getFileName() {
|
|
||||||
return fileName;
|
|
||||||
}
|
|
||||||
public Storage() {
|
|
||||||
}
|
|
||||||
public final IResource getResource() {
|
|
||||||
return resource;
|
|
||||||
}
|
|
||||||
public int getLength() {
|
|
||||||
return length;
|
|
||||||
}
|
|
||||||
public int getOffset() {
|
|
||||||
return offset;
|
|
||||||
}
|
|
||||||
public void setFileName(String fileName) {
|
|
||||||
this.fileName = fileName;
|
|
||||||
}
|
|
||||||
public void setLength(int length) {
|
|
||||||
this.length = length;
|
|
||||||
}
|
|
||||||
public void setOffset(int offset) {
|
|
||||||
this.offset = offset;
|
|
||||||
}
|
|
||||||
public void setResource(IResource resource) {
|
|
||||||
this.resource = resource;
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
/* (non-Javadoc)
|
||||||
* @see org.eclipse.jface.action.IAction#run()
|
* @see org.eclipse.jface.action.IAction#run()
|
||||||
*/
|
*/
|
||||||
|
@ -195,6 +129,8 @@ public class OpenDeclarationsAction extends SelectionParseAction implements IUpd
|
||||||
storage.setLength(end - start);
|
storage.setLength(end - start);
|
||||||
storage.setOffset(start);
|
storage.setOffset(start);
|
||||||
storage.setResource(ParserUtil.getResourceForFilename( fileName ));
|
storage.setResource(ParserUtil.getResourceForFilename( fileName ));
|
||||||
|
} else {
|
||||||
|
operationNotAvailable(CSEARCH_OPERATION_NO_DECLARATION_MESSAGE);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
// step 3 starts here
|
// step 3 starts here
|
||||||
|
@ -202,7 +138,7 @@ public class OpenDeclarationsAction extends SelectionParseAction implements IUpd
|
||||||
scope[0] = new CProject(null, fEditor.getInputFile().getProject());
|
scope[0] = new CProject(null, fEditor.getInputFile().getProject());
|
||||||
Set matches = DOMSearchUtil.getMatchesFromSearchEngine(SearchEngine.createCSearchScope(scope), searchName, ICSearchConstants.DECLARATIONS);
|
Set matches = DOMSearchUtil.getMatchesFromSearchEngine(SearchEngine.createCSearchScope(scope), searchName, ICSearchConstants.DECLARATIONS);
|
||||||
|
|
||||||
if (matches != null) {
|
if (matches != null && matches.size() > 0) {
|
||||||
Iterator itr = matches.iterator();
|
Iterator itr = matches.iterator();
|
||||||
while(itr.hasNext()) {
|
while(itr.hasNext()) {
|
||||||
Object match = itr.next();
|
Object match = itr.next();
|
||||||
|
@ -215,6 +151,8 @@ public class OpenDeclarationsAction extends SelectionParseAction implements IUpd
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else {
|
||||||
|
operationNotAvailable(CSEARCH_OPERATION_NO_DECLARATION_MESSAGE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else if (selectedNames.length == 0){
|
} else if (selectedNames.length == 0){
|
||||||
|
@ -264,104 +202,5 @@ public class OpenDeclarationsAction extends SelectionParseAction implements IUpd
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* @param string
|
|
||||||
* @param i
|
|
||||||
*/
|
|
||||||
protected boolean open(String filename, int offset, int length) throws PartInitException, CModelException {
|
|
||||||
IPath path = new Path( filename );
|
|
||||||
IFile file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path);
|
|
||||||
if( file != null )
|
|
||||||
{
|
|
||||||
open( file, offset, length );
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
ICProject cproject = CoreModel.getDefault().getCModel().getCProject( projectName );
|
|
||||||
ITranslationUnit unit = CoreModel.getDefault().createTranslationUnitFrom(cproject, path);
|
|
||||||
if (unit != null) {
|
|
||||||
setSelectionAtOffset( EditorUtility.openInEditor(unit), offset, length );
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
FileStorage storage = new FileStorage(null, path);
|
|
||||||
IEditorPart part = EditorUtility.openInEditor(storage);
|
|
||||||
setSelectionAtOffset(part, offset, length);
|
|
||||||
return true;
|
|
||||||
|
|
||||||
}
|
|
||||||
protected Shell getShell() {
|
|
||||||
return fEditor.getSite().getShell();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
protected void open( IMatch element ) throws CModelException, PartInitException
|
|
||||||
{
|
|
||||||
open( element.getResource(), element.getStartOffset(), element.getEndOffset() - element.getStartOffset() );
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Opens the editor on the given element and subsequently selects it.
|
|
||||||
*/
|
|
||||||
protected void open( IResource resource, int offset, int length ) throws CModelException, PartInitException {
|
|
||||||
IEditorPart part= EditorUtility.openInEditor(resource);
|
|
||||||
setSelectionAtOffset(part, offset, length);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @param part
|
|
||||||
* @param offset
|
|
||||||
* @param length TODO
|
|
||||||
*/
|
|
||||||
private void setSelectionAtOffset(IEditorPart part, int offset, int length) {
|
|
||||||
if( part instanceof AbstractTextEditor )
|
|
||||||
{
|
|
||||||
try {
|
|
||||||
((AbstractTextEditor) part).selectAndReveal(offset, length);
|
|
||||||
} catch (Exception e) {}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// /**
|
|
||||||
// * Shows a dialog for resolving an ambigous C element.
|
|
||||||
// * Utility method that can be called by subclassers.
|
|
||||||
// */
|
|
||||||
// protected IMatch selectCElement(List elements, Shell shell, String title, String message) {
|
|
||||||
//
|
|
||||||
// int nResults= elements.size();
|
|
||||||
//
|
|
||||||
// if (nResults == 0)
|
|
||||||
// return null;
|
|
||||||
//
|
|
||||||
// if (nResults == 1)
|
|
||||||
// return (IMatch) elements.get(0);
|
|
||||||
//
|
|
||||||
//
|
|
||||||
// ElementListSelectionDialog dialog= new ElementListSelectionDialog(shell, new CSearchResultLabelProvider(), false, false);
|
|
||||||
// dialog.setTitle(title);
|
|
||||||
// dialog.setMessage(message);
|
|
||||||
// dialog.setElements(elements);
|
|
||||||
//
|
|
||||||
// if (dialog.open() == Window.OK) {
|
|
||||||
// Object[] selection= dialog.getResult();
|
|
||||||
// if (selection != null && selection.length > 0) {
|
|
||||||
// nResults= selection.length;
|
|
||||||
// for (int i= 0; i < nResults; i++) {
|
|
||||||
// Object current= selection[i];
|
|
||||||
// if (current instanceof IMatch)
|
|
||||||
// return (IMatch) current;
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// }
|
|
||||||
// return null;
|
|
||||||
// }
|
|
||||||
|
|
||||||
|
|
||||||
/* (non-Javadoc)
|
|
||||||
* @see org.eclipse.ui.texteditor.IUpdate#update()
|
|
||||||
*/
|
|
||||||
public void update() {
|
|
||||||
setEnabled(getSelectedStringFromEditor() != null);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,217 @@
|
||||||
|
/*******************************************************************************
|
||||||
|
* Copyright (c) 2005 IBM Corporation and others.
|
||||||
|
* All rights reserved. This program and the accompanying materials
|
||||||
|
* are made available under the terms of the Common Public License v1.0
|
||||||
|
* which accompanies this distribution, and is available at
|
||||||
|
* http://www.eclipse.org/legal/cpl-v10.html
|
||||||
|
*
|
||||||
|
* Contributors:
|
||||||
|
* IBM Corporation - initial API and implementation
|
||||||
|
*******************************************************************************/
|
||||||
|
package org.eclipse.cdt.internal.ui.search.actions;
|
||||||
|
|
||||||
|
import java.util.Iterator;
|
||||||
|
import java.util.Set;
|
||||||
|
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTFileLocation;
|
||||||
|
import org.eclipse.cdt.core.dom.ast.IASTName;
|
||||||
|
import org.eclipse.cdt.core.model.ICElement;
|
||||||
|
import org.eclipse.cdt.core.parser.ParserUtil;
|
||||||
|
import org.eclipse.cdt.core.search.DOMSearchUtil;
|
||||||
|
import org.eclipse.cdt.core.search.ICSearchConstants;
|
||||||
|
import org.eclipse.cdt.core.search.IMatch;
|
||||||
|
import org.eclipse.cdt.core.search.SearchEngine;
|
||||||
|
import org.eclipse.cdt.internal.core.model.CProject;
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.CEditorMessages;
|
||||||
|
import org.eclipse.cdt.internal.ui.editor.ITranslationUnitEditorInput;
|
||||||
|
import org.eclipse.cdt.internal.ui.util.ExternalEditorInput;
|
||||||
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
|
import org.eclipse.core.resources.IFile;
|
||||||
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
|
import org.eclipse.core.runtime.IProgressMonitor;
|
||||||
|
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
|
||||||
|
import org.eclipse.jface.operation.IRunnableWithProgress;
|
||||||
|
import org.eclipse.ui.texteditor.IUpdate;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Open Definition Action (F2).
|
||||||
|
*
|
||||||
|
* @author dsteffle
|
||||||
|
*/
|
||||||
|
public class OpenDefinitionAction extends SelectionParseAction implements
|
||||||
|
IUpdate {
|
||||||
|
|
||||||
|
public static final IASTName[] BLANK_NAME_ARRAY = new IASTName[0];
|
||||||
|
//private String fDialogTitle;
|
||||||
|
//private String fDialogMessage;
|
||||||
|
SearchEngine searchEngine = null;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a new action with the given editor
|
||||||
|
*/
|
||||||
|
public OpenDefinitionAction(CEditor editor) {
|
||||||
|
super( editor );
|
||||||
|
setText(CEditorMessages.getString("OpenDefinition.label")); //$NON-NLS-1$
|
||||||
|
setToolTipText(CEditorMessages.getString("OpenDefinition.tooltip")); //$NON-NLS-1$
|
||||||
|
setDescription(CEditorMessages.getString("OpenDefinition.description")); //$NON-NLS-1$
|
||||||
|
|
||||||
|
searchEngine = new SearchEngine();
|
||||||
|
}
|
||||||
|
|
||||||
|
// protected void setDialogTitle(String title) {
|
||||||
|
// fDialogTitle= title;
|
||||||
|
// }
|
||||||
|
//
|
||||||
|
// protected void setDialogMessage(String message) {
|
||||||
|
// fDialogMessage= message;
|
||||||
|
// }
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.jface.action.IAction#run()
|
||||||
|
*/
|
||||||
|
public void run() {
|
||||||
|
final SelSearchNode selNode = getSelectedStringFromEditor();
|
||||||
|
|
||||||
|
if(selNode == null) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
final Storage storage = new Storage();
|
||||||
|
|
||||||
|
IRunnableWithProgress runnable = new IRunnableWithProgress()
|
||||||
|
{
|
||||||
|
// steps:
|
||||||
|
// 1- parse and get the best selected name based on the offset/length into that TU
|
||||||
|
// 2- based on the IASTName selected, find the best definition of it in the TU
|
||||||
|
// 3- if no IASTName is found for a definition, then search the Index
|
||||||
|
public void run(IProgressMonitor monitor) {
|
||||||
|
int selectionStart = selNode.selStart;
|
||||||
|
int selectionLength = selNode.selEnd - selNode.selStart;
|
||||||
|
|
||||||
|
IFile resourceFile = null;
|
||||||
|
|
||||||
|
IASTName[] selectedNames = BLANK_NAME_ARRAY;
|
||||||
|
if (fEditor.getEditorInput() instanceof ExternalEditorInput) {
|
||||||
|
if( fEditor.getEditorInput() instanceof ITranslationUnitEditorInput )
|
||||||
|
{
|
||||||
|
ITranslationUnitEditorInput ip = (ITranslationUnitEditorInput) fEditor.getEditorInput();
|
||||||
|
IResource r = ip.getTranslationUnit().getUnderlyingResource();
|
||||||
|
if( r.getType() == IResource.FILE )
|
||||||
|
resourceFile = (IFile) r;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
operationNotAvailable(CSEARCH_OPERATION_OPERATION_UNAVAILABLE_MESSAGE);
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
resourceFile = fEditor.getInputFile();
|
||||||
|
|
||||||
|
|
||||||
|
if (resourceFile != null)
|
||||||
|
projectName = findProjectName(resourceFile);
|
||||||
|
|
||||||
|
// step 1 starts here
|
||||||
|
if (resourceFile != null)
|
||||||
|
selectedNames = DOMSearchUtil.getSelectedNamesFrom(resourceFile, selectionStart, selectionLength);
|
||||||
|
|
||||||
|
if (selectedNames.length > 0 && selectedNames[0] != null) { // just right, only one name selected
|
||||||
|
IASTName searchName = selectedNames[0];
|
||||||
|
// step 2 starts here
|
||||||
|
IASTName[] domNames = DOMSearchUtil.getNamesFromDOM(searchName, ICSearchConstants.DEFINITIONS);
|
||||||
|
|
||||||
|
if (domNames != null && domNames.length > 0 && domNames[0] != null) {
|
||||||
|
String fileName=null;
|
||||||
|
int start=0;
|
||||||
|
int end=0;
|
||||||
|
|
||||||
|
if ( domNames[0].getTranslationUnit() != null ) {
|
||||||
|
IASTFileLocation location = domNames[0].getTranslationUnit().flattenLocationsToFile( domNames[0].getNodeLocations() );
|
||||||
|
fileName = location.getFileName();
|
||||||
|
start = location.getNodeOffset();
|
||||||
|
end = location.getNodeOffset() + location.getNodeLength();
|
||||||
|
}
|
||||||
|
|
||||||
|
if (fileName != null) {
|
||||||
|
storage.setFileName(fileName);
|
||||||
|
storage.setLength(end - start);
|
||||||
|
storage.setOffset(start);
|
||||||
|
storage.setResource(ParserUtil.getResourceForFilename( fileName ));
|
||||||
|
} else {
|
||||||
|
operationNotAvailable(CSEARCH_OPERATION_NO_DEFINITION_MESSAGE);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
// step 3 starts here
|
||||||
|
ICElement[] scope = new ICElement[1];
|
||||||
|
scope[0] = new CProject(null, fEditor.getInputFile().getProject());
|
||||||
|
Set matches = DOMSearchUtil.getMatchesFromSearchEngine(SearchEngine.createCSearchScope(scope), searchName, ICSearchConstants.DEFINITIONS);
|
||||||
|
|
||||||
|
if (matches != null && matches.size() > 0) {
|
||||||
|
Iterator itr = matches.iterator();
|
||||||
|
while(itr.hasNext()) {
|
||||||
|
Object match = itr.next();
|
||||||
|
if (match instanceof IMatch) {
|
||||||
|
IMatch theMatch = (IMatch)match;
|
||||||
|
storage.setFileName(theMatch.getLocation().toOSString());
|
||||||
|
storage.setLength(theMatch.getEndOffset() - theMatch.getStartOffset());
|
||||||
|
storage.setOffset(theMatch.getStartOffset());
|
||||||
|
storage.setResource(ParserUtil.getResourceForFilename(theMatch.getLocation().toOSString()));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
operationNotAvailable(CSEARCH_OPERATION_NO_DEFINITION_MESSAGE);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else if (selectedNames.length == 0){
|
||||||
|
operationNotAvailable(CSEARCH_OPERATION_NO_NAMES_SELECTED_MESSAGE);
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
operationNotAvailable(CSEARCH_OPERATION_TOO_MANY_NAMES_MESSAGE);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String findProjectName(IFile resourceFile) {
|
||||||
|
if( resourceFile == null ) return ""; //$NON-NLS-1$
|
||||||
|
IProject[] projects = ResourcesPlugin.getWorkspace().getRoot().getProjects();
|
||||||
|
for( int i = 0; i < projects.length; ++i )
|
||||||
|
{
|
||||||
|
if( projects[i].contains(resourceFile) )
|
||||||
|
return projects[i].getName();
|
||||||
|
}
|
||||||
|
return ""; //$NON-NLS-1$
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
try {
|
||||||
|
ProgressMonitorDialog progressMonitor = new ProgressMonitorDialog(getShell());
|
||||||
|
progressMonitor.run(true, true, runnable);
|
||||||
|
|
||||||
|
int nameOffset = storage.getOffset();
|
||||||
|
int nameLength = storage.getLength();
|
||||||
|
if( storage.getResource() != null )
|
||||||
|
{
|
||||||
|
clearStatusLine();
|
||||||
|
open( storage.getResource(), nameOffset, nameLength );
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
String fileName = storage.getFileName();
|
||||||
|
|
||||||
|
if (fileName != null){
|
||||||
|
clearStatusLine();
|
||||||
|
open( fileName, nameOffset, nameLength);
|
||||||
|
}
|
||||||
|
} catch(Exception x) {
|
||||||
|
CUIPlugin.getDefault().log(x);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
|
@ -14,7 +14,10 @@ package org.eclipse.cdt.internal.ui.search.actions;
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
|
|
||||||
import org.eclipse.cdt.core.CCorePlugin;
|
import org.eclipse.cdt.core.CCorePlugin;
|
||||||
|
import org.eclipse.cdt.core.model.CModelException;
|
||||||
import org.eclipse.cdt.core.model.CoreModel;
|
import org.eclipse.cdt.core.model.CoreModel;
|
||||||
|
import org.eclipse.cdt.core.model.ICProject;
|
||||||
|
import org.eclipse.cdt.core.model.ITranslationUnit;
|
||||||
import org.eclipse.cdt.core.model.IWorkingCopy;
|
import org.eclipse.cdt.core.model.IWorkingCopy;
|
||||||
import org.eclipse.cdt.core.parser.CodeReader;
|
import org.eclipse.cdt.core.parser.CodeReader;
|
||||||
import org.eclipse.cdt.core.parser.IParser;
|
import org.eclipse.cdt.core.parser.IParser;
|
||||||
|
@ -28,22 +31,33 @@ import org.eclipse.cdt.core.parser.ParserLanguage;
|
||||||
import org.eclipse.cdt.core.parser.ParserMode;
|
import org.eclipse.cdt.core.parser.ParserMode;
|
||||||
import org.eclipse.cdt.core.parser.ParserUtil;
|
import org.eclipse.cdt.core.parser.ParserUtil;
|
||||||
import org.eclipse.cdt.core.parser.ScannerInfo;
|
import org.eclipse.cdt.core.parser.ScannerInfo;
|
||||||
|
import org.eclipse.cdt.core.resources.FileStorage;
|
||||||
|
import org.eclipse.cdt.core.search.IMatch;
|
||||||
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
import org.eclipse.cdt.internal.ui.editor.CEditor;
|
||||||
import org.eclipse.cdt.internal.ui.search.CSearchMessages;
|
import org.eclipse.cdt.internal.ui.search.CSearchMessages;
|
||||||
|
import org.eclipse.cdt.internal.ui.util.EditorUtility;
|
||||||
import org.eclipse.cdt.ui.CUIPlugin;
|
import org.eclipse.cdt.ui.CUIPlugin;
|
||||||
import org.eclipse.core.resources.IFile;
|
import org.eclipse.core.resources.IFile;
|
||||||
import org.eclipse.core.resources.IProject;
|
import org.eclipse.core.resources.IProject;
|
||||||
|
import org.eclipse.core.resources.IResource;
|
||||||
|
import org.eclipse.core.resources.ResourcesPlugin;
|
||||||
import org.eclipse.core.runtime.CoreException;
|
import org.eclipse.core.runtime.CoreException;
|
||||||
|
import org.eclipse.core.runtime.IPath;
|
||||||
|
import org.eclipse.core.runtime.Path;
|
||||||
import org.eclipse.jface.action.Action;
|
import org.eclipse.jface.action.Action;
|
||||||
import org.eclipse.jface.action.IStatusLineManager;
|
import org.eclipse.jface.action.IStatusLineManager;
|
||||||
import org.eclipse.jface.text.BadLocationException;
|
import org.eclipse.jface.text.BadLocationException;
|
||||||
import org.eclipse.jface.text.IDocument;
|
import org.eclipse.jface.text.IDocument;
|
||||||
import org.eclipse.jface.text.ITextSelection;
|
import org.eclipse.jface.text.ITextSelection;
|
||||||
import org.eclipse.jface.viewers.ISelection;
|
import org.eclipse.jface.viewers.ISelection;
|
||||||
|
import org.eclipse.swt.widgets.Shell;
|
||||||
|
import org.eclipse.ui.IEditorPart;
|
||||||
import org.eclipse.ui.IEditorSite;
|
import org.eclipse.ui.IEditorSite;
|
||||||
import org.eclipse.ui.IFileEditorInput;
|
import org.eclipse.ui.IFileEditorInput;
|
||||||
import org.eclipse.ui.IViewSite;
|
import org.eclipse.ui.IViewSite;
|
||||||
import org.eclipse.ui.IWorkbenchSite;
|
import org.eclipse.ui.IWorkbenchSite;
|
||||||
|
import org.eclipse.ui.PartInitException;
|
||||||
|
import org.eclipse.ui.texteditor.AbstractTextEditor;
|
||||||
import org.eclipse.ui.texteditor.IDocumentProvider;
|
import org.eclipse.ui.texteditor.IDocumentProvider;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -55,6 +69,8 @@ public class SelectionParseAction extends Action {
|
||||||
protected static final String CSEARCH_OPERATION_TOO_MANY_NAMES_MESSAGE = "CSearchOperation.tooManyNames.message"; //$NON-NLS-1$
|
protected static final String CSEARCH_OPERATION_TOO_MANY_NAMES_MESSAGE = "CSearchOperation.tooManyNames.message"; //$NON-NLS-1$
|
||||||
protected static final String CSEARCH_OPERATION_NO_NAMES_SELECTED_MESSAGE = "CSearchOperation.noNamesSelected.message"; //$NON-NLS-1$
|
protected static final String CSEARCH_OPERATION_NO_NAMES_SELECTED_MESSAGE = "CSearchOperation.noNamesSelected.message"; //$NON-NLS-1$
|
||||||
protected static final String CSEARCH_OPERATION_OPERATION_UNAVAILABLE_MESSAGE = "CSearchOperation.operationUnavailable.message"; //$NON-NLS-1$
|
protected static final String CSEARCH_OPERATION_OPERATION_UNAVAILABLE_MESSAGE = "CSearchOperation.operationUnavailable.message"; //$NON-NLS-1$
|
||||||
|
protected static final String CSEARCH_OPERATION_NO_DEFINITION_MESSAGE = "CSearchOperation.noDefinitionFound.message"; //$NON-NLS-1$
|
||||||
|
protected static final String CSEARCH_OPERATION_NO_DECLARATION_MESSAGE = "CSearchOperation.noDeclarationFound.message"; //$NON-NLS-1$
|
||||||
|
|
||||||
protected IWorkbenchSite fSite;
|
protected IWorkbenchSite fSite;
|
||||||
protected CEditor fEditor;
|
protected CEditor fEditor;
|
||||||
|
@ -522,4 +538,148 @@ public class SelectionParseAction extends Action {
|
||||||
protected int selEnd;
|
protected int selEnd;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
protected SelSearchNode getSelectedStringFromEditor() {
|
||||||
|
ISelection selection = getSelection();
|
||||||
|
if( selection == null || !(selection instanceof ITextSelection) )
|
||||||
|
return null;
|
||||||
|
|
||||||
|
return getSelection( (ITextSelection)selection );
|
||||||
|
}
|
||||||
|
|
||||||
|
String projectName = ""; //$NON-NLS-1$
|
||||||
|
protected static class Storage
|
||||||
|
{
|
||||||
|
private IResource resource;
|
||||||
|
private String fileName;
|
||||||
|
private int offset=0;
|
||||||
|
private int length=0;
|
||||||
|
|
||||||
|
public final String getFileName() {
|
||||||
|
return fileName;
|
||||||
|
}
|
||||||
|
public Storage() {
|
||||||
|
}
|
||||||
|
public final IResource getResource() {
|
||||||
|
return resource;
|
||||||
|
}
|
||||||
|
public int getLength() {
|
||||||
|
return length;
|
||||||
|
}
|
||||||
|
public int getOffset() {
|
||||||
|
return offset;
|
||||||
|
}
|
||||||
|
public void setFileName(String fileName) {
|
||||||
|
this.fileName = fileName;
|
||||||
|
}
|
||||||
|
public void setLength(int length) {
|
||||||
|
this.length = length;
|
||||||
|
}
|
||||||
|
public void setOffset(int offset) {
|
||||||
|
this.offset = offset;
|
||||||
|
}
|
||||||
|
public void setResource(IResource resource) {
|
||||||
|
this.resource = resource;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param string
|
||||||
|
* @param i
|
||||||
|
*/
|
||||||
|
protected boolean open(String filename, int offset, int length) throws PartInitException, CModelException {
|
||||||
|
IPath path = new Path( filename );
|
||||||
|
IFile file = ResourcesPlugin.getWorkspace().getRoot().getFileForLocation(path);
|
||||||
|
if( file != null )
|
||||||
|
{
|
||||||
|
open( file, offset, length );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
ICProject cproject = CoreModel.getDefault().getCModel().getCProject( projectName );
|
||||||
|
ITranslationUnit unit = CoreModel.getDefault().createTranslationUnitFrom(cproject, path);
|
||||||
|
if (unit != null) {
|
||||||
|
setSelectionAtOffset( EditorUtility.openInEditor(unit), offset, length );
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
FileStorage storage = new FileStorage(null, path);
|
||||||
|
IEditorPart part = EditorUtility.openInEditor(storage);
|
||||||
|
setSelectionAtOffset(part, offset, length);
|
||||||
|
return true;
|
||||||
|
|
||||||
|
}
|
||||||
|
protected Shell getShell() {
|
||||||
|
return fEditor.getSite().getShell();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
protected void open( IMatch element ) throws CModelException, PartInitException
|
||||||
|
{
|
||||||
|
open( element.getResource(), element.getStartOffset(), element.getEndOffset() - element.getStartOffset() );
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Opens the editor on the given element and subsequently selects it.
|
||||||
|
*/
|
||||||
|
protected void open( IResource resource, int offset, int length ) throws CModelException, PartInitException {
|
||||||
|
IEditorPart part= EditorUtility.openInEditor(resource);
|
||||||
|
setSelectionAtOffset(part, offset, length);
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @param part
|
||||||
|
* @param offset
|
||||||
|
* @param length TODO
|
||||||
|
*/
|
||||||
|
protected void setSelectionAtOffset(IEditorPart part, int offset, int length) {
|
||||||
|
if( part instanceof AbstractTextEditor )
|
||||||
|
{
|
||||||
|
try {
|
||||||
|
((AbstractTextEditor) part).selectAndReveal(offset, length);
|
||||||
|
} catch (Exception e) {}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// /**
|
||||||
|
// * Shows a dialog for resolving an ambigous C element.
|
||||||
|
// * Utility method that can be called by subclassers.
|
||||||
|
// */
|
||||||
|
// protected IMatch selectCElement(List elements, Shell shell, String title, String message) {
|
||||||
|
//
|
||||||
|
// int nResults= elements.size();
|
||||||
|
//
|
||||||
|
// if (nResults == 0)
|
||||||
|
// return null;
|
||||||
|
//
|
||||||
|
// if (nResults == 1)
|
||||||
|
// return (IMatch) elements.get(0);
|
||||||
|
//
|
||||||
|
//
|
||||||
|
// ElementListSelectionDialog dialog= new ElementListSelectionDialog(shell, new CSearchResultLabelProvider(), false, false);
|
||||||
|
// dialog.setTitle(title);
|
||||||
|
// dialog.setMessage(message);
|
||||||
|
// dialog.setElements(elements);
|
||||||
|
//
|
||||||
|
// if (dialog.open() == Window.OK) {
|
||||||
|
// Object[] selection= dialog.getResult();
|
||||||
|
// if (selection != null && selection.length > 0) {
|
||||||
|
// nResults= selection.length;
|
||||||
|
// for (int i= 0; i < nResults; i++) {
|
||||||
|
// Object current= selection[i];
|
||||||
|
// if (current instanceof IMatch)
|
||||||
|
// return (IMatch) current;
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// return null;
|
||||||
|
// }
|
||||||
|
|
||||||
|
|
||||||
|
/* (non-Javadoc)
|
||||||
|
* @see org.eclipse.ui.texteditor.IUpdate#update()
|
||||||
|
*/
|
||||||
|
public void update() {
|
||||||
|
setEnabled(getSelectedStringFromEditor() != null);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue