Bug 541225 - The message "At least one of the problems in category 'XXX' is not analysed due to a compiler option being ignored" is confusing
Summary: The message "At least one of the problems in category 'XXX' is not analysed d...
Status: VERIFIED FIXED
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 4.10   Edit
Hardware: PC Windows 7
: P3 normal (vote)
Target Milestone: 4.14 M1   Edit
Assignee: Stephan Herrmann CLA
QA Contact:
URL:
Whiteboard:
Keywords:
: 520287 (view as bug list)
Depends on:
Blocks:
 
Reported: 2018-11-16 02:28 EST by Eike Stepper CLA
Modified: 2019-10-10 00:20 EDT (History)
6 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Eike Stepper CLA 2018-11-16 02:28:34 EST
So there is a problem that is not analysed. Does that mean that

a) a problem in my code has been detected, but is not reported as a problem?
b) whether a problem in my code exists or not is not checked at all?

Then the reason for the message is given as "due to a compiler option being ignored". Does that mean that

c) a compiler option is specified to ignore the problem, hence it is not even tried to be analysed?
d) a compiler option to analyze the problem is specified, but that option is ignored? If so, why is it ignored?

I must admit that I generally prefer not to see this message at all because I have the feeling that it is somehow the result of combining checking options that are directly in the code, i.e., @SuppressWarnings, and global workspace options, which are often different in different workspaces.

More concretely, in all cases where I get these annoying (and currently unremovable) "At least one of the problems ..." messages, the code author has added a @SuppressWarnings annotation to express that the code does not have a problem. Then in some other workspace the global options also say "I'm not interested in this kind of problem" and voila, I get a message that I can't seem to interpret correctly and that I can't remove. And apparently just because the code and my workspace settings both have the same intention, i.e., ignore that problem.

Am I misunderstanding the purpose of this message?
Comment 1 Ed Merks CLA 2018-11-20 16:15:35 EST
I think this is a duplicate of 

https://bugs.eclipse.org/bugs/show_bug.cgi?id=520287

I have this same problem with my current customer project and I find it super super duper annoying that there is no way to get rid of this problem marker via a preference or in any other way.

JDT produces so many exceedingly useful warnings and even informational messages, e.g., this new unlikely type argument message which is almost always a bug in the code.  But with these completely useless unsupressabable problems, the useful problems go unnoticed.

I suppose I could try to contribute a fix, but where to start?!
Comment 2 Stephan Herrmann CLA 2018-11-20 17:19:10 EST
Sorry, Ed, for not responding earlier (as one of the authors of the original bug 506888). I'm glad you found the connection to bug 520287 (and transitively to bug 506888 I assume).

I'd like to emphasize that this info message is a compromise. I don't think anybody really likes it very much, but we didn't find a better solution.

In this light, implementing a fix is likely several orders of magnitude simpler than finding a good concept, so let's speak about concepts:

Status quo:
- problem kinds are grouped to @SW tokens 
  (e.g., "unused").
- warning configurability in the UI is more fine-grained than @SW tokens
  (local variable, method parameter, import, private member etc.pp.)
- if some options from group "x" are disabled we may get into this conflict:
  - if we see @SW("x") but have not noticed any warning suppressed by this
    we don't know if this means:
    - the @SW is unnecessary and should be flagged as such, or
    - the warning being suppressed was disabled and so we don't know
      if it _would_ surface if enabled
    this is particularly relevant, if people with different workspace prefs
    see different "@SW is unused" warnings -> one user removes @SW, another
    user will see a new warning appear that was previously suppressed.
Obviously, we didn't do too good a job in capturing all this information in a one-line error message.

Is there a way out?
(1) we could theoretically change the implementation to always analyze all
    problems.
    (a) In particular javadoc analysis is completely turned off depending on
        compiler preferences. Do we really want to change that? Same for
        annotation-based null analysis.
    (b) Remembering ignored problems requires significant changes in how we
        record and report problems, starting by reverting bug 210213 from 2007.
(2) we could potentially improve the info message
(3) we could introduce a new configurable options as sub-option of
    "Unused '@SuppressWarnings' token"
    e.g.:
     "'Unused' status is not fully known due to a relevant option being ignored" [E/W/I/I]
(4) convince Dani that we can just scrap this info entirely ;p


(2) & (3) would be simple to implement. Here design/agreement is the hard part.

(1.a) would be a costly decision. Think of performance. Think of bugs in one analysis that currently can be avoided by disabling that analysis, but would have no workaround if analysis is always performed. Only if we decide to bite that bullet, considering (1.b) would come into focus.
Comment 3 Stephan Herrmann CLA 2018-11-20 17:20:21 EST
(In reply to Stephan Herrmann from comment #2)
> Sorry, Ed

ups, Eike and Ed are two different persons :)
Comment 4 Ed Merks CLA 2018-11-20 17:44:53 EST
I would prefer a version of (3) where I could suppress specifically only this new  "confusing" warning that only happens when a) there is an @SuppressWarning("foo"), but b) the global preferences have set "foo" warning to ignore.  I don't want performance to be impacted and I don't want anyone to do a lot of work!  I just want to eliminate this one informational message...

For my customer project I really want to highlight how many bugs are in their code just based on these newer "unlikely type argument" informational messages, but it's hard to make that point when there are a whack of informational messages that I can't eliminate.  This customer project has hundreds of workspace projects from several different Git repositories so it's very hard to manage project-specific preferences and it's hard to set a global preference that will not also result in useless, unsuppressable informational message...
Comment 5 Stephan Herrmann CLA 2018-11-20 17:55:04 EST
(In reply to Ed Merks from comment #4)
> I would prefer a version of (3) where I could suppress specifically only
> this new  "confusing" warning that only happens when a) there is an
> @SuppressWarning("foo"), but b) the global preferences have set "foo"
> warning to ignore.  I don't want performance to be impacted and I don't want
> anyone to do a lot of work!  I just want to eliminate this one informational
> message...

