bug 1037094, to much indentation for first comment in a function parameters and defau...
[phpeclipse.git] / net.sourceforge.phpeclipse / src / net / sourceforge / phpdt / internal / formatter / CodeFormatter.java
index 434287e..f5d3ea3 100644 (file)
@@ -511,14 +511,24 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
             pendingSpace = false;
           }
         }
+        // don't linebreak empty array declarations
+        if (token == TokenNameRPAREN && arrayDeclarationCount > 0) {
+               if (previousCompilableToken == TokenNameLPAREN) {
+                       pendingNewLines = 0;
+               }
+        }
         // Add pending new lines to the formatted source string.
         // Note: pending new lines are not added if the current token
         // is a single line comment or whitespace.
         // if the comment is between parenthesis, there is no blank line
         // preservation
         // (if it's a one-line comment, a blank line is added after it).
-        if (((pendingNewLines > 0 && (!isComment(token)))
-            || (newLinesInWhitespace > 0 && (openParenthesisCount <= 1 && isComment(token))) || (previousCompilableToken == TokenNameLBRACE && token == TokenNameRBRACE))
+        if ((
+               (pendingNewLines > 0 && (!isComment(token)))
+            || (newLinesInWhitespace > 0 && (openParenthesisCount <= 1 && isComment(token)))
+            || (previousCompilableToken == TokenNameLBRACE && token == TokenNameRBRACE)
+            || (newLinesInWhitespace > 0 && previousCompilableToken == TokenNameDOT)
+            )
             && token != Scanner.TokenNameWHITESPACE) {
           // Do not add newline & indent between an adjoining close brace and
           // close paren. Anonymous inner classes may use this form.
@@ -690,7 +700,9 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
             // check for closing array declaration
             if (arrayDeclarationCount>0) {
                if (arrayDeclarationParenthesis[arrayDeclarationCount]==openParenthesis[openParenthesisCount]) {
-                       newLine(1);
+                       if (previousCompilableToken != TokenNameLPAREN) {
+                               newLine(1);
+                       }
                        indentationLevel--;
                        currentLineIndentationLevel = indentationLevel;
                     pendingNewLines = 0;
@@ -728,6 +740,7 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
               // Add new line and increase indentation level after open brace.
               pendingNewLines = 1;
               indentationLevel += pushBlock();
+              inAssignment = false;
             }
           }
           break;
@@ -791,6 +804,7 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
           }
           break;
         case TokenNameDOT:
+               space();
           pendingSpace = false;
           break;
         case TokenNameSEMICOLON:
@@ -1108,6 +1122,13 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
    * @deprecated There is no need to retrieve the mapped positions anymore.
    */
   public int[] getMappedPositions() {
+       if (null!=mappedPositions) {
+               for (int i=0;i<mappedPositions.length;i++) {
+                       if (mappedPositions[i]>=formattedSource.length()) {
+                               mappedPositions[i]=formattedSource.length()-1;
+                       }
+               }
+       }
     return mappedPositions;
   }
 
@@ -1252,7 +1273,6 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
     case TokenNameLPAREN:
     case TokenNameNOT:
     case TokenNameTWIDDLE:
-    case TokenNameDOT:
     case 0:
     // no token
     case TokenNameWHITESPACE:
@@ -2479,7 +2499,7 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
       if (posToMap < 0 || posToMap >= sourceLength) {
         // protection against out of bounds position
         if (posToMap == sourceLength) {
-          mappedPositions[indexToMap] = formattedSource.length()-1;
+          mappedPositions[indexToMap] = formattedSource.length();
         }
         indexToMap = positionsToMap.length; // no more mapping
         return;
@@ -2492,9 +2512,6 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
         } else {
           mappedPositions[indexToMap] = posToMap + globalDelta + lineDelta;
         }
-        if (mappedPositions[indexToMap]>=formattedSource.length()) {
-               mappedPositions[indexToMap]=formattedSource.length()-1;
-        }
       }
       indexToMap++;
     }
@@ -2506,9 +2523,6 @@ public class CodeFormatter implements ITerminalSymbols, ICodeFormatter {
     while (indexInMap < mappedPositions.length && startPosition <= mappedPositions[indexInMap]
         && mappedPositions[indexInMap] < endPosition && indexInMap < indexToMap) {
       mappedPositions[indexInMap] += splitDelta;
-      if (mappedPositions[indexInMap]>=formattedSource.length()) {
-       mappedPositions[indexInMap]=formattedSource.length()-1;
-      }
       indexInMap++;
     }
   }