Fork me on GitHub

Résultats PMD

Le document suivant contient les résultats de PMD 6.13.0.

Violations By Priority

Priority 2

fr/paris/lutece/plugins/links/web/LinksLibraryJspBean.java

Rule Violation Ligne
AvoidBranchingStatementAsLastInLoop Avoid using a branching statement as the last in a loop. 351
AvoidBranchingStatementAsLastInLoop Avoid using a branching statement as the last in a loop. 409

fr/paris/lutece/plugins/links/web/portlet/LinksPortletJspBean.java

Rule Violation Ligne
IntegerInstantiation Avoid instantiating Integer objects. Call Integer.valueOf() instead. 320

Priority 3

fr/paris/lutece/plugins/links/business/ILinkDAO.java

Rule Violation Ligne
CommentRequired Header comments are required 41101
UnnecessaryModifier Unnecessary modifier 'public' on method 'selectList': the method is declared in an interface type 84
UnnecessaryModifier Unnecessary modifier 'public' on method 'loadImageResource': the method is declared in an interface type 100

fr/paris/lutece/plugins/links/business/Link.java

Rule Violation Ligne
UncommentedEmptyConstructor Document empty constructor 8688
UnnecessaryConstructor Avoid unnecessary constructors - the compiler will generate these for you 8688
NonThreadSafeSingleton Singleton is not thread safe 96100
MissingOverride The method 'getXml(HttpServletRequest)' is missing an @Override annotation. 212236
AvoidLiteralsInIfCondition Avoid using Literals in Conditional Statements 286
MissingOverride The method 'getXmlDocument(HttpServletRequest)' is missing an @Override annotation. 306309
MethodReturnsInternalArray Returning '_imageContent' may expose an internal array. 336
ArrayIsStoredDirectly The user-supplied array 'content' is stored directly. 344
MissingOverride The method 'getWorkgroup()' is missing an @Override annotation. 375378

fr/paris/lutece/plugins/links/business/LinkDAO.java

Rule Violation Ligne
CommentDefaultAccessModifier To avoid mistakes add a comment at the beginning of the getInstance method if you want a default access modifier 8184
DefaultPackage Use explicit scoping instead of the default package private level 8184
MissingOverride The method 'insert(Link)' is missing an @Override annotation. 94123
MissingOverride The method 'delete(int)' is missing an @Override annotation. 130143
MissingOverride The method 'load(int)' is missing an @Override annotation. 151176
MissingOverride The method 'store(Link)' is missing an @Override annotation. 183207
MissingOverride The method 'newPrimaryKey()' is missing an @Override annotation. 214232
MissingOverride The method 'selectList()' is missing an @Override annotation. 239265
MissingOverride The method 'selectByPortlet(int)' is missing an @Override annotation. 273300
CommentRequired Public method and constructor comments are required 351369
MissingOverride The method 'loadImageResource(int)' is missing an @Override annotation. 351369

fr/paris/lutece/plugins/links/business/LinkWorkgroupRemovalListener.java

Rule Violation Ligne
MissingOverride The method 'canBeRemoved(String)' is missing an @Override annotation. 5573
MissingOverride The method 'getRemovalRefusedMessage(String, Locale)' is missing an @Override annotation. 8185

fr/paris/lutece/plugins/links/business/portlet/ILinksPortletDAO.java

Rule Violation Ligne
CommentRequired Header comments are required 44217
TooManyMethods This class has too many methods, consider refactoring it. 45217
MissingOverride The method 'insert(Portlet)' is missing an @Override annotation. 51
MissingOverride The method 'delete(int)' is missing an @Override annotation. 75
MissingOverride The method 'load(int)' is missing an @Override annotation. 83
MissingOverride The method 'store(Portlet)' is missing an @Override annotation. 90

fr/paris/lutece/plugins/links/business/portlet/LinksPortlet.java

Rule Violation Ligne
CallSuperInConstructor It is a good practice to call super() in a constructor 6164
MissingOverride The method 'getXml(HttpServletRequest)' is missing an @Override annotation. 92112
MissingOverride The method 'getXmlDocument(HttpServletRequest)' is missing an @Override annotation. 120123
MissingOverride The method 'remove()' is missing an @Override annotation. 136139

