diff --git a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java index dc3090c1d68..5e425bc62e0 100644 --- a/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java +++ b/core/org.eclipse.cdt.core/parser/org/eclipse/cdt/internal/core/parser/pst/ParserSymbolTable.java @@ -128,7 +128,7 @@ public class ParserSymbolTable { if( data.foundItems == null || data.foundItems.isEmpty() ){ data.foundItems = map; } else { - mergeResults( data, data.foundItems, map ); + mergeScopedResults( data.foundItems, map ); } } @@ -177,7 +177,7 @@ public class ParserSymbolTable { if( data.foundItems == null || data.foundItems.isEmpty() ){ data.foundItems = map; } else { - mergeInheritedResults( data.foundItems, map ); + mergeScopedResults( data.foundItems, map ); } } @@ -686,7 +686,7 @@ public class ParserSymbolTable { if( temp == null ) temp = inherited; else - mergeInheritedResults( temp, inherited ); + mergeScopedResults( temp, inherited ); } } else { throw new ParserSymbolTableException( ParserSymbolTableException.r_CircularInheritance ); @@ -767,7 +767,7 @@ public class ParserSymbolTable { * @param map * @throws ParserSymbolTableException */ - private static void mergeInheritedResults( CharArrayObjectMap resultMap, CharArrayObjectMap map ){ + private static void mergeScopedResults( CharArrayObjectMap resultMap, CharArrayObjectMap map ){ if( resultMap == null || map == null || map.isEmpty() ){ return; } diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java index fd87c8cfdf7..292a27ca5d0 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/contentassist/ContentAssistTests.java @@ -193,4 +193,25 @@ public class ContentAssistTests extends TestCase { assertEquals( results[1].getDisplayString(), "IDIOT" ); //$NON-NLS-1$ assertEquals( results[2].getDisplayString(), "NORMAL" ); //$NON-NLS-1$ } + + public void testBug72559() throws Exception { + StringWriter writer = new StringWriter(); + writer.write("void foo(){ \n"); //$NON-NLS-1$ + writer.write(" int var; \n"); //$NON-NLS-1$ + writer.write(" { \n"); //$NON-NLS-1$ + writer.write(" float var; \n"); //$NON-NLS-1$ + writer.write(" v \n"); //$NON-NLS-1$ + writer.write(" } \n"); //$NON-NLS-1$ + writer.write("} \n"); //$NON-NLS-1$ + + String code = writer.toString(); + IFile cu = importFile( "t.cpp", code ); //$NON-NLS-1$ + ICompletionProposal [] results = getResults( cu, code.indexOf( "v " ) + 1 ); //$NON-NLS-1$ + + assertEquals( results.length, 4 ); + assertEquals( results[0].getDisplayString(), "var : float" ); //$NON-NLS-1$ + assertEquals( results[1].getDisplayString(), "virtual" ); //$NON-NLS-1$ + assertEquals( results[2].getDisplayString(), "void" ); //$NON-NLS-1$ + assertEquals( results[3].getDisplayString(), "volatile" ); //$NON-NLS-1$ + } }