more stub/ast creation tracing (IDEA-97768)

This commit is contained in:
peter
2013-02-14 14:45:35 +01:00
parent 50fc3787b5
commit 19f066aefb
3 changed files with 24 additions and 6 deletions
@@ -15,8 +15,10 @@
*/
package com.intellij.psi.impl.java.stubs.impl;
import com.intellij.extapi.psi.StubBasedPsiElementBase;
import com.intellij.pom.java.LanguageLevel;
import com.intellij.psi.PsiClass;
import com.intellij.psi.impl.DebugUtil;
import com.intellij.psi.impl.java.stubs.JavaClassElementType;
import com.intellij.psi.impl.java.stubs.PsiClassStub;
import com.intellij.psi.stubs.StubBase;
@@ -65,6 +67,10 @@ public class PsiClassStubImpl<T extends PsiClass> extends StubBase<T> implements
myName = name;
myBaseRefText = baseRefText;
myFlags = flags;
if (StubBasedPsiElementBase.ourTraceStubAstBinding) {
String creationTrace = "Stub creation thread: " + Thread.currentThread() + "\n" + DebugUtil.currentStackTrace();
putUserData(StubBasedPsiElementBase.CREATION_TRACE, creationTrace);
}
}
@Override
@@ -22,6 +22,7 @@ import com.intellij.navigation.ItemPresentationProviders;
import com.intellij.openapi.diagnostic.Logger;
import com.intellij.openapi.ui.Queryable;
import com.intellij.openapi.util.Pair;
import com.intellij.openapi.util.UserDataHolder;
import com.intellij.psi.*;
import com.intellij.psi.impl.*;
import com.intellij.psi.impl.java.stubs.JavaStubElementTypes;
@@ -67,17 +68,27 @@ public class PsiClassImpl extends JavaStubPsiElement<PsiClassStub<?>> implements
protected PsiClassImpl(final PsiClassStub stub, final IStubElementType type) {
super(stub, type);
addTrace();
addTrace(null);
}
public PsiClassImpl(final ASTNode node) {
super(node);
addTrace();
addTrace(null);
}
private void addTrace() {
private void addTrace(@Nullable PsiClassStub stub) {
if (ourTraceStubAstBinding) {
putUserData(CREATION_TRACE, Thread.currentThread() + "\n" + DebugUtil.currentStackTrace());
String creationTrace = "Creation thread: " + Thread.currentThread() + "\n" + DebugUtil.currentStackTrace();
if (stub != null) {
creationTrace += "\nfrom stub " + stub + "@" + System.identityHashCode(stub) + "\n";
if (stub instanceof UserDataHolder) {
String stubTrace = ((UserDataHolder)stub).getUserData(CREATION_TRACE);
if (stubTrace != null) {
creationTrace += stubTrace;
}
}
}
putUserData(CREATION_TRACE, creationTrace);
}
}
@@ -53,7 +53,7 @@ import java.lang.reflect.Array;
public class StubBasedPsiElementBase<T extends StubElement> extends ASTDelegatePsiElement {
public static final Key<String> CREATION_TRACE = Key.create("CREATION_TRACE");
private static final Logger LOG = Logger.getInstance("#com.intellij.extapi.psi.StubBasedPsiElementBase");
protected static final boolean ourTraceStubAstBinding = "true".equals(System.getProperty("trace.stub.ast.binding", "false"));
public static final boolean ourTraceStubAstBinding = "true".equals(System.getProperty("trace.stub.ast.binding", "false"));
private volatile T myStub;
private volatile ASTNode myNode;
private final IElementType myElementType;
@@ -105,6 +105,7 @@ public class StubBasedPsiElementBase<T extends StubElement> extends ASTDelegateP
@NonNls String message = "Failed to bind stub to AST for element " + getClass() + " in " +
(vFile == null ? "<unknown file>" : vFile.getPath()) +
"\nFile:\n" + file.toString() + "@" + System.identityHashCode(file) +
"\nFile stub tree:\n" + stubString +
"\nLoaded file AST:\n" + astString;
if (ourTraceStubAstBinding) {
@@ -122,7 +123,7 @@ public class StubBasedPsiElementBase<T extends StubElement> extends ASTDelegateP
public void visitComposite(CompositeElement composite) {
PsiElement psi = composite.getPsi();
if (psi != null) {
traces.append(psi.toString()).append("\n");
traces.append(psi.toString()).append("@").append(System.identityHashCode(psi)).append("\n");
String trace = psi.getUserData(CREATION_TRACE);
if (trace != null) {
traces.append(trace).append("\n");