This commit is contained in:
Kui LIU
2017-09-19 21:41:53 +02:00
parent 72116994e4
commit c8137c23e2
51 changed files with 111530 additions and 631 deletions
+2518
View File
File diff suppressed because it is too large Load Diff
View File
View File
View File
View File
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
+4327
View File
File diff suppressed because it is too large Load Diff
+124
View File
@@ -0,0 +1,124 @@
1
BC_VACUOUS_INSTANCEOF Ignore it. no source code, no source code change
CN_IDIOM_NO_SUPER_CALL Ignore it. no source code, no source code change
CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE Ignore it. no source code, no source code change
DLS_DEAD_LOCAL_STORE Ignore it. no source code, no source code change
DM_DEFAULT_ENCODING
DM_NUMBER_CTOR
DM_STRING_CTOR
DM_STRING_VOID_CTOR
DP_DO_INSIDE_DO_PRIVILEGED
EI_EXPOSE_REP
EQ_COMPARETO_USE_OBJECT_EQUALS
EQ_DOESNT_OVERRIDE_EQUALS
EQ_SELF_USE_OBJECT
HE_EQUALS_USE_HASHCODE
HE_HASHCODE_USE_OBJECT_EQUALS
HE_INHERITS_EQUALS_USE_HASHCODE
IS2_INCONSISTENT_SYNC
MS_CANNOT_BE_FINAL
MS_MUTABLE_ARRAY
MS_PKGPROTECT
MS_SHOULD_BE_FINAL
NM_CLASS_NAMING_CONVENTION
NM_CLASS_NOT_EXCEPTION
NM_SAME_SIMPLE_NAME_AS_SUPERCLASS
OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE
OS_OPEN_STREAM
OS_OPEN_STREAM_EXCEPTION_PATH
RI_REDUNDANT_INTERFACES
SA_FIELD_DOUBLE_ASSIGNMENT
SE_COMPARATOR_SHOULD_BE_SERIALIZABLE
SE_NO_SERIALVERSIONID
SIO_SUPERFLUOUS_INSTANCEOF
UCF_USELESS_CONTROL_FLOW
UG_SYNC_SET_UNSYNC_GET
UPM_UNCALLED_PRIVATE_METHOD
URF_UNREAD_FIELD
URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD
UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR
UWF_UNWRITTEN_FIELD
UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD
WMI_WRONG_MAP_ITERATOR
-1
CI_CONFUSED_INHERITANCE
CO_ABSTRACT_SELF
DMI_COLLECTION_OF_URLS
EQ_ABSTRACT_SELF
HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS
JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS
ME_MUTABLE_ENUM_FIELD
MF_CLASS_MASKS_FIELD
MS_CANNOT_BE_FINAL
MS_PKGPROTECT
MS_SHOULD_BE_FINAL
NM_FIELD_NAMING_CONVENTION
NM_SAME_SIMPLE_NAME_AS_INTERFACE
SE_BAD_FIELD
SE_TRANSIENT_FIELD_NOT_RESTORED
STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE
UPM_UNCALLED_PRIVATE_METHOD
UUF_UNUSED_FIELD
UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD
UWF_NULL_FIELD
UWF_UNWRITTEN_FIELD
UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD
VO_VOLATILE_REFERENCE_TO_ARRAY
CI_CONFUSED_INHERITANCE change modifier of fields from protected to private or public, or remove final of class.
CO_ABSTRACT_SELF Interface, remove compareTo() method.
SE_NO_SERIALVERSIONID add a field: serialVersionUID
EQ_ABSTRACT_SELF Interface, remove compareTo() method.
EQ_COMPARETO_USE_OBJECT_EQUALS: Update or Delete compareTo(), Add equals()
EQ_DOESNT_OVERRIDE_EQUALS override equals()
HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS remove equals() only one instance
ME_MUTABLE_ENUM_FIELD enum, field add final.
MF_CLASS_MASKS_FIELD, change super class or delete the field with a same name in super class.
MS_SHOULD_BE_FINAL Add final key word
STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE remove public static final DateFormat DATE_FORMAT.... or SimpleDateFormat
UUF_UNUSED_FIELD remove unused fields. not sure
UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD field
UWF_NULL_FIELD update field, remove field
UWF_UNWRITTEN_FIELD field
UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD remove field
VO_VOLATILE_REFERENCE_TO_ARRAY field
all GumTree results. class, field, method, //statements.
NM_SAME_SIMPLE_NAME_AS_INTERFACE rename class name or remove super class
NM_SAME_SIMPLE_NAME_AS_SUPERCLASS, class name
NM_METHOD_NAMING_CONVENTION
NM_CLASS_NAMING_CONVENTION class name
NM_CLASS_NOT_EXCEPTION class name
RI_REDUNDANT_INTERFACES class implemented interface
SE_NO_SUITABLE_CONSTRUCTOR Serializable Class level remove Serializable interface and serialVersionUID
SIC_INNER_SHOULD_BE_STATIC add static to inner class, not sure, delete it, 如果是匿名内部类,该如何处理? ,其他的直接内部类的范围。
SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS 同上
===
CO_ABSTRACT_SELF inner class
SE_INNER_CLASS inner class
SE_COMPARATOR_SHOULD_BE_SERIALIZABLE, inner class, 读definition
SE_BAD_FIELD_INNER_CLASS inner class
SIC_INNER_SHOULD_BE_STATIC_ANON inner class
HE_INHERITS_EQUALS_USE_HASHCODE inner class or class
CN_IDIOM add clone method. or update clone method
DM_NUMBER_CTOR multi v multi patches
EQ_COMPARETO_USE_OBJECT_EQUALS, the same as before
IC_INIT_CIRCULARITY, multi V, multi patches>
SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATION, add a constructor or add public to old constructor,
NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR
SE_NO_SERIALVERSIONID change superclass or interface, add field or remove @SuppressWarnings("serial"), some are inner class
File diff suppressed because it is too large Load Diff
+3130
View File
File diff suppressed because it is too large Load Diff
+339
View File
@@ -0,0 +1,339 @@
SIC_INNER_SHOULD_BE_STATIC_ANON
DLS_DEAD_LOCAL_STORE
DM_CONVERT_CASE
DM_DEFAULT_ENCODING
UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR
RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE
NM_METHOD_NAMING_CONVENTION
URF_UNREAD_FIELD
BC_UNCONFIRMED_CAST
REC_CATCH_EXCEPTION
BC_UNCONFIRMED_CAST_OF_RETURN_VALUE
SE_NO_SERIALVERSIONID
UPM_UNCALLED_PRIVATE_METHOD
VA_FORMAT_STRING_USES_NEWLINE
MS_SHOULD_BE_FINAL
RV_RETURN_VALUE_IGNORED_BAD_PRACTICE
ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD
EI_EXPOSE_REP2
URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD
WMI_WRONG_MAP_ITERATOR
OBL_UNSATISFIED_OBLIGATION
EI_EXPOSE_REP
NP_LOAD_OF_KNOWN_NULL_VALUE
DM_NUMBER_CTOR
SIC_INNER_SHOULD_BE_STATIC
SBSC_USE_STRINGBUFFER_CONCATENATION
OS_OPEN_STREAM_EXCEPTION_PATH
NP_NONNULL_RETURN_VIOLATION
SF_SWITCH_NO_DEFAULT
UWF_UNWRITTEN_FIELD
DE_MIGHT_IGNORE
IS2_INCONSISTENT_SYNC
DM_BOXED_PRIMITIVE_FOR_PARSING
RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT
ODR_OPEN_DATABASE_RESOURCE
PZLA_PREFER_ZERO_LENGTH_ARRAYS
RI_REDUNDANT_INTERFACES
NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE
UCF_USELESS_CONTROL_FLOW
UC_USELESS_CONDITION
NP_NULL_ON_SOME_PATH
UC_USELESS_OBJECT
DM_FP_NUMBER_CTOR
MS_PKGPROTECT
SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING
OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE
ES_COMPARING_STRINGS_WITH_EQ
OS_OPEN_STREAM
RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE
NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE
SS_SHOULD_BE_STATIC
FE_FLOATING_POINT_EQUALITY
HE_EQUALS_USE_HASHCODE
DM_EXIT
NM_CONFUSING
LI_LAZY_INIT_STATIC
BX_UNBOXING_IMMEDIATELY_REBOXED
EQ_COMPARETO_USE_OBJECT_EQUALS
SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE
NP_NULL_ON_SOME_PATH_EXCEPTION
NP_UNWRITTEN_FIELD
MS_MUTABLE_COLLECTION_PKGPROTECT
UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD
CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE
DMI_HARDCODED_ABSOLUTE_FILENAME
SE_BAD_FIELD
DM_STRING_TOSTRING
UUF_UNUSED_FIELD
ICAST_INTEGER_MULTIPLY_CAST_TO_LONG
EC_UNRELATED_TYPES
BC_VACUOUS_INSTANCEOF
ICAST_IDIV_CAST_TO_DOUBLE
RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE
ES_COMPARING_PARAMETER_STRING_WITH_EQ
RV_RETURN_VALUE_IGNORED
CI_CONFUSED_INHERITANCE
DB_DUPLICATE_SWITCH_CLAUSES
ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH
NP_ALWAYS_NULL
RpC_REPEATED_CONDITIONAL_TEST
SE_BAD_FIELD_STORE
NP_NULL_PARAM_DEREF
GC_UNRELATED_TYPES
DLS_DEAD_LOCAL_STORE_OF_NULL
RC_REF_COMPARISON_BAD_PRACTICE
MS_MUTABLE_ARRAY
SE_INNER_CLASS
UL_UNRELEASED_LOCK_EXCEPTION_PATH
SE_COMPARATOR_SHOULD_BE_SERIALIZABLE
CN_IDIOM_NO_SUPER_CALL
NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD
UC_USELESS_VOID_METHOD
NP_NONNULL_PARAM_VIOLATION
DMI_INVOKING_TOSTRING_ON_ARRAY
DP_DO_INSIDE_DO_PRIVILEGED
SF_SWITCH_FALLTHROUGH
NP_BOOLEAN_RETURN_NULL
NM_CLASS_NOT_EXCEPTION
SIO_SUPERFLUOUS_INSTANCEOF
NP_GUARANTEED_DEREF
UL_UNRELEASED_LOCK
IP_PARAMETER_IS_DEAD_BUT_OVERWRITTEN
HE_INHERITS_EQUALS_USE_HASHCODE
MS_CANNOT_BE_FINAL
DB_DUPLICATE_BRANCHES
STCAL_INVOKE_ON_STATIC_DATE_FORMAT_INSTANCE
MS_MUTABLE_COLLECTION
IL_INFINITE_RECURSIVE_LOOP
VO_VOLATILE_INCREMENT
JLM_JSR166_UTILCONCURRENT_MONITORENTER
NP_NULL_PARAM_DEREF_NONVIRTUAL
DM_STRING_CTOR
UR_UNINIT_READ
XFB_XML_FACTORY_BYPASS
RV_EXCEPTION_NOT_THROWN
UI_INHERITANCE_UNSAFE_GETRESOURCE
VA_FORMAT_STRING_EXTRA_ARGUMENTS_PASSED
IT_NO_SUCH_ELEMENT
NM_CLASS_NAMING_CONVENTION
RC_REF_COMPARISON
RC_REF_COMPARISON_BAD_PRACTICE_BOOLEAN
DLS_DEAD_LOCAL_STORE_SHADOWS_FIELD
HE_EQUALS_NO_HASHCODE
NS_NON_SHORT_CIRCUIT
NP_DEREFERENCE_OF_READLINE_VALUE
NP_GUARANTEED_DEREF_ON_EXCEPTION_PATH
EQ_DOESNT_OVERRIDE_EQUALS
DM_STRING_VOID_CTOR
DP_CREATE_CLASSLOADER_INSIDE_DO_PRIVILEGED
BIT_SIGNED_CHECK
ME_ENUM_FIELD_SETTER
BC_EQUALS_METHOD_SHOULD_WORK_FOR_ALL_OBJECTS
NS_DANGEROUS_NON_SHORT_CIRCUIT
NP_EQUALS_SHOULD_HANDLE_NULL_ARGUMENT
SR_NOT_CHECKED
RR_NOT_CHECKED
UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD
VA_FORMAT_STRING_MISSING_ARGUMENT
EC_BAD_ARRAY_COMPARE
NP_NONNULL_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR
DM_BOXED_PRIMITIVE_FOR_COMPARE
NP_NULL_ON_SOME_PATH_MIGHT_BE_INFEASIBLE
UMAC_UNCALLABLE_METHOD_OF_ANONYMOUS_CLASS
UWF_NULL_FIELD
CO_COMPARETO_INCORRECT_FLOATING
NP_NULL_PARAM_DEREF_ALL_TARGETS_DANGEROUS
NO_NOTIFY_NOT_NOTIFYALL
SC_START_IN_CTOR
RV_RETURN_VALUE_IGNORED_INFERRED
UM_UNNECESSARY_MATH
SA_FIELD_SELF_ASSIGNMENT
BC_IMPOSSIBLE_CAST
LI_LAZY_INIT_UPDATE_STATIC
NP_TOSTRING_COULD_RETURN_NULL
SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS
AT_OPERATION_SEQUENCE_ON_CONCURRENT_ABSTRACTION
EQ_UNUSUAL
SE_NO_SUITABLE_CONSTRUCTOR
UW_UNCOND_WAIT
MF_CLASS_MASKS_FIELD
FE_TEST_IF_EQUAL_TO_NOT_A_NUMBER
IA_AMBIGUOUS_INVOCATION_OF_INHERITED_OR_OUTER_METHOD
SE_BAD_FIELD_INNER_CLASS
RV_NEGATING_RESULT_OF_COMPARETO
ISC_INSTANTIATE_STATIC_CLASS
HE_HASHCODE_USE_OBJECT_EQUALS
DM_BOOLEAN_CTOR
DMI_RANDOM_USED_ONLY_ONCE
EQ_CHECK_FOR_OPERAND_NOT_COMPATIBLE_WITH_THIS
DM_GC
NM_SAME_SIMPLE_NAME_AS_SUPERCLASS
EC_NULL_ARG
EQ_SELF_USE_OBJECT
RV_ABSOLUTE_VALUE_OF_RANDOM_INT
SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATION
MS_EXPOSE_REP
SE_TRANSIENT_FIELD_NOT_RESTORED
IM_AVERAGE_COMPUTATION_COULD_OVERFLOW
NP_METHOD_PARAMETER_TIGHTENS_ANNOTATION
NP_METHOD_RETURN_RELAXING_ANNOTATION
UG_SYNC_SET_UNSYNC_GET
NM_FIELD_NAMING_CONVENTION
MS_OOI_PKGPROTECT
UCF_USELESS_CONTROL_FLOW_NEXT_LINE
VA_FORMAT_STRING_BAD_CONVERSION
BX_BOXING_IMMEDIATELY_UNBOXED_TO_PERFORM_COERCION
SA_FIELD_DOUBLE_ASSIGNMENT
BC_BAD_CAST_TO_CONCRETE_COLLECTION
SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH
MS_FINAL_PKGPROTECT
DMI_COLLECTION_OF_URLS
INT_BAD_COMPARISON_WITH_SIGNED_BYTE
RV_CHECK_FOR_POSITIVE_INDEXOF
RE_CANT_USE_FILE_SEPARATOR_AS_REGULAR_EXPRESSION
RU_INVOKE_RUN
BC_IMPOSSIBLE_DOWNCAST_OF_TOARRAY
ICAST_BAD_SHIFT_AMOUNT
ICAST_INT_CAST_TO_FLOAT_PASSED_TO_ROUND
DM_BOXED_PRIMITIVE_TOSTRING
UR_UNINIT_READ_CALLED_FROM_SUPER_CONSTRUCTOR
WA_NOT_IN_LOOP
CN_IDIOM
DMI_BLOCKING_METHODS_ON_URL
EC_UNRELATED_CLASS_AND_INTERFACE
SWL_SLEEP_WITH_LOCK_HELD
IM_BAD_CHECK_FOR_ODD
RE_POSSIBLE_UNINTENDED_PATTERN
INT_BAD_COMPARISON_WITH_NONNEGATIVE_VALUE
ICAST_INT_CAST_TO_DOUBLE_PASSED_TO_CEIL
EQ_OVERRIDING_EQUALS_NOT_SYMMETRIC
LG_LOST_LOGGER_DUE_TO_WEAK_REFERENCE
DLS_DEAD_LOCAL_STORE_IN_RETURN
J2EE_STORE_OF_NON_SERIALIZABLE_OBJECT_INTO_SESSION
NP_STORE_INTO_NONNULL_FIELD
RANGE_ARRAY_INDEX
IL_INFINITE_LOOP
DC_DOUBLECHECK
NN_NAKED_NOTIFY
EC_UNRELATED_TYPES_USING_POINTER_EQUALITY
SE_PRIVATE_READ_RESOLVE_NOT_INHERITED
INT_VACUOUS_BIT_OPERATION
DM_NEXTINT_VIA_NEXTDOUBLE
VA_FORMAT_STRING_ILLEGAL
DMI_INVOKING_HASHCODE_ON_ARRAY
RV_DONT_JUST_NULL_CHECK_READLINE
RE_BAD_SYNTAX_FOR_REGULAR_EXPRESSION
SA_LOCAL_SELF_ASSIGNMENT_INSTEAD_OF_FIELD
NM_VERY_CONFUSING
MSF_MUTABLE_SERVLET_FIELD
BC_IMPOSSIBLE_INSTANCEOF
SA_LOCAL_SELF_COMPARISON
SA_LOCAL_SELF_ASSIGNMENT
IC_SUPERCLASS_USES_SUBCLASS_DURING_INITIALIZATION
CNT_ROUGH_CONSTANT_VALUE
SI_INSTANCE_BEFORE_FINALS_ASSIGNED
DLS_DEAD_STORE_OF_CLASS_LITERAL
RV_ABSOLUTE_VALUE_OF_HASHCODE
NM_SAME_SIMPLE_NAME_AS_INTERFACE
HE_HASHCODE_NO_EQUALS
DM_NEW_FOR_GETCLASS
SA_FIELD_SELF_COMPARISON
NM_METHOD_CONSTRUCTOR_CONFUSION
EQ_COMPARING_CLASS_NAMES
UC_USELESS_CONDITION_TYPE
RV_01_TO_INT
SA_LOCAL_DOUBLE_ASSIGNMENT
SQL_BAD_RESULTSET_ACCESS
EQ_GETCLASS_AND_CLASS_CONSTANT
BSHIFT_WRONG_ADD_PRIORITY
HRS_REQUEST_PARAMETER_TO_HTTP_HEADER
DMI_USING_REMOVEALL_TO_CLEAR_COLLECTION
STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE
FI_FINALIZER_NULLS_FIELDS
ML_SYNC_ON_FIELD_TO_GUARD_CHANGING_THAT_FIELD
JCIP_FIELD_ISNT_FINAL_IN_IMMUTABLE_CLASS
CO_COMPARETO_RESULTS_MIN_VALUE
IMSE_DONT_CATCH_IMSE
QF_QUESTIONABLE_FOR_LOOP
MWN_MISMATCHED_NOTIFY
RV_RETURN_VALUE_OF_PUTIFABSENT_IGNORED
DMI_NONSERIALIZABLE_OBJECT_WRITTEN
BC_BAD_CAST_TO_ABSTRACT_COLLECTION
SW_SWING_METHODS_INVOKED_IN_SWING_THREAD
EC_ARRAY_AND_NONARRAY
NP_NULL_INSTANCEOF
MTIA_SUSPECT_SERVLET_INSTANCE_FIELD
EQ_ALWAYS_FALSE
INT_BAD_COMPARISON_WITH_INT_VALUE
NP_OPTIONAL_RETURN_NULL
BX_BOXING_IMMEDIATELY_UNBOXED
VA_FORMAT_STRING_EXPECTED_MESSAGE_FORMAT_SUPPLIED
BIT_IOR
FI_MISSING_SUPER_CALL
VO_VOLATILE_REFERENCE_TO_ARRAY
SF_DEAD_STORE_DUE_TO_SWITCH_FALLTHROUGH_TO_THROW
DMI_CONSTANT_DB_PASSWORD
NP_IMMEDIATE_DEREFERENCE_OF_READLINE
ML_SYNC_ON_UPDATED_FIELD
HE_USE_OF_UNHASHABLE_CLASS
FI_PUBLIC_SHOULD_BE_PROTECTED
DMI_BIGDECIMAL_CONSTRUCTED_FROM_DOUBLE
TQ_NEVER_VALUE_USED_WHERE_ALWAYS_REQUIRED
XSS_REQUEST_PARAMETER_TO_SERVLET_WRITER
NP_ALWAYS_NULL_EXCEPTION
DM_INVALID_MIN_MAX
NM_WRONG_PACKAGE
MS_SHOULD_BE_REFACTORED_TO_BE_FINAL
DC_PARTIALLY_CONSTRUCTED
WA_AWAIT_NOT_IN_LOOP
INT_VACUOUS_COMPARISON
RV_CHECK_COMPARETO_FOR_SPECIFIC_RETURN_VALUE
RCN_REDUNDANT_COMPARISON_OF_NULL_AND_NONNULL_VALUE
DL_SYNCHRONIZATION_ON_SHARED_CONSTANT
EQ_ALWAYS_TRUE
DMI_EMPTY_DB_PASSWORD
DMI_ENTRY_SETS_MAY_REUSE_ENTRY_OBJECTS
WL_USING_GETCLASS_RATHER_THAN_CLASS_LITERAL
FI_USELESS
VA_FORMAT_STRING_BAD_CONVERSION_FROM_ARRAY
SP_SPIN_ON_FIELD
BOA_BADLY_OVERRIDDEN_ADAPTER
MWN_MISMATCHED_WAIT
NP_CLONE_COULD_RETURN_NULL
CO_ABSTRACT_SELF
DMI_COLLECTIONS_SHOULD_NOT_CONTAIN_THEMSELVES
QBA_QUESTIONABLE_BOOLEAN_ASSIGNMENT
IC_INIT_CIRCULARITY
ICAST_INT_2_LONG_AS_INSTANT
FI_EXPLICIT_INVOCATION
ME_MUTABLE_ENUM_FIELD
RCN_REDUNDANT_COMPARISON_TWO_NULL_VALUES
HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS
RS_READOBJECT_SYNC
SQL_BAD_PREPARED_STATEMENT_ACCESS
VA_FORMAT_STRING_BAD_CONVERSION_TO_BOOLEAN
EQ_ABSTRACT_SELF
NP_CLOSING_NULL
RV_REM_OF_HASHCODE
PT_RELATIVE_PATH_TRAVERSAL
TLW_TWO_LOCK_WAIT
INT_BAD_REM_BY_1
ICAST_QUESTIONABLE_UNSIGNED_RIGHT_SHIFT
VA_PRIMITIVE_ARRAY_PASSED_TO_OBJECT_VARARG
DM_USELESS_THREAD
DMI_DOH
IJU_ASSERT_METHOD_INVOKED_FROM_RUN_METHOD
BIT_IOR_OF_SIGNED_BYTE
DMI_THREAD_PASSED_WHERE_RUNNABLE_EXPECTED
SA_LOCAL_SELF_COMPUTATION
This method performs a nonsensical computation of a local variable with another reference to the same variable (e.g., x&x or x-x).
Because of the nature of the computation, this operation doesn't seem to make sense, and may indicate a typo or a logic error. Double check the computation.
IM_MULTIPLYING_RESULT_OF_IREM
The code multiplies the result of an integer remaining by an integer constant.
Be sure you don't have your operator precedence confused. For example i % 60 * 1000 is (i % 60) * 1000, not i % (60 * 1000).
MS_MUTABLE_HASHTABLE
Field is a mutable Hashtable (MS_MUTABLE_HASHTABLE)
A final static field references a Hashtable and can be accessed by malicious code or by accident from another package.
This code can freely modify the contents of the Hashtable.
+4162
View File
File diff suppressed because it is too large Load Diff
+345
View File
@@ -0,0 +1,345 @@
cdi-spec-cdi-tck_1f4449_5c4cecimpl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/decoratorWithNonPassivatingInitializerMethod/UnderwaterCity.java
ovgu-ccd-jchess_539e0c_51d212tests/game/BoardTest.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/interceptorOrder/AnotherInterceptor.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/interceptorOrder/AnotherInterceptor.java
ovgu-ccd-jchess_8f6345_02437btests/eventbus/events/PossibleMovesEventTest.java
ovgu-ccd-jchess_8f6345_ce05eajchess/tests/eventbus/events/GenericErrorEventTest.java
ovgu-ccd-jchess_c6c052_93b24dtests/game/BoardTest.java
GenomicParisCentre-aozan_b0fb79_28f573src/main/java/fr/ens/transcriptome/aozan/tests/sample/RecoverablePFClusterSampleTest.java
cdi-spec-cdi-tck_c1c53f_bbae6aimpl/src/main/java/org/jboss/cdi/tck/tests/extensions/container/event/ProcessInjectionTargetObserver.java
cdi-spec-cdi-tck_c1c53f_bbae6aimpl/src/main/java/org/jboss/cdi/tck/tests/extensions/container/event/ProcessInjectionTargetObserver.java
cdi-spec-cdi-tck_c1c53f_bbae6aimpl/src/main/java/org/jboss/cdi/tck/tests/extensions/container/event/ProcessInjectionTargetObserver.java
cdi-spec-cdi-tck_c1c53f_bbae6aimpl/src/main/java/org/jboss/cdi/tck/tests/extensions/container/event/ProcessInjectionTargetObserver.java
cdi-spec-cdi-tck_c1c53f_bbae6aimpl/src/main/java/org/jboss/cdi/tck/tests/extensions/container/event/ProcessInjectionTargetObserver.java
cdi-spec-cdi-tck_c1c53f_bbae6aimpl/src/main/java/org/jboss/cdi/tck/tests/extensions/container/event/ProcessInjectionTargetObserver.java
cdi-spec-cdi-tck_c1c53f_bbae6aimpl/src/main/java/org/jboss/cdi/tck/tests/extensions/container/event/ProcessInjectionTargetObserver.java
cdi-spec-cdi-tck_2528be_45bd28impl/src/main/java/org/jboss/cdi/tck/tests/context/request/ejb/EJBRequestContextTest.java
cdi-spec-cdi-tck_052fe3_9c3913impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/enterprise/lifecycle/EnterpriseBeanLifecycleTest.java
cdi-spec-cdi-tck_052fe3_9c3913impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/enterprise/lifecycle/EnterpriseBeanLifecycleTest.java
ovgu-ccd-jchess_0c6f77_64be90tests/game/PawnMovementTest.java
ovgu-ccd-jchess_0c6f77_64be90tests/game/PawnMovementTest.java
ovgu-ccd-jchess_46320b_44b78dtests/eventbus/events/UpdateBoardEventTest.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/interceptorOrder/FirstInterceptor.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/interceptorOrder/FirstInterceptor.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/enterprise/ComplicatedInterceptor.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/enterprise/ComplicatedInterceptor.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/enterprise/ComplicatedInterceptor.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/enterprise/ComplicatedInterceptor.java
cdi-spec-cdi-tck_5c4cec_cdcf11impl/src/main/java/org/jboss/jsr299/tck/tests/lookup/circular/CircularDependencyTest.java
cdi-spec-cdi-tck_a90bd5_272854impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/producer/method/definition/enterprise/EnterpriseProducerMethodDefinitionTest.java
cdi-spec-cdi-tck_a90bd5_272854impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/producer/method/definition/enterprise/EnterpriseProducerMethodDefinitionTest.java
cdi-spec-cdi-tck_a90bd5_272854impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/producer/method/definition/enterprise/EnterpriseProducerMethodDefinitionTest.java
cdi-spec-cdi-tck_a90bd5_272854impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/producer/method/definition/enterprise/EnterpriseProducerMethodDefinitionTest.java
cdi-spec-cdi-tck_c2b3a5_522ff8impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/annotated/TestAnnotatedType.java
cdi-spec-cdi-tck_9f605d_a90ee7impl/src/main/java/org/jboss/jsr299/tck/tests/context/request/ejb/FMSModelIII.java
cdi-spec-cdi-tck_9f605d_a90ee7impl/src/main/java/org/jboss/jsr299/tck/tests/context/request/ejb/FMSModelIII.java
cdi-spec-cdi-tck_115981_73b2e4impl/src/main/java/org/jboss/jsr299/tck/tests/event/EventTest.java
cdi-spec-cdi-tck_1f4449_5c4cecimpl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/decoratorWithNonPassivatingBeanConstructor/UnderwaterCity.java
cdi-spec-cdi-tck_5c4cec_cdcf11impl/src/main/java/org/jboss/jsr299/tck/tests/lookup/circular/Food.java
cdi-spec-cdi-tck_5c4cec_cdcf11impl/src/main/java/org/jboss/jsr299/tck/tests/lookup/circular/Food.java
GenomicParisCentre-aozan_35c16c_4e8300src/main/java/fr/ens/transcriptome/aozan/tests/sample/RecoverablePFClusterSampleTest.java
ovgu-ccd-jchess_d83098_e4c034tests/eventbus/events/NewGameEventTest.java
cdi-spec-cdi-tck_323676_679913impl/src/main/java/org/jboss/cdi/tck/tests/context/request/event/timeout/InfoServlet.java
cdi-spec-cdi-tck_d280f9_45ab65impl/src/main/java/org/jboss/jsr299/tck/tests/context/request/ejb/FMSModelIII.java
cdi-spec-cdi-tck_d280f9_45ab65impl/src/main/java/org/jboss/jsr299/tck/tests/context/request/ejb/FMSModelIII.java
cdi-spec-cdi-tck_323676_679913impl/src/main/java/org/jboss/cdi/tck/tests/context/request/event/timeout/TimeoutService.java
cdi-spec-cdi-tck_323676_679913impl/src/main/java/org/jboss/cdi/tck/tests/context/request/event/timeout/TimeoutService.java
cdi-spec-cdi-tck_7ac130_1ab762impl/src/main/java/org/jboss/cdi/tck/tests/alternative/AlternativeAvailabilityTest.java
cdi-spec-cdi-tck_7ac130_1ab762impl/src/main/java/org/jboss/cdi/tck/tests/alternative/AlternativeAvailabilityTest.java
cdi-spec-cdi-tck_7ac130_1ab762impl/src/main/java/org/jboss/cdi/tck/tests/alternative/AlternativeAvailabilityTest.java
cdi-spec-cdi-tck_7ac130_1ab762impl/src/main/java/org/jboss/cdi/tck/tests/alternative/AlternativeAvailabilityTest.java
cdi-spec-cdi-tck_7ac130_1ab762impl/src/main/java/org/jboss/cdi/tck/tests/alternative/AlternativeAvailabilityTest.java
cdi-spec-cdi-tck_7ac130_1ab762impl/src/main/java/org/jboss/cdi/tck/tests/alternative/AlternativeAvailabilityTest.java
datasift-datasift-java_0c7070_e7cfd7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_0c7070_e7cfd7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_0c7070_e7cfd7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_0c7070_e7cfd7src/org/datasift/tests/DataForTests.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/event/select/SelectEventTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/event/select/SelectEventTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/event/select/SelectEventTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/event/select/SelectEventTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/event/select/SelectEventTest.java
ovgu-ccd-jchess_e0c952_e4c034tests/game/BoardTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/lookup/dynamic/DynamicLookupTest.java
ovgu-ccd-jchess_0c6f77_6046dctests/game/BoardTest.java
cdi-spec-cdi-tck_83a7e7_07365fimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_83a7e7_07365fimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_83a7e7_07365fimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_83a7e7_07365fimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_83a7e7_07365fimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_83a7e7_07365fimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_83a7e7_07365fimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_83a7e7_07365fimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_83a7e7_07365fimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_83a7e7_07365fimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
ovgu-ccd-jchess_46320b_44b78dtests/eventbus/events/PromotionSelectEventTest.java
cdi-spec-cdi-tck_5c4cec_cdcf11impl/src/main/java/org/jboss/jsr299/tck/tests/lookup/circular/Pig.java
cdi-spec-cdi-tck_5c4cec_cdcf11impl/src/main/java/org/jboss/jsr299/tck/tests/lookup/circular/Pig.java
ovgu-ccd-jchess_ce05ea_a4b44ejchess/tests/BoardTest.java
ovgu-ccd-jchess_ce05ea_a4b44ejchess/tests/BoardTest.java
ovgu-ccd-jchess_8f6345_02437btests/eventbus/events/PossiblePromotionsEventTest.java
ovgu-ccd-jchess_64be90_542035tests/eventbus/events/GenericErrorEventTest.java
ovgu-ccd-jchess_46320b_25b619jchess/tests/eventbus/events/GenericErrorEventTest.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/interceptorOrder/InterceptorOrderTest.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/interceptorOrder/InterceptorOrderTest.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/interceptorOrder/InterceptorOrderTest.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/interceptorOrder/InterceptorOrderTest.java
datasift-datasift-java_125c6e_63473esrc/org/datasift/tests/DataForTests.java
cdi-spec-cdi-tck_83a7e7_07365fimpl/src/main/java/org/jboss/cdi/tck/tests/definition/qualifier/TameLiteral.java
ovgu-ccd-jchess_8f6345_02437btests/eventbus/events/UpdateStatusMessageEventTest.java
ovgu-ccd-jchess_8f6345_02437btests/eventbus/events/GenericErrorEventTest.java
cdi-spec-cdi-tck_1f4449_5c4cecimpl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/decoratorWithNonPassivatingInjectedField/UnderwaterCity.java
cdi-spec-cdi-tck_064f60_09d838impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/disposal/method/definition/SpiderProducer.java
datasift-datasift-java_ec80f0_28c956src/org/datasift/tests/DataForTests.java
cdi-spec-cdi-tck_1f4449_5c4cecimpl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/decoratorWithNonPassivatingBeanConstructor/CityDecorator.java
cdi-spec-cdi-tck_7173e9_bb0d87impl/src/main/java/org/jboss/cdi/tck/tests/context/dependent/DependentContextTest.java
cdi-spec-cdi-tck_3e9879_490ee4impl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
cdi-spec-cdi-tck_3e9879_490ee4impl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
cdi-spec-cdi-tck_3e9879_490ee4impl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
nuxeo-nuxeo-chemistry_6f4b50_79fb13nuxeo-opencmis-tests/src/main/java/org/nuxeo/ecm/core/opencmis/tests/Helper.java
nuxeo-nuxeo-chemistry_6f4b50_79fb13nuxeo-opencmis-tests/src/main/java/org/nuxeo/ecm/core/opencmis/tests/Helper.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/interceptorOrder/SecondInterceptor.java
ovgu-ccd-jchess_d83098_e4c034tests/eventbus/events/GenericErrorEventTest.java
ovgu-ccd-jchess_d83098_e4c034tests/eventbus/events/GenericErrorEventTest.java
ovgu-ccd-jchess_44b78d_02437btests/game/BoardTest.java
ovgu-ccd-jchess_44b78d_02437btests/game/BoardTest.java
cdi-spec-cdi-tck_c2b3a5_522ff8impl/src/main/java/org/jboss/jsr299/tck/tests/decorators/invocation/observer/ObserverImpl.java
ovgu-ccd-jchess_aa116b_ff9991tests/game/BoardTest.java
mkovatsc-Californium_86d96e_367d3acf-plugtest-server/src/main/java/ch/ethz/inf/vs/californium/plugtests/resources/ObservePumping.java
cdi-spec-cdi-tck_35cff0_b8e4edimpl/src/main/java/org/jboss/cdi/tck/tests/extensions/communication/broken/FooExtension.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/interceptorOrder/TransactionalInterceptor.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/interceptorOrder/TransactionalInterceptor.java
cdi-spec-cdi-tck_2528be_45bd28impl/src/main/java/org/jboss/cdi/tck/tests/context/request/ejb/FMSModelIII.java
cdi-spec-cdi-tck_2528be_45bd28impl/src/main/java/org/jboss/cdi/tck/tests/context/request/ejb/FMSModelIII.java
ovgu-ccd-jchess_46320b_44b78dtests/eventbus/events/GenericErrorEventTest.java
cdi-spec-cdi-tck_41a384_1bc22aimpl/src/main/java/org/jboss/jsr299/tck/tests/interceptors/definition/FileLogger.java
ovgu-ccd-jchess_aa116b_ff9991tests/eventbus/events/GenericErrorEventTest.java
cdi-spec-cdi-tck_31bc89_e2c0afimpl/src/main/java/org/jboss/jsr299/tck/tests/context/request/ejb/FMSModelIII.java
cdi-spec-cdi-tck_31bc89_e2c0afimpl/src/main/java/org/jboss/jsr299/tck/tests/context/request/ejb/FMSModelIII.java
cdi-spec-cdi-tck_31bc89_e2c0afimpl/src/main/java/org/jboss/jsr299/tck/tests/context/request/ejb/FMSModelIII.java
cdi-spec-cdi-tck_31bc89_e2c0afimpl/src/main/java/org/jboss/jsr299/tck/tests/context/request/ejb/FMSModelIII.java
cdi-spec-cdi-tck_31bc89_e2c0afimpl/src/main/java/org/jboss/jsr299/tck/tests/context/request/ejb/FMSModelIII.java
cdi-spec-cdi-tck_d280f9_45ab65impl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
cdi-spec-cdi-tck_d280f9_45ab65impl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
ovgu-ccd-jchess_d83098_e4c034tests/eventbus/events/UpdateBoardEventTest.java
ovgu-ccd-jchess_8f6345_02437btests/game/BoardTest.java
cdi-spec-cdi-tck_d64861_d084d9impl/src/main/java/org/jboss/jsr299/tck/tests/decorators/invocation/FooImpl.java
ovgu-ccd-jchess_46320b_44b78dtests/eventbus/events/UpdateStatusMessageEventTest.java
cdi-spec-cdi-tck_a08b80_fe2cf9impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/enterpriseBeanWithNonPassivatingInitializerInDecorator/BrokenDecorator.java
ovgu-ccd-jchess_46320b_8f6345jchess/tests/BoardTest.java
ovgu-ccd-jchess_46320b_8f6345jchess/tests/BoardTest.java
cdi-spec-cdi-tck_41a384_1bc22aimpl/src/main/java/org/jboss/jsr299/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_41a384_1bc22aimpl/src/main/java/org/jboss/jsr299/tck/tests/decorators/definition/inject/delegateField/TimestampLogger.java
cdi-spec-cdi-tck_41a384_1bc22aimpl/src/main/java/org/jboss/jsr299/tck/interceptors/tests/aroundInvoke/order/OverridenInterceptor.java
ovgu-ccd-jchess_a4b44e_ff9991tests/eventbus/events/GenericErrorEventTest.java
ovgu-ccd-jchess_a4b44e_ff9991tests/eventbus/events/SelectEventTest.java
ovgu-ccd-jchess_e1f7fd_117abajchess/tests/BoardTest.java
ovgu-ccd-jchess_e1f7fd_117abajchess/tests/BoardTest.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/enterprise/interceptorOrder/RadarInterceptor.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/enterprise/interceptorOrder/RadarInterceptor.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/enterprise/interceptorOrder/RadarInterceptor.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/enterprise/interceptorOrder/RadarInterceptor.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/enterprise/interceptorOrder/RadarInterceptor.java
cdi-spec-cdi-tck_41a384_1bc22aimpl/src/main/java/org/jboss/jsr299/tck/tests/decorators/invocation/producer/method/ProducerImpl.java
ovgu-ccd-jchess_accad2_956deejchess/tests/game/MoveTest.java
cdi-spec-cdi-tck_07365f_6e252cimpl/src/main/java/org/jboss/cdi/tck/tests/event/observer/RoleLiteral.java
openmicroscopy-bioformats_3f0b2b_a3a809components/test-suite/src/loci/tests/testng/TestTools.java
cdi-spec-cdi-tck_a08b80_fe2cf9impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/enterpriseBeanWithNonPassivatingConstructorFieldInDecorator/BrokenDecorator.java
cdi-spec-cdi-tck_a08b80_fe2cf9impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/enterpriseBeanWithNonPassivatingInjectedFieldInDecorator/BrokenDecorator.java
cdi-spec-cdi-tck_a08b80_fe2cf9impl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/enterpriseBeanWithNonPassivatingInjectedFieldInDecorator/BrokenDecorator.java
cdi-spec-cdi-tck_f27903_fe6e92impl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
cdi-spec-cdi-tck_f27903_fe6e92impl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
cdi-spec-cdi-tck_f27903_fe6e92impl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
cdi-spec-cdi-tck_45ab65_a90ee7impl/src/main/java/org/jboss/jsr299/tck/tests/event/EventTest.java
cdi-spec-cdi-tck_45ab65_a90ee7impl/src/main/java/org/jboss/jsr299/tck/tests/event/EventTest.java
ovgu-ccd-jchess_aa116b_d40cdetests/game/PawnMovementTest.java
ovgu-ccd-jchess_aa116b_d40cdetests/game/PawnMovementTest.java
GenomicParisCentre-aozan_b0fb79_28f573src/main/java/fr/ens/transcriptome/aozan/tests/lane/RawClustersPhixLaneTest.java
GenomicParisCentre-aozan_b0fb79_28f573src/main/java/fr/ens/transcriptome/aozan/tests/lane/RawClustersPhixLaneTest.java
ovgu-ccd-jchess_d83098_e4c034tests/eventbus/events/UpdateStatusMessageEventTest.java
ovgu-ccd-jchess_e0c952_9b9751tests/eventbus/events/GenericErrorEventTest.java
cdi-spec-cdi-tck_52ac2f_249966impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/bean/bytype/BeanByTypeTest.java
cdi-spec-cdi-tck_534265_0cb10eimpl/src/main/java/org/jboss/jsr299/tck/tests/policy/PolicyAvailabilityTest.java
cdi-spec-cdi-tck_534265_0cb10eimpl/src/main/java/org/jboss/jsr299/tck/tests/policy/PolicyAvailabilityTest.java
cdi-spec-cdi-tck_6e252c_257eedimpl/src/main/java/org/jboss/cdi/tck/tests/deployment/lifecycle/ExtensionsTest.java
cdi-spec-cdi-tck_c2b3a5_522ff8impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/producer/ProducerProcessor.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/enterprise/EnterpriseInterceptorBindingResolutionTest.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/enterprise/EnterpriseInterceptorBindingResolutionTest.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/enterprise/EnterpriseInterceptorBindingResolutionTest.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/enterprise/EnterpriseInterceptorBindingResolutionTest.java
datasift-datasift-java_2358e1_87b245src/org/datasift/tests/DataForTests.java
datasift-datasift-java_2358e1_87b245src/org/datasift/tests/DataForTests.java
datasift-datasift-java_2358e1_87b245src/org/datasift/tests/DataForTests.java
datasift-datasift-java_2358e1_87b245src/org/datasift/tests/DataForTests.java
datasift-datasift-java_2358e1_87b245src/org/datasift/tests/DataForTests.java
datasift-datasift-java_2358e1_87b245src/org/datasift/tests/DataForTests.java
datasift-datasift-java_2358e1_87b245src/org/datasift/tests/DataForTests.java
datasift-datasift-java_2358e1_87b245src/org/datasift/tests/DataForTests.java
datasift-datasift-java_2358e1_87b245src/org/datasift/tests/DataForTests.java
datasift-datasift-java_2358e1_87b245src/org/datasift/tests/DataForTests.java
ovgu-ccd-jchess_c60cdc_0af1d6jchess/tests/BoardTest.java
ovgu-ccd-jchess_a4b44e_ff9991tests/eventbus/events/PossiblePromotionsEventTest.java
ovgu-ccd-jchess_d10543_4a4240tests/game/BoardTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/event/fires/FireEventTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/event/fires/FireEventTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/event/fires/FireEventTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/event/fires/FireEventTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/event/fires/FireEventTest.java
cdi-spec-cdi-tck_679913_bbc371impl/src/main/java/org/jboss/cdi/tck/tests/context/request/event/jms/AbstractMessageListener.java
cdi-spec-cdi-tck_77ce8b_c7c418impl/src/main/java/org/jboss/cdi/tck/tests/extensions/processBean/ProcessBeanObserver.java
cdi-spec-cdi-tck_77ce8b_c7c418impl/src/main/java/org/jboss/cdi/tck/tests/extensions/processBean/ProcessBeanObserver.java
cdi-spec-cdi-tck_77ce8b_c7c418impl/src/main/java/org/jboss/cdi/tck/tests/extensions/processBean/ProcessBeanObserver.java
cdi-spec-cdi-tck_77ce8b_c7c418impl/src/main/java/org/jboss/cdi/tck/tests/extensions/processBean/ProcessBeanObserver.java
cdi-spec-cdi-tck_77ce8b_c7c418impl/src/main/java/org/jboss/cdi/tck/tests/extensions/processBean/ProcessBeanObserver.java
cdi-spec-cdi-tck_77ce8b_c7c418impl/src/main/java/org/jboss/cdi/tck/tests/extensions/processBean/ProcessBeanObserver.java
ovgu-ccd-jchess_6046dc_542035tests/game/PawnMovementTest.java
ovgu-ccd-jchess_6046dc_542035tests/game/PawnMovementTest.java
cdi-spec-cdi-tck_ae1af4_96cf0fimpl/src/main/java/org/jboss/jsr299/tck/tests/extensions/processBean/ProcessBeanObserver.java
GenomicParisCentre-aozan_35c16c_4e8300src/main/java/fr/ens/transcriptome/aozan/tests/lane/RawClustersPhixLaneTest.java
GenomicParisCentre-aozan_35c16c_4e8300src/main/java/fr/ens/transcriptome/aozan/tests/lane/RawClustersPhixLaneTest.java
ovgu-ccd-jchess_46320b_44b78dtests/eventbus/events/NewGameEventTest.java
ovgu-ccd-jchess_0c6f77_6046dctests/eventbus/events/GenericErrorEventTest.java
cdi-spec-cdi-tck_07365f_6e252cimpl/src/main/java/org/jboss/cdi/tck/tests/event/RoleLiteral.java
cdi-spec-cdi-tck_41a384_1bc22aimpl/src/main/java/org/jboss/jsr299/tck/tests/lookup/typesafe/resolution/ResolutionByTypeTest.java
ovgu-ccd-jchess_d83098_e4c034tests/eventbus/events/PossiblePromotionsEventTest.java
cdi-spec-cdi-tck_45ab65_a90ee7impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/producer/method/definition/ProducerMethodDefinitionTest.java
cdi-spec-cdi-tck_45ab65_a90ee7impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/producer/method/definition/ProducerMethodDefinitionTest.java
ovgu-ccd-jchess_3992d4_f5a653jchess/tests/BoardTest.java
ovgu-ccd-jchess_3992d4_f5a653jchess/tests/BoardTest.java
datasift-datasift-java_48e2b8_be06e5src/org/datasift/tests/DataForTests.java
datasift-datasift-java_48e2b8_be06e5src/org/datasift/tests/DataForTests.java
datasift-datasift-java_48e2b8_be06e5src/org/datasift/tests/DataForTests.java
datasift-datasift-java_48e2b8_be06e5src/org/datasift/tests/DataForTests.java
datasift-datasift-java_48e2b8_be06e5src/org/datasift/tests/DataForTests.java
datasift-datasift-java_48e2b8_be06e5src/org/datasift/tests/DataForTests.java
datasift-datasift-java_48e2b8_be06e5src/org/datasift/tests/DataForTests.java
datasift-datasift-java_48e2b8_be06e5src/org/datasift/tests/DataForTests.java
datasift-datasift-java_48e2b8_be06e5src/org/datasift/tests/DataForTests.java
datasift-datasift-java_48e2b8_be06e5src/org/datasift/tests/DataForTests.java
cdi-spec-cdi-tck_b6f67b_792776impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/custom/IntegerBean.java
cdi-spec-cdi-tck_b6f67b_792776impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/custom/IntegerBean.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/ComplicatedInterceptor.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/ComplicatedInterceptor.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/ComplicatedInterceptor.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/ComplicatedInterceptor.java
ovgu-ccd-jchess_8f6345_02437btests/eventbus/events/UpdateBoardEventTest.java
ovgu-ccd-jchess_a4b44e_ff9991tests/eventbus/events/PossibleMovesEventTest.java
cdi-spec-cdi-tck_8b2c24_835b48impl/src/main/java/org/jboss/cdi/tck/tests/extensions/annotated/synthetic/AppleExtension.java
cdi-spec-cdi-tck_8b2c24_835b48impl/src/main/java/org/jboss/cdi/tck/tests/extensions/annotated/synthetic/AppleExtension.java
cdi-spec-cdi-tck_a196cf_e5c163impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/custom/IntegerBean.java
cdi-spec-cdi-tck_a196cf_e5c163impl/src/main/java/org/jboss/jsr299/tck/tests/definition/bean/custom/IntegerBean.java
mkovatsc-Californium_86d96e_367d3acf-plugtest-server/src/main/java/ch/ethz/inf/vs/californium/plugtests/resources/LongPath.java
ovgu-ccd-jchess_8f6345_02437btests/eventbus/events/NewGameEventTest.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/InterceptorBindingResolutionTest.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/InterceptorBindingResolutionTest.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/InterceptorBindingResolutionTest.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/InterceptorBindingResolutionTest.java
cdi-spec-cdi-tck_45bd28_7f9880impl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/inheritance/resolution/InterceptorBindingResolutionTest.java
ovgu-ccd-jchess_d83098_e4c034tests/eventbus/events/PromotionSelectEventTest.java
ovgu-ccd-jchess_d83098_e4c034tests/eventbus/events/PossibleMovesEventTest.java
ovgu-ccd-jchess_46320b_44b78dtests/eventbus/events/SelectEventTest.java
cdi-spec-cdi-tck_e2c0af_e3604cimpl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
cdi-spec-cdi-tck_e2c0af_e3604cimpl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
cdi-spec-cdi-tck_e2c0af_e3604cimpl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
cdi-spec-cdi-tck_e2c0af_e3604cimpl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
ovgu-ccd-jchess_a4b44e_ff9991tests/eventbus/events/UpdateStatusMessageEventTest.java
cdi-spec-cdi-tck_3089a2_94f402impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/processBean/ProcessBeanObserver.java
cdi-spec-cdi-tck_3089a2_94f402impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/processBean/ProcessBeanObserver.java
cdi-spec-cdi-tck_3089a2_94f402impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/processBean/ProcessBeanObserver.java
ovgu-ccd-jchess_a4b44e_ff9991tests/eventbus/events/UpdateBoardEventTest.java
datasift-datasift-java_17b159_ba28e7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_17b159_ba28e7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_17b159_ba28e7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_17b159_ba28e7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_17b159_ba28e7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_17b159_ba28e7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_17b159_ba28e7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_17b159_ba28e7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_17b159_ba28e7src/org/datasift/tests/DataForTests.java
datasift-datasift-java_17b159_ba28e7src/org/datasift/tests/DataForTests.java
ovgu-ccd-jchess_46320b_44b78dtests/eventbus/events/PossibleMovesEventTest.java
ovgu-ccd-jchess_25b619_ce05eajchess/tests/BoardTest.java
ovgu-ccd-jchess_25b619_ce05eajchess/tests/BoardTest.java
ovgu-ccd-jchess_25b619_ce05eajchess/tests/BoardTest.java
ovgu-ccd-jchess_a4b44e_ff9991tests/eventbus/events/NewGameEventTest.java
cdi-spec-cdi-tck_08b25b_73b89cimpl/src/main/java/org/jboss/jsr299/tck/tests/event/observer/enterprise/IndirectStockWatcher.java
ovgu-ccd-jchess_46320b_44b78dtests/game/BoardTest.java
cdi-spec-cdi-tck_7dc28c_95ba30impl/src/main/java/org/jboss/jsr299/tck/tests/lookup/circular/Petrol.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/enterprise/interceptorOrder/SessionBeanInterceptorOrderTest.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/enterprise/interceptorOrder/SessionBeanInterceptorOrderTest.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/enterprise/interceptorOrder/SessionBeanInterceptorOrderTest.java
ovgu-ccd-jchess_d83098_e4c034tests/eventbus/events/SelectEventTest.java
ovgu-ccd-jchess_8f6345_02437btests/eventbus/events/PromotionSelectEventTest.java
mkovatsc-Californium_86d96e_367d3acf-plugtest-server/src/main/java/ch/ethz/inf/vs/californium/plugtests/resources/ObserveNon.java
cdi-spec-cdi-tck_80c2ea_33e585impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/enterprise/lifecycle/EnterpriseBeanLifecycleTest.java
ovgu-ccd-jchess_f5a653_847ba8jchess/tests/BoardTest.java
cdi-spec-cdi-tck_246cd0_9f605dimpl/src/main/java/org/jboss/jsr299/tck/tests/implementation/producer/method/definition/ProducerMethodDefinitionTest.java
cdi-spec-cdi-tck_246cd0_9f605dimpl/src/main/java/org/jboss/jsr299/tck/tests/implementation/producer/method/definition/ProducerMethodDefinitionTest.java
cdi-spec-cdi-tck_d64861_d084d9impl/src/main/java/org/jboss/jsr299/tck/tests/decorators/invocation/FooDecorator1.java
GenomicParisCentre-aozan_2b07f7_b27861src/main/java/fr/ens/transcriptome/aozan/tests/AozanTestRegistry.java
ovgu-ccd-jchess_968848_2637a6tests/game/BoardTest.java
cdi-spec-cdi-tck_41a384_1bc22aimpl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/CityDecorator.java
cdi-spec-cdi-tck_246cd0_9f605dimpl/src/main/java/org/jboss/jsr299/tck/tests/event/EventTest.java
cdi-spec-cdi-tck_246cd0_9f605dimpl/src/main/java/org/jboss/jsr299/tck/tests/event/EventTest.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/enterprise/interceptorOrder/MissileInterceptor.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/enterprise/interceptorOrder/MissileInterceptor.java
cdi-spec-cdi-tck_835b48_912f2cimpl/src/main/java/org/jboss/cdi/tck/tests/interceptors/definition/enterprise/interceptorOrder/MissileInterceptor.java
ovgu-ccd-jchess_a4b44e_ff9991tests/game/BoardTest.java
cdi-spec-cdi-tck_7dc28c_95ba30impl/src/main/java/org/jboss/jsr299/tck/tests/lookup/circular/CircularDependencyTest.java
cdi-spec-cdi-tck_7dc28c_95ba30impl/src/main/java/org/jboss/jsr299/tck/tests/lookup/circular/CircularDependencyTest.java
ovgu-ccd-jchess_46320b_44b78dtests/eventbus/events/PossiblePromotionsEventTest.java
cdi-spec-cdi-tck_65985f_61de9aimpl/src/main/java/org/jboss/cdi/tck/tests/event/fires/FireEventTest.java
cdi-spec-cdi-tck_65985f_61de9aimpl/src/main/java/org/jboss/cdi/tck/tests/event/fires/FireEventTest.java
ovgu-ccd-jchess_64be90_542035tests/game/BoardTest.java
cdi-spec-cdi-tck_08b25b_73b89cimpl/src/main/java/org/jboss/jsr299/tck/tests/event/observer/enterprise/LazyFarmer.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
cdi-spec-cdi-tck_4d97e6_7173e9impl/src/main/java/org/jboss/cdi/tck/tests/context/jms/LoggerService.java
cdi-spec-cdi-tck_dab39b_94241eimpl/src/main/java/org/jboss/jsr299/tck/tests/context/passivating/broken/finalProducerFieldNotPassivationCapable/RecordProducer.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
datasift-datasift-java_6a725f_8efcc2src/org/datasift/tests/DataForTests.java
ovgu-ccd-jchess_539e0c_51d212tests/eventbus/events/GenericErrorEventTest.java
cdi-spec-cdi-tck_064f60_09d838impl/src/main/java/org/jboss/jsr299/tck/tests/implementation/disposal/method/definition/DisposalNonBean.java
cdi-spec-cdi-tck_c2b3a5_522ff8impl/src/main/java/org/jboss/jsr299/tck/tests/interceptors/definition/InterceptorDefinitionTest.java
datasift-datasift-java_cded15_ec80f0src/org/datasift/tests/DataForTests.java
datasift-datasift-java_cded15_ec80f0src/org/datasift/tests/DataForTests.java
datasift-datasift-java_cded15_ec80f0src/org/datasift/tests/DataForTests.java
datasift-datasift-java_cded15_ec80f0src/org/datasift/tests/DataForTests.java
datasift-datasift-java_cded15_ec80f0src/org/datasift/tests/DataForTests.java
datasift-datasift-java_cded15_ec80f0src/org/datasift/tests/DataForTests.java
datasift-datasift-java_cded15_ec80f0src/org/datasift/tests/DataForTests.java
datasift-datasift-java_cded15_ec80f0src/org/datasift/tests/DataForTests.java
datasift-datasift-java_cded15_ec80f0src/org/datasift/tests/DataForTests.java
datasift-datasift-java_cded15_ec80f0src/org/datasift/tests/DataForTests.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/event/resolve/binding/BindingTypeABinding.java
ovgu-ccd-jchess_e4c034_c00408tests/eventbus/events/GenericErrorEventTest.java
ovgu-ccd-jchess_8f6345_02437btests/eventbus/events/SelectEventTest.java
cdi-spec-cdi-tck_f42f7a_36b99fimpl/src/main/java/org/jboss/cdi/tck/tests/lookup/typesafe/resolution/ResolutionByTypeTest.java
cdi-spec-cdi-tck_f42f7a_36b99fimpl/src/main/java/org/jboss/cdi/tck/tests/lookup/typesafe/resolution/ResolutionByTypeTest.java
cdi-spec-cdi-tck_f42f7a_36b99fimpl/src/main/java/org/jboss/cdi/tck/tests/lookup/typesafe/resolution/ResolutionByTypeTest.java
cdi-spec-cdi-tck_f42f7a_36b99fimpl/src/main/java/org/jboss/cdi/tck/tests/lookup/typesafe/resolution/ResolutionByTypeTest.java
cdi-spec-cdi-tck_f42f7a_36b99fimpl/src/main/java/org/jboss/cdi/tck/tests/lookup/typesafe/resolution/ResolutionByTypeTest.java
cdi-spec-cdi-tck_f42f7a_36b99fimpl/src/main/java/org/jboss/cdi/tck/tests/lookup/typesafe/resolution/ResolutionByTypeTest.java
cdi-spec-cdi-tck_f42f7a_36b99fimpl/src/main/java/org/jboss/cdi/tck/tests/lookup/typesafe/resolution/ResolutionByTypeTest.java
ovgu-ccd-jchess_a4b44e_ff9991tests/eventbus/events/PromotionSelectEventTest.java
datasift-datasift-java_27ae5e_cd68a4src/org/datasift/tests/DataForTests.java
cdi-spec-cdi-tck_c2b3a5_522ff8impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/container/event/ProcessAnnotatedTypeObserver.java
cdi-spec-cdi-tck_7dc28c_95ba30impl/src/main/java/org/jboss/jsr299/tck/tests/lookup/circular/Car.java
cdi-spec-cdi-tck_9f605d_a90ee7impl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
cdi-spec-cdi-tck_9f605d_a90ee7impl/src/main/java/org/jboss/jsr299/tck/tests/context/application/ejb/FMSModelIII.java
cdi-spec-cdi-tck_d64861_d084d9impl/src/main/java/org/jboss/jsr299/tck/tests/decorators/invocation/FooDecorator2.java
cdi-spec-cdi-tck_663aa2_3089a2impl/src/main/java/org/jboss/jsr299/tck/tests/extensions/bean/bytype/TameLiteral.java
+1189
View File
File diff suppressed because it is too large Load Diff
@@ -28,6 +28,8 @@ public class Tokenizer {
tokens += astNodeType + " arrayInitializer ";
} else if ("LambdaExpression".equals(astNodeType)) {
tokens += astNodeType + " lambda ";
} else if ("NumberLiteral".equals(astNodeType)) {
tokens += astNodeType + " numberLiteral ";
} else {
tokens += astNodeType + " " + simpleTree.getLabel() + " ";
}
@@ -0,0 +1,121 @@
package edu.lu.uni.serval.FixPatternParser.violations;
public enum FieldViolation {
UWF_FIELD_NOT_INITIALIZED_IN_CONSTRUCTOR,
ST_WRITE_TO_STATIC_FROM_INSTANCE_METHOD,
LI_LAZY_INIT_STATIC,
URF_UNREAD_FIELD,
MS_SHOULD_BE_FINAL,
URF_UNREAD_PUBLIC_OR_PROTECTED_FIELD,
UWF_UNWRITTEN_FIELD,
MS_PKGPROTECT,
SS_SHOULD_BE_STATIC,
NP_UNWRITTEN_FIELD,
UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD,
SE_BAD_FIELD,
UUF_UNUSED_FIELD,
SE_BAD_FIELD_STORE,
MS_MUTABLE_ARRAY,
NP_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD,
}
enum ClassViolation{
SIC_INNER_SHOULD_BE_STATIC_ANON, //inner class. ClassInstanceCreation by overriding some methods.
SIC_INNER_SHOULD_BE_STATIC,
RI_REDUNDANT_INTERFACES,
SE_COMPARATOR_SHOULD_BE_SERIALIZABLE,
SE_NO_SERIALVERSIONID,
CI_CONFUSED_INHERITANCE,
SE_INNER_CLASS,
NM_CLASS_NOT_EXCEPTION,
}
enum MethodViolation {
NM_METHOD_NAMING_CONVENTION,
UPM_UNCALLED_PRIVATE_METHOD,
DE_MIGHT_IGNORE,
NM_CONFUSING,
CN_IMPLEMENTS_CLONE_BUT_NOT_CLONEABLE,
UC_USELESS_VOID_METHOD,
}
enum StmtViolation {
DLS_DEAD_LOCAL_STORE, //Assignment statement. false positives may be high.
//This instruction assigns a value to a local variable, but the value is not read or used in any subsequent instruction.
DM_BOXED_PRIMITIVE_FOR_PARSING,
DM_CONVERT_CASE,
DM_DEFAULT_ENCODING,
IS2_INCONSISTENT_SYNC,
NP_GUARANTEED_DEREF,
SIO_SUPERFLUOUS_INSTANCEOF,
NP_BOOLEAN_RETURN_NULL,
SF_SWITCH_FALLTHROUGH,
DP_DO_INSIDE_DO_PRIVILEGED,
DMI_INVOKING_TOSTRING_ON_ARRAY,
NP_NONNULL_PARAM_VIOLATION,
CN_IDIOM_NO_SUPER_CALL,
UL_UNRELEASED_LOCK_EXCEPTION_PATH,
RC_REF_COMPARISON_BAD_PRACTICE,
NP_ALWAYS_NULL,
NP_NULL_PARAM_DEREF,
GC_UNRELATED_TYPES,
DLS_DEAD_LOCAL_STORE_OF_NULL,
RpC_REPEATED_CONDITIONAL_TEST,
ODR_OPEN_DATABASE_RESOURCE_EXCEPTION_PATH,
DB_DUPLICATE_SWITCH_CLAUSES,
RV_RETURN_VALUE_IGNORED,
ES_COMPARING_PARAMETER_STRING_WITH_EQ,
RCN_REDUNDANT_NULLCHECK_OF_NULL_VALUE,
ICAST_IDIV_CAST_TO_DOUBLE,
BC_VACUOUS_INSTANCEOF,
EC_UNRELATED_TYPES,
ICAST_INTEGER_MULTIPLY_CAST_TO_LONG,
DM_STRING_TOSTRING,
DMI_HARDCODED_ABSOLUTE_FILENAME,
MS_MUTABLE_COLLECTION_PKGPROTECT,
NP_NULL_ON_SOME_PATH_EXCEPTION,
SQL_NONCONSTANT_STRING_PASSED_TO_EXECUTE,
EQ_COMPARETO_USE_OBJECT_EQUALS,
BX_UNBOXING_IMMEDIATELY_REBOXED,
HE_EQUALS_USE_HASHCODE,
DM_EXIT,
FE_FLOATING_POINT_EQUALITY,
RCN_REDUNDANT_NULLCHECK_OF_NONNULL_VALUE,
BC_UNCONFIRMED_CAST,
REC_CATCH_EXCEPTION,
BC_UNCONFIRMED_CAST_OF_RETURN_VALUE,
VA_FORMAT_STRING_USES_NEWLINE,
RV_RETURN_VALUE_IGNORED_BAD_PRACTICE,
EI_EXPOSE_REP2,
WMI_WRONG_MAP_ITERATOR,
EI_EXPOSE_REP,
NP_LOAD_OF_KNOWN_NULL_VALUE,
DM_NUMBER_CTOR,
SBSC_USE_STRINGBUFFER_CONCATENATION,
OS_OPEN_STREAM_EXCEPTION_PATH,
NP_NONNULL_RETURN_VIOLATION,
SF_SWITCH_NO_DEFAULT,
RV_RETURN_VALUE_IGNORED_NO_SIDE_EFFECT,
ODR_OPEN_DATABASE_RESOURCE,
PZLA_PREFER_ZERO_LENGTH_ARRAYS,
NP_NULL_ON_SOME_PATH_FROM_RETURN_VALUE,
UCF_USELESS_CONTROL_FLOW,
UC_USELESS_CONDITION,
NP_NULL_ON_SOME_PATH,
DM_FP_NUMBER_CTOR,
SQL_PREPARED_STATEMENT_GENERATED_FROM_NONCONSTANT_STRING,
OBL_UNSATISFIED_OBLIGATION_EXCEPTION_EDGE,
ES_COMPARING_STRINGS_WITH_EQ,
OS_OPEN_STREAM,
RCN_REDUNDANT_NULLCHECK_WOULD_HAVE_BEEN_A_NPE,
NP_PARAMETER_MUST_BE_NONNULL_BUT_MARKED_AS_NULLABLE,
UC_USELESS_OBJECT,
OBL_UNSATISFIED_OBLIGATION,
}
@@ -7,13 +7,12 @@ import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPatternParser.Tokenizer;
import edu.lu.uni.serval.config.Configuration;
import edu.lu.uni.serval.diffentry.DiffEntryHunk;
import edu.lu.uni.serval.diffentry.DiffEntryReader;
import edu.lu.uni.serval.gumtree.GumTreeGenerator;
import edu.lu.uni.serval.gumtree.GumTreeGenerator.GumTreeType;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
@@ -29,8 +28,8 @@ import edu.lu.uni.serval.gumtree.regroup.SimplifyTree;
*/
public class FixedViolationHunkParser extends FixedViolationParser {
@SuppressWarnings("unused")
private static Logger log = LoggerFactory.getLogger(FixedViolationHunkParser.class);
private static final int THRESHOLD_LINE = 3;
public String testingInfo = "";
public int nullMappingGumTreeResult = 0;
@@ -38,6 +37,7 @@ public class FixedViolationHunkParser extends FixedViolationParser {
public int largeHunk = 0;
public int nullSourceCode = 0;
public int nullMatchedDiffEntry = 0;
public int testInfos = 0;
public FixedViolationHunkParser() {
}
@@ -48,66 +48,30 @@ public class FixedViolationHunkParser extends FixedViolationParser {
@Override
public void parseFixPatterns(File prevFile, File revFile, File diffentryFile) {
List<Violation> allViolations = readViolations(prevFile, revFile);
// GumTree results
// TODO remove the modification of variable names or not? FIXME
List<HierarchicalActionSet> actionSets = parseChangedSourceCodeWithGumTree2(prevFile, revFile); // only remove non-statement source code, eg. method declaration
List<Violation> violations = readViolations(revFile.getName());
List<HierarchicalActionSet> actionSets = parseChangedSourceCodeWithGumTree2(prevFile, revFile);
if (this.resultType != 0) {
String type = "";
switch (this.resultType) {
case 1:
if (this.resultType == 1) {
type = "#NullGumTreeResult:";
break;
case 2:
} else if (this.resultType == 2) {
type = "#NoSourceCodeChange:";
break;
case 3:
} else if (this.resultType == 3) {
type = "#NoStatementChange:";
break;
}
for (Violation v : violations) {
System.err.println(type + revFile.getName().replace("#", "/") + ":" + v.getStartLineNum() + ":" + v.getEndLineNum() + ":" + v.getAlarmType());
for (Violation v : allViolations) {
System.err.println(type + revFile.getName() + ":" + v.getStartLineNum() + ":" + v.getEndLineNum() + ":" + v.getViolationType());
}
return;
} else {
if (violations.size() == 0) {
this.resultType = 4;
return;
}
// List<DiffEntryHunk> diffentryHunks1 = new DiffEntryReader().readHunks2(diffentryFile);
// // Select hunks by positions of violations.
// for (Violation violation : violations) {
// int violationStartLineNum = violation.getStartLineNum();
// int violationEndLineNum = violation.getEndLineNum();
// for (int index = 0, hunkListSize = diffentryHunks1.size(); index < hunkListSize; index ++) {
// DiffEntryHunk hunk = diffentryHunks1.get(index);
// int startLine = hunk.getBugLineStartNum();
// int range = hunk.getBugRange();
// if (violationStartLineNum > startLine + range - 1) continue;
// if (violationEndLineNum < startLine) break;
//
// if (violation.getBugStartLineNum() == 0) {
// violation.setBugStartLineNum(startLine);
// violation.setFixStartLineNum(hunk.getFixLineStartNum());
// }
// violation.setBugEndLineNum(startLine + range - 1);
// violation.setFixEndLineNum(hunk.getFixLineStartNum() + hunk.getFixRange() - 1);
// violation.getHunks().add(hunk);
// }
// if (violation.getBugStartLineNum() == 0 && violation.getBugEndLineNum() == 0) {
// // This fixed violation cannot be matched with a DiffEntry, it is difficult to identify related source code change for it.
// nullMatchedDiffEntry ++;
// log.warn("#Null-DiffEntry: " + revFile.getName().replace("#", "/") + " : " +violation.getStartLineNum() + " : " +
// violation.getBugEndLineNum() + " : " + violation.getAlarmType());
// }
// }
List<DiffEntryHunk> diffentryHunks = new DiffEntryReader().readHunks2(diffentryFile);
// Identify DiffEntry hunks by positions of violations.
List<Violation> violations = identifyFixRangeHeuristically(allViolations, diffentryHunks, revFile);
//Filter out the modify actions, which are not in the DiffEntry hunks.
HunkActionFilter hunkFilter = new HunkActionFilter();
List<Violation> selectedViolations = hunkFilter.filterActionsByModifiedRange2(violations, actionSets, revFile, prevFile);
violations.removeAll(selectedViolations);
this.nullMappingGumTreeResult += violations.size();
this.nullMappingGumTreeResult += violations.size() - selectedViolations.size();
for (Violation violation : selectedViolations) {
List<HierarchicalActionSet> hunkActionSets = violation.getActionSets();
@@ -193,15 +157,16 @@ public class FixedViolationHunkParser extends FixedViolationParser {
}
}
if (fixStartLine == 0) {
if (fixStartLine == 0 && bugStartLine != 0) {
// pure delete actions.
this.pureDeletions ++;
System.err.println("#PureDeletion:" + revFile.getName().replace("#", "/") + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getAlarmType());
// continue;
System.err.println("#PureDeletion:" + revFile.getName() + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getViolationType());
// get the exact buggy code by violation's position. TODO later
}
for (HierarchicalActionSet hunkActionSet : hunkActionSets) {
// TODO simplify buggy tree with buggy code.
SimplifyTree abstractIdentifier = new SimplifyTree();
abstractIdentifier.abstractTree(hunkActionSet, bugEndPosition);
SimpleTree simpleT = hunkActionSet.getSimpleTree();
@@ -212,19 +177,17 @@ public class FixedViolationHunkParser extends FixedViolationParser {
}
// if (children.size() == 0) continue;
boolean isInsert = false;
boolean isPureInsert = false;
if (bugStartLine == 0) {
bugStartLine = violation.getStartLineNum();
bugEndLine = violation.getEndLineNum();
isInsert = true;
isPureInsert = true;
// continue;
}
if (bugEndLine - bugStartLine > Configuration.HUNK_SIZE || fixEndLine - fixStartLine > Configuration.HUNK_SIZE) {
if (fixStartLine != 0) {
this.largeHunk ++;
System.err.println("#LargeHunk:" + revFile.getName().replace("#", "/") + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getAlarmType());
}
this.largeHunk ++;
System.err.println("#LargeHunk:" + revFile.getName() + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getViolationType());
continue;
}
@@ -232,13 +195,11 @@ public class FixedViolationHunkParser extends FixedViolationParser {
simpleTree.setParent(null);
// Source Code of patches.
String patchSourceCode = getPatchSourceCode(prevFile, revFile, bugStartLine, bugEndLine, fixStartLine, fixEndLine, isInsert);
String patchSourceCode = getPatchSourceCode(prevFile, revFile, bugStartLine, bugEndLine, fixStartLine, fixEndLine, isPureInsert);
if ("".equals(patchSourceCode)) {
if (fixStartLine != 0) {
this.nullSourceCode ++;
System.err.println("#NullSourceCode:" + revFile.getName().replace("#", "/") + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getAlarmType());
}
this.nullSourceCode ++;
System.err.println("#NullSourceCode:" + revFile.getName() + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getViolationType());
continue;
}
@@ -257,23 +218,24 @@ public class FixedViolationHunkParser extends FixedViolationParser {
// this.nullMappingGumTreeResult ++;
// continue;
// }
String alarmType = violation.getAlarmType();
String alarmType = violation.getViolationType();
// String patchPosition = "\n" + revFile.getName() + "Position: " + violation.getStartLineNum() + " --> " + violation.getEndLineNum() + "\n@@ -" + bugStartLine + ", " + bugEndLine + " +" + fixStartLine + ", " + fixEndLine + "@@\n";
// String patchPosition = "\n" + "Position: " + violation.getStartLineNum() + " --> " + violation.getEndLineNum() + "\n@@ -" + bugStartLine + ", " + bugEndLine + " +" + fixStartLine + ", " + fixEndLine + "@@\n";
// String info = Configuration.PATCH_SIGNAL + "\nAlarm Type :" + violation.getAlarmType() + "\n" + patchPosition + patchSourceCode + "\nAST Diff###:\n" + getAstEditScripts(hunkActionSets, bugEndPosition, fixEndPosition) + "\n";
String patchPosition = "\n" + "Position: " + violation.getStartLineNum() + " --> " + violation.getEndLineNum() + "\n@@ -" + bugStartLine + ", " + bugEndLine + " +" + fixStartLine + ", " + fixEndLine + "@@\n";
String info = Configuration.PATCH_SIGNAL + "\nAlarm Type :" + violation.getAlarmType() + "\n" + patchSourceCode + "\n" + patchPosition + revFile.getName() + "\n";
String info = Configuration.PATCH_SIGNAL + "\nAlarm Type :" + violation.getViolationType() + "\n" + patchSourceCode + "\n" + patchPosition + revFile.getName() + "\n";
if (noUpdate(editScriptTokens)) {
if (!"SE_NO_SERIALVERSIONID".equals(alarmType)) {
if (containsFiledDeclaration(hunkActionSets)) {
// this.nullMappingGumTreeResult ++; //TODO
if (fixStartLine != 0) {
this.testingInfo += info + revFile.getName() + "\n";
this.testingInfo += "#TestingInfo: " + revFile.getName().replace("#", "/") + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getAlarmType();
}
this.testingInfo += info + revFile.getName() + "\n";
this.testingInfo += "#TestingInfo: " + revFile.getName() + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getViolationType();
System.err.println("#TestingInfo:" + revFile.getName() + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getViolationType());
this.testInfos ++;
continue;
}
}
@@ -292,11 +254,12 @@ public class FixedViolationHunkParser extends FixedViolationParser {
} else {
// this.nullMappingGumTreeResult ++; // TODO
if (fixStartLine != 0) {
this.testingInfo += info + revFile.getName() + "\n";
this.testingInfo += "#TestingInfo: " + revFile.getName().replace("#", "/") + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getAlarmType();
}
this.testingInfo += info + revFile.getName() + "\n";
this.testingInfo += "#TestingInfo: " + revFile.getName() + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getViolationType();
System.err.println("#TestingInfo:" + revFile.getName() + ":" + violation.getStartLineNum()
+ ":" + violation.getEndLineNum() + ":" + violation.getViolationType());
this.testInfos ++;
continue;
}
}
@@ -304,7 +267,7 @@ public class FixedViolationHunkParser extends FixedViolationParser {
this.patchesSourceCode += info;
this.sizes += size + "\n";
this.astEditScripts += astEditScripts + "\n";
this.alarmTypes += alarmType + "\n";
this.violationTypes += alarmType + "\n";
// this.buggyTrees += Configuration.BUGGY_TREE_TOKEN + "\n" + simpleTree.toString() + "\n";
String tokens = Tokenizer.getTokensDeepFirst(simpleTree).trim();
if ("Block Block".equals(tokens)) {
@@ -318,6 +281,149 @@ public class FixedViolationHunkParser extends FixedViolationParser {
}
}
// private List<HierarchicalActionSet> getExactActionSets(Violation violation,
// List<HierarchicalActionSet> hunkActionSets) {
// List<HierarchicalActionSet> deleteActionSets = new ArrayList<>();
// for (HierarchicalActionSet hunkActionSet : hunkActionSets) {
// int startLine = hunkActionSet.getBugStartLineNum();
// int endLine = hunkActionSet.getBugEndLineNum();
// if (violation.getStartLineNum() <= startLine && endLine <= violation.getEndLineNum()) {
// String astNodeType = hunkActionSet.getAstNodeType();
// if (astNodeType.endsWith("Statement") || astNodeType.endsWith("FieldDeclaration")) {
//
// }
// }
// }
// return deleteActionSets;
// }
private List<Violation> identifyFixRangeHeuristically(List<Violation> violations, List<DiffEntryHunk> diffentryHunks, File revFile) {
List<Violation> selectedViolations = new ArrayList<>();
for (Violation violation : violations) {
int violationStartLineNum = violation.getBugStartLineNum();
if (violationStartLineNum > 0) {
int violationEndLineNum = violation.getEndLineNum();
for (int index = 0, hunkListSize = diffentryHunks.size(); index < hunkListSize; index ++) {
DiffEntryHunk hunk = diffentryHunks.get(index);
int bugStartLine = hunk.getBugLineStartNum();
int bugRange = hunk.getBugRange();
if (violationStartLineNum > bugStartLine + bugRange - 1) continue;
if (violationEndLineNum < bugStartLine) break;
int fixStartLine = hunk.getFixLineStartNum();
String diffentry = hunk.getHunk();
BufferedReader reader = new BufferedReader(new StringReader(diffentry));
String line = null;
try {
int currentBugLine = bugStartLine - 1;
int currentFixLine = fixStartLine - 1;
int fixedLines = 0;
int bugS = 0;
int fixS = 0;
int fixE = 0;
int bugFixStartLine = 0; // the heuristic inferred fix start line of the corresponding bug
int bugFixEndLine = 0; // the heuristic inferred fix end line of the corresponding bug
boolean isFixRange= false;
while ((line = reader.readLine()) != null) {
if (line.startsWith("+")) {
currentFixLine ++;
fixedLines++;
if ((violationStartLineNum <= currentBugLine && currentBugLine <= violationEndLineNum) ||
(violationStartLineNum <= bugS && bugS <= violationEndLineNum)) {
if (fixS == 0) fixS = currentFixLine;
if (bugFixStartLine == -1) bugFixStartLine = currentFixLine;
fixE = currentFixLine;
if (isFixRange) bugFixEndLine = currentFixLine;
} else {
fixedLines = 0;
bugS = 0;
}
// bugS = 0; // fixS = 0;
} else if (line.startsWith("-")) {
currentBugLine ++;
if (bugS == 0 || fixS != 0) bugS = currentBugLine;// currentBugLine may be larger than the violation end line.
// INS combined with DEL, UPD or MOV.
// Infer the fix range for a violation heuristically.
if (currentBugLine >= violation.getStartLineNum() && currentBugLine <= violation.getEndLineNum()) {
bugFixStartLine = -1;
}
if (currentBugLine <= violation.getEndLineNum() && bugFixStartLine != 0) {
isFixRange = true;
}
if (bugFixEndLine > 0) isFixRange = false;
if (bugFixStartLine <= 0) fixS = 0;
} else {
currentBugLine ++;
currentFixLine ++;
// pure INS
// Infer the fix range for a violation heuristically.
if (currentBugLine == violation.getStartLineNum()) {
if (bugFixStartLine <= 0) {
if (fixedLines != 0) {
if (fixedLines > THRESHOLD_LINE) {
fixedLines = THRESHOLD_LINE;// insert 3 lines.
}
bugFixStartLine = currentFixLine - fixedLines;
if (bugFixStartLine < violationStartLineNum) {
bugFixStartLine = violationStartLineNum;
}
}
else bugFixStartLine = currentFixLine;
}
}
if (currentBugLine == violation.getEndLineNum()) {
if (bugFixStartLine != 0 && bugFixEndLine == 0) {
bugFixEndLine = currentFixLine + THRESHOLD_LINE;
if (bugFixEndLine > violationEndLineNum) {
bugFixEndLine = violationEndLineNum;
}
}
}
if (bugFixEndLine > 0) isFixRange = false;
}
if ((violationStartLineNum <= currentBugLine && currentBugLine <= violationEndLineNum)) {
if (!violation.getHunks().contains(hunk))
violation.getHunks().add(hunk);
}
}
if (violation.getFixStartLineNum() == 0) {
violation.setFixStartLineNum(fixS);
}
violation.setFixEndLineNum(fixE);
if (violation.getBugFixStartLineNum() == 0 && bugFixStartLine > 0) {
violation.setBugFixStartLineNum(bugFixStartLine);
}
if (bugFixEndLine > 0) {
violation.setBugFixEndLineNum(bugFixEndLine);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
if (violation.getHunks().size() == 0) {
// This fixed violation cannot be matched with a DiffEntry, it is difficult to identify related source code change for it.
this.nullMatchedDiffEntry ++;
System.err.println("#NullDiffEntry: " + revFile.getName() + " : " +violation.getStartLineNum() + " : " + violation.getEndLineNum() + " : " + violation.getViolationType());
} else {
selectedViolations.add(violation);
}
}
}
return selectedViolations;
}
private boolean containsFiledDeclaration(List<HierarchicalActionSet> hunkActionSets) {
for (HierarchicalActionSet hunkActionSet : hunkActionSets) {
if (hunkActionSet.getAstNodeType().equals("FieldDeclaration")) {
@@ -15,6 +15,7 @@ import edu.lu.uni.serval.gumtree.regroup.HierarchicalActionSet;
import edu.lu.uni.serval.gumtree.regroup.HierarchicalRegrouper;
import edu.lu.uni.serval.utils.FileHelper;
import edu.lu.uni.serval.utils.ListSorter;
import edu.lu.uni.serval.violation.code.parser.ViolationSourceCodeTree;
/**
* Parse fix patterns with GumTree.
@@ -35,8 +36,8 @@ public class FixedViolationParser extends Parser {
public int resultType = 0;
private File positionFile = null;
protected String alarmTypes = "";
protected List<Violation> uselessViolations;
protected String violationTypes = "";
// protected List<Violation> uselessViolations;
public void setPositionFile(File positionFile) {
this.positionFile = positionFile;
@@ -66,18 +67,18 @@ public class FixedViolationParser extends Parser {
} else {
// Regroup GumTre results.
List<HierarchicalActionSet> allActionSets = new HierarchicalRegrouper().regroupGumTreeResults(gumTreeResults);
for (HierarchicalActionSet actionSet : allActionSets) {
String astNodeType = actionSet.getAstNodeType();
if (astNodeType.endsWith("Statement") || "FieldDeclaration".equals(astNodeType)) {
actionSets.add(actionSet);
}
}
// for (HierarchicalActionSet actionSet : allActionSets) {
// String astNodeType = actionSet.getAstNodeType();
// if (astNodeType.endsWith("Statement") || "FieldDeclaration".equals(astNodeType)) {
// actionSets.add(actionSet);
// }
// }
// Filter out modified actions of changing method names, method parameters, variable names and field names in declaration part.
// TODO: variable effects range, sub-actions are these kinds of modification?
// variable effects range, sub-actions are these kinds of modification?
// actionSets.addAll(new ActionFilter().filterOutUselessActions(allActionSets));
ListSorter<HierarchicalActionSet> sorter = new ListSorter<>(actionSets);
ListSorter<HierarchicalActionSet> sorter = new ListSorter<>(allActionSets);
actionSets = sorter.sortAscending();
if (actionSets.size() == 0) {
@@ -88,7 +89,8 @@ public class FixedViolationParser extends Parser {
}
}
protected List<Violation> readViolations(String fileName) {
protected List<Violation> readViolations(File prevFile, File revFile) {
String fileName = revFile.getName();
List<Violation> violations = new ArrayList<>();
String fileContent = FileHelper.readFile(positionFile);
BufferedReader reader = null;
@@ -99,12 +101,24 @@ public class FixedViolationParser extends Parser {
String[] positionStr = line.split(":");
int startLine = Integer.parseInt(positionStr[1]);
int endLine = Integer.parseInt(positionStr[2]);
String alarmType = positionStr[0];
String violationType = positionStr[0];
Violation violation = new Violation(startLine, endLine, alarmType);
violation.setFileName(fileName.replaceAll("#", "/"));
if (uselessViolations.contains(violation)) {
continue;
// if ("UPM_UNCALLED_PRIVATE_METHOD".equals(violationType)) continue;
Violation violation = new Violation(startLine, endLine, violationType);
violation.setFileName(fileName);
/*
* Get the parent range of a violation.
* Read DiffEntries with this range to get the start line and end line of a violation.
*/
ViolationSourceCodeTree alarmTree = new ViolationSourceCodeTree(prevFile, startLine, endLine);
alarmTree.locateParentNode(violationType);
int violationStartLine = alarmTree.getViolationFinalStartLine();
violation.setBugStartLineNum(violationStartLine);
if (violationStartLine > 0) {// 0: no source code, -1: range is too large, which contains several inner classes, methods or fields.
// FileHelper.outputToFile("logs/testV3.txt", "\n", true);
violation.setBugEndLineNum(alarmTree.getViolationFinalEndLine());
}
violations.add(violation);
}
@@ -165,10 +179,10 @@ public class FixedViolationParser extends Parser {
}
public String getAlarmTypes() {
return alarmTypes;
return violationTypes;
}
public void setUselessViolations(List<Violation> uselessViolations) {
this.uselessViolations = uselessViolations;
}
// public void setUselessViolations(List<Violation> uselessViolations) {
// this.uselessViolations = uselessViolations;
// }
}
@@ -39,7 +39,7 @@ public class FixedViolationSingleStatementParser extends FixedViolationParser {
}
// Read the positions of checked violations
List<Violation> violations = readViolations(revFile.getName());
List<Violation> violations = readViolations(prevFile, revFile);
for (HierarchicalActionSet actionSet : actionSets) {
// position of buggy statements
int startPosition = 0;
@@ -127,7 +127,7 @@ public class FixedViolationSingleStatementParser extends FixedViolationParser {
this.patchesSourceCode += Configuration.PATCH_SIGNAL + "\n" + revFile.getName() + "\n" + patchSourceCode + "\n";
this.sizes += size + "\n";
this.astEditScripts += astEditScripts + "\n";
this.alarmTypes += violation.getAlarmType() + "\n";
this.violationTypes += violation.getViolationType() + "\n";
// 2. source code: raw tokens
// String rawTokenEditScripts = getRawTokenEditScripts(actionSet);
// // 3. abstract identifiers:
@@ -13,17 +13,19 @@ public class Violation implements Comparable<Violation> {
private int endLineNum;
private int bugStartLineNum;
private int bugEndLineNum;
private int fixStartLineNum;
private int fixStartLineNum = 0;
private int fixEndLineNum;
private String alarmType;
private String violationType;
private List<DiffEntryHunk> hunks = new ArrayList<>();
private List<HierarchicalActionSet> actionSets;
private int bugFixStartLineNum = 0; // the heuristic matched fix start line of a violation
private int bugFixEndLineNum = 0; // the heuristic matched fix end line of a violation
public Violation(Integer startLineNum, int endLineNum, String alarmType) {
public Violation(Integer startLineNum, int endLineNum, String violationType) {
super();
this.startLineNum = startLineNum;
this.endLineNum = endLineNum;
this.alarmType = alarmType;
this.violationType = violationType;
this.actionSets = new ArrayList<>();
}
@@ -83,14 +85,30 @@ public class Violation implements Comparable<Violation> {
this.hunks = hunks;
}
public String getAlarmType() {
return alarmType;
public String getViolationType() {
return violationType;
}
public List<HierarchicalActionSet> getActionSets() {
return actionSets;
}
public int getBugFixStartLineNum() {
return bugFixStartLineNum;
}
public void setBugFixStartLineNum(int bugFixStartLineNum) {
this.bugFixStartLineNum = bugFixStartLineNum;
}
public int getBugFixEndLineNum() {
return bugFixEndLineNum;
}
public void setBugFixEndLineNum(int bugFixEndLineNum) {
this.bugFixEndLineNum = bugFixEndLineNum;
}
@Override
public int compareTo(Violation v) {
return this.startLineNum.compareTo(v.startLineNum);
@@ -98,14 +116,14 @@ public class Violation implements Comparable<Violation> {
@Override
public String toString() {
return this.startLineNum + " : " + this.endLineNum + " : " + this.alarmType;
return this.startLineNum + " : " + this.endLineNum + " : " + this.violationType;
}
@Override
public boolean equals(Object obj) {
if (obj instanceof Violation) {
Violation v = (Violation) obj;
if (this.fileName.equals(v.fileName) && this.alarmType.equals(v.alarmType) && this.startLineNum == v.startLineNum && this.endLineNum == v.endLineNum) {
if (this.fileName.equals(v.fileName) && this.violationType.equals(v.violationType) && this.startLineNum == v.startLineNum && this.endLineNum == v.endLineNum) {
return true;
}
}
@@ -44,7 +44,7 @@ public class AkkaParser {
ActorSystem system = null;
ActorRef parsingActor = null;
int numberOfWorkers = 400;
int numberOfWorkers = 431;
final WorkMessage msg = new WorkMessage(0, msgFiles);
try {
log.info("Akka begins...");
@@ -50,7 +50,7 @@ public class ParseFixPatternActor extends UntypedActor {
if (message instanceof WorkMessage) {
List<MessageFile> files = ((WorkMessage) message).getMsgFiles();
int size = files.size();
int average = size / numberOfWorkers;
int average = (int) Math.round((double) size / numberOfWorkers);
for (int i = 0; i < numberOfWorkers; i ++) {
int fromIndex = i * average;
@@ -4,7 +4,6 @@ import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.ExecutorService;
@@ -73,27 +72,29 @@ public class ParseFixPatternWorker extends UntypedActor {
int id = msg.getId();
int counter = 0;
int testAlarms = 0;
int testViolations = 0;
int nullGumTreeResults = 0;
int nullMappingGumTreeResults = 0;
int noSourceCodeChanges = 0;
int noStatementChanges = 0;
int nullDiffEntry = 0;
int nullMappingGumTreeResults = 0;
int pureDeletion = 0;
int expNums = 0;
int largeHunk = 0;
int nullSourceCode = 0;
int illegalV = 0;
int testInfos = 0;
int timeouts = 0;
// Read violations with Null_Violation_Hunk or Illegal_Line_Position
List<Violation> uselessViolations = readUselessViolations("logs/FixedViolationCodeParseResults.log");
// List<Violation> uselessViolations = new ArrayList<>();// readUselessViolations("logs/FixedViolationCodeParseResults.log");
for (MessageFile msgFile : files) {
File revFile = msgFile.getRevFile();
File prevFile = msgFile.getPrevFile();
File diffentryFile = msgFile.getDiffEntryFile();
File positionFile = msgFile.getPositionFile();
if (revFile.getName().toLowerCase().contains("/test/")) {
testAlarms += countAlarms(positionFile, "#TestViolation:", uselessViolations);
if (revFile.getName().toLowerCase().contains("test#") || revFile.getName().toLowerCase().contains("tests#")) {
// testViolations += countAlarms(positionFile, "#TestViolation:", uselessViolations);
testViolations += countAlarms(positionFile, "#TestViolation:");
continue;
}
// Parser parser = null;
@@ -104,7 +105,7 @@ public class ParseFixPatternWorker extends UntypedActor {
// parser = new CommitPatchSingleStatementParser();
// }
FixedViolationHunkParser parser = new FixedViolationHunkParser(positionFile);
parser.setUselessViolations(uselessViolations);
// parser.setUselessViolations(uselessViolations);
final ExecutorService executor = Executors.newSingleThreadExecutor();
// schedule the work
@@ -112,23 +113,25 @@ public class ParseFixPatternWorker extends UntypedActor {
try {
// wait for task to complete
future.get(Configuration.SECONDS_TO_WAIT, TimeUnit.SECONDS);
nullDiffEntry += parser.nullMatchedDiffEntry;
nullMappingGumTreeResults += parser.nullMappingGumTreeResult;
pureDeletion += parser.pureDeletions;
largeHunk += parser.largeHunk;
nullSourceCode += parser.nullSourceCode;
testInfos += parser.testInfos;
testingInfo.append(parser.testingInfo);
String editScript = parser.getAstEditScripts();
if ("".equals(editScript)) {
if (parser.resultType == 1) {
nullGumTreeResults += countAlarms(positionFile, "", uselessViolations);
nullGumTreeResults += countAlarms(positionFile, "");
// System.err.println("#NullGumTreeResult:" + revFile.getName());
} else if (parser.resultType == 2) {
noSourceCodeChanges += countAlarms(positionFile, "", uselessViolations);
noSourceCodeChanges += countAlarms(positionFile, "");
} else if (parser.resultType == 3) {
noStatementChanges += countAlarms(positionFile, "", uselessViolations);
} else if (parser.resultType == 4) {
noStatementChanges += countAlarms(positionFile, "");
// } else if (parser.resultType == 4) {
// illegalV += countAlarms(positionFile, "", uselessViolations);
}
} else {
@@ -159,14 +162,14 @@ public class ParseFixPatternWorker extends UntypedActor {
} catch (TimeoutException e) {
// err.println("task timed out");
future.cancel(true);
expNums += countAlarms(positionFile, "#Timeout:", uselessViolations);
timeouts += countAlarms(positionFile, "#Timeout:");
// System.err.println("#Timeout: " + revFile.getName());
} catch (InterruptedException e) {
expNums += countAlarms(positionFile, "#TimeInterrupted:", uselessViolations);
timeouts += countAlarms(positionFile, "#TimeInterrupted:");
// err.println("task interrupted");
// System.err.println("#TimeInterrupted: " + revFile.getName());
} catch (ExecutionException e) {
expNums += countAlarms(positionFile, "#TimeAborted:", uselessViolations);
timeouts += countAlarms(positionFile, "#TimeAborted:");
// err.println("task aborted");
// System.err.println("#TimeAborted: " + revFile.getName());
} finally {
@@ -189,9 +192,10 @@ public class ParseFixPatternWorker extends UntypedActor {
FileHelper.outputToFile("OUTPUT/testingInfo_" + id + ".list", testingInfo, true);
testingInfo.setLength(0);
}
String statistic = "testAlarms: " + testAlarms + "\nnullGumTreeResults: " + nullGumTreeResults + "\nnullMappingGumTreeResults: " + nullMappingGumTreeResults +
"\nnoSourceCodeChanges: " + noSourceCodeChanges + "\npureDeletion: " + pureDeletion + "\nTimeout: " + expNums +
"\nlargeHunk: " + largeHunk + "\nnullSourceCode: " + nullSourceCode + "\nnoStatementChanges: " + noStatementChanges + "\nIllegalV: " + illegalV;
String statistic = "TestViolations: " + testViolations + "\nNullGumTreeResults: " + nullGumTreeResults + "\nNoSourceCodeChanges: " + noSourceCodeChanges +
"\nNoStatementChanges: " + noStatementChanges + "\nNullDiffEntry: " + nullDiffEntry + "\nNullMatchedGumTreeResults: " + nullMappingGumTreeResults +
"\nPureDeletion: " + pureDeletion + "\nLargeHunk: " + largeHunk + "\nNullSourceCode: " + nullSourceCode +
"\nTestingInfo: " + testInfos + "\nTimeout: " + timeouts;// + "\nIllegalV: " + illegalV;
FileHelper.outputToFile("OUTPUT/statistic_" + id + ".list", statistic, false);
log.info("Worker #" + id +"Finish of parsing " + counter + " files...");
@@ -202,39 +206,39 @@ public class ParseFixPatternWorker extends UntypedActor {
}
}
private List<Violation> readUselessViolations(String filePath) {
List<Violation> uselessViolations = new ArrayList<>();
String content = FileHelper.readFile(filePath);
BufferedReader reader = new BufferedReader(new StringReader(content));
String line = null;
try {
while ((line = reader.readLine()) != null) {
if (line.startsWith("#")) {
String[] elements = line.split(":");
String fileName = elements[1];
int startLine = Integer.parseInt(elements[2]);
int endLine = Integer.parseInt(elements[3]);
String violationType = elements[4];
Violation violation = new Violation(startLine, endLine, violationType);
violation.setFileName(fileName);
uselessViolations.add(violation);
}
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return uselessViolations;
}
// private List<Violation> readUselessViolations(String filePath) {
// List<Violation> uselessViolations = new ArrayList<>();
//
// String content = FileHelper.readFile(filePath);
// BufferedReader reader = new BufferedReader(new StringReader(content));
// String line = null;
// try {
// while ((line = reader.readLine()) != null) {
// if (line.startsWith("#")) {
// String[] elements = line.split(":");
// String fileName = elements[1];
// int startLine = Integer.parseInt(elements[2]);
// int endLine = Integer.parseInt(elements[3]);
// String violationType = elements[4];
//
// Violation violation = new Violation(startLine, endLine, violationType);
// violation.setFileName(fileName);
// uselessViolations.add(violation);
// }
// }
// } catch (IOException e) {
// e.printStackTrace();
// } finally {
// try {
// reader.close();
// } catch (IOException e) {
// e.printStackTrace();
// }
// }
// return uselessViolations;
// }
private int countAlarms(File positionFile, String type, List<Violation> uselessViolations) {
private int countAlarms(File positionFile, String type) {//, List<Violation> uselessViolations) {
int counter = 0;
String content = FileHelper.readFile(positionFile);
BufferedReader reader = new BufferedReader(new StringReader(content));
@@ -243,16 +247,11 @@ public class ParseFixPatternWorker extends UntypedActor {
while ((line = reader.readLine()) != null) {
String[] elements = line.split(":");
Violation v = new Violation(Integer.parseInt(elements[1]), Integer.parseInt(elements[2]), elements[0]);
String fileName = positionFile.getName().replaceAll("#", "/").replace(".txt", ".java");
String fileName = positionFile.getName().replace(".txt", ".java");
v.setFileName(fileName);
if (!uselessViolations.contains(v)) {
counter ++;
if (!"".equals(type)) {
if (!uselessViolations.contains(v)) {
System.err.println(type + fileName + ":" + elements[1] + ":" + elements[2] + ":" + elements[0]);
}
}
counter ++;
if (!"".equals(type)) {
System.err.println(type + fileName + ":" + elements[1] + ":" + elements[2] + ":" + elements[0]);
}
}
} catch (IOException e) {
@@ -0,0 +1,213 @@
package edu.lu.uni.serval.MultipleThreadsParser2;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import akka.actor.ActorRef;
import akka.actor.ActorSystem;
import edu.lu.uni.serval.config.Configuration;
import edu.lu.uni.serval.utils.FileHelper;
import edu.lu.uni.serval.utils.MapSorter;
/**
* Multi-thread parser of parsing the difference between buggy code file and fixed code file.
*
* @author kui.liu
*
*/
public class AkkaMatcher {
private static Logger log = LoggerFactory.getLogger(AkkaMatcher.class);
public static void main(String[] args) {
List<Double[]> extractedFeatures = readStringList(Configuration.ROOT_PATH + "TestData/2_CNNinput.csv");
int size = extractedFeatures.size();
List<Double[]> trainingFeatures = extractedFeatures.subList(0, size - 178);
List<Double[]> bugFeatures = extractedFeatures.subList(size - 178, size);
for (int index = 0; index < 178; index ++) {
// AkkaMatcher computor = new AkkaMatcher();
// computor.matchFixPatterns(bugFeatures.get(index), index, trainingFeatures);
Map<Integer, Double> similarities = new HashMap<>();
for (int i = 0; i < size - 178; i ++) {
Double similarity = Math.abs(computeSimilarity(bugFeatures.get(index), trainingFeatures.get(i)));
similarities.put(i + 1, similarity);
}
MapSorter<Integer, Double> mapSorter = new MapSorter<Integer, Double>();
Map<Integer, Double> sortedSimilarities = mapSorter.sortByValueDescending(similarities);
List<Integer> similarityList = new ArrayList<>();
double similarity = 0;
int num = 0;
for (Map.Entry<Integer, Double> entry : sortedSimilarities.entrySet()) {
if (entry.getValue().equals(Double.NaN)) {
continue;
}
if (entry.getValue() == similarity) {
continue;
}
similarityList.add(entry.getKey());
similarity = entry.getValue();
if (++ num % 100 == 0) {
break;
}
}
outputMatchedPatterns(similarityList, index + 1);
}
}
private static Double computeSimilarity(Double[] feature, Double[] trainingFeature) {
Double similarity = DistanceCalculator.cosineSimilarityDistance(trainingFeature, feature);
return similarity;
}
private static void outputMatchedPatterns(List<Integer> similarityList, int bugId) {
String outputFile = Configuration.ROOT_PATH + "TestData/MatchedFixPatterns/Bug_" + bugId + ".list";
StringBuilder builder = new StringBuilder("BugId: " + bugId + "\n\n\n");
for (int i = 0, size = similarityList.size(); i < size; i ++) {
int patternPosition = similarityList.get(i);
builder.append(readPattern(patternPosition));
}
FileHelper.outputToFile(outputFile, builder, false);
}
private static String readPattern(int patternPosition) {
String patternInfo = "";
FileInputStream fis = null;
Scanner scanner = null;
try {
fis = new FileInputStream(Configuration.SELECTED_PATCHES_SOURE_CODE_FILE);
scanner = new Scanner(fis);
int index = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.equals("PATCH###")) {
if (patternPosition == index) {
break;
}
index ++;
patternInfo = "";
}
patternInfo += line + "\n";
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
scanner.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return patternInfo;
}
@SuppressWarnings("deprecation")
public void matchFixPatterns(Double[] bugFeature, int bugIndex, List<Double[]> trainingFeatures) {
ActorSystem system = null;
ActorRef parsingActor = null;
int numberOfWorkers = 100;
final WorkMessage msg = new WorkMessage(bugIndex, bugFeature, trainingFeatures);
try {
log.info("Akka begins...");
system = ActorSystem.create("Matching-FixPattern-System");
parsingActor = system.actorOf(MatchFixPatternActor.props(numberOfWorkers), "match-fix-pattern-actor");
parsingActor.tell(msg, ActorRef.noSender());
} catch (Exception e) {
system.shutdown();
e.printStackTrace();
}
}
/**
* Get bug commit-related files.
*
* @return
*/
public static List<MessageFile> getMessageFiles() {
String inputPath = Configuration.GUM_TREE_INPUT; //DiffEntries prevFiles revFiles
File inputFileDirector = new File(inputPath);
File[] files = inputFileDirector.listFiles(); // project folders
log.info("Projects: " + files.length);
List<MessageFile> msgFiles = new ArrayList<>();
for (File file : files) {
if (!file.isDirectory()) continue;
// if (!(file.getName().startsWith("k") || file.getName().startsWith("l"))) continue;
if (file.getName().startsWith("a") || file.getName().startsWith("b")
|| file.getName().startsWith("c") || file.getName().startsWith("d")
|| file.getName().startsWith("e") || file.getName().startsWith("f")
|| file.getName().startsWith("g") || file.getName().startsWith("h")
||file.getName().startsWith("h") || file.getName().startsWith("i")
|| file.getName().startsWith("k") || file.getName().startsWith("l")
|| file.getName().startsWith("j") || file.getName().startsWith("t")) continue;
// if (!file.getName().startsWith("j")) continue;
log.info("Project name: " + file.getName());
String projectFolder = file.getPath();
File revFileFolder = new File(projectFolder + "/revFiles/");// revised file folder
File[] revFiles = revFileFolder.listFiles();
for (File revFile : revFiles) {
if (revFile.getName().endsWith(".java")) {
File prevFile = new File(projectFolder + "/prevFiles/prev_" + revFile.getName());// previous file
File diffentryFile = new File(projectFolder + "/DiffEntries/" + revFile.getName().replace(".java", ".txt")); // DiffEntry file
MessageFile msgFile = new MessageFile(revFile, prevFile, diffentryFile);
msgFiles.add(msgFile);
}
}
}
return msgFiles;
}
public static List<Double[]> readStringList(String inputFile) {
List<Double[]> list = new ArrayList<>();
FileInputStream fis = null;
Scanner scanner = null;
try {
fis = new FileInputStream(inputFile);
scanner = new Scanner(fis);
while(scanner.hasNextLine()) {
String line = scanner.nextLine();
Double[] features = doubleParseFeature(line);
list.add(features);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
scanner.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return list;
}
private static Double[] doubleParseFeature(String feature) {
String[] features = feature.split(", ");
int length = features.length;
Double[] doubleFeatures = new Double[length];
for (int i = 0; i < length; i ++) {
doubleFeatures[i] = Double.parseDouble(features[i]);
}
return doubleFeatures;
}
}
@@ -0,0 +1,68 @@
package edu.lu.uni.serval.MultipleThreadsParser2;
public class DistanceCalculator {
public static double calculateDistance(DistanceFunction distanceType, Double[] targetPoint, Double[] selfPoint) {
double distance = 0;
switch (distanceType) {
case EUCLIDEAN:
distance = DistanceCalculator.euclideanDistance(targetPoint, selfPoint);
break;
case COSINESIMILARITY:
distance = DistanceCalculator.cosineSimilarityDistance(targetPoint, selfPoint);
break;
case MANHATTAN:
distance = DistanceCalculator.manhattanDistance(targetPoint, selfPoint);
break;
default:
distance = DistanceCalculator.euclideanDistance(targetPoint, selfPoint);
break;
}
return distance;
}
public static double euclideanDistance(Double[] targetPoint, Double[] selfPoint) {
double sum = 0.0;
for (int i = 0, length = targetPoint.length; i < length; i++) {
double diff = targetPoint[i] - selfPoint[i];
sum += diff * diff;
}
return Math.sqrt(sum);
}
public static Double cosineSimilarityDistance(Double[] targetPoint, Double[] selfPoint) {
Double sim = 0.0d;
int length = targetPoint.length;
double dot = 0.0d;
double mag1 = 0.0d;
double mag2 = 0.0d;
for (int i = 0; i < length; i ++) {
dot += targetPoint[i] * selfPoint[i];
mag1 += Math.pow(targetPoint[i], 2);
mag2 += Math.pow(selfPoint[i], 2);
}
sim = dot / (Math.sqrt(mag1) * Math.sqrt(mag2));
return sim;
}
public static Double manhattanDistance(Double[] targetPoint, Double[] selfPoint) {
double result = 0.0;
for (int i = 0; i < targetPoint.length; i++) {
result += Math.abs(selfPoint[i] - targetPoint[i]);
}
return result;
}
public static Double minkowskiDistance(Double[] targetPoint, Double[] selfPoint) {
return null;
}
public static Double jaccardSimilarity(Double[] targetPoint, Double[] selfPoint) {
return null;
}
}
@@ -0,0 +1,5 @@
package edu.lu.uni.serval.MultipleThreadsParser2;
public enum DistanceFunction {
EUCLIDEAN, COSINESIMILARITY, MANHATTAN
}
@@ -0,0 +1,172 @@
package edu.lu.uni.serval.MultipleThreadsParser2;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import akka.actor.ActorRef;
import akka.actor.Props;
import akka.actor.UntypedActor;
import akka.japi.Creator;
import akka.routing.RoundRobinPool;
import edu.lu.uni.serval.config.Configuration;
import edu.lu.uni.serval.utils.FileHelper;
import edu.lu.uni.serval.utils.ListSorter;
import edu.lu.uni.serval.utils.MapSorter;
public class MatchFixPatternActor extends UntypedActor {
private static Logger logger = LoggerFactory.getLogger(MatchFixPatternActor.class);
private ActorRef mineRouter;
private final int numberOfWorkers;
private int counter = 0;
public MatchFixPatternActor(int numberOfWorkers) {
mineRouter = this.getContext().actorOf(new RoundRobinPool(numberOfWorkers)
.props(MatchFixPatternWorker.props()), "match-fix-pattern-router");
this.numberOfWorkers = numberOfWorkers;
}
public static Props props(final int numberOfWorkers) {
return Props.create(new Creator<MatchFixPatternActor>() {
private static final long serialVersionUID = 9207427376110704705L;
@Override
public MatchFixPatternActor create() throws Exception {
return new MatchFixPatternActor(numberOfWorkers);
}
});
}
@SuppressWarnings("deprecation")
@Override
public void onReceive(Object message) throws Exception {
if (message instanceof WorkMessage) {
WorkMessage msg = (WorkMessage) message;
List<Double[]> trainingFeatures = msg.getTrainingFeatures();
int size = trainingFeatures.size();
int average = size / numberOfWorkers;
this.bugId = msg.getId();
Double[] bugFeature = msg.getBugFeature();
for (int i = 0; i < numberOfWorkers; i ++) {
int fromIndex = i * average;
int toIndex = (i + 1) * average;
if (i == numberOfWorkers - 1) {
toIndex = size;
}
List<Double[]> subTrainingFeatures = new ArrayList<>();
subTrainingFeatures.addAll(trainingFeatures.subList(fromIndex, toIndex));
final WorkMessage workMsg = new WorkMessage(bugId, bugFeature, subTrainingFeatures);
workMsg.setNum(i + 1);
mineRouter.tell(workMsg, getSelf());
logger.info("Assign a task to worker #" + (i + 1) + "...");
}
} else if (message instanceof ReturnMessage) {
counter ++;
logger.info(counter + " workers finished their work...");
ReturnMessage rMsg = (ReturnMessage) message;
returnMessages.add(rMsg);
if (counter >= numberOfWorkers) {
ListSorter<ReturnMessage> sorter = new ListSorter<ReturnMessage>(returnMessages);
returnMessages = sorter.sortAscending();
Map<Integer, Double> similarities = new HashMap<>();
int index = 0;
for (int i = 0; i < numberOfWorkers; i ++) {
ReturnMessage returnMessage = returnMessages.get(i);
List<Double> similarity = returnMessage.getSimilarities();
for (int j = 0, size = similarity.size(); j < size; j ++) {
index ++;
similarities.put(index, similarity.get(j));
}
}
MapSorter<Integer, Double> mapSorter = new MapSorter<Integer, Double>();
Map<Integer, Double> sortedSimilarities = mapSorter.sortByValueDescending(similarities);
List<Integer> similarityList = new ArrayList<>();
double similarity = 0;
int num = 0;
for (Map.Entry<Integer, Double> entry : sortedSimilarities.entrySet()) {
if (entry.getValue() == similarity) {
continue;
}
similarityList.add(entry.getKey());
similarity = entry.getValue();
if (++ num % 100 == 0) {
break;
}
}
outputMatchedPatterns(similarityList);
logger.info("All workers finished their work...");
this.getContext().stop(mineRouter);
this.getContext().stop(getSelf());
this.getContext().system().shutdown();
}
} else {
unhandled(message);
}
}
private void outputMatchedPatterns(List<Integer> similarityList) {
String outputFile = Configuration.ROOT_PATH + "TestData/MatchedFixPatterns/Bug_" + bugId + ".list";
StringBuilder builder = new StringBuilder("BugId: " + bugId + "\n\n\n");
for (int i = 0, size = similarityList.size(); i < size; i ++) {
int patternPosition = similarityList.get(i);
builder.append(readPattern(patternPosition));
}
FileHelper.outputToFile(outputFile, builder, false);
}
private String readPattern(int patternPosition) {
String patternInfo = "";
FileInputStream fis = null;
Scanner scanner = null;
try {
fis = new FileInputStream(Configuration.SELECTED_PATCHES_SOURE_CODE_FILE);
scanner = new Scanner(fis);
int index = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.equals("PATCH###")) {
if (patternPosition == index) {
break;
}
index ++;
patternInfo = "";
}
patternInfo += line + "\n";
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
scanner.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return patternInfo;
}
private int bugId;
private List<ReturnMessage> returnMessages = new ArrayList<>();
}
@@ -0,0 +1,60 @@
package edu.lu.uni.serval.MultipleThreadsParser2;
import java.util.ArrayList;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import akka.actor.Props;
import akka.actor.UntypedActor;
import akka.japi.Creator;
public class MatchFixPatternWorker extends UntypedActor {
private static Logger log = LoggerFactory.getLogger(MatchFixPatternActor.class);
public MatchFixPatternWorker() {
}
public static Props props() {
return Props.create(new Creator<MatchFixPatternWorker>() {
private static final long serialVersionUID = -7615153844097275009L;
@Override
public MatchFixPatternWorker create() throws Exception {
return new MatchFixPatternWorker();
}
});
}
@Override
public void onReceive(Object message) throws Exception {
if (message instanceof WorkMessage) {
WorkMessage msg = (WorkMessage) message;
List<Double[]> trainingFeatures = msg.getTrainingFeatures();
Double[] bugFeature = msg.getBugFeature();
int bugID = msg.getId();
int workNum = msg.getNum();
List<Double> similarities = new ArrayList<>();
for (int i = 0, size = trainingFeatures.size(); i < size; i ++) {
Double similarity = Math.abs(computeSimilarity(bugFeature, trainingFeatures.get(i)));
similarities.add(similarity);
}
final ReturnMessage rMsg = new ReturnMessage(bugID, workNum, similarities);
log.info("Worker #" + workNum + " finished the work...");
this.getSender().tell(rMsg, getSelf());
} else {
unhandled(message);
}
}
private Double computeSimilarity(Double[] feature, Double[] trainingFeature) {
Double similarity = DistanceCalculator.cosineSimilarityDistance(trainingFeature, feature);
return similarity;
}
}
@@ -0,0 +1,39 @@
package edu.lu.uni.serval.MultipleThreadsParser2;
import java.io.File;
public class MessageFile {
private File revFile;
private File prevFile;
private File diffEntryFile;
private File positionFile;
public MessageFile(File revFile, File prevFile, File diffEntryFile) {
super();
this.revFile = revFile;
this.prevFile = prevFile;
this.diffEntryFile = diffEntryFile;
}
public File getRevFile() {
return revFile;
}
public File getPrevFile() {
return prevFile;
}
public File getDiffEntryFile() {
return diffEntryFile;
}
public File getPositionFile() {
return positionFile;
}
public void setPositionFile(File positionFile) {
this.positionFile = positionFile;
}
}
@@ -0,0 +1,35 @@
package edu.lu.uni.serval.MultipleThreadsParser2;
import java.util.List;
public class ReturnMessage implements Comparable<ReturnMessage>{
private int bugId;
private Integer workerId;
private List<Double> similarities;
public ReturnMessage(int bugId, int workerId, List<Double> similarities) {
super();
this.bugId = bugId;
this.workerId = workerId;
this.similarities = similarities;
}
public int getBugId() {
return bugId;
}
public int getWorkerId() {
return workerId;
}
public List<Double> getSimilarities() {
return similarities;
}
@Override
public int compareTo(ReturnMessage o) {
return this.workerId.compareTo(o.workerId);
}
}
@@ -0,0 +1,39 @@
package edu.lu.uni.serval.MultipleThreadsParser2;
import java.util.List;
public class WorkMessage {
private int id;
private Double[] bugFeature;
private List<Double[]> trainingFeatures;
private int num;
public WorkMessage(int id, Double[] bugFeature, List<Double[]> trainingFeatures) {
super();
this.id = id;
this.bugFeature = bugFeature;
this.trainingFeatures = trainingFeatures;
}
public int getId() {
return id;
}
public Double[] getBugFeature() {
return bugFeature;
}
public List<Double[]> getTrainingFeatures() {
return trainingFeatures;
}
public int getNum() {
return num;
}
public void setNum(int num) {
this.num = num;
}
}
@@ -14,7 +14,7 @@ import edu.lu.uni.serval.config.Configuration;
import edu.lu.uni.serval.gumtree.regroup.SimpleTree;
import edu.lu.uni.serval.gumtree.regroup.SimplifyTree;
import edu.lu.uni.serval.utils.FileHelper;
import edu.lu.uni.serval.violation.code.parser.AlarmTree;
import edu.lu.uni.serval.violation.code.parser.ViolationSourceCodeTree;
/**
*
@@ -60,9 +60,9 @@ public class BuggyTreeParser {
for (File javaFile : javaFiles) {
if (javaFile.getPath().endsWith(fileName)) {
AlarmTree alarmTree = new AlarmTree(javaFile, startLine, endLine);
ViolationSourceCodeTree alarmTree = new ViolationSourceCodeTree(javaFile, startLine, endLine);
alarmTree.extract();
List<ITree> matchedTrees = alarmTree.getAlarmTrees();
List<ITree> matchedTrees = alarmTree.getViolationSourceCodeTrees();
SimpleTree simpleTree = new SimpleTree();
simpleTree.setLabel("Block");
simpleTree.setNodeType("Block");
@@ -0,0 +1,100 @@
package edu.lu.uni.serval.bugLocalization;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import java.util.Scanner;
import edu.lu.uni.serval.config.Configuration;
import edu.lu.uni.serval.utils.Exporter;
import edu.lu.uni.serval.utils.FileHelper;
import edu.lu.uni.serval.utils.MapSorter;
public class FixedAlarms {
/**
*
unfixed alarms
321403
5336
MaxLength: 1508
* @param args
*/
public static void main(String[] args) {
String fileName = "unfixedAlarms";
String tokensFile = Configuration.ROOT_PATH + "Alarms_tokens/" + fileName + ".list"; // MaxLength: 1508
FileHelper.deleteFile(Configuration.ROOT_PATH + "Alarms_tokens/" + fileName + "Tokens.list");
int maxLength = 0;
StringBuilder tokensBuilder = new StringBuilder();
StringBuilder sizesBuilder = new StringBuilder();
Map<String, Integer> alarmTypes = new HashMap<>();
FileInputStream fis = null;
Scanner scanner = null;
int counter = 0;
try {
fis = new FileInputStream(tokensFile);
scanner = new Scanner(fis);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
int colonIndex = line.indexOf(":");
String alarmType = line.substring(0, colonIndex);
if (alarmTypes.containsKey(alarmType)) {
alarmTypes.put(alarmType, alarmTypes.get(alarmType) + 1);
} else {
alarmTypes.put(alarmType, 1);
}
line = line.substring(colonIndex + 1);
colonIndex = line.indexOf(":");
String violationFileName = line.substring(0, colonIndex);
line = line.substring(colonIndex + 1);
colonIndex = line.indexOf(":");
String startLine = line.substring(0, colonIndex);
line = line.substring(colonIndex + 1);
colonIndex = line.indexOf(":");
String endLine = line.substring(0, colonIndex);
String tokens = line.substring(colonIndex + 1);
String[] tokensArray = tokens.split(" ");
int length = tokensArray.length;
if (length > maxLength) maxLength = length;
tokensBuilder.append(tokens + "\n");
sizesBuilder.append(length + "\n");
if (++ counter % 5000 == 0) {
FileHelper.outputToFile(Configuration.ROOT_PATH + "Alarms_tokens/" + fileName + "Tokens.list", tokensBuilder, true);
tokensBuilder.setLength(0);
}
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
scanner.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
System.out.println("MaxLength: " + maxLength);
FileHelper.outputToFile(Configuration.ROOT_PATH + "Alarms_tokens/" + fileName + "Tokens.list", tokensBuilder, true);
tokensBuilder.setLength(0);
FileHelper.outputToFile(Configuration.ROOT_PATH + "Alarms_tokens/" + fileName + "TokenSizes.csv", sizesBuilder, false);
MapSorter<String, Integer> sorter = new MapSorter<String, Integer>();
alarmTypes = sorter.sortByKeyAscending(alarmTypes);
String[] columns = { "Alarm Type", "amount" };
Exporter.exportOutliers(alarmTypes, new File(Configuration.ROOT_PATH + "Alarms_tokens/" + fileName + "TokenTypes.xls"), 1, columns);
// String s = "";
// for (Map.Entry<String, Integer> entry : alarmTypes.entrySet()) {
// s += entry.getKey() + " : " + entry.getValue() + "\n";
//
// }
// FileHelper.outputToFile(Configuration.ROOT_PATH + "Alarms_tokens/fixedAlarmTypesAmount.list", s, false);
}
}
@@ -2,7 +2,7 @@ package edu.lu.uni.serval.config;
public class Configuration {
public static final long SECONDS_TO_WAIT = 120L;
public static final long SECONDS_TO_WAIT = 30L;
public static final String ROOT_PATH = "../FPM_Violations/"; // The root path of all output data.
@@ -186,6 +186,8 @@ public class HierarchicalRegrouper {
private Action findParentAction(Action action, List<Action> actions) {
ITree parent = action.getNode().getParent();
if (parent.getType() == 55) return null;
if (action instanceof Addition) {
parent = ((Addition) action).getParent(); // parent in the fixed source code tree
}
@@ -8,8 +8,6 @@ import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.core.dom.CompilationUnit;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.github.gumtreediff.actions.model.Move;
import com.github.gumtreediff.actions.model.Update;
@@ -21,10 +19,6 @@ import edu.lu.uni.serval.diffentry.DiffEntryHunk;
public class HunkActionFilter {
private static final int LIMITATION_OF_LINE_NUMBERS = 5;
private static Logger log = LoggerFactory.getLogger(HunkActionFilter.class);
/**
* Filter out the modify actions, which are not in the DiffEntry hunks, without considering the same parent node.
*
@@ -200,7 +194,14 @@ public class HunkActionFilter {
private int getEndPosition(List<ITree> children) {
int endPosition = 0;
for (ITree child : children) {
if (child.getLabel().endsWith("Body")) {
int type = child.getType();
if (type == 6 || type == 10 || type == 12 || type == 17 || type == 18 || type == 19 || type == 21 || type == 8// Block, EmptyStatement
|| type == 24 || type == 25 || type == 30 || type == 41 || type == 46 || type == 49 || type == 50
|| type == 51 || type == 53 || type == 54 || type == 56 || type == 60 || type == 61 || type == 70) {
//AssertStatement, BreakStatement, CatchClause, ConstructorInvocation, ContinueStatement, DoStatement
// ExpressionStatement, ForStatement, IfStatement, LabeledStatement, ReturnStatement, SuperConstructorInvocation
// SwitchCase, SwitchStatement, SynchronizedStatement, ThrowStatement, TryStatement
// TypeDeclarationStatement, VariableDeclarationStatement, WhileStatement, EnhancedForStatement
endPosition = child.getPos() - 1;
break;
}
@@ -377,86 +378,127 @@ public class HunkActionFilter {
for (Violation violation : violations) {
int violationStartLine = violation.getStartLineNum();
int violationEndLine = violation.getEndLineNum();
// int bugHunkStartLine = violation.getBugStartLineNum();
// int bugHunkEndLine = violation.getBugEndLineNum();
// int fixHunkStartLine = violation.getFixStartLineNum();
// int fixHunkEndLine = violation.getFixEndLineNum();
for (HierarchicalActionSet actionSet : actionSets) {
int actionBugStartLine = actionSet.getBugStartLineNum();
if (actionBugStartLine == 0) {
actionBugStartLine = setLineNumbers(actionSet, prevUnit, revUnit);
}
int actionBugEndLine = actionSet.getBugEndLineNum();
int actionFixStartLine = actionSet.getFixStartLineNum();
int actionFixEndLine = actionSet.getFixEndLineNum();
int bugHunkStartLine = violation.getBugStartLineNum();
if (bugHunkStartLine == 0) {// Null source code matched for this violation.
// String type = getType(violation);
// continue;
} else if (bugHunkStartLine == -1) {//
specialVioaltionTypes(violation, actionSets);
// continue;
} else {
int bugHunkEndLine = violation.getBugEndLineNum();
int fixHunkStartLine = violation.getFixStartLineNum();
int fixHunkEndLine = violation.getFixEndLineNum();
// if (actionBugStartLine > violationEndLine && actionFixStartLine > fixHunkEndLine) break;
String actionStr = actionSet.getActionString();
if (actionStr.startsWith("INS")) {
// if (fixHunkStartLine <= actionFixStartLine && actionFixEndLine <= fixHunkEndLine) {
// if (actionBugStartLine != 0) {
// if (violationStartLine <= actionBugEndLine && violationEndLine >= actionBugStartLine) {
// violation.getActionSets().add(actionSet);
// }
// } else {
//// if (isRanged(actionSet, violation)) {
//// }
// if (Math.abs(violationStartLine - actionFixStartLine) <= LIMITATION_OF_LINE_NUMBERS
// && Math.abs(violationEndLine - actionFixEndLine) <= LIMITATION_OF_LINE_NUMBERS) {
// violation.getActionSets().add(actionSet);
// }
// }
// }
if (actionBugStartLine != 0) {
if (violationStartLine <= actionBugEndLine && violationEndLine >= actionBugStartLine) {
violation.getActionSets().add(actionSet);
for (HierarchicalActionSet actionSet : actionSets) {
int actionBugStartLine = actionSet.getBugStartLineNum();
if (actionBugStartLine == 0) {
actionBugStartLine = setLineNumbers(actionSet, prevUnit, revUnit);
}
int actionBugEndLine = actionSet.getBugEndLineNum();
int actionFixStartLine = actionSet.getFixStartLineNum();
int actionFixEndLine = actionSet.getFixEndLineNum();
String actionStr = actionSet.getActionString();
if (actionStr.startsWith("INS")) {
if (fixHunkStartLine <= actionFixStartLine && actionFixEndLine <= fixHunkEndLine) {
if (actionBugStartLine != 0) {
if (violationStartLine <= actionBugEndLine && violationEndLine >= actionBugStartLine) {
violation.getActionSets().add(actionSet);
continue;
}
}
// INS with MOV actions that are not identified in previous IF predicate, and pure INS actions
if (violation.getBugFixStartLineNum() >= actionFixEndLine && actionFixStartLine <= violation.getBugFixEndLineNum()) {
violation.getActionSets().add(actionSet);
}
}
} else {
// if (isRanged(actionSet, violation)) {
// }
if (Math.abs(violationStartLine - actionFixStartLine) <= LIMITATION_OF_LINE_NUMBERS
&& Math.abs(violationEndLine - actionFixEndLine) <= LIMITATION_OF_LINE_NUMBERS) {
violation.getActionSets().add(actionSet);
if (bugHunkStartLine <= actionBugStartLine && violationEndLine <= bugHunkEndLine) {
if (violationStartLine <= actionBugEndLine && violationEndLine >= actionBugStartLine) {
violation.getActionSets().add(actionSet);
}
}
}
} else {
// if (bugHunkStartLine <= actionBugStartLine && actionBugEndLine <= bugHunkEndLine) {
// if (violationStartLine <= actionBugEndLine && violationEndLine >= actionBugStartLine) {
// violation.getActionSets().add(actionSet);
// }
// }
if (violationStartLine <= actionBugEndLine && violationEndLine >= actionBugStartLine) {
violation.getActionSets().add(actionSet);
}
}
}
if (violation.getActionSets().size() > 0) {
// FieldDeclaration: single insert, move, delete or update.
List<HierarchicalActionSet> matchedActionSets = filterActionSets(violation.getActionSets());
violation.getActionSets().clear();
violation.getActionSets().addAll(matchedActionSets);
// List<HierarchicalActionSet> matchedActionSets = filterActionSets(violation.getActionSets());
// violation.getActionSets().clear();
// violation.getActionSets().addAll(matchedActionSets);
selectedViolations.add(violation);
} else {
System.err.println("#NullMatchedGumTreeResult:" + revFile.getName().replace("#", "/") + ":" +violation.getStartLineNum() + ":" +
violation.getEndLineNum() + ":" + violation.getAlarmType());
System.err.println("#NullMatchedGumTreeResult:" + revFile.getName() + ":" +violation.getStartLineNum() + ":" +
violation.getEndLineNum() + ":" + violation.getViolationType());
}
}
return selectedViolations;
}
private void specialVioaltionTypes(Violation violation, List<HierarchicalActionSet> actionSets) {
String type = violation.getViolationType();
if ("SE_NO_SUITABLE_CONSTRUCTOR".equals(type)) {// 158, 47
for (HierarchicalActionSet actionSet : actionSets) {
if (actionSet.getActionString().startsWith("UPD TypeDeclaration@@")) {
violation.getActionSets().add(actionSet);
break;
}
}
} else if ("CN_IDIOM".equals(type)) { // 202 23
//add clone method. or update clone method
for (HierarchicalActionSet actionSet : actionSets) {
if (actionSet.getActionString().startsWith("INS MethodDeclaration@@clone")) {
// || actionSet.getActionString().startsWith("UPD MethodDeclaration@@clone")) {
violation.getActionSets().add(actionSet);
break;
}
}
} else if ("SE_NO_SERIALVERSIONID".equals(type)) {// 12 1960
// change superclass or interface, add field or remove @SuppressWarnings("serial"), some are inner class
for (HierarchicalActionSet actionSet : actionSets) {
if (actionSet.getActionString().startsWith("UPD TypeDeclaration@")) {
violation.getActionSets().add(actionSet);
}
if (actionSet.getActionString().startsWith("INS FieldDeclaration@") && actionSet.getNode().getLabel().contains("serialVersionUID")) {
violation.getActionSets().add(actionSet);
break;
}
}
} else if ("SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATION".equals(type)) { // 175 34
// constructor
for (HierarchicalActionSet actionSet : actionSets) {
if (actionSet.getActionString().startsWith("UPD MethodDeclaration@@")) {
violation.getActionSets().add(actionSet);
break;
}
}
} else if ("SE_COMPARATOR_SHOULD_BE_SERIALIZABLE".equals(type)) { // 89 148
//class, and add a field se...?
for (HierarchicalActionSet actionSet : actionSets) {
if (actionSet.getActionString().startsWith("UPD TypeDeclaration@")) {
violation.getActionSets().add(actionSet);
}
if (actionSet.getActionString().startsWith("INS FieldDeclaration@") && actionSet.getNode().getLabel().contains("serialVersionUID")) {
violation.getActionSets().add(actionSet);
break;
}
}
}
}
private List<HierarchicalActionSet> filterActionSets(List<HierarchicalActionSet> actionSets) {
List<HierarchicalActionSet> matchedActionSets = new ArrayList<>();
// find the update
HierarchicalActionSet updateActionSet = null;
for (HierarchicalActionSet actionSet :actionSets) {
for (HierarchicalActionSet actionSet : actionSets) {
if (actionSet.getAction() instanceof Update) {
updateActionSet = actionSet;
}
}
if (updateActionSet != null) {
if (updateActionSet.getAstNodeType().equals("FieldDeclaration")) {
matchedActionSets.clear();
@@ -464,9 +506,67 @@ public class HunkActionFilter {
return matchedActionSets;
}
}
return actionSets;
}
private String getType(Violation violation) {
String type = violation.getViolationType();
switch (type) {
case "CI_CONFUSED_INHERITANCE":// field
// update fieldDeclaration
break;
case "CO_ABSTRACT_SELF":
// java file is an interface, and delete compareTo().
break;
case "EQ_ABSTRACT_SELF":
// java file is an interface, and delete equals().
break;
case "SE_NO_SERIALVERSIONID":
// add a field: serialVersionUID
break;
case "EQ_COMPARETO_USE_OBJECT_EQUALS":
//Update or Delete compareTo(), Add equals()
break;
case "EQ_DOESNT_OVERRIDE_EQUALS":
//override equals()
break;
case "HE_SIGNATURE_DECLARES_HASHING_OF_UNHASHABLE_CLASS":
//remove equals()
break;
case "ME_MUTABLE_ENUM_FIELD":
// under enum, field add final keyword
break;
case "MF_CLASS_MASKS_FIELD":
// change super class or delete the field with a same name in super class.
break;
case "MS_SHOULD_BE_FINAL":
// add final to field
break;
case "STCAL_STATIC_SIMPLE_DATE_FORMAT_INSTANCE":
//remove public static final DateFormat DATE_FORMAT.... or SimpleDateFormat
break;
case "UUF_UNUSED_FIELD":
//remove unused fields. not sure
break;
case "UUF_UNUSED_PUBLIC_OR_PROTECTED_FIELD":
//remove unused fields. not sure
case "UWF_NULL_FIELD":
//update field, remove field
break;
case "UWF_UNWRITTEN_FIELD":
//field
break;
case "UWF_UNWRITTEN_PUBLIC_OR_PROTECTED_FIELD":
//remove field
break;
case "VO_VOLATILE_REFERENCE_TO_ARRAY":
//field
break;
default:
break;
}
return null;
}
private boolean isRanged(HierarchicalActionSet actionSet, Violation violation) {
int actionStartLine = actionSet.getFixStartLineNum();
@@ -673,12 +773,23 @@ public class HunkActionFilter {
if ("EnhancedForStatement".equals(astNodeType) || "ForStatement".equals(astNodeType)
|| "DoStatement".equals(astNodeType) || "WhileStatement".equals(astNodeType)
|| "LabeledStatement".equals(astNodeType) || "SynchronizedStatement".equals(astNodeType)
|| "IfStatement".equals(astNodeType) || "TryStatement".equals(astNodeType)) {
|| "IfStatement".equals(astNodeType) || "TryStatement".equals(astNodeType)
|| "MethodDeclaration".equals(astNodeType)) {
List<ITree> children = update.getNode().getChildren();
bugEndPosition = getEndPosition(children);
List<ITree> newChildren = newNode.getChildren();
fixEndPosition = getEndPosition(newChildren);
if (bugEndPosition == 0) {
bugEndPosition = bugStartPosition + actionSet.getLength();
}
if (fixEndPosition == 0) {
fixEndPosition = fixStartPosition + newNode.getLength();
}
} else if ("TypeDeclaration".equals(astNodeType)) {
bugEndPosition = getClassBodyStartPosition(update.getNode());
fixEndPosition = getClassBodyStartPosition(newNode);
if (bugEndPosition == 0) {
bugEndPosition = bugStartPosition + actionSet.getLength();
}
@@ -701,5 +812,27 @@ public class HunkActionFilter {
return actionBugStartLine;
}
private int getClassBodyStartPosition(ITree tree) {
List<ITree> children = tree.getChildren();
for (int i = 0, size = children.size(); i < size; i ++) {
ITree child = children.get(i);
int type = child.getType();
// Modifier, NormalAnnotation, MarkerAnnotation, SingleMemberAnnotation
if (type != 83 && type != 77 && type != 78 && type != 79
&& type != 5 && type != 39 && type != 43 && type != 74 && type != 75
&& type != 76 && type != 84 && type != 87 && type != 88) {
// ArrayType, PrimitiveType, SimpleType, ParameterizedType,
// QualifiedType, WildcardType, UnionType, IntersectionType, NameQualifiedType
if (i > 0) {
child = children.get(i - 1);
return child.getPos() + child.getLength() + 1;
} else {
return child.getPos() - 1;
}
}
}
return 0;
}
}
@@ -0,0 +1,33 @@
package edu.lu.uni.serval.livestudy;
public class Alarm {
private String alarmType;
private String fileName;
private int startLine;
private int endLine;
public String getAlarmType() {
return alarmType;
}
public String getFileName() {
return fileName;
}
public int getStartLine() {
return startLine;
}
public int getEndLine() {
return endLine;
}
public Alarm(String alarmType, String fileName, int startLine, int endLine) {
super();
this.alarmType = alarmType;
this.fileName = fileName;
this.startLine = startLine;
this.endLine = endLine;
}
}
@@ -0,0 +1,87 @@
package edu.lu.uni.serval.livestudy;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import edu.lu.uni.serval.config.Configuration;
import edu.lu.uni.serval.utils.FileHelper;
public class ParseViolations {
public static void main(String[] args) {
ParseViolations parser = new ParseViolations();
String violationFile = Configuration.ROOT_PATH + "LiveStudy/violations.list";
Map<String, Violation> violations = new HashMap<>();
violations = parser.readViolations(violationFile);
String projectsPath = Configuration.ROOT_PATH + "LiveStudy/projects/";
parser.parseViolationToTokens(violations, projectsPath);
}
public void parseViolationToTokens(Map<String, Violation> violations, String projectsPath) {
for (Map.Entry<String, Violation> entry : violations.entrySet()) {
String projectName = entry.getKey();
List<Alarm> alarms = entry.getValue().getAlarms();
List<File> javaFiles = FileHelper.getAllFiles(projectsPath + projectName, ".java");
}
}
public Map<String, Violation> readViolations(String violationFile) {
Map<String, Violation> violations = new HashMap<>();
FileInputStream fis = null;
Scanner scanner = null;
try {
fis = new FileInputStream(violationFile);
scanner = new Scanner(fis);
while (scanner.hasNextLine()) {
//commons-math : DLS_DEAD_LOCAL_STORE : org/apache/commons/math4/dfp/Dfp.java : 2049 : 2049
String line = scanner.nextLine();
String[] elements = line.split(" : ");
String projectName = elements[0];
String alarmType = elements[1];
String fileName = elements[2];
int startLine = Integer.parseInt(elements[3]);
int endLine = Integer.parseInt(elements[4]);
Alarm alarm = new Alarm(alarmType, fileName, startLine, endLine);
addAlarmToViolations(projectName, alarm, violations);
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} finally {
try {
scanner.close();
fis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return violations;
}
private void addAlarmToViolations(String projectName, Alarm alarm, Map<String, Violation> violations) {
Violation violation = null;
if (violations.containsKey(projectName)) {
violation = violations.get(projectName);
} else {
violation = new Violation(projectName);
violations.put(projectName, violation);
}
List<Alarm> alarms = violation.getAlarms();
alarms.add(alarm);
}
}
@@ -0,0 +1,25 @@
package edu.lu.uni.serval.livestudy;
import java.util.ArrayList;
import java.util.List;
public class Violation {
private String project;
private List<Alarm> alarms;
public String getProject() {
return project;
}
public List<Alarm> getAlarms() {
return alarms;
}
public Violation(String project) {
super();
this.project = project;
this.alarms = new ArrayList<>();
}
}
@@ -0,0 +1,145 @@
package edu.lu.uni.serval.parameters;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPatternParser.Tokenizer;
import edu.lu.uni.serval.FixPatternParser.violations.Violation;
import edu.lu.uni.serval.config.Configuration;
import edu.lu.uni.serval.gumtree.regroup.SimpleTree;
import edu.lu.uni.serval.gumtree.regroup.SimplifyTree;
import edu.lu.uni.serval.utils.FileHelper;
import edu.lu.uni.serval.violation.code.parser.ViolationSourceCodeTree;
/**
* Prepare data for tuning parameters of deep learning models.
*
* @author kui.liu
*
*/
public class ParseAlarms {
public static void main(String[] args) {
ParseAlarms parser = new ParseAlarms();
String outputPath = Configuration.ROOT_PATH + "TuneParameters/fixedAlarmTokens.list";
String outputPath2 = Configuration.ROOT_PATH + "TuneParameters/EmptyStatement/fixedAlarmTokens.list";
FileHelper.deleteFile(outputPath);
FileHelper.deleteFile(outputPath2);
int subIndex = 5;
String fixedAlarmFilesPath = Configuration.GUM_TREE_INPUT + "prevFiles/";
String positionsFilePath = Configuration.GUM_TREE_INPUT + "positions/";
parser.dataPreparation(fixedAlarmFilesPath, positionsFilePath, subIndex, outputPath, outputPath2);
outputPath = Configuration.ROOT_PATH + "TuneParameters/unfixedAlarmTokens.list";
outputPath2 = Configuration.ROOT_PATH + "TuneParameters/EmptyStatement/unfixedAlarmTokens.list";
FileHelper.deleteFile(outputPath);
FileHelper.deleteFile(outputPath2);
subIndex = 8;
String unfixedAlarmFilesPath = Configuration.GUM_TREE_INPUT + "unfixAlarms/";
String unfixedPositionsFilePath = Configuration.GUM_TREE_INPUT + "un_positions/";
parser.dataPreparation(unfixedAlarmFilesPath, unfixedPositionsFilePath, subIndex, outputPath, outputPath2);
}
public void dataPreparation(String sourceCodeFilePath, String positionFilePath, int subIndex, String outputPath, String outputPath2) {
StringBuilder tokensBuilder = new StringBuilder();
List<File> javaFiles = FileHelper.getAllFilesInCurrentDiectory(sourceCodeFilePath, ".java");
int counter = 0;
int a = 0;
StringBuilder emptyStatements = new StringBuilder();
StringBuilder sizes = new StringBuilder();
for (File javaFile : javaFiles) {
String fileName = javaFile.getName().replace(".java", ".txt");
fileName = fileName.substring(subIndex);
// if (fileName.endsWith("apache-commons-configuration_8c42aa_8b26e6src#java#org#apache#commons#configuration#plist#XMLPropertyListConfiguration.txt")) {
// System.out.println();
// }
List<Violation> violations = readViolations(positionFilePath + fileName);
for (Violation violation : violations) {
int startLine = violation.getStartLineNum();
int endLine = violation.getEndLineNum();
String alarmType = violation.getViolationType();
if (endLine > startLine + 5) continue;
ViolationSourceCodeTree alarmTree = new ViolationSourceCodeTree(javaFile, startLine, endLine);
alarmTree.extract(alarmType);
List<ITree> matchedTrees = alarmTree.getViolationSourceCodeTrees();
if (matchedTrees.size() == 0) {
emptyStatements.append(alarmType + "," + fileName + "," + startLine + "," + endLine + "\n");
a ++;
continue;
}
SimpleTree simpleTree = new SimpleTree();
simpleTree.setLabel("Block");
simpleTree.setNodeType("Block");
List<SimpleTree> children = new ArrayList<>();
for (ITree matchedTree : matchedTrees) {
SimpleTree simpleT = new SimplifyTree().canonicalizeSourceCodeTree(matchedTree, null);
children.add(simpleT);
}
simpleTree.setChildren(children);
String tokens = Tokenizer.getTokensDeepFirst(simpleTree);
String[] tokensArray = tokens.split(" ");
int length = tokensArray.length;
sizes.append(length + "\n");
tokensBuilder.append(alarmType + ":" + fileName + ":" + alarmTree.getViolationFinalStartLine() + ":" + alarmTree.getViolationFinalEndLine() + ":" + tokens + "\n");
counter ++;
if (counter % 10000 == 0) {
FileHelper.outputToFile(outputPath, tokensBuilder, true);
tokensBuilder.setLength(0);
}
}
}
System.out.println("Volidated Instances: " + counter);
System.out.println("Empty Instances: " + a);
FileHelper.outputToFile(outputPath2, emptyStatements, false);
FileHelper.outputToFile(outputPath.replace(".list", "Sizes.csv"), sizes, false);
FileHelper.outputToFile(outputPath, tokensBuilder, true);
}
private List<Violation> readViolations(String file) {
List<Violation> violations = new ArrayList<>();
String fileContent = FileHelper.readFile(file);
BufferedReader reader = null;
reader = new BufferedReader(new StringReader(fileContent));
String line = null;
try {
while ((line = reader.readLine()) != null) {
String[] positionStr = line.split(":");
int startLine = Integer.parseInt(positionStr[1]);
int endLine = Integer.parseInt(positionStr[2]);
if (startLine == -1 || endLine == -1) {
continue;
}
String alarmType = positionStr[0];
Violation violation = new Violation(startLine, endLine, alarmType);
violations.add(violation);
}
} catch (IOException e) {
e.printStackTrace();
} finally {
try {
reader.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return violations;
}
}
@@ -48,8 +48,8 @@ public class Statistic {
/**
* Do statistics from two files:
*/
statistics("../FPM_Violations/RQ1/all-leafnodes-per-project-vtype.csv", "");
statistics("../FPM_Violations/RQ1/distinct-fixed-summary-per-project-vtype.csv", "Fixed");
// statistics("../FPM_Violations/RQ1/all-leafnodes-per-project-vtype.csv", "");
// statistics("../FPM_Violations/RQ1/distinct-fixed-summary-per-project-vtype.csv", "Fixed");
// fixedVSunfixed();
String statistic = "../FPM_Violations/OUTPUT";
@@ -64,34 +64,39 @@ public class Statistic {
int largeHunk = 0;
int nullSourceCode = 0;
int noStatementChanges = 0;
int IllegalV = 0;
int nullDiffentry = 0;
int TestingInfo = 0;
int i = 0;
for (File file : files) {
if (file.getName().startsWith("test")) continue;
String content = FileHelper.readFile(file);
BufferedReader reader = new BufferedReader(new StringReader(content));
String line = null;
i ++;
try {
while ((line = reader.readLine()) != null) {
if (line.startsWith("test")) {
if (line.startsWith("TestViolations")) {
testAlarms += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("nullGum")) {
} else if (line.startsWith("NullGumTreeResults")) {
nullGumTreeResults += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("nullMap")) {
nullMappingGumTreeResults += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("pure")) {
pureDeletion += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("Time")) {
timeout += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("noSourceCodeChanges")) {
} else if (line.startsWith("NoSourceCodeChanges")) {
noSourceCodeChagnes += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("largeHunk")) {
largeHunk += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("nullSourceCode")) {
nullSourceCode += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("noStatementChanges")) {
} else if (line.startsWith("NoStatementChanges")) {
noStatementChanges += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("IllegalV")) {
IllegalV +=Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("NullDiffEntry")) {
nullDiffentry += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("NullMatchedGumTreeResults")) {
nullMappingGumTreeResults += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("PureDeletion")) {
pureDeletion += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("LargeHunk")) {
largeHunk += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("NullSourceCode")) {
nullSourceCode += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("Timeout")) {
timeout += Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
} else if (line.startsWith("TestingInfo")) {
TestingInfo +=Integer.parseInt(line.substring(line.lastIndexOf(":") + 1).trim());
}
}
} catch (IOException e) {
@@ -104,34 +109,70 @@ public class Statistic {
}
}
}
// 22280, 23275
// Statistics:
// TestViolation: 4682
// NullGumTreeResults: 0
// NoSourceCodeChange: 5995
// NoStatementChange: 0
// NullDiffEntry: 6450
// NullMatchedGumTreeResult: 15675
// PureDeletion: 15740
// LargeHunk: 13521
// NullSourceCode: 0
// Timeout: 7205
// TestingInfo: 8703
// 62231 22634
// #PureDeletion1: 16864
// #NullMatchedGumTreeResult: 17511
// #NullDiffEntry: 6986
// #LargeHunk: 14625
// #NoSourceCodeChange: 7010
// #TestingInfo: 9071
// #TestViolation: 4682
// #Timeout: 7205
// 67090 22634
// TestAlarms: 5175
// nullGumTreeResults: 13449
// nullMappingGumTreeResults: 33010
// pureDeletion: 7598
// Timeout: 263
// Statistics:
// TestAlarms: 5696
// nullGumTreeResults: 0
// nullMappingGumTreeResults: 29056 29078
// pureDeletion: 40728
// Timeout: 135
// noSourceCodeChange: 7496
// largeHunk: 2584
// nullSourceCode: 0
// noStatementChanges: 7567
// IllegalV: 1194
System.out.println("\n\nStatistics:\nTestAlarms: " + testAlarms);
System.out.println("nullGumTreeResults: " + nullGumTreeResults);
System.out.println("nullMappingGumTreeResults: " + nullMappingGumTreeResults);
System.out.println("pureDeletion: " + pureDeletion);
System.out.println(i);
System.out.println("\n\nStatistics:\nTestViolation: " + testAlarms);
System.out.println("NullGumTreeResults: " + nullGumTreeResults);
System.out.println("NoSourceCodeChange: " + noSourceCodeChagnes);
System.out.println("NoStatementChange: " + noStatementChanges);
System.out.println("NullDiffEntry: " + nullDiffentry);
System.out.println("NullMatchedGumTreeResult: " + nullMappingGumTreeResults);
System.out.println("PureDeletion: " + pureDeletion);
System.out.println("LargeHunk: " + largeHunk);
System.out.println("NullSourceCode: " + nullSourceCode);
System.out.println("Timeout: " + timeout);
System.out.println("noSourceCodeChange: " + noSourceCodeChagnes);
System.out.println("largeHunk: " + largeHunk);
System.out.println("nullSourceCode: " + nullSourceCode);
System.out.println("noStatementChanges: " + noStatementChanges);
System.out.println("IllegalV: " + IllegalV);
System.out.println("TestingInfo: " + TestingInfo);
System.out.println(testAlarms + nullGumTreeResults + noSourceCodeChagnes + noStatementChanges +
nullDiffentry + nullMappingGumTreeResults + largeHunk + nullSourceCode + timeout + TestingInfo);
Map<String, Integer> types = new HashMap<>();
FileInputStream fis = new FileInputStream("../FPM_Violations/OAR.FPM.4222170.stderr");
Scanner scanner = new Scanner(fis);
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.startsWith("## OAR [")) break;
String type = line.substring(0, line.indexOf(":"));
if (types.containsKey(type)) {
types.put(type, types.get(type) + 1);
} else {
types.put(type, 1);
}
}
scanner.close();
fis.close();
int sum = 0;
for (Map.Entry<String, Integer> entry : types.entrySet()) {
System.out.println(entry.getKey() + ": " + entry.getValue());
if (!entry.getKey().startsWith("#PureDeletion")) {
sum += entry.getValue();
}
}
System.out.println(sum);
}
public static void statistics(String fileName, String type) throws IOException {
@@ -0,0 +1,55 @@
package edu.lu.uni.serval.statistics;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;
import edu.lu.uni.serval.FixPatternParser.violations.Violation;
import edu.lu.uni.serval.utils.FileHelper;
public class UnparsedFiles {
public static void main(String[] args) throws IOException {
FileInputStream fis = new FileInputStream("../FPM_Violations/OAR.FPM.4221129.stderr");
Scanner scanner = new Scanner(fis);
List<Violation> vList = new ArrayList<>();
String test1 = "";
String test2 = "";
String test3 = "";
int i = 0;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
String[] elements = line.split(":");
Violation v = new Violation(Integer.parseInt(elements[2]), Integer.parseInt(elements[3]), elements[4]);
v.setFileName(elements[1]);
if (vList.contains(v)) {
i ++;
// System.out.println(elements[0]);
} else {
vList.add(v);
}
if (line.startsWith("#TestViolation:")) {
// System.out.println(line);
if (elements[1].toLowerCase().contains("/test/")) {
test1 += elements[1] + "\n";
} else if (elements[1].toLowerCase().contains("tests/")) {
test2 += elements[1] + "\n";
} else {
test3 += elements[1] + "\n";
}
}
}
scanner.close();
fis.close();
System.out.println(vList.size());
System.out.println(i);
FileHelper.outputToFile("logs/test1.txt", test1, false);
FileHelper.outputToFile("logs/test2.txt", test2, false);
FileHelper.outputToFile("logs/test3.txt", test3, false);
}
}
@@ -1,264 +0,0 @@
package edu.lu.uni.serval.violation.code.parser;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.core.dom.CompilationUnit;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPatternParser.CUCreator;
import edu.lu.uni.serval.gumtree.GumTreeGenerator;
import edu.lu.uni.serval.gumtree.GumTreeGenerator.GumTreeType;
public class AlarmTree {
private File file;
private int alarmStartLine;
private int alarmEndLine;
private CompilationUnit cUnit;
private int alarmFinalStartLine;
private int alarmFinalEndLine;
private List<ITree> matchedTrees = new ArrayList<>();
public AlarmTree(File file, int startLine, int endLine) {
super();
this.file = file;
this.alarmStartLine = startLine;
this.alarmEndLine = endLine;
CUCreator cuCreator = new CUCreator();
this.cUnit = cuCreator.createCompilationUnit(this.file);
}
public AlarmTree(String fileName, int startLine, int endLine) {
this(new File(fileName), startLine, endLine);
}
public List<ITree> getAlarmTrees() {
return this.matchedTrees;
}
public int getAlarmFinalStartLine() {
return alarmFinalStartLine;
}
public int getAlarmFinalEndLine() {
return alarmFinalEndLine;
}
public void extract() {
ITree rootTree = new GumTreeGenerator().generateITreeForJavaFile(file, GumTreeType.EXP_JDT);
List<ITree> trees = rootTree.getChildren();
for (ITree tree : trees) {
int startPosition = tree.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > alarmEndLine) {
break;
}
int endPosition = startPosition + tree.getLength();
int endLine = cUnit.getLineNumber(endPosition - 1);
if (endLine < alarmStartLine) continue;
matchTrees(tree.getChildren());
}
int size = matchedTrees.size();
if (size > 0) {
this.alarmFinalStartLine = cUnit.getLineNumber(this.matchedTrees.get(0).getPos());
ITree lastTree = matchedTrees.get(size - 1);
this.alarmFinalEndLine = cUnit.getLineNumber(lastTree.getPos() + lastTree.getLength());
} else {
System.err.println(this.file.getName() + "===" + this.alarmStartLine + ":" + this.alarmEndLine);
}
}
public void extract(String type) {
ITree rootTree = new GumTreeGenerator().generateITreeForJavaFile(file, GumTreeType.EXP_JDT);
List<ITree> trees = rootTree.getChildren();
for (ITree tree : trees) {
int startPosition = tree.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > alarmEndLine) {
break;
}
int endPosition = startPosition + tree.getLength();
int endLine = cUnit.getLineNumber(endPosition - 1);
if (endLine < alarmStartLine) continue;
matchTrees(tree.getChildren());
}
int size = matchedTrees.size();
if (size > 0) {
this.alarmFinalStartLine = cUnit.getLineNumber(this.matchedTrees.get(0).getPos());
ITree lastTree = matchedTrees.get(size - 1);
this.alarmFinalEndLine = cUnit.getLineNumber(lastTree.getPos() + lastTree.getLength());
} else {
System.err.println(type);
System.err.println(this.file.getName() + "===" + this.alarmStartLine + ":" + this.alarmEndLine);
}
}
private void matchTrees(List<ITree> trees) {
for (ITree tree : trees) {
int startPosition = tree.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > alarmEndLine) {
break;
}
int endPosition = startPosition + tree.getLength();
int endLine = cUnit.getLineNumber(endPosition);
if (endLine < alarmStartLine) continue;
if (endLine == alarmEndLine) {
if (tree.getType() == 31) { // MethodDeclaration
matchTrees(tree.getChildren());
} else if (isStatement(tree)) {
addToMatchedTrees(tree);
} else {
ITree parent = getParentStatement(tree);
if (parent == null) {
if (tree.getType() == 8) { // 8: Block
matchTrees(tree.getChildren());
}
continue;
}
addToMatchedTrees(parent);
}
continue;
}
if (startLine >= alarmStartLine) {
if (isStatement(tree)) {
addToMatchedTrees(tree);
} else {
ITree parent = getParentStatement(tree);
if (parent == null) {
if (tree.getType() == 8) {
matchTrees(tree.getChildren());
}
continue;
}
addToMatchedTrees(parent);
}
} else {
// if (tree.getType() == 14) {
// ITree parent = getParentStatement(tree);
// if (parent == null) {
// matchTrees(tree.getChildren());
// } else {
// addToMatchedTrees(parent);
// }
// } else {
// matchTrees(tree.getChildren());
// }
matchTrees(tree.getChildren());
}
}
}
private void addToMatchedTrees(ITree tree) {
if (!matchedTrees.contains(tree)) {
/*
* TODO with the same parent, or the sub trees.
* In the same method body.
*/
matchedTrees.add(tree);
}
if (containsBlockStatement(tree)) {
int endLine = cUnit.getLineNumber(tree.getPos() + tree.getLength());
if (endLine > alarmEndLine) {
tree = removeBlock(tree);
}
}
}
private ITree removeBlock(ITree tree) {
List<ITree> oldChildren = tree.getChildren();
List<ITree> newChildren = new ArrayList<>();
for (ITree child : oldChildren) {
int startPosition = child.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > alarmEndLine) {
break;
}
int endPosition = startPosition + child.getLength();
int endLine = cUnit.getLineNumber(endPosition);
if (endLine > this.alarmEndLine) {
if (child.getType() == 8 || containsBlockStatement(child)) { // 8: Block
child = removeBlock(child);
if (child.getChildren().size() == 0) {
continue;
}
}
}
newChildren.add(child);
}
tree.setChildren(newChildren);
return tree;
}
private ITree getParentStatement(ITree tree) {
ITree parent = tree;
do {
parent = parent.getParent();
if (parent == null) {
return null;
}
int type = parent.getType();
if (type == 1 || type == 31 || type == 55 || type == 71) {
// AnonymousClassDeclaration
// MethodDeclaration Initializer (type == 28)
// TypeDeclaration
return null;
}
} while (!isStatement(parent));
return parent;
}
private boolean isStatement(ITree tree) {
int type = tree.getType(); // 8 Block
if (type == 6) return true; // AssertStatement
if (type == 10) return true; // BreakStatement
if (type == 17) return true; // ConstructorInvocation
if (type == 18) return true; // ContinueStatement
if (type == 21) return true; // ExpressionStatement
if (type == 23) return true; // FieldDeclaration
if (type == 41) return true; // ReturnStatement
if (type == 46) return true; // SuperConstructorInvocation
if (type == 49) return true; // SwitchCase
if (type == 53) return true; // ThrowStatement
if (type == 56) return true; // TypeDeclarationStatement
if (type == 60) return true; // VariableDeclarationStatement
if (containsBlockStatement(tree)) return true;
return false;
}
private boolean containsBlockStatement(ITree tree) {
int type = tree.getType();
if (type == 12) return true; // catchClause
if (type == 19) return true; // DoStatement
if (type == 24) return true; // ForStatement
if (type == 25) return true; // IfStatement
if (type == 30) return true; // LabeledStatement
if (type == 50) return true; // SwitchStatement
if (type == 51) return true; // SynchronizedStatement
if (type == 54) return true; // TryStatement
if (type == 61) return true; // WhileStatement
if (type == 70) return true; // EnhancedForStatement
return false;
}
}
@@ -0,0 +1,211 @@
package edu.lu.uni.serval.violation.code.parser;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Scanner;
import edu.lu.uni.serval.diffentry.DiffEntryHunk;
import edu.lu.uni.serval.diffentry.DiffEntryReader;
import edu.lu.uni.serval.utils.FileHelper;
import edu.lu.uni.serval.utils.ListSorter;
public class Test {
public static void main(String[] args) throws IOException {
// testV1();
// testV2();
// testV3("../FPM_Violations/OAR.FPM.4222152.stderr", "OUTPUT/unparsedviolations.txt");
testV4("../FPM_Violations/OAR.FPM.4222152.stderr");
}
private static void testV4(String inputFile) throws IOException {
FileInputStream fis = new FileInputStream(inputFile);
Scanner scanner = new Scanner(fis);
StringBuilder builder = new StringBuilder();
// boolean isDiff = false;
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.startsWith("## OAR")) break;
// if (line.startsWith("#NullDiffEntry")) {
// isDiff = true;
// continue;
// } else if (line.startsWith("#")) {
// isDiff = false;
// continue;
// }
// if (!isDiff) continue;
String[] elements = line.trim().split(":");
String type = elements[0];
if (type.equals("#NullDiffEntry")) {
List<DiffEntryHunk> diffentryHunks = new DiffEntryReader().readHunks2(new File("/Users/kui.liu/Public/git/FPM_Violations/GumTreeInput/diffentries/" + elements[1].replace(".java", ".txt").trim()));
int startLine = Integer.parseInt(elements[2].trim());
int endLine = Integer.parseInt(elements[3].trim());
for (DiffEntryHunk hunk : diffentryHunks) {
int hunkStart = hunk.getBugLineStartNum();
int hunkEnd = hunk.getBugRange() + hunkStart - 1;
if (startLine <= hunkEnd && hunkStart <= endLine) {
builder.append("vi " + elements[1].replace(".java", ".txt") + "\n : " + elements[2] + " : " + elements[3] + " : " + elements[4] + "\n");
}
}
}
// List<DiffEntryHunk> diffentryHunks = new DiffEntryReader().readHunks2(new File("/Users/kui.liu/Public/git/FPM_Violations/GumTreeInput/diffentries/" + elements[0].replace(".java", ".txt").trim()));
// int startLine = Integer.parseInt(elements[1].trim());
// int endLine = Integer.parseInt(elements[2].trim());
// for (DiffEntryHunk hunk : diffentryHunks) {
// int hunkStart = hunk.getBugLineStartNum();
// int hunkEnd = hunk.getBugRange() + hunkStart - 1;
//
// if (startLine <= hunkEnd && hunkStart <= endLine) {
// builder.append("vi " + elements[0].replace(".java", ".txt") + "\n : " + elements[1] + " : " + elements[2] + "\n"); //+ " : " + elements[4]
// }
// }
}
scanner.close();
fis.close();
FileHelper.outputToFile("Dataset/a.txt", builder, false);
}
private static void testV3(String inputFile, String outputFile) throws IOException {
FileInputStream fis = new FileInputStream(inputFile);
Scanner scanner = new Scanner(fis);
Map<String, List<String>> types = new HashMap<>();
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
if (line.startsWith("## OAR")) break;
String[] elements = line.split(":");
String type = elements[0];
if (types.containsKey(type)) {
types.get(type).add(elements[1] + " : " + elements[2] + " : " + elements[3] + " : " + elements[4]);
} else {
List<String> files = new ArrayList<>();
files.add(elements[1] + " : " + elements[2] + " : " + elements[3] + " : " + elements[4]);
types.put(type, files);
}
}
scanner.close();
fis.close();
StringBuilder builder = new StringBuilder();
for (Map.Entry<String, List<String>> entry : types.entrySet()) {
System.out.println(entry.getKey());
builder.append(entry.getKey() + "\n");
List<String> files = entry.getValue();
for (String file : files) {
builder.append(" " + file + "\n");
}
}
FileHelper.outputToFile(outputFile, builder, false);
}
public static void testV2() throws IOException {
String content = FileHelper.readFile("logs/testV2.txt");
BufferedReader reader = new BufferedReader(new StringReader(content));
String line = null;
Map<String, List<String>> types = new HashMap<>();
while ((line = reader.readLine()) != null) {
String[] elements = line.split(" : ");
String type = elements[0];
if (types.containsKey(type)) {
types.get(type).add(elements[1] + " : " + elements[2] + " : " + elements[3]);
} else {
List<String> files = new ArrayList<>();
files.add(elements[1] + " : " + elements[2] + " : " + elements[3]);
types.put(type, files);
}
}
reader.close();
StringBuilder builder = new StringBuilder();
for (Map.Entry<String, List<String>> entry : types.entrySet()) {
System.out.println(entry.getKey());
builder.append(entry.getKey() + "\n");
List<String> files = entry.getValue();
for (String file : files) {
builder.append(file + "\n");
}
}
FileHelper.outputToFile("logs/MultiV.txt", builder, false);
}
public static void testV1() throws IOException {
Map<String, Map<String, List<String>>> map = new HashMap<>();
String content = FileHelper.readFile("logs/testV1.txt");
BufferedReader reader = new BufferedReader(new StringReader(content));
String line = null;
List<String> types1 = new ArrayList<>();
List<String> types2 = new ArrayList<>();
while ((line = reader.readLine()) != null) {
String[] elements = line.split(" : ");
String type = elements[0];
String startLine = elements[2];
if (!"-1".equals(startLine)) {
startLine = "1";
if (!types1.contains(type)) {
types1.add(type);
}
} else {
if (!types2.contains(type)) {
types2.add(type);
}
}
if (map.containsKey(startLine)) {
Map<String, List<String>> types = map.get(startLine);
if (types.containsKey(type)) {
List<String> files = types.get(type);
files.add(elements[1] + "\n" + elements[2] + " : " + elements[3]);
} else {
List<String> files = new ArrayList<>();
files.add(elements[1] + "\n" + elements[2] + " : " + elements[3]);
types.put(type, files);
}
} else {
Map<String, List<String>> types = new HashMap<>();
List<String> files = new ArrayList<>();
files.add(elements[1] + "\n" + elements[2] + " : " + elements[3]);
types.put(type, files);
map.put(startLine, types);
}
}
reader.close();
StringBuilder builder = new StringBuilder();
for (Map.Entry<String, Map<String, List<String>>> entry : map.entrySet()) {
builder.append(entry.getKey() + "\n");
List<String> tList = null;
if (entry.getKey().equals("1")) {
tList = types1;
} else {
tList = types2;
}
ListSorter<String> sorter = new ListSorter<String>(tList);
tList = sorter.sortAscending();
Map<String, List<String>> types = entry.getValue();
for (String type : tList) {
builder.append(" " + type + "\n");
List<String> files = types.get(type);
for (String file : files) {
builder.append(file + "\n");
}
}
}
FileHelper.outputToFile("logs/NullV.txt", builder, false);
}
}
@@ -29,12 +29,12 @@ public class ViolationCodeParser {
* Violation code files.
* Position files.
*/
String fixedViolationFilesPath = Configuration.GUM_TREE_INPUT + "prevFiles/";
String positionsFilePath = Configuration.GUM_TREE_INPUT + "positions/";
int subIndex = 5;
String outputPath = Configuration.ROOT_PATH + "Alarms_tokens/fixedAlarms.list";
FileHelper.deleteFile(outputPath);
new ViolationCodeParser().parse(fixedViolationFilesPath, positionsFilePath, subIndex, outputPath);
// String fixedViolationFilesPath = Configuration.GUM_TREE_INPUT + "prevFiles/";
// String positionsFilePath = Configuration.GUM_TREE_INPUT + "positions/";
// int subIndex = 5;
// String outputPath = Configuration.ROOT_PATH + "Alarms_tokens/fixedAlarms.list";
// FileHelper.deleteFile(outputPath);
// new ViolationCodeParser().parse(fixedViolationFilesPath, positionsFilePath, subIndex, outputPath);
/*
* UnFixed violations:
@@ -43,10 +43,10 @@ public class ViolationCodeParser {
*/
String unfixedViolationFilesPath = Configuration.GUM_TREE_INPUT + "unfixAlarms/";
String un_positionsFilePath = Configuration.GUM_TREE_INPUT + "un_positions/";
subIndex = 8;
outputPath = Configuration.ROOT_PATH + "Alarms_tokens/unfixedAlarms.list";
FileHelper.deleteFile(outputPath);
new ViolationCodeParser().parse(unfixedViolationFilesPath, un_positionsFilePath, subIndex, outputPath);
int subIndex2 = 8;
String outputPath2 = Configuration.ROOT_PATH + "Alarms_tokens/unfixedAlarms.list";
FileHelper.deleteFile(outputPath2);
new ViolationCodeParser().parse(unfixedViolationFilesPath, un_positionsFilePath, subIndex2, outputPath2);
}
public void parse(String alarmFilesPath, String positionFilesPath, int subIndex, String outputPath) {
@@ -64,16 +64,16 @@ public class ViolationCodeParser {
for (Violation violation : violations) {
int startLine = violation.getStartLineNum();
int endLine = violation.getEndLineNum();
String alarmType = violation.getAlarmType();
String alarmType = violation.getViolationType();
// if (endLine > startLine + 5) {
// log.warn("#Large_Violation_Hunk: " + fileName.replace("#", "/").replace(".txt", ".java") + ":" + startLine + ":" + endLine + ":" + alarmType);
// continue;
// }
AlarmTree alarmTree = new AlarmTree(javaFile, startLine, endLine);
ViolationSourceCodeTree alarmTree = new ViolationSourceCodeTree(javaFile, startLine, endLine);
alarmTree.extract();
List<ITree> matchedTrees = alarmTree.getAlarmTrees();
List<ITree> matchedTrees = alarmTree.getViolationSourceCodeTrees();
if (matchedTrees.size() == 0) {
System.out.println(fileName + " == " + startLine + " : " + endLine);
a ++;
@@ -95,7 +95,7 @@ public class ViolationCodeParser {
String[] tokensArray = tokens.split(" ");
int length = tokensArray.length;
if (length > maxLength) maxLength = length;
tokensBuilder.append(alarmType + ":" + fileName + ":" + alarmTree.getAlarmFinalStartLine() + ":" + alarmTree.getAlarmFinalEndLine() + ":" + tokens + "\n");
tokensBuilder.append(alarmType + ":" + fileName + ":" + alarmTree.getViolationFinalStartLine() + ":" + alarmTree.getViolationFinalEndLine() + ":" + tokens + "\n");
counter ++;
if (counter % 5000 == 0) {
FileHelper.outputToFile(outputPath, tokensBuilder, true);
@@ -0,0 +1,420 @@
package edu.lu.uni.serval.violation.code.parser;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import org.eclipse.jdt.core.dom.CompilationUnit;
import com.github.gumtreediff.tree.ITree;
import edu.lu.uni.serval.FixPatternParser.CUCreator;
import edu.lu.uni.serval.gumtree.GumTreeGenerator;
import edu.lu.uni.serval.gumtree.GumTreeGenerator.GumTreeType;
public class ViolationSourceCodeTree {
private File file;
private int violationStartLine;
private int violationEndLine;
private CompilationUnit cUnit;
private int violationFinalStartLine = 0;
private int violationFinalEndLine;
private List<ITree> matchedTrees = new ArrayList<>();
public ViolationSourceCodeTree(File file, int violationStartLine, int violationEndLine) {
super();
this.file = file;
this.violationStartLine = violationStartLine;
this.violationEndLine = violationEndLine;
CUCreator cuCreator = new CUCreator();
this.cUnit = cuCreator.createCompilationUnit(this.file);
}
public ViolationSourceCodeTree(String fileName, int violationStartLine, int violationEndLine) {
this(new File(fileName), violationStartLine, violationEndLine);
}
public List<ITree> getViolationSourceCodeTrees() {
return this.matchedTrees;
}
public int getViolationFinalStartLine() {
return violationFinalStartLine;
}
public int getViolationFinalEndLine() {
return violationFinalEndLine;
}
public void extract() {
ITree rootTree = new GumTreeGenerator().generateITreeForJavaFile(file, GumTreeType.EXP_JDT);
List<ITree> trees = rootTree.getChildren();
for (ITree tree : trees) {
int startPosition = tree.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > violationEndLine) {
break;
}
int endPosition = startPosition + tree.getLength();
int endLine = cUnit.getLineNumber(endPosition - 1);
if (endLine < violationStartLine) continue;
matchTrees(tree.getChildren());
}
int size = matchedTrees.size();
if (size > 0) {
this.violationFinalStartLine = cUnit.getLineNumber(this.matchedTrees.get(0).getPos());
ITree lastTree = matchedTrees.get(size - 1);
this.violationFinalEndLine = cUnit.getLineNumber(lastTree.getPos() + lastTree.getLength());
} else {
System.err.println(this.file.getName() + "===" + this.violationStartLine + ":" + this.violationEndLine);
}
}
public void extract(String type) {
ITree rootTree = new GumTreeGenerator().generateITreeForJavaFile(file, GumTreeType.EXP_JDT);
List<ITree> trees = rootTree.getChildren();
for (ITree tree : trees) {
int startPosition = tree.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > violationEndLine) {
break;
}
int endPosition = startPosition + tree.getLength();
int endLine = cUnit.getLineNumber(endPosition - 1);
if (endLine < violationStartLine) continue;
matchTrees(tree.getChildren());
}
int size = matchedTrees.size();
if (size > 0) {
this.violationFinalStartLine = cUnit.getLineNumber(this.matchedTrees.get(0).getPos());
ITree lastTree = matchedTrees.get(size - 1);
this.violationFinalEndLine = cUnit.getLineNumber(lastTree.getPos() + lastTree.getLength());
} else {
System.err.println(type);
System.err.println(this.file.getName() + "===" + this.violationStartLine + ":" + this.violationEndLine);
}
}
private void matchTrees(List<ITree> trees) {
for (ITree tree : trees) {
int startPosition = tree.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > violationEndLine) {
break;
}
int endPosition = startPosition + tree.getLength();
int endLine = cUnit.getLineNumber(endPosition);
if (endLine < violationStartLine) continue;
if (endLine == violationEndLine) {
if (tree.getType() == 31) { // MethodDeclaration
matchTrees(tree.getChildren());
} else if (isStatement(tree)) {
addToMatchedTrees(tree);
} else {
ITree parent = getParentStatement(tree);
if (parent == null) {
if (tree.getType() == 8) { // 8: Block
matchTrees(tree.getChildren());
}
continue;
}
addToMatchedTrees(parent);
}
continue;
}
if (startLine >= violationStartLine) {
if (isStatement(tree)) {
addToMatchedTrees(tree);
} else {
ITree parent = getParentStatement(tree);
if (parent == null) {
if (tree.getType() == 8) {
matchTrees(tree.getChildren());
}
continue;
}
addToMatchedTrees(parent);
}
} else {
// if (tree.getType() == 14) {
// ITree parent = getParentStatement(tree);
// if (parent == null) {
// matchTrees(tree.getChildren());
// } else {
// addToMatchedTrees(parent);
// }
// } else {
// matchTrees(tree.getChildren());
// }
matchTrees(tree.getChildren());
}
}
}
private void addToMatchedTrees(ITree tree) {
if (!matchedTrees.contains(tree)) {
/*
* TODO with the same parent, or the sub trees.
* In the same method body.
*/
matchedTrees.add(tree);
}
if (containsBlockStatement(tree)) {
int endLine = cUnit.getLineNumber(tree.getPos() + tree.getLength());
if (endLine > violationEndLine) {
tree = removeBlock(tree);
}
}
}
private ITree removeBlock(ITree tree) {
List<ITree> oldChildren = tree.getChildren();
List<ITree> newChildren = new ArrayList<>();
for (ITree child : oldChildren) {
int startPosition = child.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > violationEndLine) {
break;
}
int endPosition = startPosition + child.getLength();
int endLine = cUnit.getLineNumber(endPosition);
if (endLine > this.violationEndLine) {
if (child.getType() == 8 || containsBlockStatement(child)) { // 8: Block
child = removeBlock(child);
if (child.getChildren().size() == 0) {
continue;
}
}
}
newChildren.add(child);
}
tree.setChildren(newChildren);
return tree;
}
private ITree getParentStatement(ITree tree) {
ITree parent = tree;
do {
parent = parent.getParent();
if (parent == null) {
return null;
}
int type = parent.getType();
if (type == 1 || type == 31 || type == 55 || type == 71) {
// AnonymousClassDeclaration
// MethodDeclaration Initializer (type == 28)
// TypeDeclaration
// EnumDeclaration
return null;
}
} while (!isStatement(parent));
return parent;
}
private boolean isStatement(ITree tree) {
int type = tree.getType(); // 8 Block
if (type == 6) return true; // AssertStatement
if (type == 10) return true; // BreakStatement
if (type == 17) return true; // ConstructorInvocation
if (type == 18) return true; // ContinueStatement
if (type == 21) return true; // ExpressionStatement
if (type == 23) return true; // FieldDeclaration
if (type == 41) return true; // ReturnStatement
if (type == 46) return true; // SuperConstructorInvocation
if (type == 49) return true; // SwitchCase
if (type == 53) return true; // ThrowStatement
if (type == 56) return true; // TypeDeclarationStatement
if (type == 60) return true; // VariableDeclarationStatement
if (containsBlockStatement(tree)) return true;
return false;
}
private boolean containsBlockStatement(ITree tree) {
int type = tree.getType();
if (type == 12) return true; // catchClause
if (type == 19) return true; // DoStatement
if (type == 24) return true; // ForStatement
if (type == 25) return true; // IfStatement
if (type == 30) return true; // LabeledStatement
if (type == 50) return true; // SwitchStatement
if (type == 51) return true; // SynchronizedStatement
if (type == 54) return true; // TryStatement
if (type == 61) return true; // WhileStatement
if (type == 70) return true; // EnhancedForStatement
return false;
}
public void locateParentNode(String type) {
ITree rootTree = new GumTreeGenerator().generateITreeForJavaFile(file, GumTreeType.EXP_JDT);
List<ITree> trees = rootTree.getChildren();
for (ITree tree : trees) {
int startPosition = tree.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > violationEndLine) {
break;
}
int endPosition = startPosition + tree.getLength();
int endLine = cUnit.getLineNumber(endPosition - 1);
if (endLine < violationStartLine) continue;
locateParentNode(tree.getChildren(), type);
}
// if (this.violationFinalStartLine == 0) {
// FileHelper.outputToFile("logs/testV1.txt", type + " : " + this.file.getName() + " : " + this.violationStartLine + " : " + this.violationEndLine + "\n", true);
// }
}
private void locateParentNode(List<ITree> trees, String type) {
for (ITree tree : trees) {
int startPosition = tree.getPos();
int startLine = cUnit.getLineNumber(startPosition);
if (startLine > violationEndLine) {
break;
}
int endPosition = startPosition + tree.getLength();
int endLine = cUnit.getLineNumber(endPosition);
if (endLine < violationStartLine) continue;
if (endLine < violationEndLine) {
if ("NM_SAME_SIMPLE_NAME_AS_INTERFACE".equals(type) || "NM_SAME_SIMPLE_NAME_AS_SUPERCLASS".equals(type) || "NM_CLASS_NAMING_CONVENTION".equals(type)
|| "NM_CLASS_NOT_EXCEPTION".equals(type) || "RI_REDUNDANT_INTERFACES".equals(type)
// inner class
|| "SE_INNER_CLASS".equals(type) || "SE_BAD_FIELD_INNER_CLASS".equals(type) || "SIC_INNER_SHOULD_BE_STATIC_ANON".equals(type)
|| "SIC_INNER_SHOULD_BE_STATIC".equals(type) || "SIC_INNER_SHOULD_BE_STATIC_NEEDS_THIS".equals(type)) {
if (tree.getType() != 55) {
ITree parent = getParentTypeDeclaration(tree);
if (parent == null) {
this.violationFinalStartLine = -1;
break;
}
tree = parent;
}
startPosition = tree.getPos();
this.violationFinalStartLine = cUnit.getLineNumber(startPosition);
endPosition = getClassBodyStartPosition(tree);
if (endPosition == 0) {
endPosition = startPosition + tree.getLength();
}
this.violationFinalEndLine = cUnit.getLineNumber(endPosition);
} else if ("NM_METHOD_NAMING_CONVENTION".equals(type)){
// method name level
if (tree.getType() != 31) {
ITree parent = getParentMethodDeclaration(tree);
if (parent == null) {
this.violationFinalStartLine = -1;
break;
}
tree = parent;
}
startPosition = tree.getPos();
this.violationFinalStartLine = cUnit.getLineNumber(startPosition);
endPosition = getMethodBodyStartPosition(tree);
if (endPosition == 0) {
endPosition = startPosition + tree.getLength();
}
this.violationFinalEndLine = cUnit.getLineNumber(endPosition);
// } else if ("SE_NO_SUITABLE_CONSTRUCTOR".equals(type) || "CN_IDIOM".equals(type)
// || "SE_NO_SERIALVERSIONID".equals(type) || "SE_NO_SUITABLE_CONSTRUCTOR_FOR_EXTERNALIZATION".equals(type)
// || "SE_COMPARATOR_SHOULD_BE_SERIALIZABLE".equals(type)) {
// this.violationFinalStartLine = -1;
} else {
this.violationFinalStartLine = -1;
}
// FileHelper.outputToFile("logs/testV2.txt", type + " : " + this.file.getName() + " : " + this.violationStartLine + " : " + this.violationEndLine + "\n", true);
break;
}
if (tree.getType() == 31 || tree.getType() == 23) { // MethodDeclaration, FieldDeclaration
this.violationFinalStartLine = startLine;
this.violationFinalEndLine = endLine;
break;
} else {
locateParentNode(tree.getChildren(), type);
}
}
}
private int getMethodBodyStartPosition(ITree tree) {
List<ITree> children = tree.getChildren();
for (int i = 0, size = children.size(); i < size; i ++) {
ITree child = children.get(i);
int type = child.getType();
if (type == 8) {
return child.getPos() - 1;
}
}
return 0;
}
private ITree getParentMethodDeclaration(ITree tree) {
ITree parent = tree;
int type = 0;
do {
parent = parent.getParent();
if (parent == null) {
return null;
}
type = parent.getType();
} while (type != 31);
return parent;
}
private int getClassBodyStartPosition(ITree tree) {
List<ITree> children = tree.getChildren();
for (int i = 0, size = children.size(); i < size; i ++) {
ITree child = children.get(i);
int type = child.getType();
// Modifier, NormalAnnotation, MarkerAnnotation, SingleMemberAnnotation
if (type != 83 && type != 77 && type != 78 && type != 79
&& type != 5 && type != 39 && type != 43 && type != 74 && type != 75
&& type != 76 && type != 84 && type != 87 && type != 88) {
// ArrayType, PrimitiveType, SimpleType, ParameterizedType,
// QualifiedType, WildcardType, UnionType, IntersectionType, NameQualifiedType
if (i > 0) {
child = children.get(i - 1);
return child.getPos() + child.getLength() + 1;
} else {
return child.getPos() - 1;
}
}
}
return 0;
}
private ITree getParentTypeDeclaration(ITree tree) {
ITree parent = tree;
int type = 0;
do {
parent = parent.getParent();
if (parent == null) {
return null;
}
type = parent.getType();
} while (type != 55);
return parent;
}
}
@@ -0,0 +1,81 @@
package edu.lu.uni.serval.violation.hunksize;
import java.io.BufferedReader;
import java.io.File;
import java.io.IOException;
import java.io.StringReader;
import java.util.ArrayList;
import java.util.List;
import edu.lu.uni.serval.utils.FileHelper;
import edu.lu.uni.serval.utils.ListSorter;
public class HunkSizeComputer {
public static void main(String[] args) throws IOException {
String unfixedAlarmFile = "Dataset/Unfixed-Alarms/";
List<File> unfixedAlarmFiles = FileHelper.getAllFilesInCurrentDiectory(unfixedAlarmFile, ".csv");
StringBuilder builder = new StringBuilder();
int counter = 0;
int size = 0;
List<Integer> sizes = new ArrayList<>();
for (File file : unfixedAlarmFiles) {
String content = FileHelper.readFile(file);
BufferedReader reader = new BufferedReader(new StringReader(content));
String line = null;
while ((line = reader.readLine()) != null) {
String[] elements = line.split(",");
int startLine = Integer.parseInt(elements[4]);
int endLine = Integer.parseInt(elements[5]);
if (startLine == -1 || endLine == -1) continue;
int range = endLine - startLine + 1;
builder.append(range + "\n");
if (range != 1) {
counter ++;
}
size ++;
sizes.add(range);
}
reader.close();
}
String content = FileHelper.readFile("Dataset/fixed-alarms-v1.0.list");
BufferedReader reader = new BufferedReader(new StringReader(content));
String line = null;
while ((line = reader.readLine()) != null) {
int arrowIndex = line.indexOf("=>");
String buggyInfo = line.substring(0, arrowIndex);
String[] buggyElements = buggyInfo.split(":");
int startLine = Integer.parseInt(buggyElements[4]);
int endLine = Integer.parseInt(buggyElements[5]);
if (startLine == -1 || endLine == -1) continue;
int range = endLine - startLine + 1;
if (range != 1) {
counter ++;
}
builder.append(range + "\n");
size ++;
sizes.add(range);
}
reader.close();
FileHelper.outputToFile("Dataset/sizes.csv", builder, false);
System.out.println(size);
System.out.println(counter);
System.out.println(sizes.size());
ListSorter<Integer> sorter = new ListSorter<>(sizes);
sizes = sorter.sortAscending();
System.out.println(sizes.get((int) (sizes.size() * 0.7)));
System.out.println(sizes.get((int) (sizes.size() * 0.8)));
System.out.println(sizes.get((int) (sizes.size() * 0.9)));
System.out.println(sizes.get((int) (sizes.size() * 0.95)));
}
}
@@ -123,23 +123,19 @@ public class AlarmsReader {
while (scanner.hasNextLine()) {
String line = scanner.nextLine();
int arrowIndex = line.indexOf("=>");
String alarmInfo = arrowIndex > 0 ? line.substring(0, arrowIndex) : line;
// int arrowIndex = line.indexOf("=>");
// String alarmInfo = arrowIndex > 0 ? line.substring(0, arrowIndex) : line;
// String[] buggyElements = alarmInfo.split(",");
String[] buggyElements = line.split(",");
String[] buggyElements = alarmInfo.split(",");
// String alarmType = buggyElements[0];
String projectName = buggyElements[1];
String buggyCommitId = buggyElements[2];
String buggyFile = buggyElements[3];
// int startLine = Integer.parseInt(buggyElements[4]);
// int endLine = Integer.parseInt(buggyElements[5]);
// if (startLine == -1 || endLine == -1 || endLine == 1) {
//// log.error("UNFIXED ALARM WRONG_POSITION: " + line);
// builder.append(line + "\n");
// continue;
// }
// String alarmTypeAndPosition = buggyElements[0] + ":" + startLine + ":" + endLine; // Alarm type : start line : end line.
String alarmTypeAndPosition = buggyElements[0] + ":" + buggyElements[4] + ":" + buggyElements[5]; // Alarm type : start line : end line.
Alarm alarm = new Alarm(buggyCommitId, buggyFile, "", "");
@@ -13,34 +13,34 @@ import edu.lu.uni.serval.utils.FileHelper;
public class Test {
public static void main(String[] args) throws IOException {
String filePath = Configuration.GUM_TREE_INPUT + "un_positions/";
List<File> files = FileHelper.getAllFiles(filePath, ".txt");
System.out.println(files.size());
List<String> projects = new ArrayList<>();
int unfixedI = 0;
for (File file : files) {
String fileName = file.getName();
fileName = fileName.substring(0, fileName.indexOf("#"));
fileName = fileName.substring(0, fileName.lastIndexOf("_"));
fileName = fileName.substring(0, fileName.lastIndexOf("_"));
if (!projects.contains(fileName)) {
projects.add(fileName);
}
String content = FileHelper.readFile(file);
BufferedReader reader = new BufferedReader(new StringReader(content));
while (reader.readLine() != null) {
unfixedI ++;
}
reader.close();
}
for (String str : projects) {
System.out.println(str);
}
System.out.println("Unfixed: " + unfixedI);
// String filePath = Configuration.GUM_TREE_INPUT + "un_positions/";
// List<File> files = FileHelper.getAllFiles(filePath, ".txt");
// System.out.println(files.size());
// List<String> projects = new ArrayList<>();
// int unfixedI = 0;
// for (File file : files) {
// String fileName = file.getName();
// fileName = fileName.substring(0, fileName.indexOf("#"));
// fileName = fileName.substring(0, fileName.lastIndexOf("_"));
// fileName = fileName.substring(0, fileName.lastIndexOf("_"));
// if (!projects.contains(fileName)) {
// projects.add(fileName);
// }
// String content = FileHelper.readFile(file);
// BufferedReader reader = new BufferedReader(new StringReader(content));
// while (reader.readLine() != null) {
// unfixedI ++;
// }
// reader.close();
// }
//
// for (String str : projects) {
// System.out.println(str);
// }
// System.out.println("Unfixed: " + unfixedI);
String positionFath = Configuration.GUM_TREE_INPUT + "positions/";
files = FileHelper.getAllFilesInCurrentDiectory(positionFath, ".txt");
List<File> files = FileHelper.getAllFilesInCurrentDiectory(positionFath, ".txt");
System.out.println("File Path: " + positionFath);
System.out.println(files.size());
int i = 0;
@@ -56,18 +56,18 @@ public class Test {
System.out.println("Fixed: " + i);
String unfixedAlarmFile = "Dataset/Unfixed-Alarms/";
List<File> unfixedAlarmFiles = FileHelper.getAllFilesInCurrentDiectory(unfixedAlarmFile, ".csv");
int a = 0;
for (File file : unfixedAlarmFiles) {
String content = FileHelper.readFile(file);
BufferedReader reader = new BufferedReader(new StringReader(content));
while (reader.readLine() != null) {
a ++;
}
reader.close();
}
System.out.println("unfixed: " + a);
// String unfixedAlarmFile = "Dataset/Unfixed-Alarms/";
// List<File> unfixedAlarmFiles = FileHelper.getAllFilesInCurrentDiectory(unfixedAlarmFile, ".csv");
// int a = 0;
// for (File file : unfixedAlarmFiles) {
// String content = FileHelper.readFile(file);
// BufferedReader reader = new BufferedReader(new StringReader(content));
// while (reader.readLine() != null) {
// a ++;
// }
// reader.close();
// }
// System.out.println("unfixed: " + a);
String fixedAlarmFile = "Dataset/fixed-alarms-v1.0.list";
int b = 0;
@@ -27,31 +27,46 @@ public class TestViolationParser {
}
}
String unfixedAlarmFile = "Dataset/Unfixed-Alarms/";
final String unfixedFilesPath = Configuration.GUM_TREE_INPUT + "unfixAlarms/";
final String unfixedOositionsFilePath = Configuration.GUM_TREE_INPUT + "un_positions/";
// Violation instances of single violation type
String unfixedViolations = "../FPM_Violations/unFixedInstances/";
String unfixedFilesPath = Configuration.GUM_TREE_INPUT + "UnfixedViolations/";
String unfixedPositionsFilePath = Configuration.GUM_TREE_INPUT + "UnFV_positions/";
FileHelper.createDirectory(unfixedFilesPath);
FileHelper.createDirectory(unfixedOositionsFilePath);
List<File> unfixedAlarmFiles = FileHelper.getAllFilesInCurrentDiectory(unfixedAlarmFile, ".csv");
FileHelper.createDirectory(unfixedPositionsFilePath);
List<File> unfixedAlarmFiles = FileHelper.getAllFilesInCurrentDiectory(unfixedViolations, ".list");
for (File file : unfixedAlarmFiles) {
String fileName = FileHelper.getFileNameWithoutExtension(file);
FileHelper.createDirectory(unfixedFilesPath + fileName + "/");
FileHelper.createDirectory(unfixedPositionsFilePath + fileName + "/");
ViolationParser parser = new ViolationParser();
parser.parseViolations(file, repositoriesList, unfixedFilesPath, unfixedOositionsFilePath);
parser.parseViolations(file, repositoriesList, unfixedFilesPath + fileName + "/", unfixedPositionsFilePath + fileName + "/");
}
String fixedAlarmFile = "Dataset/fixed-alarms-v1.0.list";
final String previousFilesPath = Configuration.GUM_TREE_INPUT + "prevFiles/";
final String revisedFilesPath = Configuration.GUM_TREE_INPUT + "revFiles/";
final String positionsFilePath = Configuration.GUM_TREE_INPUT + "positions/";
final String diffentryFilePath = Configuration.GUM_TREE_INPUT + "diffentries/";
FileHelper.createDirectory(previousFilesPath);
FileHelper.createDirectory(revisedFilesPath);
FileHelper.createDirectory(positionsFilePath);
FileHelper.createDirectory(diffentryFilePath);
// String unfixedAlarmFile = "Dataset/Unfixed-Alarms/";
// final String unfixedFilesPath = Configuration.GUM_TREE_INPUT + "unfixAlarms/";
// final String unfixedOositionsFilePath = Configuration.GUM_TREE_INPUT + "un_positions/";
// FileHelper.createDirectory(unfixedFilesPath);
// FileHelper.createDirectory(unfixedOositionsFilePath);
//
// List<File> unfixedAlarmFiles = FileHelper.getAllFilesInCurrentDiectory(unfixedAlarmFile, ".csv");
//
// for (File file : unfixedAlarmFiles) {
// ViolationParser parser = new ViolationParser();
// parser.parseViolations(file, repositoriesList, unfixedFilesPath, unfixedOositionsFilePath);
// }
ViolationParser parser = new ViolationParser();
parser.parseViolations(fixedAlarmFile, repositoriesList, previousFilesPath, revisedFilesPath, positionsFilePath, diffentryFilePath);
// String fixedAlarmFile = "Dataset/fixed-alarms-v1.0.list";
// final String previousFilesPath = Configuration.GUM_TREE_INPUT + "prevFiles/";
// final String revisedFilesPath = Configuration.GUM_TREE_INPUT + "revFiles/";
// final String positionsFilePath = Configuration.GUM_TREE_INPUT + "positions/";
// final String diffentryFilePath = Configuration.GUM_TREE_INPUT + "diffentries/";
// FileHelper.createDirectory(previousFilesPath);
// FileHelper.createDirectory(revisedFilesPath);
// FileHelper.createDirectory(positionsFilePath);
// FileHelper.createDirectory(diffentryFilePath);
//
// ViolationParser parser = new ViolationParser();
// parser.parseViolations(fixedAlarmFile, repositoriesList, previousFilesPath, revisedFilesPath, positionsFilePath, diffentryFilePath);
}