Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
81 changes: 39 additions & 42 deletions java/Makefile
Original file line number Diff line number Diff line change
Expand Up @@ -100,11 +100,6 @@ CHECKERFRAMEWORK_JAVAC ?= ${CHECKERFRAMEWORK_JAR_DIR}/javac.jar

### end of user customizations

# Not := because DAIKON_CLASSPATH is set later in this file.
JAVADOC_COMMAND = ${JAVADOC} -cp ${DAIKON_CLASSPATH}
JAVAC_COMMAND = ${JAVAC} -cp ${DAIKON_CLASSPATH} -Xlint -J-Xmx7g ${JAVAC_ARGS}
JAVA_COMMAND = ${JAVA} -cp ${DAIKON_CLASSPATH}


###########################################################################
### Variables
Expand Down Expand Up @@ -144,6 +139,10 @@ ifneq "$(wildcard ${JAVA_HOME}/jre/lib/rt.jar)" ""
DAIKON_CLASSPATH := ${DAIKON_CLASSPATH}:${JAVA_HOME}/jre/lib/rt.jar
endif

JAVADOC_COMMAND := ${JAVADOC} -cp ${DAIKON_CLASSPATH}
JAVAC_COMMAND := ${JAVAC} -cp ${DAIKON_CLASSPATH} -Xlint -J-Xmx7g ${JAVAC_ARGS}
JAVA_COMMAND := ${JAVA} -cp ${DAIKON_CLASSPATH}

DOCLETPATH := ${DAIKONDIR}/java:$(wildcard ${DAIKONDIR}/java/lib/bcel-util-*.jar):$(wildcard ${DAIKONDIR}/java/lib/plume-util-*.jar):$(wildcard ${DAIKONDIR}/java/lib/reflection-util-*.jar):$(wildcard ${DAIKONDIR}/java/lib/hashmap-util-*.jar):${DAIKONDIR}/java/lib/daikon-plumelib.jar

DOCLET_FLAGS :=
Expand All @@ -160,10 +159,10 @@ endif
# find command will get run multiple times. USE AUTO_GENERATED_FILES instead.
# "-o -path './jakarta-oro*/src/java/examples'" does not work for non-GNU find.
# " | perl -pi -e 's/^\.\///g'" to remove leading "./"
SORT_DIRECTORY_ORDER = ${PLUMESCRIPTS}/sort-directory-order
SORT_DIRECTORY_ORDER := ${PLUMESCRIPTS}/sort-directory-order
ifneq "$(wildcard ${SORT_DIRECTORY_ORDER})" "${SORT_DIRECTORY_ORDER}"
# Until "make ../plume-scripts" has been run, sort-directory-order is not available.
SORT_DIRECTORY_ORDER = sort
SORT_DIRECTORY_ORDER := sort
endif

DAIKON_JAVA_FILES := $(shell find daikon/ -name '*.java' -not -name '*\#*' -print | ${SORT_DIRECTORY_ORDER})
Expand Down Expand Up @@ -660,10 +659,7 @@ plume-import-check :
fi

## Use this when you don't want $inv/tests makefiles to restart
JAVA_FILES_EXCEPT_DAIKON = $(subst ./daikon/Daikon.java,,${JAVA_FILES})
ifeq (${JAVA24}, 0)
JAVA_FILES_EXCEPT_DAIKON := $(filter-out %24.java, ${JAVA_FILES_EXCEPT_DAIKON})
endif
JAVA_FILES_EXCEPT_DAIKON := $(subst ./daikon/Daikon.java,,${JAVA_FILES})
all_except_daikon: ../utils/plume-scripts ${AUTO_GENERATED_FILES}
@echo ${JAVAC_COMMAND} '*.java ... (except Daikon.java)'
@${JAVAC_COMMAND} ${JAVA_FILES_EXCEPT_DAIKON}
Expand Down Expand Up @@ -760,8 +756,8 @@ endif
# See version numbers at https://github.com/google/error-prone/releases
# and https://errorprone.info/docs/installation.
# Only run under Java 21+.
error-prone-version = 2.42.0
extra-error-prone-args-1 = --should-stop=ifError=FLOW
error-prone-version := 2.42.0
extra-error-prone-args-1 := --should-stop=ifError=FLOW

ERRORPRONE_PROCESSOR_PATH := ${DAIKONDIR}/java/lib/error-prone/error_prone_core-${error-prone-version}-with-dependencies.jar:${DAIKONDIR}/java/lib/error-prone/dataflow-errorprone-3.49.3-eisop1.jar

Expand Down Expand Up @@ -886,42 +882,43 @@ endif

## All of the following targets need to depend on "compile".

## Code in dcomp directory is not called directly; annotations would be useless.
INDEX_SKIPDEFS := ^daikon\.dcomp\|^jtb\.
INTERNING_SKIPDEFS := ^daikon\.dcomp\|^jtb\.
ALLSYSTEMS_SKIPDEFS := ^jtb\.

