@@ -1,40 +0,0 @@ | |||||
import java.io.*; | |||||
import java.net.*; | |||||
public class Parse { | |||||
public static void main(String[][] args) { | |||||
String fromClient; | |||||
String toClient; | |||||
try { | |||||
ServerSocket server = new ServerSocket(5002); | |||||
while(true) { | |||||
Socket connected = server.accept(); | |||||
System.out.println("The client is connected."); | |||||
BufferedReader clientReader = new BufferedReader( | |||||
new InputStreamReader(connected.getInputStream())); | |||||
PrintWriter clientWriter = new PrintWriter( | |||||
connected.getOutputStream(), true); | |||||
while(true) { | |||||
StringBuilder builder = new StringBuilder(); | |||||
while((fromClient = clientReader.readLine()) != null) { | |||||
builder.append(fromClient); | |||||
} | |||||
fromClient = builder.toString(); | |||||
//Handle the data from the client here | |||||
} | |||||
} | |||||
} catch (IOException ex) { | |||||
} | |||||
} | |||||
} |
@@ -1,3 +0,0 @@ | |||||
package org.bitshift.parsing.parsers; | |||||
import org.bitshift.parsing.parsers.Parser; |
@@ -1,164 +0,0 @@ | |||||
package org.bitshift.parsing.parsers; | |||||
import java.util.HashMap; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import java.util.Stack; | |||||
import org.eclipse.jdt.core.JavaCore; | |||||
import org.eclipse.jdt.core.dom.AST; | |||||
import org.eclipse.jdt.core.dom.ASTParser; | |||||
import org.eclipse.jdt.core.dom.ASTVisitor; | |||||
import org.eclipse.jdt.core.dom.CompilationUnit; | |||||
import org.eclipse.jdt.core.dom.ClassInstanceCreation; | |||||
import org.eclipse.jdt.core.dom.FieldAccess; | |||||
import org.eclipse.jdt.core.dom.FieldDeclaration; | |||||
import org.eclipse.jdt.core.dom.MethodDeclaration; | |||||
import org.eclipse.jdt.core.dom.MethodInvocation; | |||||
import org.eclipse.jdt.core.dom.Name; | |||||
import org.eclipse.jdt.core.dom.PackageDeclaration; | |||||
import org.eclipse.jdt.core.dom.QualifiedName; | |||||
import org.eclipse.jdt.core.dom.QualifiedType; | |||||
import org.eclipse.jdt.core.dom.SimpleName; | |||||
import org.eclipse.jdt.core.dom.SimpleType; | |||||
import org.eclipse.jdt.core.dom.Statement; | |||||
import org.eclipse.jdt.core.dom.Type; | |||||
import org.eclipse.jdt.core.dom.TypeDeclaration; | |||||
import org.eclipse.jdt.core.dom.VariableDeclarationStatement; | |||||
import org.bitshift.parsing.parsers.Parser; | |||||
import org.bitshift.parsing.symbols.Symbols; | |||||
import org.bitshift.parsing.symbols.JavaSymbols; | |||||
/*TODO: Work on parsing partial java code. | |||||
* Change visits to endVisit and implement a cache*/ | |||||
public class JavaParser extends Parser { | |||||
protected JavaSymbols symbols; | |||||
protected CompilationUnit compUnit; | |||||
private Stack<Map<String, Object>> _cache; | |||||
public JavaParser(String source) { | |||||
super(source); | |||||
this.symbols = new JavaSymbols(); | |||||
this._cache = new Stack<Map<String, Object>>(); | |||||
} | |||||
@Override | |||||
public Symbols genSymbols() { | |||||
char[] source = this.source.toCharArray(); | |||||
ASTParser parser = ASTParser.newParser(AST.JLS3); | |||||
parser.setSource(source); | |||||
Map options = JavaCore.getOptions(); | |||||
parser.setCompilerOptions(options); | |||||
//Work on parsing partial java code later | |||||
this.compUnit = (CompilationUnit) parser.createAST(null); | |||||
ASTVisitor visitor = new NodeVisitor(); | |||||
this.compUnit.accept(visitor); | |||||
return this.symbols; | |||||
} | |||||
class NodeVisitor extends ASTVisitor { | |||||
public boolean visit(ClassInstanceCreation node) { | |||||
Type typeObj = node.getType(); | |||||
Name nameObj = typeObj.isQualifiedType() ? ((QualifiedType) typeObj).getName() : ((SimpleType) typeObj).getName(); | |||||
String name = nameObj.isQualifiedName() ? ((QualifiedName)nameObj).getFullyQualifiedName() : ((SimpleName)nameObj).getIdentifier(); | |||||
int sl = compUnit.getLineNumber(node.getStartPosition()) - 1; | |||||
int sc = compUnit.getColumnNumber(node.getStartPosition()) - 1; | |||||
symbols.insertClassInstance(name, sl, sc, null, null); | |||||
return true; | |||||
} | |||||
public boolean visit(FieldAccess node) { | |||||
Name nameObj = node.getName(); | |||||
String name = nameObj.isQualifiedName() ? ((QualifiedName)nameObj).getFullyQualifiedName() : ((SimpleName)nameObj).getIdentifier(); | |||||
int sl = compUnit.getLineNumber(node.getStartPosition()) - 1; | |||||
int sc = compUnit.getColumnNumber(node.getStartPosition()) - 1; | |||||
symbols.insertFieldAccess(name, sl, sc, null, null); | |||||
return true; | |||||
} | |||||
public boolean visit(FieldDeclaration node) { | |||||
Type typeObj = node.getType(); | |||||
Name nameObj = typeObj.isQualifiedType() ? ((QualifiedType) typeObj).getName() : ((SimpleType) typeObj).getName(); | |||||
String name = nameObj.isQualifiedName() ? ((QualifiedName)nameObj).getFullyQualifiedName() : ((SimpleName)nameObj).getIdentifier(); | |||||
int sl = compUnit.getLineNumber(node.getStartPosition()) - 1; | |||||
int sc = compUnit.getColumnNumber(node.getStartPosition()) - 1; | |||||
symbols.insertFieldDeclaration(name, sl, sc, null, null); | |||||
return true; | |||||
} | |||||
public boolean visit(MethodDeclaration node) { | |||||
Name nameObj = node.getName(); | |||||
String name = nameObj.isQualifiedName() ? ((QualifiedName)nameObj).getFullyQualifiedName() : ((SimpleName)nameObj).getIdentifier(); | |||||
List<Statement> statements = node.getBody().statements(); | |||||
Statement last = statements.get(statements.size() - 1); | |||||
int sl = compUnit.getLineNumber(node.getStartPosition()) - 1; | |||||
int sc = compUnit.getColumnNumber(node.getStartPosition()) - 1; | |||||
int el = compUnit.getLineNumber(last.getStartPosition()) - 1; | |||||
int ec = compUnit.getColumnNumber(last.getStartPosition()) - 1; | |||||
symbols.insertMethodDeclaration(name, sl, sc, el, ec); | |||||
return true; | |||||
} | |||||
public boolean visit(MethodInvocation node) { | |||||
Name nameObj = node.getName(); | |||||
String name = nameObj.isQualifiedName() ? ((QualifiedName)nameObj).getFullyQualifiedName() : ((SimpleName)nameObj).getIdentifier(); | |||||
int sl = compUnit.getLineNumber(node.getStartPosition()) - 1; | |||||
int sc = compUnit.getColumnNumber(node.getStartPosition()) - 1; | |||||
symbols.insertMethodInvocation(name, sl, sc, null, null); | |||||
return true; | |||||
} | |||||
public boolean visit(PackageDeclaration node) { | |||||
Name nameObj = node.getName(); | |||||
String name = nameObj.isQualifiedName() ? ((QualifiedName)nameObj).getFullyQualifiedName() : ((SimpleName)nameObj).getIdentifier(); | |||||
symbols.setPackage(name); | |||||
return true; | |||||
} | |||||
public boolean visit(TypeDeclaration node) { | |||||
Name nameObj = node.getName(); | |||||
String name = nameObj.isQualifiedName() ? ((QualifiedName)nameObj).getFullyQualifiedName() : ((SimpleName)nameObj).getIdentifier(); | |||||
int sl = compUnit.getLineNumber(node.getStartPosition()) - 1; | |||||
int sc = compUnit.getColumnNumber(node.getStartPosition()) - 1; | |||||
if (node.isInterface()) { | |||||
symbols.insertInterfaceDeclaration(name, sl, sc, null, null); | |||||
} else { | |||||
symbols.insertClassDeclaration(name, sl, sc, null, null); | |||||
} | |||||
return true; | |||||
} | |||||
public boolean visit(VariableDeclarationStatement node) { | |||||
Type typeObj = node.getType(); | |||||
Name nameObj = typeObj.isQualifiedType() ? ((QualifiedType) typeObj).getName() : ((SimpleType) typeObj).getName(); | |||||
String name = nameObj.isQualifiedName() ? ((QualifiedName)nameObj).getFullyQualifiedName() : ((SimpleName)nameObj).getIdentifier(); | |||||
int sl = compUnit.getLineNumber(node.getStartPosition()) - 1; | |||||
int sc = compUnit.getColumnNumber(node.getStartPosition()) - 1; | |||||
symbols.insertVariableDeclaration(name, sl, sc, null, null); | |||||
return true; | |||||
} | |||||
} | |||||
} |
@@ -1,16 +0,0 @@ | |||||
package org.bitshift.parsing.parsers; | |||||
import org.bitshift.parsing.symbols.Symbols; | |||||
public abstract class Parser { | |||||
protected String source; | |||||
public Parser(String source) { | |||||
this.source = source; | |||||
} | |||||
abstract Symbols genSymbols(); | |||||
} | |||||
@@ -1 +0,0 @@ | |||||
package org.bitshift.parsing.symbols; |
@@ -1,153 +0,0 @@ | |||||
package org.bitshift.parsing.symbols; | |||||
import java.util.List; | |||||
import java.util.Map; | |||||
import java.util.HashMap; | |||||
import java.util.ArrayList; | |||||
import org.bitshift.parsing.symbols.Symbols; | |||||
/*TODO: Overwrite toString | |||||
* Change instance vars to HashMaps of HashMaps*/ | |||||
public class JavaSymbols extends Symbols { | |||||
private String _packageName; | |||||
private Map<String, Object> _classes; | |||||
private Map<String, Object> _interfaces; | |||||
private Map<String, Object> _methods; | |||||
private Map<String, Object> _fields; | |||||
private Map<String, Object> _vars; | |||||
public JavaSymbols() { | |||||
_packageName = null; | |||||
_classes = new HashMap<String, Object>(); | |||||
_interfaces = new HashMap<String, Object>(); | |||||
_methods = new HashMap<String, Object>(); | |||||
_fields = new HashMap<String, Object>(); | |||||
_vars = new HashMap<String, Object>(); | |||||
} | |||||
public boolean setPackage(String name) { | |||||
_packageName = name; | |||||
return true; | |||||
} | |||||
public boolean insertClassDeclaration(String name, Integer startLine, Integer startCol, Integer endLine, Integer endCol) { | |||||
List<Integer> pos = new ArrayList<Integer>(4); | |||||
pos.set(0, startLine); pos.set(1, startCol); pos.set(2, endLine); pos.set(3, endCol); | |||||
List<List<Integer>> copy = (List<List<Integer>>)_classes.get(name); | |||||
copy = (copy == null) ? new ArrayList<List<Integer>>() : copy; | |||||
copy.add(0, pos); | |||||
_classes.put(name, copy); | |||||
return true; | |||||
} | |||||
public boolean insertClassInstance(String name, Integer startLine, Integer startCol, Integer endLine, Integer endCol) { | |||||
List<Integer> pos = new ArrayList<Integer>(4); | |||||
pos.set(0, startLine); pos.set(1, startCol); pos.set(2, endLine); pos.set(3, endCol); | |||||
List<List<Integer>> copy = (List<List<Integer>>)_classes.get(name); | |||||
copy = (copy == null) ? new ArrayList<List<Integer>>() : copy; | |||||
copy.add(pos); | |||||
_classes.put(name, copy); | |||||
return true; | |||||
} | |||||
public boolean insertInterfaceDeclaration(String name, Integer startLine, Integer startCol, Integer endLine, Integer endCol) { | |||||
List<Integer> pos = new ArrayList<Integer>(4); | |||||
pos.set(0, startLine); pos.set(1, startCol); pos.set(2, endLine); pos.set(3, endCol); | |||||
List<List<Integer>> copy = (List<List<Integer>>)_classes.get(name); | |||||
copy = (copy == null) ? new ArrayList<List<Integer>>() : copy; | |||||
copy.add(0, pos); | |||||
_classes.put(name, copy); | |||||
return true; | |||||
} | |||||
public boolean insertInterfaceInstance(String name, Integer startLine, Integer startCol, Integer endLine, Integer endCol) { | |||||
List<Integer> pos = new ArrayList<Integer>(4); | |||||
pos.set(0, startLine); pos.set(1, startCol); pos.set(2, endLine); pos.set(3, endCol); | |||||
List<List<Integer>> copy = (List<List<Integer>>)_classes.get(name); | |||||
copy = (copy == null) ? new ArrayList<List<Integer>>() : copy; | |||||
copy.add(pos); | |||||
_classes.put(name, copy); | |||||
return true; | |||||
} | |||||
public boolean insertMethodDeclaration(String name, Integer startLine, Integer startCol, Integer endLine, Integer endCol) { | |||||
List<Integer> pos = new ArrayList<Integer>(4); | |||||
pos.set(0, startLine); pos.set(1, startCol); pos.set(2, endLine); pos.set(3, endCol); | |||||
List<List<Integer>> copy = (List<List<Integer>>)_classes.get(name); | |||||
copy = (copy == null) ? new ArrayList<List<Integer>>() : copy; | |||||
copy.add(0, pos); | |||||
_classes.put(name, copy); | |||||
return true; | |||||
} | |||||
public boolean insertMethodInvocation(String name, Integer startLine, Integer startCol, Integer endLine, Integer endCol) { | |||||
List<Integer> pos = new ArrayList<Integer>(4); | |||||
pos.set(0, startLine); pos.set(1, startCol); pos.set(2, endLine); pos.set(3, endCol); | |||||
List<List<Integer>> copy = (List<List<Integer>>)_classes.get(name); | |||||
copy = (copy == null) ? new ArrayList<List<Integer>>() : copy; | |||||
copy.add(pos); | |||||
_classes.put(name, copy); | |||||
return true; | |||||
} | |||||
public boolean insertFieldDeclaration(String name, Integer startLine, Integer startCol, Integer endLine, Integer endCol) { | |||||
List<Integer> pos = new ArrayList<Integer>(4); | |||||
pos.set(0, startLine); pos.set(1, startCol); pos.set(2, endLine); pos.set(3, endCol); | |||||
List<List<Integer>> copy = (List<List<Integer>>)_classes.get(name); | |||||
copy = (copy == null) ? new ArrayList<List<Integer>>() : copy; | |||||
copy.add(0, pos); | |||||
_classes.put(name, copy); | |||||
return true; | |||||
} | |||||
public boolean insertFieldAccess(String name, Integer startLine, Integer startCol, Integer endLine, Integer endCol) { | |||||
List<Integer> pos = new ArrayList<Integer>(4); | |||||
pos.set(0, startLine); pos.set(1, startCol); pos.set(2, endLine); pos.set(3, endCol); | |||||
List<List<Integer>> copy = (List<List<Integer>>)_classes.get(name); | |||||
copy = (copy == null) ? new ArrayList<List<Integer>>() : copy; | |||||
copy.add(pos); | |||||
_classes.put(name, copy); | |||||
return true; | |||||
} | |||||
public boolean insertVariableDeclaration(String name, Integer startLine, Integer startCol, Integer endLine, Integer endCol) { | |||||
List<Integer> pos = new ArrayList<Integer>(4); | |||||
pos.set(0, startLine); pos.set(1, startCol); pos.set(2, endLine); pos.set(3, endCol); | |||||
List<List<Integer>> copy = (List<List<Integer>>)_classes.get(name); | |||||
copy = (copy == null) ? new ArrayList<List<Integer>>() : copy; | |||||
copy.add(0, pos); | |||||
_classes.put(name, copy); | |||||
return true; | |||||
} | |||||
public boolean insertVariableAccess(String name, Integer startLine, Integer startCol, Integer endLine, Integer endCol) { | |||||
List<Integer> pos = new ArrayList<Integer>(4); | |||||
pos.set(0, startLine); pos.set(1, startCol); pos.set(2, endLine); pos.set(3, endCol); | |||||
List<List<Integer>> copy = (List<List<Integer>>)_classes.get(name); | |||||
copy = (copy == null) ? new ArrayList<List<Integer>>() : copy; | |||||
copy.add(pos); | |||||
_classes.put(name, copy); | |||||
return true; | |||||
} | |||||
public String toString() { | |||||
return ""; | |||||
} | |||||
} | |||||
@@ -1,9 +0,0 @@ | |||||
package org.bitshift.parsing.symbols; | |||||
public class Symbols { | |||||
public Symbols() { | |||||
} | |||||
} |