diff --git a/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/StatementGenerator.java b/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/StatementGenerator.java index bca9542f..741be945 100644 --- a/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/StatementGenerator.java +++ b/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/StatementGenerator.java @@ -23,7 +23,7 @@ public class StatementGenerator { private JavaClassRegistry reg; private Map localVars; private GenericsRegistry generics; - private String VAR_KEYWORD = "var"; + public static final String VAR_KEYWORD = "var"; public StatementGenerator(JavaClassRegistry reg, GenericsRegistry generics, Map localVars){ this.reg = reg; diff --git a/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/SyntaxTreeGenerator.java b/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/SyntaxTreeGenerator.java index 33ece33e..926fabef 100644 --- a/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/SyntaxTreeGenerator.java +++ b/src/de/dhbwstuttgart/parser/SyntaxTreeGenerator/SyntaxTreeGenerator.java @@ -310,8 +310,9 @@ public class SyntaxTreeGenerator{ modifiers+=(convert(fieldModifierContext)); } RefTypeOrTPHOrWildcardOrGeneric fieldType; - if(fieldDeclarationContext.unannType() != null){ - fieldType = TypeGenerator.convert(fieldDeclarationContext.unannType(), reg, generics); + if(fieldDeclarationContext.unannTypeOrAuto() != null + && fieldDeclarationContext.unannTypeOrAuto().unannType().getText().equals(StatementGenerator.VAR_KEYWORD)){ + fieldType = TypeGenerator.convert(fieldDeclarationContext.unannTypeOrAuto().unannType(), reg, generics); }else{ fieldType = TypePlaceholder.fresh(fieldDeclarationContext.getStart()); } diff --git a/src/de/dhbwstuttgart/parser/antlr/Java8.g4 b/src/de/dhbwstuttgart/parser/antlr/Java8.g4 index ef6de051..4bc665a4 100644 --- a/src/de/dhbwstuttgart/parser/antlr/Java8.g4 +++ b/src/de/dhbwstuttgart/parser/antlr/Java8.g4 @@ -333,7 +333,7 @@ classMemberDeclaration ; fieldDeclaration - : fieldModifier* unannType? variableDeclaratorList ';' + : fieldModifier* unannTypeOrAuto? variableDeclaratorList ';' ; fieldModifier diff --git a/src/de/dhbwstuttgart/parser/antlr/Java8Parser.java b/src/de/dhbwstuttgart/parser/antlr/Java8Parser.java index 0f0249b6..8a71a2ef 100644 --- a/src/de/dhbwstuttgart/parser/antlr/Java8Parser.java +++ b/src/de/dhbwstuttgart/parser/antlr/Java8Parser.java @@ -3526,8 +3526,8 @@ public class Java8Parser extends Parser { public FieldModifierContext fieldModifier(int i) { return getRuleContext(FieldModifierContext.class,i); } - public UnannTypeContext unannType() { - return getRuleContext(UnannTypeContext.class,0); + public UnannTypeOrAutoContext unannTypeOrAuto() { + return getRuleContext(UnannTypeOrAutoContext.class,0); } public FieldDeclarationContext(ParserRuleContext parent, int invokingState) { super(parent, invokingState); @@ -3570,7 +3570,7 @@ public class Java8Parser extends Parser { case 1: { setState(878); - unannType(); + unannTypeOrAuto(); } break; } @@ -18008,33 +18008,33 @@ public class Java8Parser extends Parser { "\u0365\3\2\2\2\u0368\u0366\3\2\2\2\u0368\u0367\3\2\2\2\u0369i\3\2\2\2"+ "\u036a\u036c\5l\67\2\u036b\u036a\3\2\2\2\u036c\u036f\3\2\2\2\u036d\u036b"+ "\3\2\2\2\u036d\u036e\3\2\2\2\u036e\u0371\3\2\2\2\u036f\u036d\3\2\2\2\u0370"+ - "\u0372\5v<\2\u0371\u0370\3\2\2\2\u0371\u0372\3\2\2\2\u0372\u0373\3\2\2"+ - "\2\u0373\u0374\5n8\2\u0374\u0375\7A\2\2\u0375k\3\2\2\2\u0376\u037f\5\u00e8"+ - "u\2\u0377\u037f\7%\2\2\u0378\u037f\7$\2\2\u0379\u037f\7#\2\2\u037a\u037f"+ - "\7(\2\2\u037b\u037f\7\24\2\2\u037c\u037f\7\60\2\2\u037d\u037f\7\63\2\2"+ - "\u037e\u0376\3\2\2\2\u037e\u0377\3\2\2\2\u037e\u0378\3\2\2\2\u037e\u0379"+ - "\3\2\2\2\u037e\u037a\3\2\2\2\u037e\u037b\3\2\2\2\u037e\u037c\3\2\2\2\u037e"+ - "\u037d\3\2\2\2\u037fm\3\2\2\2\u0380\u0385\5p9\2\u0381\u0382\7B\2\2\u0382"+ - "\u0384\5p9\2\u0383\u0381\3\2\2\2\u0384\u0387\3\2\2\2\u0385\u0383\3\2\2"+ - "\2\u0385\u0386\3\2\2\2\u0386o\3\2\2\2\u0387\u0385\3\2\2\2\u0388\u038b"+ - "\5r:\2\u0389\u038a\7D\2\2\u038a\u038c\5t;\2\u038b\u0389\3\2\2\2\u038b"+ - "\u038c\3\2\2\2\u038cq\3\2\2\2\u038d\u038f\7h\2\2\u038e\u0390\5\"\22\2"+ - "\u038f\u038e\3\2\2\2\u038f\u0390\3\2\2\2\u0390s\3\2\2\2\u0391\u0394\5"+ - "\u01a2\u00d2\2\u0392\u0394\5\u00fa~\2\u0393\u0391\3\2\2\2\u0393\u0392"+ - "\3\2\2\2\u0394u\3\2\2\2\u0395\u0398\5x=\2\u0396\u0398\5z>\2\u0397\u0395"+ - "\3\2\2\2\u0397\u0396\3\2\2\2\u0398w\3\2\2\2\u0399\u039c\5\b\5\2\u039a"+ - "\u039c\7\5\2\2\u039b\u0399\3\2\2\2\u039b\u039a\3\2\2\2\u039cy\3\2\2\2"+ - "\u039d\u03a1\5|?\2\u039e\u03a1\5\u008aF\2\u039f\u03a1\5\u008cG\2\u03a0"+ - "\u039d\3\2\2\2\u03a0\u039e\3\2\2\2\u03a0\u039f\3\2\2\2\u03a1{\3\2\2\2"+ - "\u03a2\u03a5\5\u0082B\2\u03a3\u03a5\5\u0088E\2\u03a4\u03a2\3\2\2\2\u03a4"+ - "\u03a3\3\2\2\2\u03a5\u03aa\3\2\2\2\u03a6\u03a9\5\u0080A\2\u03a7\u03a9"+ - "\5\u0086D\2\u03a8\u03a6\3\2\2\2\u03a8\u03a7\3\2\2\2\u03a9\u03ac\3\2\2"+ - "\2\u03aa\u03a8\3\2\2\2\u03aa\u03ab\3\2\2\2\u03ab}\3\2\2\2\u03ac\u03aa"+ - "\3\2\2\2\u03ad\u03af\7h\2\2\u03ae\u03b0\5,\27\2\u03af\u03ae\3\2\2\2\u03af"+ - "\u03b0\3\2\2\2\u03b0\u03be\3\2\2\2\u03b1\u03b2\5|?\2\u03b2\u03b6\7C\2"+ - "\2\u03b3\u03b5\5\u00e8u\2\u03b4\u03b3\3\2\2\2\u03b5\u03b8\3\2\2\2\u03b6"+ - "\u03b4\3\2\2\2\u03b6\u03b7\3\2\2\2\u03b7\u03b9\3\2\2\2\u03b8\u03b6\3\2"+ - "\2\2\u03b9\u03bb\7h\2\2\u03ba\u03bc\5,\27\2\u03bb\u03ba\3\2\2\2\u03bb"+ + "\u0372\5\u0106\u0084\2\u0371\u0370\3\2\2\2\u0371\u0372\3\2\2\2\u0372\u0373"+ + "\3\2\2\2\u0373\u0374\5n8\2\u0374\u0375\7A\2\2\u0375k\3\2\2\2\u0376\u037f"+ + "\5\u00e8u\2\u0377\u037f\7%\2\2\u0378\u037f\7$\2\2\u0379\u037f\7#\2\2\u037a"+ + "\u037f\7(\2\2\u037b\u037f\7\24\2\2\u037c\u037f\7\60\2\2\u037d\u037f\7"+ + "\63\2\2\u037e\u0376\3\2\2\2\u037e\u0377\3\2\2\2\u037e\u0378\3\2\2\2\u037e"+ + "\u0379\3\2\2\2\u037e\u037a\3\2\2\2\u037e\u037b\3\2\2\2\u037e\u037c\3\2"+ + "\2\2\u037e\u037d\3\2\2\2\u037fm\3\2\2\2\u0380\u0385\5p9\2\u0381\u0382"+ + "\7B\2\2\u0382\u0384\5p9\2\u0383\u0381\3\2\2\2\u0384\u0387\3\2\2\2\u0385"+ + "\u0383\3\2\2\2\u0385\u0386\3\2\2\2\u0386o\3\2\2\2\u0387\u0385\3\2\2\2"+ + "\u0388\u038b\5r:\2\u0389\u038a\7D\2\2\u038a\u038c\5t;\2\u038b\u0389\3"+ + "\2\2\2\u038b\u038c\3\2\2\2\u038cq\3\2\2\2\u038d\u038f\7h\2\2\u038e\u0390"+ + "\5\"\22\2\u038f\u038e\3\2\2\2\u038f\u0390\3\2\2\2\u0390s\3\2\2\2\u0391"+ + "\u0394\5\u01a2\u00d2\2\u0392\u0394\5\u00fa~\2\u0393\u0391\3\2\2\2\u0393"+ + "\u0392\3\2\2\2\u0394u\3\2\2\2\u0395\u0398\5x=\2\u0396\u0398\5z>\2\u0397"+ + "\u0395\3\2\2\2\u0397\u0396\3\2\2\2\u0398w\3\2\2\2\u0399\u039c\5\b\5\2"+ + "\u039a\u039c\7\5\2\2\u039b\u0399\3\2\2\2\u039b\u039a\3\2\2\2\u039cy\3"+ + "\2\2\2\u039d\u03a1\5|?\2\u039e\u03a1\5\u008aF\2\u039f\u03a1\5\u008cG\2"+ + "\u03a0\u039d\3\2\2\2\u03a0\u039e\3\2\2\2\u03a0\u039f\3\2\2\2\u03a1{\3"+ + "\2\2\2\u03a2\u03a5\5\u0082B\2\u03a3\u03a5\5\u0088E\2\u03a4\u03a2\3\2\2"+ + "\2\u03a4\u03a3\3\2\2\2\u03a5\u03aa\3\2\2\2\u03a6\u03a9\5\u0080A\2\u03a7"+ + "\u03a9\5\u0086D\2\u03a8\u03a6\3\2\2\2\u03a8\u03a7\3\2\2\2\u03a9\u03ac"+ + "\3\2\2\2\u03aa\u03a8\3\2\2\2\u03aa\u03ab\3\2\2\2\u03ab}\3\2\2\2\u03ac"+ + "\u03aa\3\2\2\2\u03ad\u03af\7h\2\2\u03ae\u03b0\5,\27\2\u03af\u03ae\3\2"+ + "\2\2\u03af\u03b0\3\2\2\2\u03b0\u03be\3\2\2\2\u03b1\u03b2\5|?\2\u03b2\u03b6"+ + "\7C\2\2\u03b3\u03b5\5\u00e8u\2\u03b4\u03b3\3\2\2\2\u03b5\u03b8\3\2\2\2"+ + "\u03b6\u03b4\3\2\2\2\u03b6\u03b7\3\2\2\2\u03b7\u03b9\3\2\2\2\u03b8\u03b6"+ + "\3\2\2\2\u03b9\u03bb\7h\2\2\u03ba\u03bc\5,\27\2\u03bb\u03ba\3\2\2\2\u03bb"+ "\u03bc\3\2\2\2\u03bc\u03be\3\2\2\2\u03bd\u03ad\3\2\2\2\u03bd\u03b1\3\2"+ "\2\2\u03be\177\3\2\2\2\u03bf\u03c3\7C\2\2\u03c0\u03c2\5\u00e8u\2\u03c1"+ "\u03c0\3\2\2\2\u03c2\u03c5\3\2\2\2\u03c3\u03c1\3\2\2\2\u03c3\u03c4\3\2"+ diff --git a/target/JavaTXcompiler-0.1-jar-with-dependencies.jar b/target/JavaTXcompiler-0.1-jar-with-dependencies.jar index fdf649ee..0fe1a615 100644 Binary files a/target/JavaTXcompiler-0.1-jar-with-dependencies.jar and b/target/JavaTXcompiler-0.1-jar-with-dependencies.jar differ diff --git a/test/javFiles/Fields.jav b/test/javFiles/Fields.jav new file mode 100644 index 00000000..1add83ca --- /dev/null +++ b/test/javFiles/Fields.jav @@ -0,0 +1,11 @@ +import java.lang.String; + +class Fields{ +String test2 = "test"; +test; +m(){ + var test3; + return test; +} + +} \ No newline at end of file diff --git a/test/typeinference/JavaTXCompilerTest.java b/test/typeinference/JavaTXCompilerTest.java index 122f2359..b785c0dc 100644 --- a/test/typeinference/JavaTXCompilerTest.java +++ b/test/typeinference/JavaTXCompilerTest.java @@ -85,6 +85,10 @@ public class JavaTXCompilerTest { public void addLong() throws IOException, ClassNotFoundException { execute(new File(rootDirectory+"AddLong.jav")); } + @Test + public void fields() throws IOException, ClassNotFoundException { + execute(new File(rootDirectory+"Fields.jav")); + } private static class TestResultSet{