# Just check that the Index Checker doesn't crash -- -AsuppressWarnings="index"
# command-line argument suppresses all type-checking errors.
JAVAC_RESOURCELEAK_ARGS = -processor org.checkerframework.checker.resourceleak.ResourceLeakChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}' -ApermitStaticOwning -ApermitInitializationLeak
JAVAC_FORMATTER_ARGS = -processor org.checkerframework.checker.formatter.FormatterChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_INDEX_ARGS = -processor org.checkerframework.checker.index.IndexChecker -implicit:class -Xlint:-processing -AskipDefs='${INDEX_SKIPDEFS}' -AassumeAssertionsAreEnabled -AsuppressWarnings="index"
# JAVAC_INTERNING_ARGS = -processor org.checkerframework.checker.interning.InterningChecker -implicit:class -Xlint:-processing
JAVAC_INTERNING_ARGS = -processor org.checkerframework.checker.interning.InterningChecker -Alint=-dotequals -implicit:class -Xlint:-processing -AskipDefs='${INTERNING_SKIPDEFS}'
JAVAC_NULLNESS_ARGS = -processor org.checkerframework.checker.nullness.NullnessChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_PROTOTYPE_ARGS = -processor org.checkerframework.common.subtyping.SubtypingChecker -Aquals=typequals.Prototype,typequals.NonPrototype -implicit:class -Xlint:-processing -J-Dcheckers.skipUses='^java\.'
JAVAC_REGEX_ARGS = -processor org.checkerframework.checker.regex.RegexChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_REGEX_QUAL_ARGS = -processor org.checkerframework.checker.experimental.regex_qual.RegexCheckerAdapter -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_SIGNATURE_ARGS = -processor org.checkerframework.checker.signature.SignatureChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_SIGNEDNESS_ARGS = -processor org.checkerframework.checker.signedness.SignednessChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_VINDEX_ARGS = -processor org.checkerframework.common.subtyping.SubtypingChecker -Aquals=typequals.VIndexTop,typequals.ValueIndex,typequals.VarIndex,typequals.VIndexUnqualified,typequals.VIndexBottom -implicit:class -Xlint:-processing -J-Dcheckers.skipUses='^java\.'
JAVAC_RESOURCELEAK_ARGS := -processor org.checkerframework.checker.resourceleak.ResourceLeakChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}' -ApermitStaticOwning -ApermitInitializationLeak
JAVAC_FORMATTER_ARGS := -processor org.checkerframework.checker.formatter.FormatterChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_INDEX_ARGS := -processor org.checkerframework.checker.index.IndexChecker -implicit:class -Xlint:-processing -AskipDefs='${INDEX_SKIPDEFS}' -AassumeAssertionsAreEnabled -AsuppressWarnings="index"
# JAVAC_INTERNING_ARGS := -processor org.checkerframework.checker.interning.InterningChecker -implicit:class -Xlint:-processing
JAVAC_INTERNING_ARGS := -processor org.checkerframework.checker.interning.InterningChecker -Alint=-dotequals -implicit:class -Xlint:-processing -AskipDefs='${INTERNING_SKIPDEFS}'
JAVAC_NULLNESS_ARGS := -processor org.checkerframework.checker.nullness.NullnessChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_PROTOTYPE_ARGS := -processor org.checkerframework.common.subtyping.SubtypingChecker -Aquals=typequals.Prototype,typequals.NonPrototype -implicit:class -Xlint:-processing -J-Dcheckers.skipUses='^java\.'
JAVAC_REGEX_ARGS := -processor org.checkerframework.checker.regex.RegexChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_REGEX_QUAL_ARGS := -processor org.checkerframework.checker.experimental.regex_qual.RegexCheckerAdapter -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_SIGNATURE_ARGS := -processor org.checkerframework.checker.signature.SignatureChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_SIGNEDNESS_ARGS := -processor org.checkerframework.checker.signedness.SignednessChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_VINDEX_ARGS := -processor org.checkerframework.common.subtyping.SubtypingChecker -Aquals=typequals.VIndexTop,typequals.ValueIndex,typequals.VarIndex,typequals.VIndexUnqualified,typequals.VIndexBottom -implicit:class -Xlint:-processing -J-Dcheckers.skipUses='^java\.'
# -AsuppressWarnings=lock:method.guarantee.violated,lock:override.sideeffect is temporary.
# Once the Purity Checker and -AsuggestPureMethods are fixed, they can be run on plume-lib
# and Daikon and this can be removed. The method.guarantee.violated warning is issued by
# the Lock Checker when a method calls another method with a weaker side effect guarantee.
# The override.sideeffect warning is issued by the Lock Checker when the side effect
# annotation on the overridder method is weaker than that on the overridden method.
JAVAC_LOCK_ARGS = -processor org.checkerframework.checker.lock.LockChecker -AsuppressWarnings=lock:method.guarantee.violated,lock:override.sideeffect -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_JAVARI_ARGS = -processor org.checkerframework.checker.javari.JavariChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_IGJ_ARGS = -processor org.checkerframework.checker.igj.IGJChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
## Code in dcomp directory is not called directly; annotations would be useless.
INDEX_SKIPDEFS = ^daikon\.dcomp\|^jtb\.
INTERNING_SKIPDEFS = ^daikon\.dcomp\|^jtb\.
ALLSYSTEMS_SKIPDEFS=^jtb\.
INDEX_JAVA_FILES = ${DAIKON_JAVA_FILES}
JAVAC_LOCK_ARGS := -processor org.checkerframework.checker.lock.LockChecker -AsuppressWarnings=lock:method.guarantee.violated,lock:override.sideeffect -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_JAVARI_ARGS := -processor org.checkerframework.checker.javari.JavariChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
JAVAC_IGJ_ARGS := -processor org.checkerframework.checker.igj.IGJChecker -implicit:class -Xlint:-processing -AskipDefs='${ALLSYSTEMS_SKIPDEFS}'
INDEX_JAVA_FILES := ${DAIKON_JAVA_FILES}
# Intern.java implements interning and so has very many annotations. VarInfoName
# is obsolescent, retained for backward compatibility only; it is of flawed design
# and has 60 @Interned annotations and quite a few SuppressWarnings.
INTERNING_JAVA_FILES_SKIP_COUNTS = Intern.java\|VarInfoName.java\|daikon/dcomp
INTERNING_JAVA_FILES_SKIP_COUNTS := Intern.java\|VarInfoName.java\|daikon/dcomp
## Which files to check.
INTERNING_JAVA_FILES = ${DAIKON_JAVA_FILES}
INTERNING_JAVA_FILES := ${DAIKON_JAVA_FILES}
INTERNING_JAVA_FILES_COUNTS := $(shell find . -type f -name '*.java' | egrep -v ${INTERNING_JAVA_FILES_SKIP_COUNTS} | xargs grep -l -i '@Interned' | ${SORT_DIRECTORY_ORDER})
NULLNESS_JAVA_FILES = ${DAIKON_JAVA_FILES}
NULLNESS_JAVA_FILES := ${DAIKON_JAVA_FILES}