fr/paris/lutece/plugins/links/business/portlet/LinksPortletDAO.java

Rule Violation Ligne
TooManyMethods This class has too many methods, consider refactoring it. 49541
MissingOverride The method 'insert(Portlet)' is missing an @Override annotation. 8890
UncommentedEmptyMethodBody Document empty method body 8990
MissingOverride The method 'insertLink(int, int, int)' is missing an @Override annotation. 99109
MissingOverride The method 'deleteLink(int, int)' is missing an @Override annotation. 117126
MissingOverride The method 'delete(int)' is missing an @Override annotation. 132145
MissingOverride The method 'load(int)' is missing an @Override annotation. 152168
MissingOverride The method 'store(Portlet)' is missing an @Override annotation. 174176
UncommentedEmptyMethodBody Document empty method body 175176
MissingOverride The method 'selectLinksList()' is missing an @Override annotation. 182197
MissingOverride The method 'testDuplicate(int, int)' is missing an @Override annotation. 205219
MissingOverride The method 'selectLinksInPortletList(int)' is missing an @Override annotation. 227252
MissingOverride The method 'selectLinkOrder(int, int)' is missing an @Override annotation. 261278
MissingOverride The method 'selectMaxOrder(int)' is missing an @Override annotation. 285301
MissingOverride The method 'selectPortletMaxOrder()' is missing an @Override annotation. 307322
MissingOverride The method 'storeLinkOrder(int, int, int)' is missing an @Override annotation. 331341
MissingOverride The method 'selectLinkIdByOrder(int, int)' is missing an @Override annotation. 349366
MissingOverride The method 'findUnselectedPortlets()' is missing an @Override annotation. 372389
MissingOverride The method 'selectPortletsInLinksPage()' is missing an @Override annotation. 396414
MissingOverride The method 'selectPortletOrder(int)' is missing an @Override annotation. 421437
MissingOverride The method 'removePortlet(int)' is missing an @Override annotation. 443450
MissingOverride The method 'removeLinkFromPortlets(int)' is missing an @Override annotation. 456463
MissingOverride The method 'insertPortlet(int, int)' is missing an @Override annotation. 470478
MissingOverride The method 'selectPortletIdByOrder(int)' is missing an @Override annotation. 485501
MissingOverride The method 'storePortletOrder(int, int)' is missing an @Override annotation. 509517

fr/paris/lutece/plugins/links/business/portlet/LinksPortletHome.java

Rule Violation Ligne
RedundantFieldInitializer Avoid using redundant field initializer for '_singleton' 56
AssignmentToNonFinalStatic Possible unsafe assignment to a non-final static field in a constructor. 56
CallSuperInConstructor It is a good practice to call super() in a constructor 6571
MissingOverride The method 'getPortletTypeId()' is missing an @Override annotation. 7884
UnnecessaryLocalBeforeReturn Consider simply returning the value vs storing it in local variable 'strPortletTypeId' 83
NonThreadSafeSingleton Singleton is not thread safe 9396
MissingOverride The method 'getDAO()' is missing an @Override annotation. 106110

fr/paris/lutece/plugins/links/service/LinkService.java

Rule Violation Ligne
CommentRequired Header comments are required 3961

fr/paris/lutece/plugins/links/service/LinksPlugin.java

Rule Violation Ligne
CommentRequired Header comments are required 3949
MissingOverride The method 'init()' is missing an @Override annotation. 4448

fr/paris/lutece/plugins/links/util/LinksImageProvider.java

Rule Violation Ligne
CommentRequired Header comments are required 4281
RedundantFieldInitializer Avoid using redundant field initializer for '_singleton' 44
AssignmentToNonFinalStatic Possible unsafe assignment to a non-final static field in a constructor. 44
AvoidSynchronizedAtMethodLevel Use block level rather than method level synchronization 6270
CommentRequired Public method and constructor comments are required 6270
CommentRequired Public method and constructor comments are required 7275
MissingOverride The method 'getResourceTypeId()' is missing an @Override annotation. 7275
MissingOverride The method 'getImageResource(int)' is missing an @Override annotation. 7780
CommentRequired Public method and constructor comments are required 7780

