inference: don't distinguish parameterizations with 2 different interfaces (IDEA...
[idea/community.git] / java / java-tests / testSrc / com / intellij / codeInsight / daemon / lambda / GraphInferenceHighlightingTest.java
1 /*
2  * Copyright 2000-2016 JetBrains s.r.o.
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 package com.intellij.codeInsight.daemon.lambda;
17
18 import com.intellij.codeInsight.daemon.LightDaemonAnalyzerTestCase;
19 import com.intellij.codeInsight.daemon.impl.HighlightInfo;
20 import com.intellij.codeInspection.uncheckedWarnings.UncheckedWarningLocalInspection;
21 import com.intellij.lang.annotation.HighlightSeverity;
22 import com.intellij.openapi.projectRoots.JavaSdkVersion;
23 import com.intellij.openapi.util.text.StringUtil;
24 import com.intellij.testFramework.IdeaTestUtil;
25 import org.jetbrains.annotations.NonNls;
26
27 import java.util.ArrayList;
28 import java.util.Collection;
29 import java.util.List;
30
31 public class GraphInferenceHighlightingTest extends LightDaemonAnalyzerTestCase {
32   @NonNls static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/lambda/graphInference";
33
34   public void testNestedCalls() throws Exception {
35     doTest();
36   }
37
38   public void testNestedCallsSameMethod() throws Exception {
39     doTest();
40   }
41
42   public void testChainedInference() throws Exception {
43     doTest();
44   }
45
46   public void testChainedInference1() throws Exception {
47     doTest();
48   }
49
50   public void testReturnStmt() throws Exception {
51     doTest();
52   }
53
54   public void testInferenceFromSiblings() throws Exception {
55     doTest();
56   }
57
58   public void testChainedInferenceTypeParamsOrderIndependent() throws Exception {
59     doTest();
60   }
61
62   public void testCyclicParamsDependency() throws Exception {
63     doTest();
64   }
65
66   public void testInferenceForFirstArg() throws Exception {
67     doTest();
68   }
69
70   public void testConditionalExpressionsInference() throws Exception {
71     doTest();
72   }
73
74   public void testInferenceFromTypeParamsBounds() throws Exception {
75     doTest();
76   }
77
78   public void testInferenceFromNotEqualTypeParamsBounds() throws Exception {
79     doTest();
80   }
81
82   public void testSOEDuringInferenceFromParamBounds() throws Exception {
83     doTest();
84   }
85
86   public void testDiamondsUsedToDetectArgumentType() throws Exception {
87     doTest();
88   }
89
90   public void testInferFromTypeArgs() throws Exception {
91     doTest();
92   }
93
94   public void testDefaultConstructorAsArgument() throws Exception {
95     doTest();
96   }
97
98   public void testAfterAbstractPipeline() throws Exception {
99     doTest();
100   }
101
102   public void testCapturedReturnTypes() throws Exception {
103     doTest();
104   }
105
106   public void testClsCapturedReturnTypes() throws Exception {
107     doTest();
108   }
109
110   public void testOverloadChooserOfReturnType() throws Exception {
111     doTest();
112   }
113
114   public void testIDEA98866() throws Exception {
115     doTest();
116   }
117
118   public void testIncompleteSubstitution() throws Exception {
119     doTest();
120   }
121
122   public void testJDK8028774() throws Exception {
123     doTest();
124   }
125
126   public void testErasedByReturnConstraint() throws Exception {
127     doTest();
128   }
129
130   public void testIDEA104429() throws Exception {
131     doTest();
132   }
133
134   public void testTargetTypeByOverloadedMethod() throws Exception {
135     doTest();
136   }
137
138   public void testTargetTypeByOverloadedMethod2() throws Exception {
139     doTest();
140   }
141
142   public void testGrandParentTypeParams() throws Exception {
143     doTest();
144   }
145
146   public void testDeepCallsChain() throws Exception {
147     doTest();
148   }
149
150   public void testArrayPassedToVarargsMethod() throws Exception {
151     doTest();
152   }
153
154   public void testIDEA121055() throws Exception {
155     doTest();
156   }
157
158   public void testTargetTypeByAnonymousClass() throws Exception {
159     doTest();
160   }
161
162   public void testStaticInheritorsAmbiguity() throws Exception {
163     doTest();
164   }
165
166   public void testNestedCalls1() throws Exception {
167     doTest();
168   }
169
170   public void testMostSpecificVarargsCase() throws Exception {
171     doTest();
172   }
173
174   public void testLiftedCaptureToOuterCall() throws Exception {
175     doTest();
176   }
177
178   public void testSiteSubstitutionForReturnConstraint() throws Exception {
179     doTest();
180   }
181
182   public void testSiteSubstitutionInExpressionConstraints() throws Exception {
183     doTest();
184   }
185
186   public void testIncorporationWithEqualsBoundsSubstitution() throws Exception {
187     doTest();
188   }
189
190   public void testOuterCallConflictResolution() throws Exception {
191     doTest();
192   }
193
194   public void testVarargsOnNonPertinentPlace() throws Exception {
195     doTest();
196   }
197
198   public void testRawTypeFromParent() throws Exception {
199     doTest();
200   }
201
202   public void testRawTypeFromParentArrayType() throws Exception {
203     doTest();
204   }
205
206   public void testInferFromConditionalExpressionCondition() throws Exception {
207     doTest();
208   }
209
210   public void testPrimitiveWrapperConditionInReturnConstraint() throws Exception {
211     doTest();
212   }
213
214   public void testIDEA128174() throws Exception {
215     doTest();
216   }
217
218   public void testIDEA128101() throws Exception {
219     doTest();
220   }
221
222   public void testOuterCallOverloads() throws Exception {
223     doTest();
224   }
225
226   public void testIDEA127928() throws Exception {
227     doTest();
228   }
229   public void testIDEA128766() throws Exception {
230     doTest();
231   }
232
233   public void testSameMethodNestedChainedCallsNearFunctionInterfaces() throws Exception {
234     doTest();
235   }
236
237   public void testInfiniteTypes() throws Exception {
238     doTest();
239   }
240
241   public void testIDEA126163() throws Exception {
242     doTest();
243   }
244
245   public void testIncompatibleBoundsFromAssignment() throws Exception {
246     doTest();
247   }
248
249   public void testFreshVariablesCreatedDuringResolveDependingOnAlreadyResolvedVariables() throws Exception {
250     doTest();
251   }
252
253   public void testCallToGenericMethodsOfNonGenericClassInsideRawInheritor() throws Exception {
254     doTest();
255   }
256
257   public void testIDEA130549() throws Exception {
258     doTest();
259   }
260
261   public void testIDEA130547() throws Exception {
262     doTest();
263   }
264
265   public void testUncheckedConversionWithRecursiveTypeParams() throws Exception {
266     doTest();
267   }
268
269   public void testIDEA132725() throws Exception {
270     doTest();
271   }
272
273   public void testIDEA134277() throws Exception {
274     doTest();
275   }
276
277   public void testSameMethodCalledWithDifferentArgsResultingInDependenciesBetweenSameTypeParams() throws Exception {
278     doTest();
279   }
280
281   public void testNestedMethodCallsWithVarargs() throws Exception {
282     doTest();
283   }
284
285   public void testDisjunctionTypeEquality() throws Exception {
286     doTest();
287   }
288
289   public void testNestedConditionalExpressions() throws Exception {
290     doTest();
291   }
292
293   public void testOuterMethodCallOnRawType() throws Exception {
294     doTest();
295   }
296
297   public void testIDEA143390() throws Exception {
298     doTest();
299   }
300
301   public void testIntersectionWithArray() throws Exception {
302     doTest();
303   }
304
305   public void testIncorporationWithCaptureCalcGlbToGetOneTypeParameterBound() throws Exception {
306     doTest();
307   }
308
309   public void testEnumConstantInference() throws Exception {
310     doTest();
311   }
312
313   public void testReturnConstraintsWithCaptureIncorporationOfFreshVariables() throws Exception {
314     doTest();
315   }
316
317   public void testArrayTypeAssignability() throws Exception {
318     doTest();
319   }
320
321   public void testAcceptFirstPairOfCommonSupertypesDuringUpUpIncorporation() throws Exception {
322     doTest();
323   }
324
325   public void testDiamondWithExactMethodReferenceInside() throws Exception {
326     doTest();
327   }
328
329   public void testRecursiveCallsWithNestedInference() throws Exception {
330     doTest();
331   }
332
333   public void testIncorporationWithRawSubstitutors() throws Exception {
334     doTest();
335   }
336
337   public void testIncorporationOfBoundsAsTypeArguments() throws Exception {
338     doTest();
339   }
340
341   public void testEliminateIntersectionTypeWildcardElimination() throws Exception {
342     doTest();
343   }
344
345   public void testDoNotIgnoreConflictingUpperBounds() throws Exception {
346     doTest();
347   }
348
349   public void testCapturedWildcardWithArrayTypeBound() throws Exception {
350     doTest();
351   }
352
353   public void testPolyConditionalExpressionWithTargetPrimitive() throws Exception {
354     doTest();
355   }
356
357   public void testCaptureConstraint() throws Exception {
358     doTest();
359   }
360
361   public void testPullUncheckedWarningNotionThroughNestedCalls() throws Exception {
362     doTest();
363   }
364
365   public void testIDEA149774() throws Exception {
366     doTest();
367   }
368
369   public void testDisjunctionTypes() throws Exception {
370     doTest();
371   }
372
373   public void testPushErasedStateToArguments() throws Exception {
374     doTest();
375   }
376
377   public void testStopAtStandaloneConditional() throws Exception {
378     doTest();
379   }
380
381   public void testTransitiveInferenceVariableDependencies() throws Exception {
382     doTest();
383   }
384
385   public void testInferenceVariablesErasure() throws Exception {
386     doTest();
387   }
388
389   public void testUncheckedWarningConvertingToInferenceVariable() throws Exception {
390     doTest();
391   }
392
393   public void testUncheckedWarningDuringStrictSubtyping() throws Exception {
394     doTest();
395   }
396
397   public void testIDEA150688() throws Exception {
398     doTest();
399   }
400
401   public void testGlbValidityWithCapturedWildcards() throws Exception {
402     doTest();
403   }
404
405   public void testCapturedVariablesAcceptance() throws Exception {
406     doTest();
407   }
408
409   public void testPullingErrorMessagesFromSubExpressionsToTheTopLevel() throws Exception {
410     doTest();
411   }
412
413   public void testHighlightArgumentWithProblem() throws Exception {
414     doTest();
415   }
416
417   public void testIDEA153632() throws Exception {
418     doTest();
419   }
420
421   public void testPartialRawSubstitutionToAvoidInferringObjectsWhenRawExpected() throws Exception {
422     final UncheckedWarningLocalInspection localInspection = new UncheckedWarningLocalInspection();
423     enableInspectionTool(localInspection);
424     doTest(true);
425   }
426
427   public void testIDEA154278() throws Exception {
428     doTest();
429   }
430
431   public void testPrimitiveTypeInReturnConstraintWithUncheckedConversion() throws Exception {
432     doTest();
433   }
434
435   public void testPolyMethodCallOnLeftSideOfAssignment() throws Exception {
436     doTest();
437   }
438
439   public void testTreatConditionalExpressionAsPolyIfNewExpressionWithDiamondsIsUsed() throws Exception {
440     doTest();
441   }
442
443   public void testVariableNamesOfNestedCalls() throws Exception {
444     IdeaTestUtil.setTestVersion(JavaSdkVersion.JDK_1_8, getModule(), getTestRootDisposable());
445     String filePath = BASE_PATH + "/" + getTestName(false) + ".java";
446     configureByFile(filePath);
447     Collection<HighlightInfo> infos = doHighlighting();
448
449     List<String> tooltips = new ArrayList<>();
450
451     for (HighlightInfo info : infos) {
452       if (info.getSeverity() == HighlightSeverity.ERROR) {
453         tooltips.add(info.getToolTip());
454       }
455     }
456
457     boolean found = false;
458     for (String tooltip : tooltips) {
459       if (tooltip.contains("reason: no instance(s) of type variable(s) K, U exist so that Map&lt;K, U&gt; conforms to Function&lt;U, V&gt;")) {
460         found = true;
461         break;
462       }
463     }
464
465     if (!found) {
466       fail(StringUtil.join(tooltips, ", "));
467     }
468   }
469
470   public void testCreateFreshVariablesOnlyForWildcardPlacesDuringReturnTypeProcessing() throws Exception {
471     doTest();
472   }
473
474   public void testCapturedConversionDuringDirectSuperCheck() throws Exception {
475     doTest();
476   }
477
478   public void _testResolutionOrderForVariableCycles() throws Exception {
479     doTest();
480   }
481
482   public void testPostponeUnresolvedVariables() throws Exception {
483     doTest();
484   }
485
486   public void testErasureOfReturnTypeIffUncheckedConversionWasNecessaryDuringApplicabilityCheckOnly() throws Exception {
487     doTest();
488   }
489
490   public void testTwoDifferentParameterizationCheckWithInterfaceTypeArguments() throws Exception {
491     doTest();
492   }
493
494   private void doTest() throws Exception {
495     doTest(false);
496   }
497
498   private void doTest(final boolean checkWarnings) throws Exception {
499     IdeaTestUtil.setTestVersion(JavaSdkVersion.JDK_1_8, getModule(), getTestRootDisposable());
500     doTest(BASE_PATH + "/" + getTestName(false) + ".java", checkWarnings, false);
501   }
502 }