highlight diamonds as type parameter list (IDEA-156859)

This commit is contained in:
Anna Kozlova
2016-06-06 12:55:22 +03:00
parent 1032e663d7
commit 1fcb534fcb
15 changed files with 28 additions and 28 deletions

View File

@@ -125,7 +125,7 @@ public class GenericsHighlightUtil {
if (referenceElements.length == 1 && referenceElements[0].getType() instanceof PsiDiamondType) {
if (!typeParameterListOwner.hasTypeParameters()) {
final String description = JavaErrorMessages.message("generics.diamond.not.applicable");
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(referenceElements[0]).descriptionAndTooltip(description).create();
return HighlightInfo.newHighlightInfo(HighlightInfoType.ERROR).range(referenceParameterList).descriptionAndTooltip(description).create();
}
inferenceResult = ((PsiDiamondType)referenceElements[0].getType()).resolveInferredTypes();
final String errorMessage = inferenceResult.getErrorMessage();
@@ -133,7 +133,7 @@ public class GenericsHighlightUtil {
final PsiType expectedType = detectExpectedType(referenceParameterList);
if (!(inferenceResult.failedToInfer() && expectedType instanceof PsiClassType && ((PsiClassType)expectedType).isRaw())) {
return HighlightInfo
.newHighlightInfo(HighlightInfoType.ERROR).range(referenceElements[0]).descriptionAndTooltip(errorMessage).create();
.newHighlightInfo(HighlightInfoType.ERROR).range(referenceParameterList).descriptionAndTooltip(errorMessage).create();
}
}
}

View File

@@ -85,7 +85,7 @@ class MyTest {
class NonParameterized {
void foo() {
new NonParameterized<<error descr="Diamond operator is not applicable for non-parameterized types"></error>>();
new NonParameterized<error descr="Diamond operator is not applicable for non-parameterized types"><></error>();
}
}
@@ -95,14 +95,14 @@ interface I<T> {
}
class FI1 {
I<? extends String> i1 = new I<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {
I<? extends String> i1 = new I<error descr="Cannot use ''<>'' with anonymous inner classes"><></error>() {
@Override
public String m() {
return null;
}
};
I<?> i2 = new I<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {
I<?> i2 = new I<error descr="Cannot use ''<>'' with anonymous inner classes"><></error>() {
@Override
public Object m() {
return null;
@@ -126,9 +126,9 @@ class TestLocal<X> {
void test() {
class Local {}
Member m = new Member<<error descr="Diamond operator is not applicable for non-parameterized types"></error>>();
Nested n = new Nested<<error descr="Diamond operator is not applicable for non-parameterized types"></error>>();
Local l = new Local<<error descr="Diamond operator is not applicable for non-parameterized types"></error>>();
Member m = new Member<error descr="Diamond operator is not applicable for non-parameterized types"><></error>();
Nested n = new Nested<error descr="Diamond operator is not applicable for non-parameterized types"><></error>();
Local l = new Local<error descr="Diamond operator is not applicable for non-parameterized types"><></error>();
}
}
@@ -178,7 +178,7 @@ class PredefinedErrorsOverRaw<T> {
}
void test() {
PredefinedErrorsOverRaw mc = new <Boolean>PredefinedErrorsOverRaw<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>("");
PredefinedErrorsOverRaw mc = new <Boolean>PredefinedErrorsOverRaw<error descr="Cannot use diamonds with explicit type parameters for constructor"><></error>("");
}
}

View File

@@ -4,7 +4,7 @@ class Neg12 {
<T> Foo(T t) {}
}
Foo<Integer> fi1 = new <String> Foo<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>(1);
Foo<Integer> fi1 = new <String> Foo<error descr="Cannot use diamonds with explicit type parameters for constructor"><></error>(1);
Foo<Integer> fi2 = new <<error descr="Actual type argument and inferred type contradict each other">String</error>> Foo<Integer>(1);
Foo<Integer> fi3 = new Foo<Integer>(1);
}

View File

@@ -4,6 +4,6 @@ class Neg13 {
<T> Foo(T t) {}
}
Foo<Integer> fi1 = new <String, Integer> Foo<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>("");
Foo<Integer> fi1 = new <String, Integer> Foo<error descr="Cannot use diamonds with explicit type parameters for constructor"><></error>("");
Foo<Integer> fi2 = new <error descr="Wrong number of type arguments: 2; required: 1"><String, Integer></error> Foo<Integer>("");
}

View File

@@ -4,6 +4,6 @@ class Neg14 {
<T extends Integer> Foo(T t) {}
}
Foo<Integer> fi1 = new <String> Foo<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>(1);
Foo<Integer> fi1 = new <String> Foo<error descr="Cannot use diamonds with explicit type parameters for constructor"><></error>(1);
Foo<Integer> fi2 = new <<error descr="Actual type argument and inferred type contradict each other">String</error>> Foo<Integer>(1);
}

View File

@@ -6,8 +6,8 @@ class Pos8 {
Foo<Integer> fi1 = new Foo<>(1);
Foo<Integer> fi2 = new Foo<Integer>(1);
Foo<Integer> fi3 = new <String> Foo<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>(1);
Foo<Integer> fi3 = new <String> Foo<error descr="Cannot use diamonds with explicit type parameters for constructor"><></error>(1);
Foo<Integer> fi4 = new <String> Foo<Integer>(1);
Foo<Integer> fi5 = new <String, String> Foo<<error descr="Cannot use diamonds with explicit type parameters for constructor"></error>>(1);
Foo<Integer> fi5 = new <String, String> Foo<error descr="Cannot use diamonds with explicit type parameters for constructor"><></error>(1);
Foo<Integer> fi6 = new <String, String> Foo<Integer>(1);
}

View File

@@ -1,5 +1,5 @@
class Neg08 {
public static void main(String[] args) {
String s = new String<<error descr="Diamond operator is not applicable for non-parameterized types"></error>>("foo");
String s = new String<error descr="Diamond operator is not applicable for non-parameterized types"><></error>("foo");
}
}

View File

@@ -4,12 +4,12 @@ class Neg09 {
static class Nested<X> {}
void testSimple() {
Member<?> m1 = new Member<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {};
Nested<?> m2 = new Nested<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {};
Member<?> m1 = new Member<error descr="Cannot use ''<>'' with anonymous inner classes"><></error>() {};
Nested<?> m2 = new Nested<error descr="Cannot use ''<>'' with anonymous inner classes"><></error>() {};
}
void testQualified() {
Member<?> m1 = this.new Member<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {};
Nested<?> m2 = new Neg09.Nested<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {};
Member<?> m1 = this.new Member<error descr="Cannot use ''<>'' with anonymous inner classes"><></error>() {};
Nested<?> m2 = new Neg09.Nested<error descr="Cannot use ''<>'' with anonymous inner classes"><></error>() {};
}
}

View File

@@ -4,6 +4,6 @@ import java.util.List;
class Test {
{
List<List<String>> l = new ArrayList<List<<error descr="Cannot infer arguments"></error>>>();
List<List<String>> l = new ArrayList<List<error descr="Cannot infer arguments"><></error>>();
}
}

View File

@@ -1,6 +1,6 @@
class A<T> {}
class Foo<K extends A<K>> {
{
Foo foo = new Foo<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {};
Foo foo = new Foo<error descr="Cannot use ''<>'' with anonymous inner classes"><></error>() {};
}
}

View File

@@ -4,6 +4,6 @@ class Foo<E extends List<String> & Runnable> {
Foo() {}
{
Foo foo = new Foo<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>() {};
Foo foo = new Foo<error descr="Cannot use ''<>'' with anonymous inner classes"><></error>() {};
}
}

View File

@@ -10,6 +10,6 @@ class Foo<E> {
Foo(E e, E e1) {}
{
Foo foo = new Foo<<error descr="Cannot use ''<>'' with anonymous inner classes"></error>>(new B.C(), new B.D()) {};
Foo foo = new Foo<error descr="Cannot use ''<>'' with anonymous inner classes"><></error>(new B.C(), new B.D()) {};
}
}

View File

@@ -1,6 +1,6 @@
class Test {
{
D<String> ds = new D<<error descr="Cannot infer arguments (unable to resolve constructor)"></error>>(9);
D<String> ds = new D<error descr="Cannot infer arguments (unable to resolve constructor)"><></error>(9);
}
}

View File

@@ -1,14 +1,14 @@
class Test {
{
Holder h = null;
Result<String> r1 = new Result<<error descr="Cannot infer arguments"></error>>(h);
Result<String> r1 = new Result<error descr="Cannot infer arguments"><></error>(h);
Result<String> r2 = Result.create<error descr="'create(K)' in 'Result' cannot be applied to '(Holder)'">(h)</error>;
Holder dataHolder = null;
Result<String> r3 = new Result<<error descr="Cannot infer arguments"></error>>(new Holder<>(dataHolder));
Result<String> r3 = new Result<error descr="Cannot infer arguments"><></error>(new Holder<>(dataHolder));
Result<String> r4 = Result.create<error descr="'create(K)' in 'Result' cannot be applied to '(Holder<E>)'">(new Holder<>(dataHolder))</error>;
Result<String> r5 = new Result<<error descr="Cannot infer arguments"></error>>(Holder.create(dataHolder));
Result<String> r5 = new Result<error descr="Cannot infer arguments"><></error>(Holder.create(dataHolder));
Result<String> r6 = Result.create<error descr="'create(K)' in 'Result' cannot be applied to '(Holder)'">(Holder.create(dataHolder))</error>;
}

View File

@@ -29,7 +29,7 @@ public class ConcurrentCollectors {
static <T, K, D, M1 extends Map<K, D>> C<T, M1> groupingBy(F<M1> f,
C<T, D> c,
BiConsumer<M1, T> consumer) {
return new CImpl<<error descr="Cannot infer arguments"></error>>(f, consumer, arg(c.getOp()));
return new CImpl<error descr="Cannot infer arguments"><></error>(f, consumer, arg(c.getOp()));
}
static <K, V, M2 extends ConcurrentMap<K, V>> BiOp<M2> arg(BiOp<V> op) {