fr/paris/lutece/plugins/links/web/LinksApp.java

Rule Violation Ligne
UncommentedEmptyConstructor Document empty constructor 7779
UnnecessaryConstructor Avoid unnecessary constructors - the compiler will generate these for you 7779
MissingOverride The method 'getPage(HttpServletRequest, int, Plugin)' is missing an @Override annotation. 8999

fr/paris/lutece/plugins/links/web/LinksLibraryJspBean.java

Rule Violation Ligne
GodClass Possible God Class (WMC=68, ATFD=122, TCC=19.780%) 68719
UncommentedEmptyConstructor Document empty constructor 140142
CallSuperInConstructor It is a good practice to call super() in a constructor 140142
UnnecessaryConstructor Avoid unnecessary constructors - the compiler will generate these for you 140142
CyclomaticComplexity The method 'getLinksList(HttpServletRequest)' has a cyclomatic complexity of 10. 149212
AvoidCatchingNPE Avoid catching NullPointerException; consider removing the cause of the NPE. 175
AvoidCatchingGenericException Avoid catching generic exceptions such as NullPointerException, RuntimeException, Exception in try-catch block 175
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 225
AvoidCatchingNPE Avoid catching NullPointerException; consider removing the cause of the NPE. 358
AvoidCatchingGenericException Avoid catching generic exceptions such as NullPointerException, RuntimeException, Exception in try-catch block 358
AvoidCatchingNPE Avoid catching NullPointerException; consider removing the cause of the NPE. 416
AvoidCatchingGenericException Avoid catching generic exceptions such as NullPointerException, RuntimeException, Exception in try-catch block 416
CyclomaticComplexity The method 'doModifyLink(HttpServletRequest)' has a cyclomatic complexity of 11. 439506
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 446
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 447
CyclomaticComplexity The method 'getUrlsListFromMultipart(String, MultipartHttpServletRequest)' has a cyclomatic complexity of 11. 661718
AvoidLiteralsInIfCondition Avoid using Literals in Conditional Statements 690
AvoidCatchingNPE Avoid catching NullPointerException; consider removing the cause of the NPE. 712
AvoidCatchingGenericException Avoid catching generic exceptions such as NullPointerException, RuntimeException, Exception in try-catch block 712

fr/paris/lutece/plugins/links/web/LinksServiceJspBean.java

Rule Violation Ligne
CommentRequired Header comments are required 56134
MissingOverride The method 'getInsertServiceSelectorUI(HttpServletRequest)' is missing an @Override annotation. 91112
CommentRequired Public method and constructor comments are required 114133
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 118
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 120

fr/paris/lutece/plugins/links/web/portlet/LinksPortletJspBean.java

Rule Violation Ligne
UnnecessaryConstructor Avoid unnecessary constructors - the compiler will generate these for you 112114
UncommentedEmptyConstructor Document empty constructor 112114
CallSuperInConstructor It is a good practice to call super() in a constructor 112114
MissingOverride The method 'getCreate(HttpServletRequest)' is missing an @Override annotation. 122130
MissingOverride The method 'getModify(HttpServletRequest)' is missing an @Override annotation. 138154
MissingOverride The method 'doCreate(HttpServletRequest)' is missing an @Override annotation. 162183
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 166
MissingOverride The method 'doModify(HttpServletRequest)' is missing an @Override annotation. 231265
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 236
AvoidCatchingGenericException Avoid catching generic exceptions such as NullPointerException, RuntimeException, Exception in try-catch block 343
AvoidCatchingNPE Avoid catching NullPointerException; consider removing the cause of the NPE. 343
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 415

Priority 4

fr/paris/lutece/plugins/links/business/Link.java

Rule Violation Ligne
ShortClassName Avoid short class names like Link 55397

Fichiers

fr/paris/lutece/plugins/links/business/ILinkDAO.java