@Dani, @Jay, do you care to comment?
Comment 6 Ed Merks CLA 2018-11-20 18:13:00 EST
Thanks for the responsiveness! It's much appreciated!!
Comment 7 Ed Merks CLA 2019-09-10 14:43:29 EDT
This continues to be an annoying problem.

If @nobody cares to respond with a comment, then I would suggest that @Stephan is in the best position to show leadership and should feel free to choose the path forward that he personally feels is the most appropriate.
Comment 8 Stephan Herrmann CLA 2019-09-10 15:38:43 EDT
Additionally, FYI: bug 547645
Comment 9 Jay Arthanareeswaran CLA 2019-09-10 23:35:35 EDT
(In reply to Stephan Herrmann from comment #5)
> (In reply to Ed Merks from comment #4)
> > I would prefer a version of (3) where I could suppress specifically only
> > this new  "confusing" warning that only happens when a) there is an
> > @SuppressWarning("foo"), but b) the global preferences have set "foo"
> > warning to ignore.  I don't want performance to be impacted and I don't want
> > anyone to do a lot of work!  I just want to eliminate this one informational
> > message...
> 
> @Dani, @Jay, do you care to comment?

Apologies for missing this.

Stephan, can you tell me what you have in mind for option (2)?

Naturally, options (1) and (4) are out of contention and if option (2) is not particularly interesting, then I tend to lean towards (3).
Comment 10 Stephan Herrmann CLA 2019-09-12 18:09:30 EDT
(In reply to Jay Arthanareeswaran from comment #9)
> (In reply to Stephan Herrmann from comment #5)
> > (In reply to Ed Merks from comment #4)
> > > I would prefer a version of (3) where I could suppress specifically only
> > > this new  "confusing" warning that only happens when a) there is an
> > > @SuppressWarning("foo"), but b) the global preferences have set "foo"
> > > warning to ignore.  I don't want performance to be impacted and I don't want
> > > anyone to do a lot of work!  I just want to eliminate this one informational
> > > message...
> > 
> > @Dani, @Jay, do you care to comment?
> 
> Apologies for missing this.
> 
> Stephan, can you tell me what you have in mind for option (2)?

I had nothing particular in mind, just listed this as theoretical option for completeness, since communication seems to play a central role in this issue (see the bug title).

> Naturally, options (1) and (4) are out of contention 

really? I was hoping we could settle for (4) ;p

> and if option (2) is
> not particularly interesting, then I tend to lean towards (3).

If you ask me, it's less "leaning towards" rather than "running out of options".

So, reproducing the plan from above:

We will introduce a new configurable options as sub-option of
    "Unused '@SuppressWarnings' token"
    e.g.:
     "'Unused' status is not fully known due to a relevant option being ignored" [E/W/I/I]

"being ignored" or "set to ignore"?

How about:
"'Unused' status is not fully known because a relevant option is set to 'ignore'" [E/W/I/I]
Comment 11 Eclipse Genie CLA 2019-09-17 17:37:11 EDT
New Gerrit change created: https://git.eclipse.org/r/149692
Comment 12 Stephan Herrmann CLA 2019-09-17 17:39:27 EDT
(In reply to Eclipse Genie from comment #11)
> New Gerrit change created: https://git.eclipse.org/r/149692

core part to make the unloved info configurable.

I did not allocate a new @SuppressWarnings token for it, though ;p
Comment 14 Stephan Herrmann CLA 2019-10-03 17:16:25 EDT
see also bug 409303 comment 6 :)
Comment 15 Stephan Herrmann CLA 2019-10-04 09:16:27 EDT
*** Bug 520287 has been marked as a duplicate of this bug. ***
Comment 16 Stephan Herrmann CLA 2019-10-06 07:50:40 EDT
https://git.eclipse.org/c/jdt/eclipse.jdt.ui.git/diff/org.eclipse.jdt.ui/ui/org/eclipse/jdt/internal/ui/text/correction/ConfigureProblemSeveritySubProcessor.java?id=d528dbc1af351a5a7f89693cffcca207b027b637 on behalf of bug 506888 tweaked option tweaking so users could adjust the ignored warning option. See discussion around bug 506888 comment 23. This change will be removed while exposing the new configuration option for JDT/Core in the UI.
Comment 17 Eclipse Genie CLA 2019-10-06 07:52:20 EDT
New Gerrit change created: https://git.eclipse.org/r/150649
Comment 18 Stephan Herrmann CLA 2019-10-06 08:14:32 EDT
(In reply to Eclipse Genie from comment #17)
> New Gerrit change created: https://git.eclipse.org/r/150649

This is my last take on this issue.

I'm not submitting the new UI label for any beauty contest, or contest of conciseness:

'Unused' status is not fully known because a relevant option is set to 'Ignore':


Some will consider it much too long, some will still be puzzled about the meaning (which would require an even longer text to suitably explain the situation). I will not participate in their discussion. Feel free to change the text in any direction (shorter, longer, better, worse ...).
Comment 20 Stephan Herrmann CLA 2019-10-06 09:56:03 EDT
(In reply to Eclipse Genie from comment #19)
> Gerrit change https://git.eclipse.org/r/150649 was merged to [master].
> Commit:
> http://git.eclipse.org/c/jdt/eclipse.jdt.ui.git/commit/
> ?id=e90eeedae6ab5b8fa8eb40fbd00840583dbbc9b3

Released for 4.14 M1
Comment 21 Manoj N Palat CLA 2019-10-10 00:20:56 EDT
Verified for Eclipse Version: 2019-12 (4.14) M1 with  Build id: I20191008-1800