Skip to content

Commit 5b692bc

Browse files
committed
Simplified CodeFileSrc generic signature. Added interfaces and setup entire parsing process to be generic (added CodeLanguage.getExtractor() and AstExtractor interface). Refactored C# classes to support this more generic approach. Removed IntermClass.getBlockTree(), it should be tracked higher up in the parsing process. Added Simple and Resolved sub-classes of ProjectClassSet. Renamed CsMain -> ParserMain.
1 parent b2727d8 commit 5b692bc

28 files changed

+879
-164
lines changed

.classpath

+2-2
Original file line numberDiff line numberDiff line change
@@ -7,8 +7,7 @@
77
<classpathentry kind="lib" path="C:/Users/TeamworkGuy2/Documents/Java/Libraries/jtext-util/jar/jtext_util.jar" sourcepath="/JTextUtility"/>
88
<classpathentry kind="lib" path="C:/Users/TeamworkGuy2/Documents/Java/Libraries/jdata-util/jar/jdata_util.jar" sourcepath="/JDataUtility"/>
99
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/TestUtil"/>
10-
<classpathentry kind="lib" path="C:/Users/TeamworkGuy2/Documents/Java/Libraries/jcollection-util/jar/jcollection_util.jar" sourcepath="/JCollectionUtility"/>
11-
<classpathentry kind="lib" path="C:/Users/TeamworkGuy2/Documents/Java/Libraries/data-transfer/jar/data_transfer.jar" sourcepath="/DataTransfer/src"/>
10+
<classpathentry kind="lib" path="C:/Users/TeamworkGuy2/Documents/Java/Libraries/jcollection-util/jar/jcollection_util.jar" sourcepath="/JCollectionUtil"/>
1211
<classpathentry kind="lib" path="C:/Users/TeamworkGuy2/Documents/Java/Libraries/jprimitive-collections/jar/jprimitive_collections.jar" sourcepath="/JPrimitiveCollections"/>
1312
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/Lombok"/>
1413
<classpathentry kind="lib" path="C:/Users/TeamworkGuy2/Documents/Java/Libraries/jsimple-types/jar/jsimple_types.jar" sourcepath="/JSimpleTypes/src"/>
@@ -23,5 +22,6 @@
2322
<classpathentry kind="lib" path="C:/Users/TeamworkGuy2/Documents/Java/Libraries/jfile-io/jar/jfile_io.jar" sourcepath="/JFileIo"/>
2423
<classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/TemplateUtil"/>
2524
<classpathentry kind="lib" path="C:/Users/TeamworkGuy2/Documents/Java/Libraries/jtree-walker/jar/jtree_walker.jar" sourcepath="/JTreeWalker"/>
25+
<classpathentry kind="lib" path="C:/Users/TeamworkGuy2/Documents/Java/Libraries/data-transfer/jar/data_transfer.jar"/>
2626
<classpathentry kind="output" path="bin"/>
2727
</classpath>

README.md

+2-1
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
ParserToolsTmp
22
==============
3+
version: 0.2.0
34