Rule Violation Priority Ligne
CommentRequired Header comments are required 3 41101
UnnecessaryModifier Unnecessary modifier 'public' on method 'selectList': the method is declared in an interface type 3 84
UnnecessaryModifier Unnecessary modifier 'public' on method 'loadImageResource': the method is declared in an interface type 3 100

fr/paris/lutece/plugins/links/business/Link.java

Rule Violation Priority Ligne
ShortClassName Avoid short class names like Link 4 55397
UncommentedEmptyConstructor Document empty constructor 3 8688
UnnecessaryConstructor Avoid unnecessary constructors - the compiler will generate these for you 3 8688
NonThreadSafeSingleton Singleton is not thread safe 3 96100
MissingOverride The method 'getXml(HttpServletRequest)' is missing an @Override annotation. 3 212236
AvoidLiteralsInIfCondition Avoid using Literals in Conditional Statements 3 286
MissingOverride The method 'getXmlDocument(HttpServletRequest)' is missing an @Override annotation. 3 306309
MethodReturnsInternalArray Returning '_imageContent' may expose an internal array. 3 336
ArrayIsStoredDirectly The user-supplied array 'content' is stored directly. 3 344
MissingOverride The method 'getWorkgroup()' is missing an @Override annotation. 3 375378

fr/paris/lutece/plugins/links/business/LinkDAO.java

Rule Violation Priority Ligne
CommentDefaultAccessModifier To avoid mistakes add a comment at the beginning of the getInstance method if you want a default access modifier 3 8184
DefaultPackage Use explicit scoping instead of the default package private level 3 8184
MissingOverride The method 'insert(Link)' is missing an @Override annotation. 3 94123
MissingOverride The method 'delete(int)' is missing an @Override annotation. 3 130143
MissingOverride The method 'load(int)' is missing an @Override annotation. 3 151176
MissingOverride The method 'store(Link)' is missing an @Override annotation. 3 183207
MissingOverride The method 'newPrimaryKey()' is missing an @Override annotation. 3 214232
MissingOverride The method 'selectList()' is missing an @Override annotation. 3 239265
MissingOverride The method 'selectByPortlet(int)' is missing an @Override annotation. 3 273300
CommentRequired Public method and constructor comments are required 3 351369
MissingOverride The method 'loadImageResource(int)' is missing an @Override annotation. 3 351369

fr/paris/lutece/plugins/links/business/LinkWorkgroupRemovalListener.java

Rule Violation Priority Ligne
MissingOverride The method 'canBeRemoved(String)' is missing an @Override annotation. 3 5573
MissingOverride The method 'getRemovalRefusedMessage(String, Locale)' is missing an @Override annotation. 3 8185

fr/paris/lutece/plugins/links/business/portlet/ILinksPortletDAO.java

Rule Violation Priority Ligne
CommentRequired Header comments are required 3 44217
TooManyMethods This class has too many methods, consider refactoring it. 3 45217
MissingOverride The method 'insert(Portlet)' is missing an @Override annotation. 3 51
MissingOverride The method 'delete(int)' is missing an @Override annotation. 3 75
MissingOverride The method 'load(int)' is missing an @Override annotation. 3 83
MissingOverride The method 'store(Portlet)' is missing an @Override annotation. 3 90

fr/paris/lutece/plugins/links/business/portlet/LinksPortlet.java

Rule Violation Priority Ligne
CallSuperInConstructor It is a good practice to call super() in a constructor 3 6164
MissingOverride The method 'getXml(HttpServletRequest)' is missing an @Override annotation. 3 92112
MissingOverride The method 'getXmlDocument(HttpServletRequest)' is missing an @Override annotation. 3 120123
MissingOverride The method 'remove()' is missing an @Override annotation. 3 136139

fr/paris/lutece/plugins/links/business/portlet/LinksPortletDAO.java

