Query regarding DLTK JRubySourceParser [message #21963] |
Wed, 02 April 2008 03:50 |
Eclipse User |
|
|
|
Originally posted by: pankaj.tolani.gmail.com
This is a multi-part message in MIME format.
--------------020302090608020006010100
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 7bit
Hi,
I am interested in using DLTK JRubySourceParser in my application for
Ruby. I have managed to use that in isolation. But I wish to know if I
can achieve more.
Here is what I wish to
A.rb
require "java"
load "B"
class A
def a
end
end
B.rb
class B
def b
end
end
Now I start with A.rb, I want the declarations in Ruby files I depend on
B.rb to be included as part of the ModuleDeclaration I get at the end of
the parse step. Is that possible? Essentially just like C preprocessor,
all included files should be compiled in.
thanks,
pankaj
P.S. I have attached the file which shows how I do the parsing.
--------------020302090608020006010100
Content-Type: text/plain;
name="NewAction.java"
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename="NewAction.java"
package dltk.ruby.source.parser.popup.actions;
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.resources.IFile;
import org.eclipse.dltk.ast.declarations.ModuleDeclaration;
import org.eclipse.dltk.compiler.SourceElementRequestVisitor;
import org.eclipse.dltk.compiler.problem.DLTKProblemReporter;
import org.eclipse.dltk.compiler.problem.DefaultProblemFactory;
import org.eclipse.dltk.core.SourceParserUtil;
import org.eclipse.dltk.core.ISourceModuleInfoCache.ISourceModuleIn fo;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IActionDelegate;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
public class NewAction implements IObjectActionDelegate {
ISelection selection;
/**
* Constructor for Action1.
*/
public NewAction() {
super();
}
/**
* @see IObjectActionDelegate#setActivePart(IAction, IWorkbenchPart)
*/
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
}
/**
* @see IActionDelegate#run(IAction)
*/
public void run(IAction action) {
/*Shell shell = new Shell();
MessageDialog.openInformation(
shell,
"Parser Plug-in",
"New Action was executed.");*/
final IFile selectedFile = (IFile) ((IStructuredSelection) this.selection).getFirstElement();
parseSourceModule(selectedFile);
}
private void parseSourceModule(IFile selectedFile) {
char[] filename = selectedFile.getFullPath().toString().toCharArray();
StringBuilder fileContents = new StringBuilder();
try {
BufferedReader in = new BufferedReader(new FileReader(selectedFile.getRawLocation().toFile()));
String str;
while ((str = in.readLine()) != null) {
fileContents.append(str);
fileContents.append('\n');
}
} catch (IOException e) {
e.printStackTrace();
}
char[] contents = fileContents.toString().toCharArray();
DLTKProblemReporter problemReporter = new DLTKProblemReporter(selectedFile, new DefaultProblemFactory());
/*ISourceParser sourceParserById = SourceParserManager.getInstance().getSourceParserById(getPar serId());
ModuleDeclaration moduleDeclaration = sourceParserById.parse(filename, contents, problemReporter);*/
ModuleDeclaration moduleDeclaration = SourceParserUtil.getModuleDeclaration(filename, contents, getNatureId(), problemReporter, astCache);
SourceElementRequestVisitor requestor = createVisitor();
try {
moduleDeclaration.traverse(requestor);
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* @see IActionDelegate#selectionChanged(IAction, ISelection)
*/
public void selectionChanged(IAction action, ISelection selection) {
this.selection = selection;
}
private String getParserId() {
return "org.eclipse.dltk.ruby.parser.jrubySourceParser";
}
private String getNatureId() {
return "org.eclipse.dltk.ruby.core.nature";
}
protected SourceElementRequestVisitor createVisitor() {
return new MyRubySourceElementRequestVisitor(new MySourceElementRequestor());
}
private static class SourceModuleInfo implements ISourceModuleInfo {
private Map map;
public Object get(Object key) {
if (map == null) {
return null;
}
return map.get(key);
}
public void put(Object key, Object value) {
if (map == null) {
map = new HashMap();
}
map.put(key, value);
}
public void remove(Object key) {
if (map != null) {
map.remove(key);
}
}
public boolean isEmpty() {
if( this.map == null ) {
return true;
}
return this.map.isEmpty();
}
}
ISourceModuleInfo astCache = new SourceModuleInfo();
}
--------------020302090608020006010100--
|
|
|
|
Powered by
FUDForum. Page generated in 0.03442 seconds