# This makefile contains the commands to test the AnnotationClassLoader.
# Tt uses the aliasing checker as it is one of the framework checkers that has a
# qual directory with qualifiers that must be loaded using the loader.

# Gets the full path to the directory of the make file, which is also the root
# directory of the qual folder.
# For custom projects, it is best to encode the full root path as a variable.
PROJECTDIR := $(shell dirname $(realpath $(lastword $(MAKEFILE_LIST))))

# Use the Checker Framework javac.
# TODO: the dependency on the checker project isn't nice.
JAVAC = $(PROJECTDIR)/../../../checker/bin/javac

FRAMEWORKJAR := $(PROJECTDIR)/../../dist/framework.jar

STUBPARSERJAR := $(PROJECTDIR)/../../../../stubparser/javaparser-core/target/stubparser.jar

CHECKERQUALJAR := $(PROJECTDIR)/../../../checker/dist/checker-qual.jar

# build directories
DATAFLOWBUILD := $(PROJECTDIR)/../../../dataflow/build/classes/java/main
JAVACUTILBUILD := $(PROJECTDIR)/../../../javacutil/build/classes/java/main
FRAMEWORKBUILD := $(PROJECTDIR)/../../build/classes/java/main:$(PROJECTDIR)/../../build/resources/main/
CHECKERQUALBUILD := $(PROJECTDIR)/../../../checker-qual/build/classes/java/main


all: load-from-dir-test load-from-jar-test

# ======================================================
# demo or manual test usage:
# loads from build directories
demo1:
	@echo "***** This command is expected to produce an error on line 7:"
	$(JAVAC) \
	  -processorpath $(DATAFLOWBUILD):$(JAVACUTILBUILD):$(FRAMEWORKBUILD):${STUBPARSERJAR} \
	  -classpath $(PROJECTDIR):${CHECKERQUALBUILD} \
	  -processor org.checkerframework.common.aliasing.AliasingChecker \
	  -Anomsgtext \
	  -ApermitMissingJdk \
	  LoaderTest.java

# loads from framework.jar
demo2:
	@echo "***** This command is expected to produce an error on line 7:"
	$(JAVAC) \
	  -processorpath $(FRAMEWORKJAR) \
	  -classpath $(PROJECTDIR):${CHECKERQUALJAR} \
	  -processor org.checkerframework.common.aliasing.AliasingChecker \
	  -Anomsgtext \
	  -ApermitMissingJdk \
	  LoaderTest.java

# ======================================================
# gradle test usage:
# loads from build directories
load-from-dir-test:
	$(JAVAC) \
	  -processorpath $(DATAFLOWBUILD):$(JAVACUTILBUILD):$(FRAMEWORKBUILD):${STUBPARSERJAR} \
	  -classpath $(PROJECTDIR):${CHECKERQUALBUILD} \
	  -processor org.checkerframework.common.aliasing.AliasingChecker \
	  -Anomsgtext \
	  -ApermitMissingJdk \
	  LoaderTest.java > Out.txt 2>&1 || true
	diff -u Expected.txt Out.txt -I 'Note'
	rm -f Out.txt

# loads from framework.jar
load-from-jar-test:
	$(JAVAC) \
	  -processorpath $(FRAMEWORKJAR) \
	  -classpath $(PROJECTDIR):${CHECKERQUALJAR} \
	  -processor org.checkerframework.common.aliasing.AliasingChecker \
	  -Anomsgtext \
	  -ApermitMissingJdk \
	  LoaderTest.java > Out.txt 2>&1 || true
	diff -u Expected.txt Out.txt
	rm -f Out.txt
