Skip to content

Commit 4bf6d20

Browse files
convert SqlDevParser to Java
1 parent 3743931 commit 4bf6d20

1 file changed

Lines changed: 46 additions & 38 deletions

File tree

Lines changed: 46 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
1-
/* Copyright 2018 Philipp Salvisberg <philipp.salvisberg@trivadis.com>
1+
/*
2+
* Copyright 2018 Philipp Salvisberg <philipp.salvisberg@trivadis.com>
23
*
34
* Licensed under the Apache License, Version 2.0 (the "License");
45
* you may not use this file except in compliance with the License.
@@ -12,49 +13,56 @@
1213
* See the License for the specific language governing permissions and
1314
* limitations under the License.
1415
*/
15-
package org.utplsql.sqldev.parser
16+
package org.utplsql.sqldev.parser;
17+
18+
import java.util.List;
19+
import java.util.Optional;
20+
import java.util.Set;
1621

17-
import oracle.dbtools.parser.LexerToken
18-
import oracle.dbtools.raptor.navigator.plsql.PlSqlArguments
19-
import oracle.dbtools.raptor.navigator.plsql.PlsqlStructureParser
22+
import oracle.dbtools.parser.LexerToken;
23+
import oracle.dbtools.raptor.navigator.plsql.Member;
24+
import oracle.dbtools.raptor.navigator.plsql.PlSqlArguments;
25+
import oracle.dbtools.raptor.navigator.plsql.PlsqlStructureParser;
2026

2127
/*
2228
* Cannot use this class within SQL Developer because the
2329
* package oracle.dbtools.parser is not exported in sqldeveloper OSGI bundle (extension)
2430
* (throws ClassNotFoundException at runtime).
2531
*
26-
* The dbtools-common.jar contains the necessary packages,
27-
* but it cannot be distributed with the utPLSQL extension
32+
* The dbtools-common.jar contains the necessary packages,
33+
* but it cannot be distributed with the utPLSQL extension
2834
* without violating the Oracle license agreement.
2935
*/
30-
class SqlDevParser {
31-
def getMembers(String plsql) {
32-
val tokens = LexerToken.parse(plsql)
33-
val parser = new PlsqlStructureParser
34-
parser.parse(tokens, PlSqlArguments.sort)
35-
return parser.children
36-
}
37-
38-
private def getStartLine(String plsql, int offset) {
39-
var int line = 1
40-
for (var i = 0; i < plsql.length; i++) {
41-
val c = plsql.substring(i, i+1)
42-
if (i > offset) {
43-
return line
44-
} else if (c == '\n') {
45-
line = line + 1
46-
}
47-
}
48-
return line
49-
}
50-
51-
def getMemberStartLine(String plsql, String memberName) {
52-
val members = plsql.members
53-
val member = members.findFirst[it.name.equalsIgnoreCase(memberName)]
54-
if (member !== null) {
55-
return getStartLine(plsql, member.codeOffset)
56-
} else {
57-
1
58-
}
59-
}
60-
}
36+
public class SqlDevParser {
37+
38+
@SuppressWarnings("unchecked")
39+
public Set<Member> getMembers(final String plsql) {
40+
final List<LexerToken> tokens = LexerToken.parse(plsql);
41+
final PlsqlStructureParser parser = new PlsqlStructureParser();
42+
parser.parse(tokens, PlSqlArguments.getSort());
43+
return parser.children;
44+
}
45+
46+
private int getStartLine(final String plsql, final int offset) {
47+
int line = 1;
48+
for (int i = 0; i < plsql.length(); i++) {
49+
final String c = plsql.substring(i, i + 1);
50+
if (i > offset) {
51+
return line;
52+
} else if ("\n".equals(c)) {
53+
line = line + 1;
54+
}
55+
}
56+
return line;
57+
}
58+
59+
public int getMemberStartLine(final String plsql, final String memberName) {
60+
final Set<Member> members = this.getMembers(plsql);
61+
final Optional<Member> member = members.stream().filter(it -> it.name.equalsIgnoreCase(memberName)).findFirst();
62+
if (member.isPresent()) {
63+
return this.getStartLine(plsql, member.get().codeOffset);
64+
} else {
65+
return 1;
66+
}
67+
}
68+
}

0 commit comments

Comments
 (0)