[duplicates] enable duplicates analysis in PyCharm/WebStorm/PhpStorm/RubyMine
[idea/community.git] / java / java-tests / testSrc / com / intellij / java / codeInsight / daemon / lambda / GraphInferenceHighlightingTest.java
1 /*
2  * Copyright 2000-2017 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.java.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
26 import java.util.ArrayList;
27 import java.util.Collection;
28 import java.util.List;
29
30 public class GraphInferenceHighlightingTest extends LightDaemonAnalyzerTestCase {
31   private static final String BASE_PATH = "/codeInsight/daemonCodeAnalyzer/lambda/graphInference/";
32
33   public void testNestedCalls() { doTest(); }
34   public void testNestedCallsSameMethod() { doTest(); }
35   public void testChainedInference() { doTest(); }
36   public void testChainedInference1() { doTest(); }
37   public void testReturnStmt() { doTest(); }
38   public void testInferenceFromSiblings() { doTest(); }
39   public void testChainedInferenceTypeParamsOrderIndependent() { doTest(); }
40   public void testCyclicParamsDependency() { doTest(); }
41   public void testInferenceForFirstArg() { doTest(); }
42   public void testConditionalExpressionsInference() { doTest(); }
43   public void testInferenceFromTypeParamsBounds() { doTest(); }
44   public void testInferenceFromNotEqualTypeParamsBounds() { doTest(); }
45   public void testSOEDuringInferenceFromParamBounds() { doTest(); }
46   public void testDiamondsUsedToDetectArgumentType() { doTest(); }
47   public void testInferFromTypeArgs() { doTest(); }
48   public void testDefaultConstructorAsArgument() { doTest(); }
49   public void testAfterAbstractPipeline() { doTest(); }
50   public void testCapturedReturnTypes() { doTest(); }
51   public void testClsCapturedReturnTypes() { doTest(); }
52   public void testOverloadChooserOfReturnType() { doTest(); }
53   public void testIDEA98866() { doTest(); }
54   public void testIncompleteSubstitution() { doTest(); }
55   public void testJDK8028774() { doTest(); }
56   public void testErasedByReturnConstraint() { doTest(); }
57   public void testIDEA104429() { doTest(); }
58   public void testTargetTypeByOverloadedMethod() { doTest(); }
59   public void testTargetTypeByOverloadedMethod2() { doTest(); }
60   public void testGrandParentTypeParams() { doTest(); }
61   public void testDeepCallsChain() { doTest(); }
62   public void testArrayPassedToVarargsMethod() { doTest(); }
63   public void testIDEA121055() { doTest(); }
64   public void testTargetTypeByAnonymousClass() { doTest(); }
65   public void testStaticInheritorsAmbiguity() { doTest(); }
66   public void testNestedCalls1() { doTest(); }
67   public void testMostSpecificVarargsCase() { doTest(); }
68   public void testLiftedCaptureToOuterCall() { doTest(); }
69   public void testSiteSubstitutionForReturnConstraint() { doTest(); }
70   public void testSiteSubstitutionInExpressionConstraints() { doTest(); }
71   public void testIncorporationWithEqualsBoundsSubstitution() { doTest(); }
72   public void testOuterCallConflictResolution() { doTest(); }
73   public void testVarargsOnNonPertinentPlace() { doTest(); }
74   public void testRawTypeFromParent() { doTest(); }
75   public void testRawTypeFromParentArrayType() { doTest(); }
76   public void testInferFromConditionalExpressionCondition() { doTest(); }
77   public void testPrimitiveWrapperConditionInReturnConstraint() { doTest(); }
78   public void testIDEA128174() { doTest(); }
79   public void testIDEA128101() { doTest(); }
80   public void testOuterCallOverloads() { doTest(); }
81   public void testIDEA127928() { doTest(); }
82   public void testIDEA128766() { doTest(); }
83   public void testSameMethodNestedChainedCallsNearFunctionInterfaces() { doTest(); }
84   public void testInfiniteTypes() { doTest(); }
85   public void testIDEA126163() { doTest(); }
86   public void testIncompatibleBoundsFromAssignment() { doTest(); }
87   public void testFreshVariablesCreatedDuringResolveDependingOnAlreadyResolvedVariables() { doTest(); }
88   public void testCallToGenericMethodsOfNonGenericClassInsideRawInheritor() { doTest(); }
89   public void testIDEA130549() { doTest(); }
90   public void testIDEA130547() { doTest(); }
91   public void testUncheckedConversionWithRecursiveTypeParams() { doTest(); }
92   public void testIDEA132725() { doTest(); }
93   public void testIDEA134277() { doTest(); }
94   public void testSameMethodCalledWithDifferentArgsResultingInDependenciesBetweenSameTypeParams() { doTest(); }
95   public void testNestedMethodCallsWithVarargs() { doTest(); }
96   public void testDisjunctionTypeEquality() { doTest(); }
97   public void testNestedConditionalExpressions() { doTest(); }
98   public void testOuterMethodCallOnRawType() { doTest(); }
99   public void testIDEA143390() { doTest(); }
100   public void testIntersectionWithArray() { doTest(); }
101   public void testIncorporationWithCaptureCalcGlbToGetOneTypeParameterBound() { doTest(); }
102   public void testEnumConstantInference() { doTest(); }
103   public void testReturnConstraintsWithCaptureIncorporationOfFreshVariables() { doTest(); }
104   public void testArrayTypeAssignability() { doTest(); }
105   public void testAcceptFirstPairOfCommonSupertypesDuringUpUpIncorporation() { doTest(); }
106   public void testDiamondWithExactMethodReferenceInside() { doTest(); }
107   public void testRecursiveCallsWithNestedInference() { doTest(); }
108   public void testIncorporationWithRawSubstitutors() { doTest(); }
109   public void testIncorporationOfBoundsAsTypeArguments() { doTest(); }
110   public void testEliminateIntersectionTypeWildcardElimination() { doTest(); }
111   public void testDoNotIgnoreConflictingUpperBounds() { doTest(); }
112   public void testCapturedWildcardWithArrayTypeBound() { doTest(); }
113   public void testPolyConditionalExpressionWithTargetPrimitive() { doTest(); }
114   public void testCaptureConstraint() { doTest(); }
115   public void testPullUncheckedWarningNotionThroughNestedCalls() { doTest(); }
116   public void testIDEA149774() { doTest(); }
117   public void testDisjunctionTypes() { doTest(); }
118   public void testValidIntersectionTypeWithCapturedBounds() { doTest(); }
119   public void testValidIntersectionTypeWithCapturedBounds1() { doTest(); }
120   public void testPushErasedStateToArguments() { doTest(); }
121   public void testStopAtStandaloneConditional() { doTest(); }
122   public void testTransitiveInferenceVariableDependencies() { doTest(); }
123   public void testInferenceVariablesErasure() { doTest(); }
124   public void testUncheckedWarningConvertingToInferenceVariable() { doTest(); }
125   public void testUncheckedWarningDuringStrictSubtyping() { doTest(); }
126   public void testIDEA150688() { doTest(); }
127   public void testGlbValidityWithCapturedWildcards() { doTest(); }
128   public void testCapturedVariablesAcceptance() { doTest(); }
129   public void testPullingErrorMessagesFromSubExpressionsToTheTopLevel() { doTest(); }
130   public void testHighlightArgumentWithProblem() { doTest(); }
131   public void testIDEA153632() { doTest(); }
132
133   public void testPartialRawSubstitutionToAvoidInferringObjectsWhenRawExpected() {
134     enableInspectionTool(new UncheckedWarningLocalInspection());
135     doTest(true);
136   }
137
138   public void testIDEA154278() { doTest(); }
139   public void testPrimitiveTypeInReturnConstraintWithUncheckedConversion() { doTest(); }
140   public void testPolyMethodCallOnLeftSideOfAssignment() { doTest(); }
141   public void testTreatConditionalExpressionAsPolyIfNewExpressionWithDiamondsIsUsed() { doTest(); }
142
143   public void testVariableNamesOfNestedCalls() {
144     IdeaTestUtil.setTestVersion(JavaSdkVersion.JDK_1_8, getModule(), getTestRootDisposable());
145     String filePath = BASE_PATH + getTestName(false) + ".java";
146     configureByFile(filePath);
147     Collection<HighlightInfo> infos = doHighlighting();
148
149     List<String> tooltips = new ArrayList<>();
150     for (HighlightInfo info : infos) {
151       if (info.getSeverity() == HighlightSeverity.ERROR) {
152         tooltips.add(info.getToolTip());
153       }
154     }
155
156     boolean found = false;
157     for (String tooltip : tooltips) {
158       if (tooltip.contains("no instance(s) of type variable(s) K, U exist so that Map&lt;K, U&gt; conforms to Function&lt;U, V&gt;")) {
159         found = true;
160         break;
161       }
162     }
163
164     if (!found) {
165       fail(StringUtil.join(tooltips, ", "));
166     }
167   }
168
169   public void testNameConflictBetweenFreshVariables() { doTest(); }
170   public void testOrderOfGenericsParameterizations() { doTest(); }
171   public void testLowerBoundAssignability() { doTest(); }
172   public void testCreateFreshVariablesOnlyForWildcardPlacesDuringReturnTypeProcessing() { doTest(); }
173   public void testCapturedConversionDuringDirectSuperCheck() { doTest(); }
174   //public void _testResolutionOrderForVariableCycles() { doTest(); }
175   public void testPostponeUnresolvedVariables() { doTest(); }
176   public void testErasureOfReturnTypeIffUncheckedConversionWasNecessaryDuringApplicabilityCheckOnly() { doTest(); }
177   public void testErasureOfReturnTypeIffUncheckedConversionWasNecessaryDuringApplicabilityCheckOnly1() { doTest(); }
178   public void testErasureOfReturnTypeIffUncheckedConversionWasNecessaryDuringApplicabilityCheckOnly2() { doTest(); }
179   public void testTwoDifferentParameterizationCheckWithInterfaceTypeArguments() { doTest(); }
180   public void testNonGenericInnerClassOfGenericsOuterInReturnType() { doTest(); }
181   public void testInferredApplicabilityForAnonymousClassConstructor() { doTest(); }
182   public void testNonGenericInnerClassOfGenericsOuterWithWildcardsInReturnType() { doTest(); }
183   public void testUncheckedConversionDuringProperTypeExpressionConstraintResolution() { doTest(); }
184   //public void _testAssignabilityOfStandaloneExpressionsDuringApplicabilityCheck() { doTest(); }
185   public void testRecursiveTypeWithCapture() { doTest(); }
186   public void testFreshVariablesDuringApplicabilityCheck() { doTest(); }
187   public void testPostponeConditionalExpressionErrorToMethodLevel() { doTest(); }
188   public void testNestedCallsWithFreshVariables() { doTest(); }
189
190   public void testPertinentToApplicabilityCheckForBlockLambda() { doTest(); }
191   public void testCheckGlbConflictsAfterIntersectionTypeCreated() { doTest(); }
192   public void testRestoreCapturedWildcardsInReturnTypesWhenNoAdditionalConstraintsDetected() { doTest(); }
193   public void testIntersectionWithSameInterfaceButDifferentTypeArgument() { doTest(); }
194   public void testVarargsMethodPreferred() { doTest(); }
195   public void testSameNamedFreshVariables() { doTest(); }
196   public void testEnsureOrderOfFreshVariablesWhenCaptureNonProperTypes() { doTest(); }
197   public void testFreshVariablesBounds() { doTest(); }
198   public void testRawInIntersection() { doTest(); }
199
200   public void testApplicabilityCheckFailsExpressionTypeCheckPasses() {
201     doTest();
202   }
203   public void testNotInferredVarShouldNotBeUsedForInferenceJava10() { doTest(); }
204   public void testJavac8UnCaptureBug() { doTest(); }
205   public void testLambdaInConditional() { doTest(); }
206   public void testTopLevelParentNoParameters() {
207     doTest();
208   }
209
210   private void doTest() {
211     doTest(false);
212   }
213
214   private void doTest(final boolean checkWarnings) {
215     IdeaTestUtil.setTestVersion(JavaSdkVersion.JDK_1_8, getModule(), getTestRootDisposable());
216     doTest(BASE_PATH + getTestName(false) + ".java", checkWarnings, false);
217   }
218 }