Indentation fix for cursors release701
authorSasanka Dharmasena <sasankad@netbeans.org>
Mon, 24 Oct 2011 09:24:58 +0530
branchrelease701
changeset 50f49df7113623
parent 49 cc34c3c258f1
child 51 bf575c53c779
Indentation fix for cursors
PLSQL/Formatter/src/org/netbeans/modules/plsql/format/PlsqlFormatter.java
     1.1 --- a/PLSQL/Formatter/src/org/netbeans/modules/plsql/format/PlsqlFormatter.java	Wed Oct 19 11:29:26 2011 +0200
     1.2 +++ b/PLSQL/Formatter/src/org/netbeans/modules/plsql/format/PlsqlFormatter.java	Mon Oct 24 09:24:58 2011 +0530
     1.3 @@ -555,7 +555,7 @@
     1.4  
     1.5          private boolean checkUpperCaseAllowed(TokenItem token) {
     1.6              TokenItem previousToken = getPreviousNonWhiteSpaceToken(token);
     1.7 -            if (previousToken != null && (previousToken.getImage().trim().equalsIgnoreCase("PROCEDURE") || previousToken.getImage().trim().equalsIgnoreCase("FUNCTION") || (previousToken.getImage().trim().equalsIgnoreCase("END") && !(token.getImage().trim().equalsIgnoreCase("IF") || token.getImage().trim().equalsIgnoreCase("LOOP") || token.getImage().trim().equalsIgnoreCase("CASE")) ))) {
     1.8 +            if (previousToken != null && (previousToken.getImage().trim().equalsIgnoreCase("PROCEDURE") || previousToken.getImage().trim().equalsIgnoreCase("FUNCTION") || (previousToken.getImage().trim().equalsIgnoreCase("END") && !(token.getImage().trim().equalsIgnoreCase("IF") || token.getImage().trim().equalsIgnoreCase("LOOP") || token.getImage().trim().equalsIgnoreCase("CASE"))))) {
     1.9                  return false;
    1.10              } else {
    1.11                  return true;
    1.12 @@ -636,20 +636,43 @@
    1.13                      if ((tmp.getImage().trim().equalsIgnoreCase("CURSOR"))
    1.14                              || (tmp.getImage().trim().equalsIgnoreCase("TYPE"))) {
    1.15                          tokenTemp = getPreviousToken(tokenTemp);
    1.16 -                    } else {
    1.17 -                        tokenParent = tokenTemp;
    1.18 -                        break;
    1.19 +                    } else { // if it's not the cursor, first check whether previousToken is a ')', in cases where CURSOR consists of parameters in multiple lines
    1.20 +                        TokenItem previousToken = getPreviousNonWhiteSpaceToken(tokenTemp);
    1.21 +                        if (previousToken != null && previousToken.getTokenID().getNumericID() == PlsqlTokenContext.RPAREN_ID) {
    1.22 +                            FormatTokenPosition cursorStartLine = getMethodStartPosition(previousToken);
    1.23 +                            TokenItem tmpCursorItem = findLineFirstNonWhitespace(cursorStartLine).getToken();
    1.24 +                            if ((tmpCursorItem.getImage().trim().equalsIgnoreCase("CURSOR"))
    1.25 +                                    || (tmpCursorItem.getImage().trim().equalsIgnoreCase("TYPE"))) {
    1.26 +                                tokenTemp = getPreviousToken(tokenTemp);
    1.27 +                            } else { // still it's not the 'CURSOR', and it's 'IS' or "PROCEDURE" or "FUNCTION", it's the parent
    1.28 +                                if (tmp.getImage().trim().equalsIgnoreCase("IS") || tmp.getImage().trim().equalsIgnoreCase("PROCEDURE") || tmp.getImage().trim().equalsIgnoreCase("FUNCTION")) {
    1.29 +                                    tokenParent = tokenTemp;
    1.30 +                                    break;
    1.31 +                                } else {
    1.32 +                                    tokenTemp = getPreviousToken(tokenTemp);
    1.33 +                                }
    1.34 +                            }
    1.35 +                        } else { // if the token is 'IS' or "PROCEDURE" or "FUNCTION", it should be the parent line
    1.36 +                            if (tmp.getImage().trim().equalsIgnoreCase("IS") || tmp.getImage().trim().equalsIgnoreCase("PROCEDURE") || tmp.getImage().trim().equalsIgnoreCase("FUNCTION")) {
    1.37 +                                tokenParent = tokenTemp;
    1.38 +                                break;
    1.39 +                            } else {
    1.40 +                                tokenTemp = getPreviousToken(tokenTemp);
    1.41 +                            }
    1.42 +                        }
    1.43                      }
    1.44                  } else if (imageTmp.equalsIgnoreCase("BEGIN")) {
    1.45                      break;
    1.46                  } else if (imageTmp.equalsIgnoreCase("END")) {
    1.47 +                    TokenItem nextToken = getNextNonWhiteSpaceToken(tokenTemp);
    1.48 +
    1.49                      //If this is an end of a function/procedure declaration inside function
    1.50                      TokenItem temp = getPreviousToken(tokenTemp);
    1.51  
    1.52                      if (temp != null) {
    1.53                          tokenTemp = getEndParent(temp);
    1.54 -
    1.55 -                        if (tokenTemp.getImage().trim().equalsIgnoreCase("BEGIN")) {
    1.56 +                        // check whether this is not just BEGIN/END block. i.e it's part of function/procedure BEGIN
    1.57 +                        if (tokenTemp.getImage().trim().equalsIgnoreCase("BEGIN") && !nextToken.getImage().trim().equals(";")) {
    1.58                              temp = getPreviousToken(tokenTemp);
    1.59  
    1.60                              if (temp != null) {
    1.61 @@ -984,14 +1007,14 @@
    1.62                      }
    1.63                  } else if (previousNWS.getImage().trim().equalsIgnoreCase(">")) {
    1.64                      //This will be useful for only the placeholders inside a template
    1.65 -	if (getPreviousKeyword(previousNWS) != null) {
    1.66 -	    String previousKeyword = getPreviousKeyword(previousNWS).getImage().trim();
    1.67 +                    if (getPreviousKeyword(previousNWS) != null) {
    1.68 +                        String previousKeyword = getPreviousKeyword(previousNWS).getImage().trim();
    1.69  
    1.70 -	    if ((previousKeyword.equalsIgnoreCase("SELECT"))
    1.71 -	            || (previousKeyword.equalsIgnoreCase("UPDATE"))) {
    1.72 -	        return getTabSize();
    1.73 -	    }
    1.74 -	}
    1.75 +                        if ((previousKeyword.equalsIgnoreCase("SELECT"))
    1.76 +                                || (previousKeyword.equalsIgnoreCase("UPDATE"))) {
    1.77 +                            return getTabSize();
    1.78 +                        }
    1.79 +                    }
    1.80                  } else if (previousNWS.getImage().trim().equalsIgnoreCase(",")) {
    1.81                      //This will be useful for SELECT , UPDATE , INTO variables
    1.82                      TokenItem first = findLineFirstNonWhitespace(getPosition(previousNWS, 0)).getToken();