Rule Violation Priority Ligne
TooManyMethods This class has too many methods, consider refactoring it. 3 49541
MissingOverride The method 'insert(Portlet)' is missing an @Override annotation. 3 8890
UncommentedEmptyMethodBody Document empty method body 3 8990
MissingOverride The method 'insertLink(int, int, int)' is missing an @Override annotation. 3 99109
MissingOverride The method 'deleteLink(int, int)' is missing an @Override annotation. 3 117126
MissingOverride The method 'delete(int)' is missing an @Override annotation. 3 132145
MissingOverride The method 'load(int)' is missing an @Override annotation. 3 152168
MissingOverride The method 'store(Portlet)' is missing an @Override annotation. 3 174176
UncommentedEmptyMethodBody Document empty method body 3 175176
MissingOverride The method 'selectLinksList()' is missing an @Override annotation. 3 182197
MissingOverride The method 'testDuplicate(int, int)' is missing an @Override annotation. 3 205219
MissingOverride The method 'selectLinksInPortletList(int)' is missing an @Override annotation. 3 227252
MissingOverride The method 'selectLinkOrder(int, int)' is missing an @Override annotation. 3 261278
MissingOverride The method 'selectMaxOrder(int)' is missing an @Override annotation. 3 285301
MissingOverride The method 'selectPortletMaxOrder()' is missing an @Override annotation. 3 307322
MissingOverride The method 'storeLinkOrder(int, int, int)' is missing an @Override annotation. 3 331341
MissingOverride The method 'selectLinkIdByOrder(int, int)' is missing an @Override annotation. 3 349366
MissingOverride The method 'findUnselectedPortlets()' is missing an @Override annotation. 3 372389
MissingOverride The method 'selectPortletsInLinksPage()' is missing an @Override annotation. 3 396414
MissingOverride The method 'selectPortletOrder(int)' is missing an @Override annotation. 3 421437
MissingOverride The method 'removePortlet(int)' is missing an @Override annotation. 3 443450
MissingOverride The method 'removeLinkFromPortlets(int)' is missing an @Override annotation. 3 456463
MissingOverride The method 'insertPortlet(int, int)' is missing an @Override annotation. 3 470478
MissingOverride The method 'selectPortletIdByOrder(int)' is missing an @Override annotation. 3 485501
MissingOverride The method 'storePortletOrder(int, int)' is missing an @Override annotation. 3 509517

fr/paris/lutece/plugins/links/business/portlet/LinksPortletHome.java

Rule Violation Priority Ligne
RedundantFieldInitializer Avoid using redundant field initializer for '_singleton' 3 56
AssignmentToNonFinalStatic Possible unsafe assignment to a non-final static field in a constructor. 3 56
CallSuperInConstructor It is a good practice to call super() in a constructor 3 6571
MissingOverride The method 'getPortletTypeId()' is missing an @Override annotation. 3 7884
UnnecessaryLocalBeforeReturn Consider simply returning the value vs storing it in local variable 'strPortletTypeId' 3 83
NonThreadSafeSingleton Singleton is not thread safe 3 9396
MissingOverride The method 'getDAO()' is missing an @Override annotation. 3 106110

fr/paris/lutece/plugins/links/service/LinkService.java

Rule Violation Priority Ligne
CommentRequired Header comments are required 3 3961

fr/paris/lutece/plugins/links/service/LinksPlugin.java

Rule Violation Priority Ligne
CommentRequired Header comments are required 3 3949
MissingOverride The method 'init()' is missing an @Override annotation. 3 4448

fr/paris/lutece/plugins/links/util/LinksImageProvider.java

Rule Violation Priority Ligne
CommentRequired Header comments are required 3 4281
RedundantFieldInitializer Avoid using redundant field initializer for '_singleton' 3 44
AssignmentToNonFinalStatic Possible unsafe assignment to a non-final static field in a constructor. 3 44
AvoidSynchronizedAtMethodLevel Use block level rather than method level synchronization 3 6270
CommentRequired Public method and constructor comments are required 3 6270
CommentRequired Public method and constructor comments are required 3 7275
MissingOverride The method 'getResourceTypeId()' is missing an @Override annotation. 3 7275
MissingOverride The method 'getImageResource(int)' is missing an @Override annotation. 3 7780
CommentRequired Public method and constructor comments are required 3 7780

fr/paris/lutece/plugins/links/web/LinksApp.java

