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.
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