skip dummy file in resolve

This commit is contained in:
Maxim Medvedev
2011-04-15 16:00:24 +04:00
parent c74936f2ce
commit 6594cb2fe4
3 changed files with 19 additions and 11 deletions
@@ -56,7 +56,7 @@ import org.jetbrains.plugins.groovy.lang.psi.api.types.GrTypeElement;
*/
public abstract class GroovyPsiElementFactory {
@NonNls public static final String DUMMY_FILE_NAME = "DUMMY__.";
@NonNls public static final String DUMMY_FILE_NAME = "DUMMY__";
public static GroovyPsiElementFactory getInstance(Project project) {
return ServiceManager.getService(project, GroovyPsiElementFactory.class);
@@ -259,7 +259,7 @@ public class GroovyPsiElementFactoryImpl extends GroovyPsiElementFactory {
}
private GroovyFileImpl createDummyFile(String text, boolean physical) {
final String fileName = DUMMY_FILE_NAME + GroovyFileType.GROOVY_FILE_TYPE.getDefaultExtension();
final String fileName = DUMMY_FILE_NAME + '.' + GroovyFileType.GROOVY_FILE_TYPE.getDefaultExtension();
final long stamp = System.currentTimeMillis();
final PsiFileFactory factory = PsiFileFactory.getInstance(myProject);
return (GroovyFileImpl) factory.createFileFromText(fileName, GroovyFileType.GROOVY_FILE_TYPE, text, stamp, physical);
@@ -2,6 +2,7 @@
package org.jetbrains.plugins.groovy.lang.psi.impl.statements.expressions;
import com.intellij.lang.ASTNode;
import com.intellij.openapi.util.io.FileUtil;
import com.intellij.psi.*;
import com.intellij.psi.util.PsiTreeUtil;
import com.intellij.util.IncorrectOperationException;
@@ -34,10 +35,7 @@ public class GrThisReferenceExpressionImpl extends GrThisSuperReferenceExpressio
public PsiType getType() {
final GrReferenceExpression qualifier = getQualifier();
if (qualifier == null) {
GroovyPsiElement context = PsiTreeUtil.getContextOfType(this, GrTypeDefinition.class, GroovyFile.class);
if (context instanceof GroovyFile && GroovyPsiElementFactory.DUMMY_FILE_NAME.equals(((GroovyFile)context).getName())) {
context = PsiTreeUtil.getContextOfType(context, true, GrTypeDefinition.class, GroovyFile.class);
}
GroovyPsiElement context = getFileContext();
if (context instanceof GrTypeDefinition) {
return createType((PsiClass)context);
}
@@ -63,6 +61,15 @@ public class GrThisReferenceExpressionImpl extends GrThisSuperReferenceExpressio
return null;
}
private GroovyPsiElement getFileContext() {
GroovyPsiElement context = PsiTreeUtil.getContextOfType(this, GrTypeDefinition.class, GroovyFile.class);
if (context instanceof GroovyFile && GroovyPsiElementFactory.DUMMY_FILE_NAME.equals(FileUtil.getNameWithoutExtension(
((GroovyFile)context).getName()))) {
context = PsiTreeUtil.getContextOfType(context, true, GrTypeDefinition.class, GroovyFile.class);
}
return context;
}
private PsiType createType(PsiClass context) {
PsiElementFactory elementFactory = JavaPsiFacade.getInstance(getProject()).getElementFactory();
if (PsiUtil.isInStaticContext(this)) {
@@ -87,11 +94,12 @@ public class GrThisReferenceExpressionImpl extends GrThisSuperReferenceExpressio
return qualifier.resolve();
}
final GrTypeDefinition containingClass = PsiTreeUtil.getContextOfType(this, GrTypeDefinition.class, true, GroovyFile.class);
if (containingClass != null) return containingClass;
final PsiFile containingFile = getContainingFile();
if (containingFile instanceof GroovyFile) {
return ((GroovyFile)containingFile).getScriptClass();
final GroovyPsiElement context = getFileContext();
if (context instanceof GrTypeDefinition) {
return context;
}
else if (context instanceof GroovyFile) {
return ((GroovyFile)context).getScriptClass();
}
return null;
}