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();