# $(shell find daikon -name '*.java' -a -exec grep -L "^@SuppressWarnings.*nullness" {} \; | sort)
# $(shell find typequals/ -name '*.java')
Expand Down Expand Up @@ -1084,8 +1081,8 @@ typecheck-vindex-nocompile:
@echo ${JAVAC_COMMAND} ${JAVAC_VINDEX_ARGS} ${CHECKER_ARGS} ...
@${JAVAC_COMMAND} -Xbootclasspath/p:${DAIKONDIR}/java ${JAVAC_VINDEX_ARGS} ${CHECKER_ARGS} ${NULLNESS_JAVA_FILES}

TYPEQUALS_JAVA_FILES = $(wildcard typequals/*.java)
TYPEQUALS_CLASSES = $(subst .java,.class,${TYPEQUALS_JAVA_FILES})
TYPEQUALS_JAVA_FILES := $(wildcard typequals/*.java)
TYPEQUALS_CLASSES := $(subst .java,.class,${TYPEQUALS_JAVA_FILES})

compile-typequals: ${TYPEQUALS_CLASSES}
${TYPEQUALS_CLASSES}: ${TYPEQUALS_JAVA_FILES}
Expand Down Expand Up @@ -1141,7 +1138,7 @@ nullness-counts:


# Count the total possible locations at which a type annotation could be written.
JAVAC_COUNT_ARGS = -processor org.checkerframework.common.util.count.Locations -implicit:class -Xlint:-processing
JAVAC_COUNT_ARGS := -processor org.checkerframework.common.util.count.Locations -implicit:class -Xlint:-processing
possible-annos: ${ALL_GENERATED_FILES} compile-typequals compile
@echo ${JAVAC_COMMAND} ${JAVAC_COUNT_ARGS} ${CHECKER_ARGS} ...
@${JAVAC_COMMAND} ${JAVAC_COUNT_ARGS} ${CHECKER_ARGS} ${NULLNESS_JAVA_FILES}
Expand Down Expand Up @@ -1211,18 +1208,18 @@ clover: all_directly
### Documentation
###

JAVADOC_DEST = api
JAVADOC_DEST := api
# ${DAIKONDIR}/java should not be in classpath, to avoid Javadoc error
# "Multiple sources of package comments found for package".
# It also keeps javadoc from finding "*24.java"
# Removed "-source 8" because it causes a crash under JDK 11: https://bugzilla.redhat.com/show_bug.cgi?id=1874672
JAVADOC_FLAGS_COMMON = -breakiterator -quiet -linksource -noqualifier all \
JAVADOC_FLAGS_COMMON := -breakiterator -quiet -linksource -noqualifier all \
-Xmaxerrs 100000 -Xmaxwarns 100000 \
-d ${JAVADOC_DEST} \
-linkoffline ${LINKOFFLINE} ${LINKOFFLINE} \
-notimestamp \
-classpath "$(subst *:${DAIKONDIR}/java,*,${DAIKON_CLASSPATH})"
JAVADOC_FLAGS = ${JAVADOC_FLAGS_COMMON} \
JAVADOC_FLAGS := ${JAVADOC_FLAGS_COMMON} \
-docletpath "${DOCLETPATH}"

# Daikon packages except for util (which is just a copy of plume), plume,
Expand Down