diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/AnnotatedMembersSearcher.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/AnnotatedMembersSearcher.java index 3a4b9ecfc1d0..ead9e3f235d3 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/AnnotatedMembersSearcher.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/findUsages/AnnotatedMembersSearcher.java @@ -21,25 +21,49 @@ import com.intellij.psi.search.GlobalSearchScope; import com.intellij.psi.search.LocalSearchScope; import com.intellij.psi.search.SearchScope; import com.intellij.psi.search.searches.AnnotatedElementsSearch; +import com.intellij.psi.stubs.StubIndex; import com.intellij.util.Processor; import com.intellij.util.QueryExecutor; +import org.jetbrains.annotations.NotNull; +import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; import org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement; import org.jetbrains.plugins.groovy.lang.psi.GroovyRecursiveElementVisitor; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMember; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; -import org.jetbrains.plugins.groovy.lang.psi.impl.synthetic.GroovyScriptClass; -import org.jetbrains.plugins.groovy.lang.stubs.GroovyCacheUtil; +import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrAnnotatedMemberIndex; import java.util.ArrayList; +import java.util.Collection; +import java.util.Collections; import java.util.List; /** * @author ven */ -public class AnnotatedMembersSearcher implements QueryExecutor { +public class AnnotatedMembersSearcher implements QueryExecutor { - public boolean execute(final AnnotatedElementsSearch.Parameters p, final Processor consumer) { + @NotNull + private static List getAnnotatedMemberCandidates(PsiClass clazz, GlobalSearchScope scope) { + final String name = clazz.getName(); + if (name == null) return Collections.emptyList(); + final Collection members = StubIndex.getInstance().get(GrAnnotatedMemberIndex.KEY, name, clazz.getProject(), scope); + if (members.isEmpty()) { + return Collections.emptyList(); + } + + final ArrayList result = new ArrayList(); + for (PsiElement element : members) { + if (element instanceof GroovyFile) { + element = ((GroovyFile)element).getPackageDefinition(); + } + if (element instanceof PsiModifierListOwner) { + result.add((PsiModifierListOwner)element); + } + } + return result; + } + + public boolean execute(final AnnotatedElementsSearch.Parameters p, final Processor consumer) { final PsiClass annClass = p.getAnnotationClass(); assert annClass.isAnnotationType() : "Annotation type should be passed to annotated members search"; @@ -48,29 +72,27 @@ public class AnnotatedMembersSearcher implements QueryExecutor candidates; if (scope instanceof GlobalSearchScope) { - candidates = GroovyCacheUtil.getAnnotatedMemberCandidates(annClass, ((GlobalSearchScope)scope)); + candidates = getAnnotatedMemberCandidates(annClass, ((GlobalSearchScope)scope)); } else { - PsiElement[] elements = ((LocalSearchScope)scope).getScope(); - final List collector = new ArrayList(); - for (PsiElement element : elements) { + candidates = new ArrayList(); + for (PsiElement element : ((LocalSearchScope)scope).getScope()) { if (element instanceof GroovyPsiElement) { ((GroovyPsiElement)element).accept(new GroovyRecursiveElementVisitor() { public void visitMethod(GrMethod method) { - collector.add(method); + candidates.add(method); } public void visitField(GrField field) { - collector.add(field); + candidates.add(field); } }); } } - candidates = collector.toArray(new PsiMember[collector.size()]); } - for (PsiMember candidate : candidates) { + for (PsiModifierListOwner candidate : candidates) { if (!AnnotatedElementsSearcher.isInstanceof(candidate, p.getTypes())) { continue; } @@ -78,10 +100,8 @@ public class AnnotatedMembersSearcher implements QueryExecutor inheritors = new ArrayList(); + final Collection refLists = StubIndex.getInstance().get(GrDirectInheritorsIndex.KEY, name, clazz.getProject(), scope); + for (GrReferenceList list : refLists) { + final PsiElement parent = list.getParent(); + if (parent instanceof GrTypeDefinition) { + inheritors.add(GrClassSubstitutor.getSubstitutedClass(((GrTypeDefinition)parent))); + } + } + final Collection classes = + StubIndex.getInstance().get(GrAnonymousClassIndex.KEY, name, clazz.getProject(), scope); + for (GrAnonymousClassDefinition aClass : classes) { + inheritors.add(aClass); + } + return inheritors.toArray(new PsiClass[inheritors.size()]); + } + public boolean execute(DirectClassInheritorsSearch.SearchParameters queryParameters, final Processor consumer) { final PsiClass clazz = queryParameters.getClassToProcess(); final SearchScope scope = queryParameters.getScope(); @@ -39,7 +70,7 @@ class GroovyDirectInheritorsSearcher implements QueryExecutor() { public PsiClass[] compute() { if (!clazz.isValid()) return PsiClass.EMPTY_ARRAY; - return GroovyCacheUtil.getDeriverCandidates(clazz, (GlobalSearchScope)scope); + return getDeriverCandidates(clazz, (GlobalSearchScope)scope); } }); for (final PsiClass candidate : candidates) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/toplevel/packaging/GrPackageDefinitionImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/toplevel/packaging/GrPackageDefinitionImpl.java index 55acc71f0f34..3041aa24363c 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/toplevel/packaging/GrPackageDefinitionImpl.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/impl/toplevel/packaging/GrPackageDefinitionImpl.java @@ -17,6 +17,9 @@ package org.jetbrains.plugins.groovy.lang.psi.impl.toplevel.packaging; import com.intellij.lang.ASTNode; +import com.intellij.psi.Modifier; +import com.intellij.psi.PsiModifierList; +import org.jetbrains.annotations.NonNls; import org.jetbrains.annotations.NotNull; import org.jetbrains.plugins.groovy.lang.parser.GroovyElementTypes; import org.jetbrains.plugins.groovy.lang.psi.GroovyElementVisitor; @@ -56,4 +59,15 @@ public class GrPackageDefinitionImpl extends GroovyPsiElementImpl implements GrP public GrModifierList getAnnotationList() { return (GrModifierList)findChildByType(GroovyElementTypes.MODIFIERS); } + + @Override + public PsiModifierList getModifierList() { + return getAnnotationList(); + } + + @Override + public boolean hasModifierProperty(@Modifier @NonNls @NotNull String name) { + final PsiModifierList list = getModifierList(); + return list != null && list.hasExplicitModifier(name); + } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrFileStub.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrFileStub.java index 0cf2e750f5aa..454c280d7bdc 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrFileStub.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrFileStub.java @@ -15,17 +15,63 @@ */ package org.jetbrains.plugins.groovy.lang.psi.stubs; -import com.intellij.psi.stubs.PsiFileStub; +import com.intellij.openapi.util.text.StringUtil; +import com.intellij.psi.stubs.PsiFileStubImpl; +import com.intellij.psi.tree.IStubFileElementType; +import com.intellij.util.ArrayUtil; import com.intellij.util.io.StringRef; +import org.jetbrains.plugins.groovy.lang.parser.GroovyParserDefinition; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; +import org.jetbrains.plugins.groovy.lang.psi.api.toplevel.packaging.GrPackageDefinition; +import org.jetbrains.plugins.groovy.lang.psi.stubs.elements.GrTypeDefinitionElementType; /** * @author ilyas */ -public interface GrFileStub extends PsiFileStub { - StringRef getPackageName(); +public class GrFileStub extends PsiFileStubImpl { + private final String[] myAnnotations; + private final StringRef myPackageName; + private final StringRef myName; + private final boolean isScript; - StringRef getName(); + public GrFileStub(GroovyFile file) { + super(file); + myPackageName = StringRef.fromString(file.getPackageName()); + myName = StringRef.fromString(StringUtil.trimEnd(file.getName(), ".groovy")); + isScript = file.isScript(); + final GrPackageDefinition definition = file.getPackageDefinition(); + if (definition != null) { + myAnnotations = GrTypeDefinitionElementType.getAnnotationNames(definition); + } else { + myAnnotations = ArrayUtil.EMPTY_STRING_ARRAY; + } + } - boolean isScript(); + public GrFileStub(StringRef packName, StringRef name, boolean isScript, String[] annotations) { + super(null); + myPackageName = packName; + myName = name; + this.isScript = isScript; + myAnnotations = annotations; + } + + public IStubFileElementType getType() { + return GroovyParserDefinition.GROOVY_FILE; + } + + public StringRef getPackageName() { + return myPackageName; + } + + public StringRef getName() { + return myName; + } + + public boolean isScript() { + return isScript; + } + + public String[] getAnnotations() { + return myAnnotations; + } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrStubUtils.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrStubUtils.java index 7a5d0c4fb816..9ecbce673657 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrStubUtils.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GrStubUtils.java @@ -58,5 +58,21 @@ public class GrStubUtils { dataStream.writeUTF(namepParameter); } } - } + } + + public static void writeStringArray(StubOutputStream dataStream, String[] array) throws IOException { + dataStream.writeByte(array.length); + for (String s : array) { + dataStream.writeName(s); + } + } + + public static String[] readStringArray(StubInputStream dataStream) throws IOException { + final byte b = dataStream.readByte(); + final String[] annNames = new String[b]; + for (int i = 0; i < b; i++) { + annNames[i] = dataStream.readName().toString(); + } + return annNames; + } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GroovyFileStubBuilder.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GroovyFileStubBuilder.java index 902f4b0cef96..53aa5f33101a 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GroovyFileStubBuilder.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/GroovyFileStubBuilder.java @@ -19,7 +19,6 @@ import com.intellij.psi.PsiFile; import com.intellij.psi.stubs.DefaultStubBuilder; import com.intellij.psi.stubs.StubElement; import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; -import org.jetbrains.plugins.groovy.lang.psi.stubs.impl.GrFileStubImpl; /** * @author ilyas @@ -27,7 +26,7 @@ import org.jetbrains.plugins.groovy.lang.psi.stubs.impl.GrFileStubImpl; public class GroovyFileStubBuilder extends DefaultStubBuilder { protected StubElement createStubForFile(final PsiFile file) { if (file instanceof GroovyFile && ((GroovyFile) file).isScript()) { - return new GrFileStubImpl((GroovyFile)file); + return new GrFileStub((GroovyFile)file); } return super.createStubForFile(file); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrFieldElementType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrFieldElementType.java index b909c710c179..1fe39965b9f0 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrFieldElementType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrFieldElementType.java @@ -21,16 +21,10 @@ import com.intellij.psi.stubs.IndexSink; import com.intellij.psi.stubs.StubElement; import com.intellij.psi.stubs.StubInputStream; import com.intellij.psi.stubs.StubOutputStream; -import com.intellij.util.ArrayUtil; -import com.intellij.util.Function; import com.intellij.util.containers.ContainerUtil; import com.intellij.util.io.StringRef; -import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.GrStubElementType; -import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList; -import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotation; import org.jetbrains.plugins.groovy.lang.psi.api.statements.GrField; -import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.GrFieldImpl; import org.jetbrains.plugins.groovy.lang.psi.stubs.GrFieldStub; import org.jetbrains.plugins.groovy.lang.psi.stubs.impl.GrFieldStubImpl; @@ -64,22 +58,7 @@ public class GrFieldElementType extends GrStubElementType } public GrFieldStub createStub(GrField psi, StubElement parentStub) { - final GrModifierList modifiers = psi.getModifierList(); - String[] annNames; - if (modifiers == null) { - annNames = ArrayUtil.EMPTY_STRING_ARRAY; - } - else { - final GrAnnotation[] annotations = modifiers.getAnnotations(); - annNames = ContainerUtil.map(annotations, new Function() { - @Nullable - public String fun(final GrAnnotation grAnnotation) { - final GrCodeReferenceElement element = grAnnotation.getClassReference(); - if (element == null) return null; - return element.getReferenceName(); - } - }, new String[annotations.length]); - } + String[] annNames = GrTypeDefinitionElementType.getAnnotationNames(psi); Set[] namedParametersArray = new Set[0]; if (psi instanceof GrFieldImpl){ diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrMethodElementType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrMethodElementType.java index 94504b059250..c242f4fe2245 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrMethodElementType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrMethodElementType.java @@ -20,15 +20,9 @@ import com.intellij.psi.stubs.IndexSink; import com.intellij.psi.stubs.StubElement; import com.intellij.psi.stubs.StubInputStream; import com.intellij.psi.stubs.StubOutputStream; -import com.intellij.util.Function; -import com.intellij.util.containers.ContainerUtil; import com.intellij.util.io.StringRef; -import org.jetbrains.annotations.Nullable; import org.jetbrains.plugins.groovy.lang.psi.GrStubElementType; -import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.GrModifierList; -import org.jetbrains.plugins.groovy.lang.psi.api.auxiliary.modifiers.annotation.GrAnnotation; import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMethod; -import org.jetbrains.plugins.groovy.lang.psi.api.types.GrCodeReferenceElement; import org.jetbrains.plugins.groovy.lang.psi.impl.statements.typedef.members.GrMethodImpl; import org.jetbrains.plugins.groovy.lang.psi.stubs.GrMethodStub; import org.jetbrains.plugins.groovy.lang.psi.stubs.GrStubUtils; @@ -37,7 +31,9 @@ import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrAnnotatedMemberIndex; import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrMethodNameIndex; import java.io.IOException; -import java.util.*; +import java.util.HashSet; +import java.util.List; +import java.util.Set; /** * @author ilyas @@ -57,42 +53,22 @@ public class GrMethodElementType extends GrStubElementType() { - @Nullable - public String fun(final GrAnnotation grAnnotation) { - final GrCodeReferenceElement element = grAnnotation.getClassReference(); - if (element == null) return null; - return element.getReferenceName(); - } - }, new String[annotations.length]); - Set[] namedParametersArray; - namedParametersArray = psi.getNamedParametersArray(); - - return new GrMethodStubImpl(parentStub, StringRef.fromString(psi.getName()), annNames, namedParametersArray); + return new GrMethodStubImpl(parentStub, StringRef.fromString(psi.getName()), GrTypeDefinitionElementType.getAnnotationNames(psi), + psi.getNamedParametersArray()); } public void serialize(GrMethodStub stub, StubOutputStream dataStream) throws IOException { dataStream.writeName(stub.getName()); - final String[] annotations = stub.getAnnotations(); - dataStream.writeByte(annotations.length); - for (String s : annotations) { - dataStream.writeName(s); - } + GrStubUtils.writeStringArray(dataStream, stub.getAnnotations()); final Set[] namedParameters = stub.getNamedParameters(); GrStubUtils.serializeCollectionsArray(dataStream, namedParameters); } - + public GrMethodStub deserialize(StubInputStream dataStream, StubElement parentStub) throws IOException { StringRef ref = dataStream.readName(); - final byte b = dataStream.readByte(); - final String[] annNames = new String[b]; - for (int i = 0; i < b; i++) { - annNames[i] = dataStream.readName().toString(); - } + final String[] annNames = GrStubUtils.readStringArray(dataStream); final List> namedParametersSets = GrStubUtils.deserializeCollectionsArray(dataStream); return new GrMethodStubImpl(parentStub, ref, annNames, namedParametersSets.toArray(new HashSet[0])); diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java index 70a7da0e41a1..3dd1dec6fc2e 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrStubFileElementType.java @@ -21,8 +21,9 @@ import com.intellij.psi.stubs.*; import com.intellij.psi.tree.IStubFileElementType; import com.intellij.util.io.StringRef; import org.jetbrains.plugins.groovy.lang.psi.stubs.GrFileStub; +import org.jetbrains.plugins.groovy.lang.psi.stubs.GrStubUtils; import org.jetbrains.plugins.groovy.lang.psi.stubs.GroovyFileStubBuilder; -import org.jetbrains.plugins.groovy.lang.psi.stubs.impl.GrFileStubImpl; +import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrAnnotatedMemberIndex; import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrFullScriptNameIndex; import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrScriptClassNameIndex; @@ -43,7 +44,7 @@ public class GrStubFileElementType extends IStubFileElementType { @Override public int getStubVersion() { - return super.getStubVersion() + 5; + return super.getStubVersion() + 6; } public String getExternalId() { @@ -60,6 +61,7 @@ public class GrStubFileElementType extends IStubFileElementType { dataStream.writeName(stub.getPackageName().toString()); dataStream.writeName(stub.getName().toString()); dataStream.writeBoolean(stub.isScript()); + GrStubUtils.writeStringArray(dataStream, stub.getAnnotations()); } @Override @@ -67,7 +69,7 @@ public class GrStubFileElementType extends IStubFileElementType { StringRef packName = dataStream.readName(); StringRef name = dataStream.readName(); boolean isScript = dataStream.readBoolean(); - return new GrFileStubImpl(packName, name, isScript); + return new GrFileStub(packName, name, isScript, GrStubUtils.readStringArray(dataStream)); } public void indexStub(GrFileStub stub, IndexSink sink) { @@ -78,6 +80,10 @@ public class GrStubFileElementType extends IStubFileElementType { final String fqn = pName == null || pName.length() == 0 ? name : pName + "." + name; sink.occurrence(GrFullScriptNameIndex.KEY, fqn.hashCode()); } + + for (String anno : stub.getAnnotations()) { + sink.occurrence(GrAnnotatedMemberIndex.KEY, anno); + } } } diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrTypeDefinitionElementType.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrTypeDefinitionElementType.java index 5cb77de6737b..3caa45dfa5f4 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrTypeDefinitionElementType.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/elements/GrTypeDefinitionElementType.java @@ -17,6 +17,7 @@ package org.jetbrains.plugins.groovy.lang.psi.stubs.elements; import com.intellij.openapi.util.text.StringUtil; import com.intellij.psi.PsiModifierList; +import com.intellij.psi.PsiModifierListOwner; import com.intellij.psi.PsiNameHelper; import com.intellij.psi.impl.java.stubs.index.JavaFullClassNameIndex; import com.intellij.psi.impl.java.stubs.index.JavaShortClassNameIndex; @@ -59,7 +60,7 @@ public abstract class GrTypeDefinitionElementType annoNames = CollectionFactory.arrayList(); final PsiModifierList modifierList = psi.getModifierList(); if (modifierList instanceof GrModifierList) { diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/impl/GrFileStubImpl.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/impl/GrFileStubImpl.java deleted file mode 100644 index 6a810c1247ec..000000000000 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/impl/GrFileStubImpl.java +++ /dev/null @@ -1,63 +0,0 @@ -/* - * Copyright 2000-2009 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.plugins.groovy.lang.psi.stubs.impl; - -import com.intellij.openapi.util.text.StringUtil; -import com.intellij.psi.stubs.PsiFileStubImpl; -import com.intellij.psi.tree.IStubFileElementType; -import com.intellij.util.io.StringRef; -import org.jetbrains.plugins.groovy.lang.parser.GroovyParserDefinition; -import org.jetbrains.plugins.groovy.lang.psi.GroovyFile; -import org.jetbrains.plugins.groovy.lang.psi.stubs.GrFileStub; - -/** - * @author ilyas - */ -public class GrFileStubImpl extends PsiFileStubImpl implements GrFileStub { - private final StringRef myPackageName; - private final StringRef myName; - private final boolean isScript; - - public GrFileStubImpl(GroovyFile file) { - super(file); - myPackageName = StringRef.fromString(file.getPackageName()); - myName = StringRef.fromString(StringUtil.trimEnd(file.getName(), ".groovy")); - isScript = file.isScript(); - } - - public GrFileStubImpl(StringRef packName, StringRef name, boolean isScript) { - super(null); - myPackageName = packName; - myName = name; - this.isScript = isScript; - } - - public IStubFileElementType getType() { - return GroovyParserDefinition.GROOVY_FILE; - } - - public StringRef getPackageName() { - return myPackageName; - } - - public StringRef getName() { - return myName; - } - - public boolean isScript() { - return isScript; - } -} diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/index/GrAnnotatedMemberIndex.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/index/GrAnnotatedMemberIndex.java index 1b8a5368bd1f..ec2e377773aa 100644 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/index/GrAnnotatedMemberIndex.java +++ b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/psi/stubs/index/GrAnnotatedMemberIndex.java @@ -15,17 +15,17 @@ */ package org.jetbrains.plugins.groovy.lang.psi.stubs.index; -import com.intellij.psi.PsiMember; +import com.intellij.psi.PsiElement; import com.intellij.psi.stubs.StringStubIndexExtension; import com.intellij.psi.stubs.StubIndexKey; /** * @author ilyas */ -public class GrAnnotatedMemberIndex extends StringStubIndexExtension { - public static final StubIndexKey KEY = StubIndexKey.createIndexKey("gr.annot.members"); +public class GrAnnotatedMemberIndex extends StringStubIndexExtension { + public static final StubIndexKey KEY = StubIndexKey.createIndexKey("gr.annot.members"); - public StubIndexKey getKey() { + public StubIndexKey getKey() { return KEY; } } \ No newline at end of file diff --git a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/stubs/GroovyCacheUtil.java b/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/stubs/GroovyCacheUtil.java deleted file mode 100644 index 90484d43d8a9..000000000000 --- a/plugins/groovy/src/org/jetbrains/plugins/groovy/lang/stubs/GroovyCacheUtil.java +++ /dev/null @@ -1,70 +0,0 @@ -/* - * Copyright 2000-2009 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. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ -package org.jetbrains.plugins.groovy.lang.stubs; - -import com.intellij.psi.PsiClass; -import com.intellij.psi.PsiElement; -import com.intellij.psi.PsiMember; -import com.intellij.psi.search.GlobalSearchScope; -import com.intellij.psi.stubs.StubIndex; -import org.jetbrains.annotations.NotNull; -import org.jetbrains.plugins.groovy.lang.psi.GrClassSubstitutor; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrAnonymousClassDefinition; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrReferenceList; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition; -import org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.members.GrMember; -import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrAnnotatedMemberIndex; -import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrAnonymousClassIndex; -import org.jetbrains.plugins.groovy.lang.psi.stubs.index.GrDirectInheritorsIndex; - -import java.util.ArrayList; -import java.util.Collection; - -/** - * @author ilyas - */ -public abstract class GroovyCacheUtil { - - @NotNull - public static PsiMember[] getAnnotatedMemberCandidates(PsiClass clazz, GlobalSearchScope scope) { - final String name = clazz.getName(); - if (name == null) return GrMember.EMPTY_ARRAY; - final Collection members = StubIndex.getInstance().get(GrAnnotatedMemberIndex.KEY, name, clazz.getProject(), scope); - return members.toArray(new PsiMember[members.size()]); - } - - @NotNull - public static PsiClass[] getDeriverCandidates(PsiClass clazz, GlobalSearchScope scope) { - final String name = clazz.getName(); - if (name == null) return GrTypeDefinition.EMPTY_ARRAY; - final ArrayList inheritors = new ArrayList(); - final Collection refLists = StubIndex.getInstance().get(GrDirectInheritorsIndex.KEY, name, clazz.getProject(), scope); - for (GrReferenceList list : refLists) { - final PsiElement parent = list.getParent(); - if (parent instanceof GrTypeDefinition) { - inheritors.add(GrClassSubstitutor.getSubstitutedClass(((GrTypeDefinition)parent))); - } - } - final Collection classes = - StubIndex.getInstance().get(GrAnonymousClassIndex.KEY, name, clazz.getProject(), scope); - for (GrAnonymousClassDefinition aClass : classes) { - inheritors.add(aClass); - } - return inheritors.toArray(new PsiClass[inheritors.size()]); - } - - -}