diff --git a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CAutoIndentTest.java b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CAutoIndentTest.java index 8e4471ba2d5..270b9573d34 100644 --- a/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CAutoIndentTest.java +++ b/core/org.eclipse.cdt.ui.tests/ui/org/eclipse/cdt/ui/tests/text/CAutoIndentTest.java @@ -426,6 +426,7 @@ public class CAutoIndentTest extends TestCase { public void testBracketWithSemiColonInsertion() throws BadLocationException { AutoEditTester tester = createAutoEditTester(); String[] kw= new String[] {"class", "union", "struct", "enum"}; + String[] kw_inh= new String[] {"class", "union", "struct"}; String[] kw_anon= new String[] {"union", "struct", "enum"}; for(int i=0; itrue if this looks like a case statement + */ + private boolean looksLikeCaseStatement() { + nextToken(); + switch (fToken) { + case Symbols.TokenIDENT: + nextToken(); + while (skipQualifiers()) { + nextToken(); + } + switch (fToken) { + case Symbols.TokenCASE: + case Symbols.TokenCLASS: + case Symbols.TokenSTRUCT: + case Symbols.TokenUNION: + return true; + } + break; + case Symbols.TokenOTHER: + nextToken(); + switch (fToken) { + case Symbols.TokenCASE: + return true; + } + case Symbols.TokenRPAREN: // constructor initializer + case Symbols.TokenDEFAULT: + case Symbols.TokenPUBLIC: + case Symbols.TokenPROTECTED: + case Symbols.TokenPRIVATE: + return true; + } + return false; + } + /** * Skips to the start of a statement that ends at the current position. * @@ -1020,6 +1063,8 @@ public final class CIndenter { case Symbols.TokenCLASS: case Symbols.TokenENUM: + case Symbols.TokenSTRUCT: + case Symbols.TokenUNION: isTypeBody= true; break; @@ -1133,18 +1178,32 @@ public final class CIndenter { */ private boolean isConditional() { while (true) { + int previous= fToken; nextToken(); switch (fToken) { // search for case labels, which consist of (possibly qualified) identifiers or numbers case Symbols.TokenIDENT: - case Symbols.TokenOTHER: // dots for qualified constants + if (previous == Symbols.TokenIDENT) { + return false; + } + case Symbols.TokenDOUBLECOLON: + case Symbols.TokenOTHER: continue; - + + case Symbols.TokenQUESTIONMARK: + return true; + + case Symbols.TokenSEMICOLON: + case Symbols.TokenLBRACE: + case Symbols.TokenRBRACE: case Symbols.TokenCASE: case Symbols.TokenDEFAULT: case Symbols.TokenPUBLIC: case Symbols.TokenPROTECTED: case Symbols.TokenPRIVATE: + case Symbols.TokenCLASS: + case Symbols.TokenSTRUCT: + case Symbols.TokenUNION: return false; default: @@ -1618,13 +1677,10 @@ public final class CIndenter { * will be an IDENT. */ private boolean skipQualifiers() { - if (fToken == Symbols.TokenCOLON) { + if (fToken == Symbols.TokenDOUBLECOLON) { nextToken(); - if (fToken == Symbols.TokenCOLON) { - nextToken(); - if (fToken == Symbols.TokenIDENT) { - return true; - } + if (fToken == Symbols.TokenIDENT) { + return true; } } return false; diff --git a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/Symbols.java b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/Symbols.java index 9bfc034e706..9196516c2b7 100644 --- a/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/Symbols.java +++ b/core/org.eclipse.cdt.ui/src/org/eclipse/cdt/internal/ui/text/Symbols.java @@ -36,6 +36,7 @@ public interface Symbols { int TokenTILDE= 17; int TokenSHIFTRIGHT= 18; int TokenARROW= 19; + int TokenDOUBLECOLON= 20; int TokenIF= 109; int TokenDO= 1010; int TokenFOR= 1011;