4-
In progress parser tools built atop [JTextParser] (https://github.com/TeamworkGuy2/JTextParser) and half a dozen other utility libraries.
5+
In progress parser tools built atop [JTextParser] (https://github.com/TeamworkGuy2/JTextParser), [Jackson] (https://github.com/FasterXML/jackson-core/) (core, databind, annotations) and half a dozen other utility libraries.
56

67
####The goal:
78
* A competent source code parser that can turn C#, Java, or JavaScript/TypeScript code into a simple AST like structure ('competent' meaning this project aims to support common use cases, not every syntatic feature of the supported languages).
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
package twg2.parser.codeParser;
2+
3+
import java.util.List;
4+
import java.util.Map.Entry;
5+
6+
import twg2.parser.baseAst.CompoundBlock;
7+
import twg2.parser.documentParser.DocumentFragmentText;
8+
import twg2.parser.intermAst.classes.IntermClass;
9+
import twg2.treeLike.simpleTree.SimpleTree;
10+
11+
/**
12+
* @param <T_BLOCK> the type of {@link CompoundBlock} that this extract can extract
13+
* @author TeamworkGuy2
14+
* @since 2016-1-6
15+
*/
16+
public interface AstExtractor<T_BLOCK extends CompoundBlock> {
17+
18+
public List<Entry<SimpleTree<DocumentFragmentText<CodeFragmentType>>, IntermClass.SimpleImpl<T_BLOCK>>> extractClassFieldsAndMethodSignatures(SimpleTree<DocumentFragmentText<CodeFragmentType>> astTree);
19+
20+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
package twg2.parser.codeParser;
2+
3+
import lombok.AllArgsConstructor;
4+
import lombok.Getter;
5+
import twg2.parser.baseAst.CompoundBlock;
6+
import twg2.parser.documentParser.DocumentFragmentText;
7+
import twg2.parser.intermAst.classes.IntermClass;
8+
import twg2.parser.intermAst.classes.IntermClassSig;
9+
import twg2.parser.output.JsonWritableSig;
10+
import twg2.treeLike.simpleTree.SimpleTree;
11+
12+
/**
13+
* @author TeamworkGuy2
14+
* @since 2016-1-9
15+
*/
16+
@AllArgsConstructor
17+
public class CodeFileParsed<T_ID, T_CLASS extends IntermClass<? extends IntermClassSig, ? extends JsonWritableSig, ? extends CompoundBlock>> {
18+
@Getter T_ID id;
19+
@Getter T_CLASS parsedClass;
20+
@Getter SimpleTree<DocumentFragmentText<CodeFragmentType>> astTree;
21+
22+
23+
24+
25+
public static class Simple<T_ID, T_BLOCK extends CompoundBlock> extends CodeFileParsed<T_ID, IntermClass.SimpleImpl<T_BLOCK>> {
26+
27+
public Simple(T_ID id, IntermClass.SimpleImpl<T_BLOCK> parsedClass, SimpleTree<DocumentFragmentText<CodeFragmentType>> astTree) {
28+
super(id, parsedClass, astTree);
29+
}
30+
31+
}
32+
33+
34+
35+
36+
public static class Resolved<T_ID, T_BLOCK extends CompoundBlock> extends CodeFileParsed<T_ID, IntermClass.ResolvedImpl<T_BLOCK>> {
37+
38+
public Resolved(T_ID id, IntermClass.ResolvedImpl<T_BLOCK> parsedClass, SimpleTree<DocumentFragmentText<CodeFragmentType>> astTree) {
39+
super(id, parsedClass, astTree);
40+
}
41+
42+
}
43+
44+
}

src/twg2/parser/codeParser/CodeFileSrc.java

+6-5
Original file line numberDiff line numberDiff line change
@@ -3,16 +3,17 @@
33
import java.util.List;
44

55
import lombok.Getter;
6+
import twg2.parser.documentParser.DocumentFragmentText;
67
import twg2.treeLike.simpleTree.SimpleTree;
78

8-
/**
9+
/** All the information resulting from building a source string into an AST.
10+
* Contains an {@link DocumentFragmentText} AST tree, source name, source string, source string as list of lines, and a language.
911
* @author TeamworkGuy2
1012
* @since 2015-11-22
11-
* @param <T_TREE> the type of {@link SimpleTree} data stored in this code file's parsed {@link #getDoc()} structure
1213
* @param <T_LANG> the code language of the source file
1314
*/
14-
public class CodeFileSrc<T_TREE, T_LANG extends CodeLanguage> {
15-
@Getter SimpleTree<T_TREE> doc;
15+
public class CodeFileSrc<T_LANG extends CodeLanguage> {
16+
@Getter SimpleTree<DocumentFragmentText<CodeFragmentType>> doc;
1617
@Getter String srcName;
1718
@Getter String src;
1819
@Getter List<String> lines;
@@ -25,7 +26,7 @@ public class CodeFileSrc<T_TREE, T_LANG extends CodeLanguage> {
2526
* @param lines
2627
* @param language optional
2728
*/
28-
public CodeFileSrc(SimpleTree<T_TREE> doc, String srcName, String src, List<String> lines, T_LANG language) {
29+
public CodeFileSrc(SimpleTree<DocumentFragmentText<CodeFragmentType>> doc, String srcName, String src, List<String> lines, T_LANG language) {
2930
this.doc = doc;
3031
this.srcName = srcName;
3132
this.src = src;

src/twg2/parser/codeParser/CodeLanguage.java

+4-2
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@
33
import java.util.List;
44
import java.util.function.Function;
55

6+
import twg2.parser.baseAst.CompoundBlock;
67
import twg2.parser.baseAst.LanguageAstUtil;
7-
import twg2.parser.documentParser.DocumentFragmentText;
88

99
/**
1010
* @author TeamworkGuy2
@@ -18,6 +18,8 @@ public interface CodeLanguage {
1818

1919
public List<String> getFileExtensions();
2020

21-
public Function<ParseInput, ? extends CodeFileSrc<DocumentFragmentText<CodeFragmentType>, ? extends CodeLanguage>> getParser();
21+
public Function<ParseInput, ? extends CodeFileSrc<? extends CodeLanguage>> getParser();
22+
23+
public AstExtractor<? extends CompoundBlock> getExtractor();
2224

2325
}

src/twg2/parser/codeParser/CodeLanguageOptions.java

+20-17
Original file line numberDiff line numberDiff line change
@@ -8,30 +8,32 @@
88

99
import lombok.Getter;
1010
import lombok.val;
11+
import twg2.parser.baseAst.CompoundBlock;
1112
import twg2.parser.baseAst.LanguageAstUtil;
1213
import twg2.parser.baseAst.csharp.CsAstUtil;
14+
import twg2.parser.codeParser.csharp.CsBlock;
15+
import twg2.parser.codeParser.csharp.CsBlockParser;
1316
import twg2.parser.codeParser.csharp.CsClassParser;
14-
import twg2.parser.documentParser.DocumentFragmentText;
1517

1618
/**
1719
* @author TeamworkGuy2
1820
* @since 2015-9-19
1921
*/
20-
public class CodeLanguageOptions<T_LANG extends CodeLanguage, T_AST_UTIL extends LanguageAstUtil> implements CodeLanguage {
22+
public class CodeLanguageOptions<T_LANG extends CodeLanguage, T_AST_UTIL extends LanguageAstUtil, T_AST_EXTRACTOR extends AstExtractor<? extends CompoundBlock>> implements CodeLanguage {
2123

22-
public static class CSharp extends CodeLanguageOptions<CSharp, CsAstUtil> {
23-
CSharp(String displayName, CsAstUtil astUtil, Function<ParseInput, CodeFileSrc<DocumentFragmentText<CodeFragmentType>, CSharp>> parser, String... fileExtensions) {
24-
super(displayName, astUtil, parser, fileExtensions);
24+
public static class CSharp extends CodeLanguageOptions<CSharp, CsAstUtil, AstExtractor<CsBlock>> {
25+
CSharp(String displayName, CsAstUtil astUtil, Function<ParseInput, CodeFileSrc<CSharp>> parser, AstExtractor<CsBlock> extractor, String... fileExtensions) {
26+
super(displayName, astUtil, parser, extractor, fileExtensions);
2527
}
2628

2729
}
2830

2931

30-
public static final CodeLanguageOptions<CodeLanguage, LanguageAstUtil> JAVA = new CodeLanguageOptions<>("Java", null, null, "java");
31-
public static final CodeLanguageOptions<CodeLanguage, LanguageAstUtil> JAVASCRIPT = new CodeLanguageOptions<>("Javascript", null, null, "js", "ts");
32-
public static final CSharp C_SHARP = new CSharp("C#", new CsAstUtil(), CsClassParser::parse, "cs");
33-
public static final CodeLanguageOptions<CodeLanguage, LanguageAstUtil> CSS = new CodeLanguageOptions<>("CSS", (LanguageAstUtil)null, null, "css");
34-
public static final CodeLanguageOptions<CodeLanguage, LanguageAstUtil> XML = new CodeLanguageOptions<>("XML", null, null, "html", "xml");
32+
public static final CodeLanguageOptions<CodeLanguage, LanguageAstUtil, AstExtractor<CompoundBlock>> JAVA = new CodeLanguageOptions<>("Java", (LanguageAstUtil)null, null, null, "java");
33+
public static final CodeLanguageOptions<CodeLanguage, LanguageAstUtil, AstExtractor<CompoundBlock>> JAVASCRIPT = new CodeLanguageOptions<>("Javascript", (LanguageAstUtil)null, null, null, "js", "ts");
34+
public static final CSharp C_SHARP = new CSharp("C#", new CsAstUtil(), CsClassParser::parse, new CsBlockParser(), "cs");
35+
public static final CodeLanguageOptions<CodeLanguage, LanguageAstUtil, AstExtractor<CompoundBlock>> CSS = new CodeLanguageOptions<>("CSS", (LanguageAstUtil)null, null, null, "css");
36+
public static final CodeLanguageOptions<CodeLanguage, LanguageAstUtil, AstExtractor<CompoundBlock>> XML = new CodeLanguageOptions<>("XML", (LanguageAstUtil)null, null, null, "html", "xml");
3537

3638
private static CopyOnWriteArrayList<CodeLanguage> values;
3739

@@ -47,18 +49,19 @@ public static class CSharp extends CodeLanguageOptions<CSharp, CsAstUtil> {
4749

4850

4951
final String displayName;
50-
@Getter final Function<ParseInput, CodeFileSrc<DocumentFragmentText<CodeFragmentType>, T_LANG>> parser;
52+
@Getter final Function<ParseInput, CodeFileSrc<T_LANG>> parser;
5153
@Getter final List<String> fileExtensions;
5254
@Getter final T_AST_UTIL astUtil;
55+
@Getter final T_AST_EXTRACTOR extractor;
5356

5457

5558
// package-private
56-
CodeLanguageOptions(String displayName, T_AST_UTIL astUtil,
57-
Function<ParseInput, CodeFileSrc<DocumentFragmentText<CodeFragmentType>, T_LANG>> parser, String... fileExtensions) {
59+
CodeLanguageOptions(String displayName, T_AST_UTIL astUtil, Function<ParseInput, CodeFileSrc<T_LANG>> parser, T_AST_EXTRACTOR extractor, String... fileExtensions) {
5860
this.displayName = displayName;
5961
this.parser = parser;
6062
this.fileExtensions = new ArrayList<>(Arrays.asList(fileExtensions));
6163
this.astUtil = astUtil;
64+
this.extractor = extractor;
6265
}
6366

6467

@@ -85,9 +88,9 @@ public static List<CodeLanguage> getLanguages() {
8588
* @param fileExtensions a list of file extensions associated with this language
8689
* @return a new {@link CodeLanguage} instance
8790
*/
88-
public static <_T_LANG extends CodeLanguage, _T_AST_UTIL extends LanguageAstUtil> CodeLanguage registerCodeLanguage(String displayName, _T_AST_UTIL astUtil,
89-
Function<ParseInput, CodeFileSrc<DocumentFragmentText<CodeFragmentType>, _T_LANG>> parser, String... fileExtensions) {
90-
val inst = new CodeLanguageOptions<>(displayName, astUtil, parser, fileExtensions);
91+
public static <_T_LANG extends CodeLanguage, _T_AST_UTIL extends LanguageAstUtil, T_AST_EXTRACTOR extends AstExtractor<? extends CompoundBlock>> CodeLanguage registerCodeLanguage(String displayName, _T_AST_UTIL astUtil,
92+
Function<ParseInput, CodeFileSrc<_T_LANG>> parser, T_AST_EXTRACTOR extractor, String... fileExtensions) {
93+
val inst = new CodeLanguageOptions<>(displayName, astUtil, parser, extractor, fileExtensions);
9194
_registerNewLanguage(inst);
9295
return inst;
9396
}
@@ -116,7 +119,7 @@ public static CodeLanguage tryFromFileExtension(String fileExtension) {
116119
}
117120

118121

119-
private static final void _registerNewLanguage(CodeLanguageOptions<? extends CodeLanguage, ? extends LanguageAstUtil> inst) {
122+
private static final void _registerNewLanguage(CodeLanguageOptions<? extends CodeLanguage, ? extends LanguageAstUtil, ? extends AstExtractor<? extends CompoundBlock>> inst) {
120123
values.add(inst);
121124
}
122125

src/twg2/parser/codeParser/ParseCommentsAndWhitespace.java

+2-2
Original file line numberDiff line numberDiff line change
@@ -24,14 +24,14 @@
2424
*/
2525
public class ParseCommentsAndWhitespace {
2626

27-
public static CodeFileSrc<DocumentFragmentText<CodeFragmentType>, CodeLanguage> buildCommentsAndWhitespaceTreeFromFileExtension(String srcName, String fileExtension, String src) throws IOException {
27+
public static CodeFileSrc<CodeLanguage> buildCommentsAndWhitespaceTreeFromFileExtension(String srcName, String fileExtension, String src) throws IOException {
2828
EnumSet<CommentStyle> commentStyle = CommentStyle.fromFileExtension(fileExtension);
2929

3030
return buildCommentsAndWhitespaceTree(commentStyle, src, srcName);
3131
}
3232

3333

34-
public static CodeFileSrc<DocumentFragmentText<CodeFragmentType>, CodeLanguage> buildCommentsAndWhitespaceTree(EnumSet<CommentStyle> style, String src, String srcName) throws IOException {
34+
public static CodeFileSrc<CodeLanguage> buildCommentsAndWhitespaceTree(EnumSet<CommentStyle> style, String src, String srcName) throws IOException {
3535
CharPrecondition stringParser = CodeStringParser.createStringParserForJavascript();
3636
CharPrecondition commentParser = CommentParser.createCommentParser(style);
3737

src/twg2/parser/codeParser/ParserBuilder.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ public ParserBuilder addConstParser(CharPrecondition parser, CodeFragmentType ty
4646
* @param srcName optional
4747
* @return a parsed {@link CodeFileSrc} containing {@link DocumentFragmentText} nodes represented the tokens parsed from {@code src}
4848
*/
49-
public <L extends CodeLanguage> CodeFileSrc<DocumentFragmentText<CodeFragmentType>, L> buildAndParse(String src, L language, String srcName) {
49+
public <L extends CodeLanguage> CodeFileSrc<L> buildAndParse(String src, L language, String srcName) {
5050
List<String> lines = new ArrayList<>();
5151

5252
// intercept each line request and add the line to our list of lines

src/twg2/parser/codeParser/csharp/CsBlockParser.java

+17-16
Original file line numberDiff line numberDiff line change
@@ -9,9 +9,9 @@
99
import lombok.val;
1010
import twg2.collections.tuple.Tuples;
1111
import twg2.parser.baseAst.AccessModifierEnum;
12-
import twg2.parser.baseAst.csharp.CsAstUtil;
1312
import twg2.parser.baseAst.tools.AstFragType;
1413
import twg2.parser.baseAst.tools.NameUtil;
14+
import twg2.parser.codeParser.AstExtractor;
1515
import twg2.parser.codeParser.CodeFragmentType;
1616
import twg2.parser.codeParser.CodeLanguageOptions;
1717
import twg2.parser.codeParser.tools.TokenListIterable;
@@ -31,14 +31,12 @@
3131
* @author TeamworkGuy2
3232
* @since 2015-12-5
3333
*/
34-
public class CsBlockParser {
35-
private static final CodeLanguageOptions<CodeLanguageOptions.CSharp, CsAstUtil> lang = CodeLanguageOptions.C_SHARP;
36-
private IntermBlock<IntermClassSig.SimpleImpl, CsBlock> parentScope;
37-
List<IntermBlock<IntermClassSig.SimpleImpl, CsBlock>> blocks = new ArrayList<>();
34+
public class CsBlockParser implements AstExtractor<CsBlock> {
3835

3936

40-
public CsBlockParser(IntermBlock<IntermClassSig.SimpleImpl, CsBlock> parentScope) {
41-
this.parentScope = parentScope;
37+
@Override
38+
public List<Entry<SimpleTree<DocumentFragmentText<CodeFragmentType>>, IntermClass.SimpleImpl<CsBlock>>> extractClassFieldsAndMethodSignatures(SimpleTree<DocumentFragmentText<CodeFragmentType>> astTree) {
39+
return CsBlockParser.extractBlockFieldsAndInterfaceMethods(astTree);
4240
}
4341

4442

@@ -48,8 +46,9 @@ public CsBlockParser(IntermBlock<IntermClassSig.SimpleImpl, CsBlock> parentScope
4846
* @param depth the current blockTree's depth within the tree (0=root node, 1=child of root, etc.)
4947
* @param parentNode the current blockTree's parent node or null if the parent is null (only possible if blockTree is a child of a tree with a null root or blockTree is the root and has no parent)
5048
*/
51-
public void extractBlocksFromTree(List<String> nameScope, SimpleTree<DocumentFragmentText<CodeFragmentType>> blockTree,
52-
int depth, SimpleTree<DocumentFragmentText<CodeFragmentType>> parentNode) {
49+
public static void extractBlocksFromTree(List<String> nameScope, SimpleTree<DocumentFragmentText<CodeFragmentType>> blockTree,
50+
int depth, SimpleTree<DocumentFragmentText<CodeFragmentType>> parentNode, IntermBlock<IntermClassSig.SimpleImpl, CsBlock> parentScope, List<IntermBlock<IntermClassSig.SimpleImpl, CsBlock>> blocks) {
51+
CodeLanguageOptions.CSharp lang = CodeLanguageOptions.C_SHARP;
5352
val children = blockTree.getChildren();
5453

5554
val childIterable = new TokenListIterable(children);
@@ -90,7 +89,7 @@ public void extractBlocksFromTree(List<String> nameScope, SimpleTree<DocumentFra
9089
}
9190
}
9291

93-
extractBlocksFromTree(nameScope, child, depth + 1, blockTree);
92+
extractBlocksFromTree(nameScope, child, depth + 1, blockTree, parentScope, blocks);
9493

9594
while(addBlockCount > 0) {
9695
nameScope.remove(nameScope.size() - 1);
@@ -105,6 +104,7 @@ public void extractBlocksFromTree(List<String> nameScope, SimpleTree<DocumentFra
105104
* @return access modifiers read backward from the iterator's current {@code previous()} value
106105
*/
107106
private static List<String> readAccessModifier(EnhancedListBuilderIterator<SimpleTree<DocumentFragmentText<CodeFragmentType>>> iter) {
107+
CodeLanguageOptions.CSharp lang = CodeLanguageOptions.C_SHARP;
108108
int prevCount = 0;
109109
List<String> accessModifiers = new ArrayList<>();
110110
SimpleTree<DocumentFragmentText<CodeFragmentType>> child = iter.hasPrevious() ? iter.previous() : null;
@@ -128,6 +128,7 @@ private static List<String> readAccessModifier(EnhancedListBuilderIterator<Simpl
128128
* @return {@code <className, extendImplementNames>}
129129
*/
130130
private static Entry<String, List<String>> readClassIdentifierAndExtends(EnhancedListBuilderIterator<SimpleTree<DocumentFragmentText<CodeFragmentType>>> iter) {
131+
CodeLanguageOptions.CSharp lang = CodeLanguageOptions.C_SHARP;
131132
// class signatures are read backward from the opening '{'
132133
int prevCount = 0;
133134
List<String> names = new ArrayList<>();
@@ -172,10 +173,10 @@ else if(names.size() == 1) {
172173

173174

174175
// TODO this only parses some fields and interface methods
175-
public static List<IntermClass.SimpleImpl<CsBlock>> extractBlockFieldsAndInterfaceMethods(SimpleTree<DocumentFragmentText<CodeFragmentType>> tokenTree) {
176+
public static List<Entry<SimpleTree<DocumentFragmentText<CodeFragmentType>>, IntermClass.SimpleImpl<CsBlock>>> extractBlockFieldsAndInterfaceMethods(SimpleTree<DocumentFragmentText<CodeFragmentType>> tokenTree) {
176177
List<IntermBlock<IntermClassSig.SimpleImpl, CsBlock>> blockDeclarations = CsBlockParser.extractBlocks(tokenTree, null);
177178

178-
List<IntermClass.SimpleImpl<CsBlock>> resBlocks = new ArrayList<>();
179+
List<Entry<SimpleTree<DocumentFragmentText<CodeFragmentType>>, IntermClass.SimpleImpl<CsBlock>>> resBlocks = new ArrayList<>();
179180

180181
CsUsingStatementExtractor usingStatementExtractor = new CsUsingStatementExtractor();
181182

@@ -209,7 +210,7 @@ public static List<IntermClass.SimpleImpl<CsBlock>> extractBlockFieldsAndInterfa
209210
}
210211

211212
if(block.getBlockType() != CsBlock.NAMESPACE) {
212-
resBlocks.add(new IntermClass.SimpleImpl<>(block.getDeclaration(), usingStatements, fields, intfMethods, block.getBlockTree(), block.getBlockType()));
213+
resBlocks.add(Tuples.of(block.getBlockTree(), new IntermClass.SimpleImpl<>(block.getDeclaration(), usingStatements, fields, intfMethods, block.getBlockType())));
213214
}
214215
}
215216

@@ -247,11 +248,11 @@ public static void runParsers(SimpleTree<DocumentFragmentText<CodeFragmentType>>
247248

248249

249250
public static List<IntermBlock<IntermClassSig.SimpleImpl, CsBlock>> extractBlocks(SimpleTree<DocumentFragmentText<CodeFragmentType>> tokenTree, IntermBlock<IntermClassSig.SimpleImpl, CsBlock> parentScope) {
250-
CsBlockParser extractor = new CsBlockParser(parentScope);
251+
List<IntermBlock<IntermClassSig.SimpleImpl, CsBlock>> blocks = new ArrayList<>();
251252
//AstUtil.forEach(parsedFile.getDoc(), extractor::extractDataModelFieldsIndexedSubTreeConsumer);
252253
List<String> nameScope = new ArrayList<>();
253-
extractor.extractBlocksFromTree(nameScope, tokenTree, 0, null);
254-
return extractor.blocks;
254+
extractBlocksFromTree(nameScope, tokenTree, 0, null, parentScope, blocks);
255+
return blocks;
255256
}
256257

257258
}

0 commit comments

Comments
 (0)