forked from JavaTX/JavaCompilerCore
Merge branch 'antlr' of ssh://gohorb.ba-horb.de/bahome/projekt/git/JavaCompilerCore into bigRefactoring
This commit is contained in:
commit
a51cef7100
@ -0,0 +1,4 @@
|
|||||||
|
package de.dhbwstuttgart.parser;
|
||||||
|
public class InvalidClassNameException extends Exception{
|
||||||
|
|
||||||
|
}
|
@ -1,6 +1,7 @@
|
|||||||
package de.dhbwstuttgart.parser;
|
package de.dhbwstuttgart.parser;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java8Lexer;
|
import de.dhbwstuttgart.parser.antlr.Java8Lexer;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java8Parser;
|
import de.dhbwstuttgart.parser.antlr.Java8Parser;
|
||||||
|
import de.dhbwstuttgart.typecheck.JavaClassName;
|
||||||
import de.dhbwstuttgart.typecheck.JavaClassRegistry;
|
import de.dhbwstuttgart.typecheck.JavaClassRegistry;
|
||||||
import org.antlr.v4.runtime.ANTLRInputStream;
|
import org.antlr.v4.runtime.ANTLRInputStream;
|
||||||
import org.antlr.v4.runtime.CommonTokenStream;
|
import org.antlr.v4.runtime.CommonTokenStream;
|
||||||
@ -29,9 +30,14 @@ public class RunParser{
|
|||||||
Java8Parser parser = new Java8Parser(tokens);
|
Java8Parser parser = new Java8Parser(tokens);
|
||||||
Java8Parser.CompilationUnitContext tree = parser.compilationUnit();
|
Java8Parser.CompilationUnitContext tree = parser.compilationUnit();
|
||||||
SyntaxTreeGenerator generator = new SyntaxTreeGenerator(new JavaClassRegistry(new ArrayList<>()));
|
SyntaxTreeGenerator generator = new SyntaxTreeGenerator(new JavaClassRegistry(new ArrayList<>()));
|
||||||
|
generator.setImports(tree);
|
||||||
SourceFile f = generator.convert((Java8Parser.CompilationUnitContext) tree);
|
SourceFile f = generator.convert((Java8Parser.CompilationUnitContext) tree);
|
||||||
String pkgName = f.getPkgName();
|
String pkgName = f.getPkgName();
|
||||||
System.out.println("package: " + pkgName);
|
System.out.println("package: " + pkgName);
|
||||||
|
System.out.println("Imports:");
|
||||||
|
for(JavaClassName c : f.getImports()){
|
||||||
|
System.out.println(c.toString());
|
||||||
|
}
|
||||||
System.out.println("classes:");
|
System.out.println("classes:");
|
||||||
for(ClassOrInterface c : f.KlassenVektor){
|
for(ClassOrInterface c : f.KlassenVektor){
|
||||||
for(Modifier mod : c.getModifiers().getModifierList()){
|
for(Modifier mod : c.getModifiers().getModifierList()){
|
||||||
@ -51,6 +57,9 @@ public class RunParser{
|
|||||||
catch(FileNotFoundException e){
|
catch(FileNotFoundException e){
|
||||||
System.out.println("File not found.");
|
System.out.println("File not found.");
|
||||||
}
|
}
|
||||||
|
catch(InvalidClassNameException e){
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
catch(IOException e){
|
catch(IOException e){
|
||||||
System.out.println("An exception occured which is on our TODO list.");
|
System.out.println("An exception occured which is on our TODO list.");
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
|
@ -18,6 +18,8 @@ import java.lang.ClassNotFoundException;
|
|||||||
|
|
||||||
import org.antlr.v4.runtime.Token;
|
import org.antlr.v4.runtime.Token;
|
||||||
import org.antlr.v4.runtime.tree.TerminalNode;
|
import org.antlr.v4.runtime.tree.TerminalNode;
|
||||||
|
import org.antlr.v4.runtime.RecognitionException;
|
||||||
|
|
||||||
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
|
import sun.reflect.generics.reflectiveObjects.NotImplementedException;
|
||||||
|
|
||||||
public class SyntaxTreeGenerator{
|
public class SyntaxTreeGenerator{
|
||||||
@ -107,7 +109,7 @@ public class SyntaxTreeGenerator{
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void setImports(Java8Parser.CompilationUnitContext ctx){
|
public void setImports(Java8Parser.CompilationUnitContext ctx) throws InvalidClassNameException{
|
||||||
List<JavaClassName> newImports = new ArrayList();
|
List<JavaClassName> newImports = new ArrayList();
|
||||||
for(Java8Parser.ImportDeclarationContext importDeclCtx : ctx.importDeclaration()){
|
for(Java8Parser.ImportDeclarationContext importDeclCtx : ctx.importDeclaration()){
|
||||||
if(importDeclCtx.singleTypeImportDeclaration() != null){
|
if(importDeclCtx.singleTypeImportDeclaration() != null){
|
||||||
@ -126,8 +128,17 @@ public class SyntaxTreeGenerator{
|
|||||||
this.imports.addAll(newImports);
|
this.imports.addAll(newImports);
|
||||||
}
|
}
|
||||||
|
|
||||||
private JavaClassName convertSingleTypeImportDeclaration(Java8Parser.SingleTypeImportDeclarationContext ctx){
|
private JavaClassName convertSingleTypeImportDeclaration(Java8Parser.SingleTypeImportDeclarationContext ctx) throws InvalidClassNameException{
|
||||||
return null;
|
String typeName = convertTypeName(ctx.typeName());
|
||||||
|
String packageName = getPackageFromClass(typeName);
|
||||||
|
List<JavaClassName> classes = PackageCrawler.getClassNames(packageName);
|
||||||
|
JavaClassName ret = new JavaClassName(typeName);
|
||||||
|
if(classes.contains(ret)){
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
throw new InvalidClassNameException();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private JavaClassName convertTypeImportOnDemandDeclaration(Java8Parser.TypeImportOnDemandDeclarationContext ctx){
|
private JavaClassName convertTypeImportOnDemandDeclaration(Java8Parser.TypeImportOnDemandDeclarationContext ctx){
|
||||||
@ -142,6 +153,16 @@ public class SyntaxTreeGenerator{
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private String getPackageFromClass(String cls){
|
||||||
|
String ret = "";
|
||||||
|
String[] parts = cls.split("\\.");
|
||||||
|
for(int i = 0; i < parts.length - 1; i++){
|
||||||
|
ret = ret + "." + parts[i];
|
||||||
|
}
|
||||||
|
ret = ret.substring(1);
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
public SourceFile convert(Java8Parser.CompilationUnitContext ctx){
|
public SourceFile convert(Java8Parser.CompilationUnitContext ctx){
|
||||||
List<ClassOrInterface> classes = new ArrayList<>();
|
List<ClassOrInterface> classes = new ArrayList<>();
|
||||||
this.getNames(ctx);
|
this.getNames(ctx);
|
||||||
|
@ -40,4 +40,9 @@ public class SourceFile extends SyntaxTreeNode{
|
|||||||
public String getPkgName(){
|
public String getPkgName(){
|
||||||
return this.pkgName;
|
return this.pkgName;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Get imports (to test implementation)
|
||||||
|
public List<JavaClassName> getImports(){
|
||||||
|
return this.imports;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user