Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Use gumtree API in IntelliJ on Windows #275

Open
ztwater opened this issue Mar 21, 2022 · 5 comments
Open

Use gumtree API in IntelliJ on Windows #275

ztwater opened this issue Mar 21, 2022 · 5 comments
Assignees

Comments

@ztwater
Copy link

ztwater commented Mar 21, 2022

I have added tree-sitter-parser.py to my system path and it could run from cmd. But when I called the API (e.g. JavaTreeSitterTreeGenerator().generateFrom().file(file); ) from IDE or from commands like "gumtree..." I got this error:

java.io.IOException: Cannot run program "tree-sitter-parser.py" (in directory "C:\Users\24426\AppData\Local\Temp"): CreateProcess error=193, %1 is not a valid Win32 application
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1128)
at java.base/java.lang.ProcessBuilder.start(ProcessBuilder.java:1071)
at com.github.gumtreediff.gen.ExternalProcessTreeGenerator.readStandardOutput(ExternalProcessTreeGenerator.java:35)
at com.github.gumtreediff.gen.treesitter.AbstractTreeSitterGenerator.generate(AbstractTreeSitterGenerator.java:37)
at com.github.gumtreediff.gen.TreeGenerator.generateTree(TreeGenerator.java:41)
at com.github.gumtreediff.gen.TreeGenerator$ReaderConfigurator.reader(TreeGenerator.java:119)
at com.github.gumtreediff.gen.TreeGenerator$ReaderConfigurator.file(TreeGenerator.java:90)
at com.github.gumtreediff.gen.TreeGenerator$ReaderConfigurator.file(TreeGenerator.java:100)

Could you please tell me how to solve this error? I guess processbuilder has something to do with the OS...

@jrfaller jrfaller self-assigned this Mar 21, 2022
@jrfaller jrfaller added the bug label Mar 21, 2022
@jrfaller
Copy link
Member

Hi!

I guess the shebang #!/usr/bin/env python does not work on Windows 😄

However I don't know how to get a Python file running, but if you manage to make a bat file don't hesitate to make a PR!

Cheers.

@ztwater
Copy link
Author

ztwater commented Mar 21, 2022

Thanks a lot! I found that ProcessBuilder can not direct run python scripts, so I changed the arguments of getCommandLine() in AbstractTreeSitterGenerator.java (see here). It is running now but a parse error occurs in TreeIoUtils.java.

