From: Daniel Jasper Date: Wed, 3 Dec 2014 13:20:49 +0000 (+0000) Subject: clang-format: Fix expression parser not closing stuff at end of stmt. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=54986d9842c374bd554ec358e1ee9e06e7d9c2b8;p=clang clang-format: Fix expression parser not closing stuff at end of stmt. Uncovered by a Java test case: Before: public some.package.Type someFunction( // comment int parameter) {} After: public some.package.Type someFunction( // comment int parameter) {} git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@223228 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Format/TokenAnnotator.cpp b/lib/Format/TokenAnnotator.cpp index 6c04a014a1..3b04e49ba5 100644 --- a/lib/Format/TokenAnnotator.cpp +++ b/lib/Format/TokenAnnotator.cpp @@ -1147,16 +1147,7 @@ public: (CurrentPrecedence != -1 && CurrentPrecedence < Precedence) || (CurrentPrecedence == prec::Conditional && Precedence == prec::Assignment && Current->is(tok::colon))) { - if (LatestOperator) { - LatestOperator->LastOperator = true; - if (Precedence == PrecedenceArrowAndPeriod) { - // Call expressions don't have a binary operator precedence. - addFakeParenthesis(Start, prec::Unknown); - } else { - addFakeParenthesis(Start, prec::Level(Precedence)); - } - } - return; + break; } // Consume scopes: (), [], <> and {} @@ -1176,6 +1167,16 @@ public: next(/*SkipPastLeadingComments=*/Precedence > 0); } } + + if (LatestOperator && (Current || Precedence > 0)) { + LatestOperator->LastOperator = true; + if (Precedence == PrecedenceArrowAndPeriod) { + // Call expressions don't have a binary operator precedence. + addFakeParenthesis(Start, prec::Unknown); + } else { + addFakeParenthesis(Start, prec::Level(Precedence)); + } + } } private: diff --git a/unittests/Format/FormatTestJava.cpp b/unittests/Format/FormatTestJava.cpp index ad80d1377a..5b677ef00b 100644 --- a/unittests/Format/FormatTestJava.cpp +++ b/unittests/Format/FormatTestJava.cpp @@ -84,6 +84,11 @@ TEST_F(FormatTestJava, Chromium) { getChromiumStyle(FormatStyle::LK_Java)); } +TEST_F(FormatTestJava, QualifiedNames) { + verifyFormat("public some.package.Type someFunction( // comment\n" + " int parameter) {}"); +} + TEST_F(FormatTestJava, ClassKeyword) { verifyFormat("SomeClass.class.getName();"); verifyFormat("Class c = SomeClass.class;");