Rule Violation Priority Ligne
UncommentedEmptyConstructor Document empty constructor 3 7779
UnnecessaryConstructor Avoid unnecessary constructors - the compiler will generate these for you 3 7779
MissingOverride The method 'getPage(HttpServletRequest, int, Plugin)' is missing an @Override annotation. 3 8999

fr/paris/lutece/plugins/links/web/LinksLibraryJspBean.java

Rule Violation Priority Ligne
GodClass Possible God Class (WMC=68, ATFD=122, TCC=19.780%) 3 68719
UncommentedEmptyConstructor Document empty constructor 3 140142
CallSuperInConstructor It is a good practice to call super() in a constructor 3 140142
UnnecessaryConstructor Avoid unnecessary constructors - the compiler will generate these for you 3 140142
CyclomaticComplexity The method 'getLinksList(HttpServletRequest)' has a cyclomatic complexity of 10. 3 149212
AvoidCatchingNPE Avoid catching NullPointerException; consider removing the cause of the NPE. 3 175
AvoidCatchingGenericException Avoid catching generic exceptions such as NullPointerException, RuntimeException, Exception in try-catch block 3 175
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 3 225
AvoidBranchingStatementAsLastInLoop Avoid using a branching statement as the last in a loop. 2 351
AvoidCatchingNPE Avoid catching NullPointerException; consider removing the cause of the NPE. 3 358
AvoidCatchingGenericException Avoid catching generic exceptions such as NullPointerException, RuntimeException, Exception in try-catch block 3 358
AvoidBranchingStatementAsLastInLoop Avoid using a branching statement as the last in a loop. 2 409
AvoidCatchingNPE Avoid catching NullPointerException; consider removing the cause of the NPE. 3 416
AvoidCatchingGenericException Avoid catching generic exceptions such as NullPointerException, RuntimeException, Exception in try-catch block 3 416
CyclomaticComplexity The method 'doModifyLink(HttpServletRequest)' has a cyclomatic complexity of 11. 3 439506
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 3 446
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 3 447
CyclomaticComplexity The method 'getUrlsListFromMultipart(String, MultipartHttpServletRequest)' has a cyclomatic complexity of 11. 3 661718
AvoidLiteralsInIfCondition Avoid using Literals in Conditional Statements 3 690
AvoidCatchingNPE Avoid catching NullPointerException; consider removing the cause of the NPE. 3 712
AvoidCatchingGenericException Avoid catching generic exceptions such as NullPointerException, RuntimeException, Exception in try-catch block 3 712

fr/paris/lutece/plugins/links/web/LinksServiceJspBean.java

Rule Violation Priority Ligne
CommentRequired Header comments are required 3 56134
MissingOverride The method 'getInsertServiceSelectorUI(HttpServletRequest)' is missing an @Override annotation. 3 91112
CommentRequired Public method and constructor comments are required 3 114133
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 3 118
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 3 120

fr/paris/lutece/plugins/links/web/portlet/LinksPortletJspBean.java

Rule Violation Priority Ligne
UnnecessaryConstructor Avoid unnecessary constructors - the compiler will generate these for you 3 112114
UncommentedEmptyConstructor Document empty constructor 3 112114
CallSuperInConstructor It is a good practice to call super() in a constructor 3 112114
MissingOverride The method 'getCreate(HttpServletRequest)' is missing an @Override annotation. 3 122130
MissingOverride The method 'getModify(HttpServletRequest)' is missing an @Override annotation. 3 138154
MissingOverride The method 'doCreate(HttpServletRequest)' is missing an @Override annotation. 3 162183
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 3 166
MissingOverride The method 'doModify(HttpServletRequest)' is missing an @Override annotation. 3 231265
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 3 236
IntegerInstantiation Avoid instantiating Integer objects. Call Integer.valueOf() instead. 2 320
AvoidCatchingGenericException Avoid catching generic exceptions such as NullPointerException, RuntimeException, Exception in try-catch block 3 343
AvoidCatchingNPE Avoid catching NullPointerException; consider removing the cause of the NPE. 3 343
PrematureDeclaration Avoid declaring a variable if it is unreferenced before a possible exit point. 3 415