while (r.hasNext()) {
    XMLEvent e = r.nextEvent();
    if (e instanceof StartElement) {
javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
        at java.xml/com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:652)
	at java.xml/com.sun.xml.internal.stream.XMLEventReaderImpl.nextEvent(XMLEventReaderImpl.java:83)
	at com.github.gumtreediff.io.TreeIoUtils$XmlInternalGenerator.generate(TreeIoUtils.java:784)
	at com.github.gumtreediff.gen.TreeGenerator.generateTree(TreeGenerator.java:41)
        ...

@jrfaller
Copy link
Member

Can you print the XML being parser to see what the problem is?

@ztwater
Copy link
Author

ztwater commented Mar 21, 2022

This is the XML tree (from a java code snippet on GitHub) that generated by TreeGenerator:

<?xml version="1.0" ?>
<tree type="program" pos="0" length="598">
	<tree type="type_declaration" pos="0" length="598">
		<tree type="modifiers" pos="0" length="6">
			<tree type="visibility" pos="0" length="6" label="public"/>
		</tree>
		<tree type="type_keyword" pos="7" length="5" label="class"/>
		<tree type="identifier" pos="13" length="3" label="foo"/>
		<tree type="type_body" pos="16" length="582">
			<tree type="method_declaration" pos="18" length="578">
				<tree type="modifiers" pos="18" length="19">
					<tree type="visibility" pos="18" length="6" label="public"/>
					<tree type="final" pos="25" length="5" label="final"/>
					<tree type="static" pos="31" length="6" label="static"/>
				</tree>
				<tree type="type" pos="38" length="6" label="String"/>
				<tree type="identifier" pos="45" length="7" label="uniplus"/>
				<tree type="formal_parameters" pos="52" length="10">
					<tree type="formal_parameter" pos="53" length="8">
						<tree type="type" pos="53" length="6" label="String"/>
						<tree type="identifier" pos="60" length="1" label="s"/>
					</tree>
				</tree>
				<tree type="block" pos="63" length="533">
					<tree type="if_statement" pos="69" length="47">
						<tree type="if" pos="69" length="2" label="if"/>
						<tree type="parenthesized_expression" pos="72" length="17">
							<tree type="binary_expression" pos="73" length="15">
								<tree type="method_invocation" pos="73" length="10">
									<tree type="identifier" pos="73" length="1" label="s"/>
									<tree type="identifier" pos="75" length="6" label="length"/>
									<tree type="argument_list" pos="81" length="2"/>
								</tree>
								<tree type="comparison_operator" pos="84" length="2" label="=="/>
								<tree type="decimal_integer_literal" pos="87" length="1" label="0"/>
							</tree>
						</tree>
						<tree type="block" pos="90" length="26">
							<tree type="return_statement" pos="100" length="10">
								<tree type="string_literal" pos="107" length="2" label="&quot;&quot;"/>
							</tree>
						</tree>
					</tree>
					<tree type="block_comment" pos="121" length="55" label="/* This is just the minimum; sb will grow as needed. */"/>
					<tree type="local_variable_declaration" pos="181" length="55">
						<tree type="type" pos="181" length="12" label="StringBuffer"/>
						<tree type="variable_declarator" pos="194" length="41">
							<tree type="identifier" pos="194" length="2" label="sb"/>
							<tree type="affectation_operator" pos="197" length="1" label="="/>
							<tree type="object_creation_expression" pos="199" length="36">
								<tree type="new" pos="199" length="3" label="new"/>
								<tree type="type" pos="203" length="12" label="StringBuffer"/>
								<tree type="argument_list" pos="215" length="20">
									<tree type="binary_expression" pos="216" length="18">
										<tree type="decimal_integer_literal" pos="216" length="1" label="2"/>
										<tree type="arithmetic_operator" pos="218" length="1" label="+"/>
										<tree type="binary_expression" pos="220" length="14">
											<tree type="decimal_integer_literal" pos="220" length="1" label="3"/>
											<tree type="arithmetic_operator" pos="222" length="1" label="*"/>
											<tree type="method_invocation" pos="224" length="10">
												<tree type="identifier" pos="224" length="1" label="s"/>
												<tree type="identifier" pos="226" length="6" label="length"/>
												<tree type="argument_list" pos="232" length="2"/>
											</tree>
										</tree>
									</tree>
								</tree>
							</tree>
						</tree>
					</tree>
					<tree type="expression_statement" pos="241" length="16">
						<tree type="method_invocation" pos="241" length="15">
							<tree type="identifier" pos="241" length="2" label="sb"/>
							<tree type="identifier" pos="244" length="6" label="append"/>
							<tree type="argument_list" pos="250" length="6">
								<tree type="string_literal" pos="251" length="4" label="&quot;U+&quot;"/>
							</tree>
						</tree>
					</tree>
					<tree type="for_statement" pos="262" length="306">
						<tree type="local_variable_declaration" pos="267" length="10">
							<tree type="type" pos="267" length="3" label="int"/>
							<tree type="variable_declarator" pos="271" length="5">
								<tree type="identifier" pos="271" length="1" label="i"/>
								<tree type="affectation_operator" pos="273" length="1" label="="/>
								<tree type="decimal_integer_literal" pos="275" length="1" label="0"/>
							</tree>
						</tree>
						<tree type="binary_expression" pos="278" length="14">
							<tree type="identifier" pos="278" length="1" label="i"/>
							<tree type="comparison_operator" pos="280" length="1" label="&lt;"/>
							<tree type="method_invocation" pos="282" length="10">
								<tree type="identifier" pos="282" length="1" label="s"/>
								<tree type="identifier" pos="284" length="6" label="length"/>
								<tree type="argument_list" pos="290" length="2"/>
							</tree>
						</tree>
						<tree type="update_expression" pos="294" length="3">
							<tree type="identifier" pos="294" length="1" label="i"/>
							<tree type="increment_operator" pos="295" length="2" label="++"/>
						</tree>
						<tree type="block" pos="299" length="269">
							<tree type="expression_statement" pos="309" length="49">
								<tree type="method_invocation" pos="309" length="48">
									<tree type="identifier" pos="309" length="2" label="sb"/>
									<tree type="identifier" pos="312" length="6" label="append"/>
									<tree type="argument_list" pos="318" length="39">
										<tree type="method_invocation" pos="319" length="37">
											<tree type="identifier" pos="319" length="6" label="String"/>
											<tree type="identifier" pos="326" length="6" label="format"/>
											<tree type="argument_list" pos="332" length="24">
												<tree type="string_literal" pos="333" length="4" label="&quot;%X&quot;"/>
												<tree type="," pos="337" length="1" label=","/>
												<tree type="method_invocation" pos="339" length="16">
													<tree type="identifier" pos="339" length="1" label="s"/>
													<tree type="identifier" pos="341" length="11" label="codePointAt"/>
													<tree type="argument_list" pos="352" length="3">
														<tree type="identifier" pos="353" length="1" label="i"/>
													</tree>
												</tree>
											</tree>
										</tree>
									</tree>
								</tree>
							</tree>
							<tree type="if_statement" pos="367" length="125">
								<tree type="if" pos="367" length="2" label="if"/>
								<tree type="parenthesized_expression" pos="370" length="40">
									<tree type="binary_expression" pos="371" length="38">
										<tree type="method_invocation" pos="371" length="16">
											<tree type="identifier" pos="371" length="1" label="s"/>
											<tree type="identifier" pos="373" length="11" label="codePointAt"/>
											<tree type="argument_list" pos="384" length="3">
												<tree type="identifier" pos="385" length="1" label="i"/>
											</tree>
										</tree>
										<tree type="comparison_operator" pos="388" length="1" label="&gt;"/>
										<tree type="field_access" pos="390" length="19">
											<tree type="identifier" pos="390" length="9" label="Character"/>
											<tree type="identifier" pos="400" length="9" label="MAX_VALUE"/>
										</tree>
									</tree>
								</tree>
								<tree type="block" pos="411" length="81">
									<tree type="expression_statement" pos="425" length="4">
										<tree type="update_expression" pos="425" length="3">
											<tree type="identifier" pos="425" length="1" label="i"/>
											<tree type="increment_operator" pos="426" length="2" label="++"/>
										</tree>
									</tree>
									<tree type="block_comment" pos="430" length="52" label="/****WE HATES UTF-16! WE HATES IT FOREVERSES!!!****/"/>
								</tree>
							</tree>
							<tree type="if_statement" pos="501" length="61">
								<tree type="if" pos="501" length="2" label="if"/>
								<tree type="parenthesized_expression" pos="504" length="18">
									<tree type="binary_expression" pos="505" length="16">
										<tree type="binary_expression" pos="505" length="3">
											<tree type="identifier" pos="505" length="1" label="i"/>
											<tree type="arithmetic_operator" pos="506" length="1" label="+"/>
											<tree type="decimal_integer_literal" pos="507" length="1" label="1"/>
										</tree>
										<tree type="comparison_operator" pos="509" length="1" label="&lt;"/>
										<tree type="method_invocation" pos="511" length="10">
											<tree type="identifier" pos="511" length="1" label="s"/>
											<tree type="identifier" pos="513" length="6" label="length"/>
											<tree type="argument_list" pos="519" length="2"/>
										</tree>
									</tree>
								</tree>
								<tree type="block" pos="523" length="39">
									<tree type="expression_statement" pos="537" length="15">
										<tree type="method_invocation" pos="537" length="14">
											<tree type="identifier" pos="537" length="2" label="sb"/>
											<tree type="identifier" pos="540" length="6" label="append"/>
											<tree type="argument_list" pos="546" length="5">
												<tree type="string_literal" pos="547" length="3" label="&quot;.&quot;"/>
											</tree>
										</tree>
									</tree>
								</tree>
							</tree>
						</tree>
					</tree>
					<tree type="return_statement" pos="573" length="21">
						<tree type="method_invocation" pos="580" length="13">
							<tree type="identifier" pos="580" length="2" label="sb"/>
							<tree type="identifier" pos="583" length="8" label="toString"/>
							<tree type="argument_list" pos="591" length="2"/>
						</tree>
					</tree>
				</tree>
			</tree>
		</tree>
	</tree>
</tree>

When I looked into the XMLEventReader in TreeIoUtils.java, I got <?xml version="null" encoding='null' standalone='no'?> as the first element. Strangely, r.hasNext() returns true while I got parse error when I run nextEvent().

@jrfaller
Copy link
Member

OK strange, the XML your parsed seems correct

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants