diff --git a/JavaTXcompiler-2.5-jar-with-dependencies.jar b/JavaTXcompiler-2.5-jar-with-dependencies.jar new file mode 100644 index 00000000..c7d81057 Binary files /dev/null and b/JavaTXcompiler-2.5-jar-with-dependencies.jar differ diff --git a/compile.sh b/compile.sh index b5f771a2..2e817266 100755 --- a/compile.sh +++ b/compile.sh @@ -3,7 +3,7 @@ SRCDIR="javatx-src/main/java" DESTDIR="out" JAVAC_FLAGS="-g:none -nowarn" -JAVATX_COMPILER_PATH="JavaTXcompiler-2.4-jar-with-dependencies.jar" +JAVATX_COMPILER_PATH="JavaTXcompiler-2.5-jar-with-dependencies.jar" #remove all files, if the script is called with parameter "clear" if [ "$1" = "clean" ]; then @@ -16,10 +16,14 @@ if [ "$1" != "" ]; then exit 1 fi -#find all .java/.jav files recursively and store them in an array +#find all .java/.jav files and store paths in an array +#note: somehow absolute paths don't work correctly with find -newer +#JAVA_FILES=($(find "$SRCDIR" -name "*.java" -exec realpath {} \;)) +#JAV_FILES=($(find "$SRCDIR" -name "*.jav" -exec realpath {} \;)) JAVA_FILES=($(find "$SRCDIR" -name "*.java")) JAV_FILES=($(find "$SRCDIR" -name "*.jav")) + #create empty arrays for .class file paths JAVA_CLASSES=() JAV_CLASSES=() @@ -56,22 +60,22 @@ for file in "${JAV_FILES[@]}"; do done +#if [ "${#JAV_CHANGED[@]}" -ne 0 ]; then +# echo "java -jar $JAVATX_COMPILER_PATH -d $DESTDIR -cp "$SRCDIR:$DESTDIR:target/dependencies/" ${JAV_CHANGED[@]}" +# java -jar $JAVATX_COMPILER_PATH -d $DESTDIR -cp "$SRCDIR:$DESTDIR:target/dependencies/" "${JAV_CHANGED[@]}" +#fi + if [ "${#JAV_CHANGED[@]}" -ne 0 ]; then - echo "java -jar $JAVATX_COMPILER_PATH -d $DESTDIR -cp "$SRCDIR:$DESTDIR:target/dependencies/" ${JAV_CHANGED[@]}" - java -jar $JAVATX_COMPILER_PATH -d $DESTDIR -cp "$SRCDIR:$DESTDIR:target/dependencies/" "${JAV_CHANGED[@]}" + for ((i = 0; i < "${#JAV_CHANGED[@]}"; i++)); do + echo "java -jar $(realpath $JAVATX_COMPILER_PATH) -d $(realpath "$DESTDIR") -cp "$(realpath $SRCDIR):$(realpath $DESTDIR):$(realpath "target/dependencies/")" ${JAV_CHANGED[i]}" + java -jar $JAVATX_COMPILER_PATH -d "$DESTDIR" -cp "$SRCDIR:$DESTDIR:target/dependencies/" "${JAV_CHANGED[i]}" + if [ $? -eq 1 ]; then + exit 1; + fi + done fi -#if [ "${#JAV_CHANGED[@]}" -ne 0 ]; then -# for ((i = 0; i < "${#JAV_CHANGED[@]}"; i++)); do -# echo "java -jar $JAVATX_COMPILER_PATH -d "$DESTDIR" -cp "$SRCDIR:$DESTDIR:target/dependencies/" ${JAV_CHANGED[i]}" -# java -jar $JAVATX_COMPILER_PATH -d "$DESTDIR" -cp "$SRCDIR:$DESTDIR:target/dependencies/" "${JAV_CHANGED[i]}" -# if [ $? -eq 1 ]; then -# exit 1; -# fi -# done -#fi - -#if [ "${#JAVA_CHANGED[@]}" -ne 0 ]; then -# echo "javac -d $DESTDIR -cp "$SRCDIR:$DESTDIR:target/dependencies/*" $JAVAC_FLAGS ${JAVA_CHANGED[@]}" -# javac -d $DESTDIR -cp "$SRCDIR:$DESTDIR:target/dependencies/*" $JAVAC_FLAGS "${JAVA_CHANGED[@]}" -#fi +if [ "${#JAVA_CHANGED[@]}" -ne 0 ]; then + echo "javac -d $DESTDIR -cp "$SRCDIR:$DESTDIR:target/dependencies/*" $JAVAC_FLAGS ${JAVA_CHANGED[@]}" + javac -d $DESTDIR -cp "$SRCDIR:$DESTDIR:target/dependencies/*" $JAVAC_FLAGS "${JAVA_CHANGED[@]}" +fi diff --git a/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/ClassOrInterface.jav-back b/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/ClassOrInterface.jav-back index 5d06769a..68b6a773 100644 --- a/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/ClassOrInterface.jav-back +++ b/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/ClassOrInterface.jav-back @@ -16,7 +16,15 @@ import java.util.Optional; import java.util.function.Predicate; import java.util.stream.Stream; -import de.dhbwstuttgart.syntaxtree.*; +//import de.dhbwstuttgart.syntaxtree.*; +import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +import de.dhbwstuttgart.syntaxtree.Field; +import de.dhbwstuttgart.syntaxtree.Constructor; +import de.dhbwstuttgart.syntaxtree.Method; +import de.dhbwstuttgart.syntaxtree.GenericDeclarationList; +import de.dhbwstuttgart.syntaxtree.GenericTypeVar; +import de.dhbwstuttgart.syntaxtree.TypeScope; +import de.dhbwstuttgart.syntaxtree.ASTVisitor; import java.lang.Boolean; import java.lang.String; diff --git a/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/Field.java b/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/Field.jav similarity index 70% rename from javatx-src/main/java/de/dhbwstuttgart/syntaxtree/Field.java rename to javatx-src/main/java/de/dhbwstuttgart/syntaxtree/Field.jav index 4afc3587..ec92db06 100644 --- a/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/Field.java +++ b/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/Field.jav @@ -3,8 +3,18 @@ package de.dhbwstuttgart.syntaxtree; import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric; import org.antlr.v4.runtime.Token; +import de.dhbwstuttgart.syntaxtree.SyntaxTreeNode; +import java.lang.String; +import java.lang.Integer; +import de.dhbwstuttgart.syntaxtree.ASTVisitor; +import de.dhbwstuttgart.syntaxtree.GenericTypeVar; +import java.lang.Iterable; +import de.dhbwstuttgart.syntaxtree.TypeScope; + import java.util.ArrayList; +//TODO: curretly types are needed, or else wrong bytecode type in visitor.accept -> runtime crash, figure out why + public class Field extends SyntaxTreeNode implements TypeScope { public final int modifier; diff --git a/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/TypeScope.java b/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/TypeScope.java index f651648b..814586e2 100644 --- a/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/TypeScope.java +++ b/javatx-src/main/java/de/dhbwstuttgart/syntaxtree/TypeScope.java @@ -1,8 +1,9 @@ package de.dhbwstuttgart.syntaxtree; import de.dhbwstuttgart.syntaxtree.type.RefTypeOrTPHOrWildcardOrGeneric; +import de.dhbwstuttgart.syntaxtree.GenericTypeVar; -import java.util.Collection; +import java.lang.Iterable; public interface TypeScope { diff --git a/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.jav b/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.jav index 8503b99e..468e8986 100644 --- a/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.jav +++ b/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/FieldAssumption.jav @@ -68,7 +68,8 @@ public class FieldAssumption extends Assumption{ return resolver.resolve(type); } - public getReceiverType(resolver) { +//Hier inferiert Java-TX RefType, obwohl RefTypeOrTPHOrWildcardOrGeneric genereller sein sollte + public RefTypeOrTPHOrWildcardOrGeneric getReceiverType(resolver) { List params = new ArrayList<>(); for(gtv : receiverClass.getGenerics()){ //Hier wird ein GenericRefType gebildet, welcher einen für dieses Feld eindeutigen Namen hat diff --git a/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/FunNClass.jav b/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/FunNClass.jav index 458eebd4..60b709f1 100644 --- a/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/FunNClass.jav +++ b/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/FunNClass.jav @@ -27,6 +27,9 @@ import java.util.Objects; import java.lang.Integer; import java.lang.String; import java.lang.Boolean; +import java.lang.Iterable; +import java.util.Collection; + public class FunNClass extends ClassOrInterface { public FunNClass(funNParams) { diff --git a/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/TypeInferenceBlockInformation.jav b/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/TypeInferenceBlockInformation.jav index c72d2a89..ca1849f5 100644 --- a/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/TypeInferenceBlockInformation.jav +++ b/javatx-src/main/java/de/dhbwstuttgart/typeinference/assumptions/TypeInferenceBlockInformation.jav @@ -24,13 +24,13 @@ public class TypeInferenceBlockInformation extends TypeInferenceInformation { private TypeScope methodContext; private ClassOrInterface currentClass; - public TypeInferenceBlockInformation(availableClasses, currentClass, methodContext) { + public TypeInferenceBlockInformation(Collection availableClasses, ClassOrInterface currentClass, TypeScope methodContext) { super(availableClasses); this.methodContext = new TypeScopeContainer(currentClass, methodContext); this.currentClass = currentClass; } - public TypeInferenceBlockInformation(oldScope, newScope) { + public TypeInferenceBlockInformation(TypeInferenceBlockInformation oldScope, TypeScope newScope) { this(oldScope.getAvailableClasses(), oldScope.currentClass, new TypeScopeContainer(oldScope.methodContext, newScope)); } public getCurrentClass() {