mirror of
https://gitflic.ru/project/openide/openide.git
synced 2026-09-27 10:03:11 +07:00
more stub/ast creation tracing (IDEA-97768)
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user