Update
This commit is contained in:
+2518
File diff suppressed because it is too large
Load Diff
+87622
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
+4327
File diff suppressed because it is too large
Load Diff
+124
@@ -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
File diff suppressed because it is too large
Load Diff
@@ -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
File diff suppressed because it is too large
Load Diff
+345
@@ -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
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,
|
||||
}
|
||||
+188
-82
@@ -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")) {
|
||||
|
||||
+34
-20
@@ -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;
|
||||
// }
|
||||
}
|
||||
|
||||
+2
-2
@@ -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);
|
||||
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user