From daa264efff324accc69d1c49e25caa789a2e2683 Mon Sep 17 00:00:00 2001 From: "alexey.afanasiev" Date: Thu, 28 Jun 2018 16:13:07 +0300 Subject: [PATCH] IDEA-CR-34213 IDEA-194406 @ImmutableOptions and @KnownImmutable Groovy 2.5.0 support --- .../org/jetbrains/plugins/groovy/GroovyBundle.properties | 2 +- .../plugins/groovy/annotator/GroovyAnnotator25.kt | 3 ++- .../testdata/highlighting/v25/immutableFields.groovy | 7 ++++--- 3 files changed, 7 insertions(+), 5 deletions(-) diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/GroovyBundle.properties b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/GroovyBundle.properties index 1569ad3cca50..a00a918aac4b 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/GroovyBundle.properties +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/GroovyBundle.properties @@ -220,7 +220,7 @@ final.class.cannot.be.extended=Final class cannot be extended #Groovy 2.5 checks duplicating.named.parameter=Duplicate named parameter ''{0}'' occurs in parameters: {1} -field.should.be.immutable=Parameter ''{0}'' should have immutable type or be declared so with @ImmutableOptions +field.should.be.immutable=Field ''{0}'' should have immutable type or be declared so with @ImmutableOptions #Groovy 3.0 checks illegal.default.modifier=Modifier 'default' makes sense only in interface's methods diff --git a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator25.kt b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator25.kt index 5938f372482c..30b0581cf8ed 100644 --- a/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator25.kt +++ b/plugins/groovy/groovy-psi/src/org/jetbrains/plugins/groovy/annotator/GroovyAnnotator25.kt @@ -2,6 +2,7 @@ package org.jetbrains.plugins.groovy.annotator import com.intellij.lang.annotation.AnnotationHolder +import com.intellij.psi.PsiModifier import org.jetbrains.plugins.groovy.GroovyBundle import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField @@ -32,7 +33,7 @@ class GroovyAnnotator25(private val holder: AnnotationHolder) : GroovyElementVis private fun immutableCheck(field: GrField) { val containingClass = field.containingClass ?: return - if (field.isProperty && hasImmutableAnnotation(containingClass) && !isImmutable(field)) { + if (!field.hasModifierProperty(PsiModifier.STATIC) && hasImmutableAnnotation(containingClass) && !isImmutable(field)) { holder.createErrorAnnotation(field.nameIdentifierGroovy, GroovyBundle.message("field.should.be.immutable", field.name)) } } diff --git a/plugins/groovy/testdata/highlighting/v25/immutableFields.groovy b/plugins/groovy/testdata/highlighting/v25/immutableFields.groovy index f722c8fabe82..e61402c79a2e 100644 --- a/plugins/groovy/testdata/highlighting/v25/immutableFields.groovy +++ b/plugins/groovy/testdata/highlighting/v25/immutableFields.groovy @@ -6,13 +6,14 @@ import groovy.transform.KnownImmutable @Immutable class A { int a - private Iterator b - Iterator c + private Iterator b + private static Iterator b2 + Iterator c String d E e URI f Thread g - MuttableClass h + MuttableClass h MuttableClass h2 ImmuttableClass i Object[] j = new Object[1]