(no message)

This commit is contained in:
Alexey Kudravtsev
2005-01-17 19:36:54 +03:00
parent edcf64172c
commit 7270755329
3 changed files with 50 additions and 60 deletions
@@ -71,10 +71,8 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme
return CLASS_NAME_KIND;
}
else if (i == NEW_EXPRESSION) {
{
final TreeElement qualifier = getTreeParent().findChildByRole(ChildRole.QUALIFIER);
return qualifier != null ? CLASS_IN_QUALIFIED_NEW_KIND : CLASS_NAME_KIND;
}
final TreeElement qualifier = getTreeParent().findChildByRole(ChildRole.QUALIFIER);
return qualifier != null ? CLASS_IN_QUALIFIED_NEW_KIND : CLASS_NAME_KIND;
}
else if (i == ANONYMOUS_CLASS) {
if (getTreeParent().getChildRole(this) == ChildRole.BASE_CLASS_REFERENCE) {
@@ -90,49 +88,41 @@ public class PsiJavaCodeReferenceElementImpl extends CompositePsiElement impleme
return PACKAGE_NAME_KIND;
}
else if (i == IMPORT_STATEMENT) {
{
final boolean isOnDemand = ((PsiImportStatement)SourceTreeToPsiMap.treeElementToPsi(getTreeParent())).isOnDemand();
return isOnDemand ? CLASS_FQ_OR_PACKAGE_NAME_KIND : CLASS_FQ_NAME_KIND;
}
final boolean isOnDemand = ((PsiImportStatement)SourceTreeToPsiMap.treeElementToPsi(getTreeParent())).isOnDemand();
return isOnDemand ? CLASS_FQ_OR_PACKAGE_NAME_KIND : CLASS_FQ_NAME_KIND;
}
else if (i == IMPORT_STATIC_STATEMENT) {
{
return CLASS_FQ_OR_PACKAGE_NAME_KIND;
}
return CLASS_FQ_OR_PACKAGE_NAME_KIND;
}
else if (i == JSP_IMPORT_VALUE) {
{
final TreeElement nextNonSpace = TreeUtil.skipElements(getTreeNext(), WHITE_SPACE_OR_COMMENT_BIT_SET);
final boolean isOnDemand = nextNonSpace != null && nextNonSpace.getElementType() == DOT;
return isOnDemand ? CLASS_FQ_OR_PACKAGE_NAME_KIND : CLASS_FQ_NAME_KIND;
}
final TreeElement nextNonSpace = TreeUtil.skipElements(getTreeNext(), WHITE_SPACE_OR_COMMENT_BIT_SET);
final boolean isOnDemand = nextNonSpace != null && nextNonSpace.getElementType() == DOT;
return isOnDemand ? CLASS_FQ_OR_PACKAGE_NAME_KIND : CLASS_FQ_NAME_KIND;
}
else if (i == JAVA_CODE_REFERENCE) {
{
final int parentKind = ((PsiJavaCodeReferenceElementImpl)getTreeParent()).getKind();
switch (parentKind) {
case CLASS_NAME_KIND:
return CLASS_OR_PACKAGE_NAME_KIND;
final int parentKind = ((PsiJavaCodeReferenceElementImpl)getTreeParent()).getKind();
switch (parentKind) {
case CLASS_NAME_KIND:
return CLASS_OR_PACKAGE_NAME_KIND;
case PACKAGE_NAME_KIND:
return PACKAGE_NAME_KIND;
case PACKAGE_NAME_KIND:
return PACKAGE_NAME_KIND;
case CLASS_OR_PACKAGE_NAME_KIND:
return CLASS_OR_PACKAGE_NAME_KIND;
case CLASS_OR_PACKAGE_NAME_KIND:
return CLASS_OR_PACKAGE_NAME_KIND;
case CLASS_FQ_NAME_KIND:
return CLASS_FQ_OR_PACKAGE_NAME_KIND;
case CLASS_FQ_NAME_KIND:
return CLASS_FQ_OR_PACKAGE_NAME_KIND;
case CLASS_FQ_OR_PACKAGE_NAME_KIND:
return CLASS_FQ_OR_PACKAGE_NAME_KIND;
case CLASS_FQ_OR_PACKAGE_NAME_KIND:
return CLASS_FQ_OR_PACKAGE_NAME_KIND;
case CLASS_IN_QUALIFIED_NEW_KIND:
return CLASS_IN_QUALIFIED_NEW_KIND; //??
case CLASS_IN_QUALIFIED_NEW_KIND:
return CLASS_IN_QUALIFIED_NEW_KIND; //??
default:
LOG.assertTrue(false);
return -1;
}
default:
LOG.assertTrue(false);
return -1;
}
}
else if (i == CLASS || i == PARAMETER_LIST || i == ERROR_ELEMENT) {
@@ -30,7 +30,7 @@ public abstract class PsiJavaFileBaseImpl extends PsiFileImpl implements PsiJava
private PsiImportListImpl myRepositoryImportList = null;
private String myCachedPackageName = null;
protected PsiClass[] myCachedClasses = null;
private final Map myGuessCache = ResolveCache.getOrCreateWeakMap(myManager, CACHED_CLASSES_MAP_KEY, false);
private final Map<PsiJavaFile,Map<String, SoftReference<ResolveResult[]>>> myGuessCache = ResolveCache.getOrCreateWeakMap(myManager, CACHED_CLASSES_MAP_KEY, false);
private static final String[] IMPLICIT_IMPORTS = new String[]{ "java.lang" };
@@ -416,14 +416,14 @@ public abstract class PsiJavaFileBaseImpl extends PsiFileImpl implements PsiJava
}
private ResolveResult[] getGuess(final String name){
final Map guessForFile = (Map) myGuessCache.get(this);
final Map guessForFile = myGuessCache.get(this);
final Reference ref = guessForFile != null ? (Reference)guessForFile.get(name) : null;
return ref != null ? (ResolveResult[])ref.get() : null;
}
private void setGuess(final String name, final ResolveResult[] cached){
Map<String,SoftReference<ResolveResult[]>> guessForFile = (Map<String,SoftReference<ResolveResult[]>>) myGuessCache.get(this);
Map<String,SoftReference<ResolveResult[]>> guessForFile = myGuessCache.get(this);
if(guessForFile == null){
guessForFile = new HashMap<String, SoftReference<ResolveResult[]>>();
myGuessCache.put(this, guessForFile);
@@ -11,23 +11,23 @@ import java.lang.ref.SoftReference;
import java.util.Set;
public class ResolveCache {
private static final Key JAVA_RESOLVE_MAP = Key.create("ResolveCache.JAVA_RESOLVE_MAP");
private static final Key RESOLVE_MAP = Key.create("ResolveCache.RESOLVE_MAP");
private static final Key JAVA_RESOLVE_MAP_INCOMPLETE = Key.create("ResolveCache.JAVA_RESOLVE_MAP_INCOMPLETE");
private static final Key RESOLVE_MAP_INCOMPLETE = Key.create("ResolveCache.RESOLVE_MAP_INCOMPLETE");
private static final Key IS_BEING_RESOLVED_KEY = Key.create("ResolveCache.IS_BEING_RESOLVED_KEY");
private static final Key VAR_TO_CONST_VALUE_MAP_KEY = Key.create("ResolveCache.VAR_TO_CONST_VALUE_MAP_KEY");
private static final Key<MapPair<PsiReference, SoftReference<ResolveResult[]>>> JAVA_RESOLVE_MAP = Key.create("ResolveCache.JAVA_RESOLVE_MAP");
private static final Key<MapPair<PsiReference, Reference<PsiElement>>> RESOLVE_MAP = Key.create("ResolveCache.RESOLVE_MAP");
private static final Key<MapPair<PsiReference, SoftReference<ResolveResult[]>>> JAVA_RESOLVE_MAP_INCOMPLETE = Key.create("ResolveCache.JAVA_RESOLVE_MAP_INCOMPLETE");
private static final Key<MapPair<PsiReference, Reference<PsiElement>>> RESOLVE_MAP_INCOMPLETE = Key.create("ResolveCache.RESOLVE_MAP_INCOMPLETE");
private static final Key<String> IS_BEING_RESOLVED_KEY = Key.create("ResolveCache.IS_BEING_RESOLVED_KEY");
private static final Key<MapPair<PsiVariable, Object>> VAR_TO_CONST_VALUE_MAP_KEY = Key.create("ResolveCache.VAR_TO_CONST_VALUE_MAP_KEY");
private static final Object NULL = Key.create("NULL");
private final PsiManagerImpl myManager;
private final WeakHashMap myVarToConstValueMap1;
private final WeakHashMap<PsiVariable, Object> myVarToConstValueMap1;
private final WeakHashMap[] myJavaResolveMaps = new WeakHashMap[4];
private final WeakHashMap[] myResolveMaps = new WeakHashMap[4];
private final WeakHashMap myVarToConstValueMap2;
private final WeakHashMap<PsiVariable,Object> myVarToConstValueMap2;
public static interface GenericsResolver{
ResolveResult[] resolve(PsiJavaReference ref, boolean incompleteCode);
@@ -78,7 +78,7 @@ public class ResolveCache {
boolean physical = ref.getElement().isPhysical();
final Reference<PsiElement> cached = getCachedResolve(ref, physical, incompleteCode);
if (cached != null) return cached.get();
;
if (incompleteCode) {
final PsiElement results = resolveWithCaching(ref, resolver, needToPreventRecursion, false);
if (results != null) {
@@ -103,7 +103,7 @@ public class ResolveCache {
private void setCachedResolve(PsiReference ref, PsiElement results, boolean physical, boolean incompleteCode) {
int index = getIndex(physical, incompleteCode);
myResolveMaps[index].put(ref, new SoftReference(results));
myResolveMaps[index].put(ref, new SoftReference<PsiElement>(results));
}
private Reference<PsiElement> getCachedResolve(PsiReference ref, boolean physical, boolean incompleteCode) {
@@ -124,7 +124,7 @@ public class ResolveCache {
boolean physical = ref.getElement().isPhysical();
final ResolveResult[] cached = getCachedJavaResolve(ref, physical, incompleteCode);
if (cached != null) return cached;
;
if (incompleteCode) {
final ResolveResult[] results = resolveWithCaching(ref, resolver, needToPreventRecursion, false);
if (results != null && results.length > 0) {
@@ -147,13 +147,13 @@ public class ResolveCache {
}
}
private int getIndex(boolean physical, boolean ic){
private static int getIndex(boolean physical, boolean ic){
return (physical ? 0 : 1) << 1 | (ic ? 1 : 0);
}
public void setCachedJavaResolve(PsiReference ref, ResolveResult[] result, boolean physical, boolean ic){
int index = getIndex(physical, ic);
myJavaResolveMaps[index].put(ref, new SoftReference(result));
myJavaResolveMaps[index].put(ref, new SoftReference<ResolveResult[]>(result));
}
private ResolveResult[] getCachedJavaResolve(PsiReference ref, boolean physical, boolean ic){
@@ -181,13 +181,13 @@ public class ResolveCache {
return result;
}
public static WeakHashMap getOrCreateWeakMap(final PsiManagerImpl manager, final Key key, boolean forPhysical) {
MapPair pair = (MapPair)manager.getUserData(key);
public static <K,V> WeakHashMap<K,V> getOrCreateWeakMap(final PsiManagerImpl manager, final Key<MapPair<K, V>> key, boolean forPhysical) {
MapPair<K, V> pair = manager.getUserData(key);
if (pair == null){
pair = new MapPair();
pair = new MapPair<K,V>();
manager.putUserData(key, pair);
final MapPair _pair = pair;
final MapPair<K, V> _pair = pair;
manager.registerRunnableToRunOnChange(
new Runnable() {
public void run() {
@@ -208,13 +208,13 @@ public class ResolveCache {
return forPhysical ? pair.physicalMap : pair.nonPhysicalMap;
}
private static class MapPair{
public WeakHashMap physicalMap;
public WeakHashMap nonPhysicalMap;
private static class MapPair<K,V>{
public WeakHashMap<K,V> physicalMap;
public WeakHashMap<K,V> nonPhysicalMap;
public MapPair() {
physicalMap = new WeakHashMap();
nonPhysicalMap = new WeakHashMap();
physicalMap = new WeakHashMap<K, V>();
nonPhysicalMap = new WeakHashMap<K, V>();
}
}
}