forked from JavaTX/JavaCompilerCore
Fehler im neuen SyntaxTreeGenerator beseitigt und TODOs eingefügt
This commit is contained in:
parent
8c6a614157
commit
043dda660b
@ -3,6 +3,7 @@ package de.dhbwstuttgart.parser.SyntaxTreeGenerator;
|
|||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
import java.util.Objects;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.stream.Collectors;
|
import java.util.stream.Collectors;
|
||||||
@ -21,6 +22,7 @@ import de.dhbwstuttgart.parser.antlr.Java17Parser;
|
|||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.ClassBodyDeclarationContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.ClassBodyDeclarationContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.ClassOrInterfaceModifierContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.ClassOrInterfaceModifierContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.ClassorinterfacedeclContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.ClassorinterfacedeclContext;
|
||||||
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.EmptymethodContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.GenericDeclarationListContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.GenericDeclarationListContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.GenericmethodContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.GenericmethodContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.MemberclassorinterfaceContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.MemberclassorinterfaceContext;
|
||||||
@ -28,11 +30,14 @@ import de.dhbwstuttgart.parser.antlr.Java17Parser.MemberconstructorContext;
|
|||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.MemberdeclContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.MemberdeclContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.MemberfieldContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.MemberfieldContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.MembermethodContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.MembermethodContext;
|
||||||
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.MethodBodyContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.MethodDeclarationContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.MethodDeclarationContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.MethodHeaderContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.MethodHeaderContext;
|
||||||
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.MethodblockContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.MethoddeclContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.MethoddeclContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.ModifierContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.ModifierContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.NoclassorinterfaceContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.NoclassorinterfaceContext;
|
||||||
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.ReftypeContext;
|
||||||
import de.dhbwstuttgart.parser.antlr.Java17Parser.SrcfileContext;
|
import de.dhbwstuttgart.parser.antlr.Java17Parser.SrcfileContext;
|
||||||
import de.dhbwstuttgart.parser.scope.GatherNames;
|
import de.dhbwstuttgart.parser.scope.GatherNames;
|
||||||
import de.dhbwstuttgart.parser.scope.GenericsRegistry;
|
import de.dhbwstuttgart.parser.scope.GenericsRegistry;
|
||||||
@ -49,6 +54,7 @@ import de.dhbwstuttgart.syntaxtree.factory.ASTFactory;
|
|||||||
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
import de.dhbwstuttgart.syntaxtree.type.RefType;
|
||||||
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric;
|
import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric;
|
||||||
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
import de.dhbwstuttgart.syntaxtree.type.TypePlaceholder;
|
||||||
|
import de.dhbwstuttgart.syntaxtree.type.Void;
|
||||||
import de.dhbwstuttgart.syntaxtree.statement.Block;
|
import de.dhbwstuttgart.syntaxtree.statement.Block;
|
||||||
import de.dhbwstuttgart.syntaxtree.statement.Statement;
|
import de.dhbwstuttgart.syntaxtree.statement.Statement;
|
||||||
|
|
||||||
@ -133,7 +139,8 @@ public class ASTGen {
|
|||||||
if (clsoif.classDeclaration() != null) {
|
if (clsoif.classDeclaration() != null) {
|
||||||
newClass = convertClass(clsoif.classDeclaration(), modifiers);
|
newClass = convertClass(clsoif.classDeclaration(), modifiers);
|
||||||
} else {
|
} else {
|
||||||
newClass = convertInterface(clsoif.interfaceDeclaration(), modifiers);
|
// TODO: newClass = convertInterface(clsoif.interfaceDeclaration(), modifiers);
|
||||||
|
throw new NotImplementedException();
|
||||||
}
|
}
|
||||||
classes.add(newClass);
|
classes.add(newClass);
|
||||||
}
|
}
|
||||||
@ -315,14 +322,37 @@ public class ASTGen {
|
|||||||
methoddeclaration = mdc.methodDeclaration();
|
methoddeclaration = mdc.methodDeclaration();
|
||||||
header = methoddeclaration.methodHeader();
|
header = methoddeclaration.methodHeader();
|
||||||
gtvDeclarations = new GenericDeclarationList(new ArrayList<>(), header.getStart());
|
gtvDeclarations = new GenericDeclarationList(new ArrayList<>(), header.getStart());
|
||||||
|
name = header.identifier().getText();
|
||||||
}
|
}
|
||||||
|
|
||||||
RefTypeOrTPHOrWildcardOrGeneric retType;
|
RefTypeOrTPHOrWildcardOrGeneric retType;
|
||||||
if (header.refType() != null) {
|
if (Objects.isNull(header.refType())) {
|
||||||
retType = TypeGenerator.convert(header.refType());
|
retType = TypePlaceholder.fresh(header.getStart());
|
||||||
|
} else {
|
||||||
|
if (header.refType() instanceof ReftypeContext reftype) {
|
||||||
|
retType = TypeGenerator.convert(reftype.typeType(), reg, generics);
|
||||||
|
} else {
|
||||||
|
retType = new Void(header.refType().getStart());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
StatementGenerator stmtgen = new StatementGenerator(reg, localgenerics, fields, new HashMap<>());
|
||||||
|
ParameterList paramlist = stmtgen.convert(header.formalParameters().formalParameterList());
|
||||||
|
MethodBodyContext body = methoddeclaration.methodBody();
|
||||||
|
Block block = null;
|
||||||
|
if (body instanceof EmptymethodContext emptymethod) {
|
||||||
|
if (!Modifier.isAbstract(modifiers)) {
|
||||||
|
// TODO: Error! Abstrakte Methode ohne abstrakt Keyword
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
block = stmtgen.convert(new MethodblockContext(body).block(), true);
|
||||||
|
}
|
||||||
|
if (parentClass.equals(new JavaClassName(name))) {
|
||||||
|
// TODO: Konstruktoren in eigener Methode behandeln
|
||||||
|
/* fieldInitializations geloescht PL 2018-11-24 */
|
||||||
|
return new Constructor(modifiers, name, retType, paramlist, block, gtvDeclarations, header.getStart());
|
||||||
|
} else {
|
||||||
|
return new Method(modifiers, name, retType, paramlist, block, gtvDeclarations, header.getStart());
|
||||||
}
|
}
|
||||||
|
|
||||||
return null;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private List<? extends Field> convert(Java17Parser.FieldDeclarationContext fieldDeclContext, int modifiers,
|
private List<? extends Field> convert(Java17Parser.FieldDeclarationContext fieldDeclContext, int modifiers,
|
||||||
|
Loading…
Reference in New Issue
Block a user