From 679ab258964cfc3d227524cbbf9b35ec3d4c5680 Mon Sep 17 00:00:00 2001 From: Roman Shevchenko Date: Sat, 2 Jun 2012 09:20:57 +0400 Subject: [PATCH] Method reverences language level highlighting --- .../daemon/impl/analysis/HighlightUtil.java | 8 +++++++- .../daemon/impl/analysis/HighlightVisitorImpl.java | 8 +++++++- .../src/com/intellij/psi/JavaElementVisitor.java | 6 +++++- .../tree/java/PsiMethodReferenceExpressionImpl.java | 10 ++++++++++ .../src/messages/JavaErrorMessages.properties | 1 + .../advHighlighting/UnsupportedFeatures.java | 2 ++ 6 files changed, 32 insertions(+), 3 deletions(-) diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java index dc00abd0ea0c..9ed08267b807 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightUtil.java @@ -2538,7 +2538,8 @@ public class HighlightUtil { TRY_WITH_RESOURCES(LanguageLevel.JDK_1_7, "feature.try.with.resources"), BIN_LITERALS(LanguageLevel.JDK_1_7, "feature.binary.literals"), UNDERSCORES(LanguageLevel.JDK_1_7, "feature.underscores.in.literals"), - EXTENSION_METHODS(LanguageLevel.JDK_1_8, "feature.extension.methods"); + EXTENSION_METHODS(LanguageLevel.JDK_1_8, "feature.extension.methods"), + METHOD_REFERENCES(LanguageLevel.JDK_1_8, "feature.method.references"); private final LanguageLevel level; private final String key; @@ -2606,4 +2607,9 @@ public class HighlightUtil { public static HighlightInfo checkExtensionMethodsFeature(final PsiMethod method) { return checkFeature(method, Feature.EXTENSION_METHODS); } + + @Nullable + public static HighlightInfo checkMethodReferencesFeature(final PsiMethodReferenceExpression expression) { + return checkFeature(expression, Feature.METHOD_REFERENCES); + } } diff --git a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java index 445f04be73e3..b857ebfe536a 100644 --- a/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java +++ b/java/java-impl/src/com/intellij/codeInsight/daemon/impl/analysis/HighlightVisitorImpl.java @@ -892,7 +892,13 @@ public class HighlightVisitorImpl extends JavaElementVisitor implements Highligh if (!myHolder.hasErrorResults()) myHolder.add(HighlightUtil.checkClassReferenceAfterQualifier(expression, resolved)); } - @Override public void visitReferenceList(PsiReferenceList list) { + @Override + public void visitMethodReferenceExpression(PsiMethodReferenceExpression expression) { + myHolder.add(HighlightUtil.checkMethodReferencesFeature(expression)); + } + + @Override + public void visitReferenceList(PsiReferenceList list) { if (list.getFirstChild() == null) return; PsiElement parent = list.getParent(); if (!(parent instanceof PsiTypeParameter)) { diff --git a/java/java-psi-api/src/com/intellij/psi/JavaElementVisitor.java b/java/java-psi-api/src/com/intellij/psi/JavaElementVisitor.java index 7ece4a6065ae..ddd54ad680e5 100644 --- a/java/java-psi-api/src/com/intellij/psi/JavaElementVisitor.java +++ b/java/java-psi-api/src/com/intellij/psi/JavaElementVisitor.java @@ -1,5 +1,5 @@ /* - * Copyright 2000-2009 JetBrains s.r.o. + * Copyright 2000-2012 JetBrains s.r.o. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -244,6 +244,10 @@ public abstract class JavaElementVisitor extends PsiElementVisitor { */ public void visitReferenceExpression(PsiReferenceExpression expression) {} + public void visitMethodReferenceExpression(PsiMethodReferenceExpression expression) { + visitReferenceExpression(expression); + } + public void visitReferenceList(PsiReferenceList list) { visitElement(list); } diff --git a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java index ad21de8a54f2..8bdb19b1d74c 100644 --- a/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java +++ b/java/java-psi-impl/src/com/intellij/psi/impl/source/tree/java/PsiMethodReferenceExpressionImpl.java @@ -104,6 +104,16 @@ public class PsiMethodReferenceExpressionImpl extends PsiReferenceExpressionBase return element.getManager().areElementsEquivalent(element, resolve()); } + @Override + public void accept(@NotNull final PsiElementVisitor visitor) { + if (visitor instanceof JavaElementVisitor) { + ((JavaElementVisitor)visitor).visitMethodReferenceExpression(this); + } + else { + visitor.visitElement(this); + } + } + @Override public String toString() { return "PsiMethodReferenceExpression:" + getText(); diff --git a/java/java-psi-impl/src/messages/JavaErrorMessages.properties b/java/java-psi-impl/src/messages/JavaErrorMessages.properties index 51d626aaedbe..af50af742652 100644 --- a/java/java-psi-impl/src/messages/JavaErrorMessages.properties +++ b/java/java-psi-impl/src/messages/JavaErrorMessages.properties @@ -353,4 +353,5 @@ feature.try.with.resources=Try-with-resources feature.binary.literals=Binary literals feature.underscores.in.literals=Underscores in literals feature.extension.methods=Extension methods +feature.method.references=Method references insufficient.language.level={0} are not supported at this language level diff --git a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnsupportedFeatures.java b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnsupportedFeatures.java index 0aa0409aa34d..d4ca889750a1 100644 --- a/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnsupportedFeatures.java +++ b/java/java-tests/testData/codeInsight/daemonCodeAnalyzer/advHighlighting/UnsupportedFeatures.java @@ -37,6 +37,8 @@ class UnsupportedFeatures { catch (FileNotFoundException | IOException e) { e.printStackTrace(); } try (Reader r = new FileReader("/dev/null")) { } + + I i = UnsupportedFeatures::m; } interface I {