From 4b6d8343f3a2f144bc2598274ea09418d9b65a9e Mon Sep 17 00:00:00 2001 From: peter Date: Mon, 23 May 2011 15:40:37 +0200 Subject: [PATCH] no exponent in processing groovy 1.8 script fields (IDEA-69871) --- .../psi/impl/synthetic/GroovyScriptClass.java | 31 ++++++++++++------- .../groovy/lang/GroovyStressTest.groovy | 5 +++ 2 files changed, 24 insertions(+), 12 deletions(-) diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java index f1ef804feca0..4603dadb39e9 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/synthetic/GroovyScriptClass.java @@ -17,9 +17,7 @@ package org.jetbrains.plugins.groovy.lang.psi.impl.synthetic; import com.intellij.navigation.ItemPresentation; import com.intellij.openapi.editor.colors.TextAttributesKey; -import com.intellij.openapi.util.Key; -import com.intellij.openapi.util.Pair; -import com.intellij.openapi.util.TextRange; +import com.intellij.openapi.util.*; import com.intellij.psi.*; import com.intellij.psi.impl.ElementBase; import com.intellij.psi.impl.ElementPresentationUtil; @@ -355,20 +353,29 @@ public class GroovyScriptClass extends LightElement implements GrMemberOwner, Sy return CachedValuesManager.getManager(getProject()).getCachedValue(this, new CachedValueProvider>() { @Override public Result> compute() { - final List result = new ArrayList(); - myFile.accept(new PsiRecursiveElementWalkingVisitor() { + List result = RecursionManager.createGuard("groovy.scriptFields").doPreventingRecursion(GroovyScriptClass.this, new Computable>() { @Override - public void visitElement(PsiElement element) { - if (element instanceof GrVariableDeclaration && - ((GrVariableDeclaration)element).getModifierList().findAnnotation(GroovyCommonClassNames.GROOVY_TRANSFORM_FIELD) != null) { - Collections.addAll(result, ((GrVariableDeclaration)element).getVariables()); - } + public List compute() { + final List result = new ArrayList(); + myFile.accept(new PsiRecursiveElementWalkingVisitor() { + @Override + public void visitElement(PsiElement element) { + if (element instanceof GrVariableDeclaration && + ((GrVariableDeclaration)element).getModifierList().findAnnotation(GroovyCommonClassNames.GROOVY_TRANSFORM_FIELD) != null) { + Collections.addAll(result, ((GrVariableDeclaration)element).getVariables()); + } - super.visitElement(element); + super.visitElement(element); + } + }); + return result; } }); - return Result.create(result, PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT, myFile); + if (result == null) { + result = Collections.emptyList(); + } + return Result.create(result, PsiModificationTracker.JAVA_STRUCTURE_MODIFICATION_COUNT, myFile); } }); } diff --git a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStressTest.groovy b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStressTest.groovy index c8649250cdca..ea807a150da2 100644 --- a/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStressTest.groovy +++ b/plugins/groovy/test/org/jetbrains/plugins/groovy/lang/GroovyStressTest.groovy @@ -128,4 +128,9 @@ class GroovyStressTest extends LightCodeInsightFixtureTestCase { } + public void testManyAnnotatedScriptVariables() { + myFixture.configureByText("a.groovy", (0..100).collect { "@Anno String i$it = null" }.join("\n")) + IdeaTestUtil.assertTiming "slow", 10000, { myFixture.doHighlighting() } + } + }