1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
|
// Parser.cs
//
// This file was derived from a file from #Develop.
//
// Copyright (C) 2001-2007 Andrea Paatz <andrea@icsharpcode.net>
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation; either version 2 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program; if not, write to the Free Software
// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
using System;
using System.Drawing;
using System.Collections;
using MonoDevelop.Core;
using MonoDevelop.Projects.Parser;
using JavaBinding.Parser.SharpDevelopTree;
using JRefactory.Parser;
namespace JavaBinding.Parser
{
public class TParser : IParser
{
///<summary>IParser Interface</summary>
string[] lexerTags;
public string[] LexerTags {
set {
lexerTags = value;
}
}
public IExpressionFinder ExpressionFinder {
get {
return new ExpressionFinder();
}
}
void RetrieveRegions(CompilationUnit cu, SpecialTracker tracker)
{
for (int i = 0; i < tracker.CurrentSpecials.Count; ++i) {
PreProcessingDirective directive = tracker.CurrentSpecials[i] as PreProcessingDirective;
if (directive != null) {
if (directive.Cmd == "#region") {
int deep = 1;
for (int j = i + 1; j < tracker.CurrentSpecials.Count; ++j) {
PreProcessingDirective nextDirective = tracker.CurrentSpecials[j] as PreProcessingDirective;
if (nextDirective != null) {
switch (nextDirective.Cmd) {
case "#region":
++deep;
break;
case "#endregion":
--deep;
if (deep == 0) {
cu.FoldingRegions.Add(new FoldingRegion(directive.Arg.Trim(), new DefaultRegion(directive.Start, new Point(nextDirective.End.X - 2, nextDirective.End.Y))));
goto end;
}
break;
}
}
}
end: ;
}
}
}
}
public ICompilationUnitBase Parse(string fileName)
{
Console.WriteLine ("*****");
JRefactory.Parser.Parser p = new JRefactory.Parser.Parser();
Lexer lexer = new Lexer(new FileReader(fileName));
p.Parse(lexer);
JavaVisitor visitor = new JavaVisitor ();
visitor.Visit(p.compilationUnit, null);
visitor.Cu.ErrorsDuringCompile = p.Errors.count > 0;
RetrieveRegions(visitor.Cu, lexer.SpecialTracker);
return visitor.Cu;
}
public ICompilationUnitBase Parse(string fileName, string fileContent)
{
JRefactory.Parser.Parser p = new JRefactory.Parser.Parser();
Lexer lexer = new Lexer(new StringReader(fileContent));
p.Parse(lexer);
JavaVisitor visitor = new JavaVisitor ();
visitor.Visit(p.compilationUnit, null);
visitor.Cu.ErrorsDuringCompile = p.Errors.count > 0;
visitor.Cu.Tag = p.compilationUnit;
RetrieveRegions(visitor.Cu, lexer.SpecialTracker);
return visitor.Cu;
}
public LanguageItemCollection CtrlSpace(IParserContext parserService, int caretLine, int caretColumn, string fileName)
{
return new Resolver().CtrlSpace(parserService, caretLine, caretColumn, fileName);
}
public ResolveResult Resolve(IParserContext parserService, string expression, int caretLineNumber, int caretColumn, string fileName, string fileContent)
{
return new Resolver().Resolve(parserService, expression, caretLineNumber, caretColumn, fileName, fileContent);
}
public bool HandlesFileExtension(string fileExtension){
if(fileExtension == null) return false;
return (fileExtension.ToLower() == ".java");
}
///////// IParser Interface END
}
}
|