Search in sources :

Example 36 with ReferenceType

use of com.sun.jdi.ReferenceType in project intellij-community by JetBrains.

the class GroovyPositionManager method getAllClasses.

@Override
@NotNull
public List<ReferenceType> getAllClasses(@NotNull final SourcePosition position) throws NoDataException {
    if (LOG.isDebugEnabled()) {
        LOG.debug("getAllClasses: " + position);
    }
    checkGroovyFile(position);
    List<ReferenceType> result = ApplicationManager.getApplication().runReadAction(new Computable<List<ReferenceType>>() {

        @Override
        public List<ReferenceType> compute() {
            GroovyPsiElement sourceImage = findReferenceTypeSourceImage(position);
            if (sourceImage instanceof GrTypeDefinition && !((GrTypeDefinition) sourceImage).isAnonymous()) {
                String qName = getClassNameForJvm((GrTypeDefinition) sourceImage);
                if (qName != null)
                    return myDebugProcess.getVirtualMachineProxy().classesByName(qName);
            } else if (sourceImage == null) {
                final String scriptName = getScriptQualifiedName(position);
                if (scriptName != null)
                    return myDebugProcess.getVirtualMachineProxy().classesByName(scriptName);
            } else {
                String enclosingName = findEnclosingName(position);
                if (enclosingName == null)
                    return null;
                final List<ReferenceType> outers = myDebugProcess.getVirtualMachineProxy().classesByName(enclosingName);
                final List<ReferenceType> result = new ArrayList<>(outers.size());
                for (ReferenceType outer : outers) {
                    final ReferenceType nested = findNested(outer, sourceImage, position);
                    if (nested != null) {
                        result.add(nested);
                    }
                }
                return result;
            }
            return null;
        }
    });
    if (LOG.isDebugEnabled()) {
        LOG.debug("getAllClasses = " + result);
    }
    if (result == null)
        throw NoDataException.INSTANCE;
    return result;
}
Also used : GroovyPsiElement(org.jetbrains.plugins.groovy.lang.psi.GroovyPsiElement) GrTypeDefinition(org.jetbrains.plugins.groovy.lang.psi.api.statements.typedef.GrTypeDefinition) ArrayList(java.util.ArrayList) ArrayList(java.util.ArrayList) List(java.util.List) ReferenceType(com.sun.jdi.ReferenceType) NotNull(org.jetbrains.annotations.NotNull)

Example 37 with ReferenceType

use of com.sun.jdi.ReferenceType in project intellij-community by JetBrains.

the class GroovyPositionManager method createPrepareRequest.

@Override
public ClassPrepareRequest createPrepareRequest(@NotNull final ClassPrepareRequestor requestor, @NotNull final SourcePosition position) throws NoDataException {
    if (LOG.isDebugEnabled()) {
        LOG.debug("createPrepareRequest: " + position);
    }
    checkGroovyFile(position);
    String qName = getOuterClassName(position);
    if (qName != null) {
        return myDebugProcess.getRequestsManager().createClassPrepareRequest(requestor, qName);
    }
    qName = findEnclosingName(position);
    if (qName == null)
        throw NoDataException.INSTANCE;
    ClassPrepareRequestor waitRequestor = new ClassPrepareRequestor() {

        @Override
        public void processClassPrepare(DebugProcess debuggerProcess, ReferenceType referenceType) {
            final CompoundPositionManager positionManager = ((DebugProcessImpl) debuggerProcess).getPositionManager();
            if (!positionManager.locationsOfLine(referenceType, position).isEmpty()) {
                requestor.processClassPrepare(debuggerProcess, referenceType);
            }
        }
    };
    return myDebugProcess.getRequestsManager().createClassPrepareRequest(waitRequestor, qName + "$*");
}
Also used : ClassPrepareRequestor(com.intellij.debugger.requests.ClassPrepareRequestor) DebugProcess(com.intellij.debugger.engine.DebugProcess) CompoundPositionManager(com.intellij.debugger.engine.CompoundPositionManager) DebugProcessImpl(com.intellij.debugger.engine.DebugProcessImpl) ReferenceType(com.sun.jdi.ReferenceType)

Example 38 with ReferenceType

use of com.sun.jdi.ReferenceType in project intellij-community by JetBrains.

the class GroovyPositionManager method getPsiFileByLocation.

@Nullable
private PsiFile getPsiFileByLocation(@NotNull final Project project, @Nullable final Location location) {
    if (location == null)
        return null;
    final ReferenceType refType = location.declaringType();
    if (refType == null)
        return null;
    final String originalQName = refType.name().replace('/', '.');
    int dollar = originalQName.indexOf('$');
    String runtimeName = dollar >= 0 ? originalQName.substring(0, dollar) : originalQName;
    String qName = getOriginalQualifiedName(refType, runtimeName);
    GlobalSearchScope searchScope = myDebugProcess.getSearchScope();
    GroovyShortNamesCache cache = GroovyShortNamesCache.getGroovyShortNamesCache(project);
    try {
        List<PsiClass> classes = cache.getClassesByFQName(qName, searchScope, true);
        if (classes.isEmpty()) {
            classes = cache.getClassesByFQName(qName, searchScope, false);
        }
        if (classes.isEmpty()) {
            classes = cache.getClassesByFQName(qName, GlobalSearchScope.projectScope(project), false);
        }
        if (classes.isEmpty()) {
            classes = cache.getClassesByFQName(qName, addModuleContent(searchScope), false);
        }
        if (classes.isEmpty())
            return null;
        classes.sort(PsiClassUtil.createScopeComparator(searchScope));
        PsiClass clazz = classes.get(0);
        if (clazz != null)
            return clazz.getContainingFile();
    } catch (ProcessCanceledException | IndexNotReadyException e) {
        return null;
    }
    return getExtraScriptIfNotFound(project, refType, runtimeName, searchScope);
}
Also used : GlobalSearchScope(com.intellij.psi.search.GlobalSearchScope) PsiClass(com.intellij.psi.PsiClass) IndexNotReadyException(com.intellij.openapi.project.IndexNotReadyException) ReferenceType(com.sun.jdi.ReferenceType) GroovyShortNamesCache(org.jetbrains.plugins.groovy.lang.stubs.GroovyShortNamesCache) ProcessCanceledException(com.intellij.openapi.progress.ProcessCanceledException) Nullable(org.jetbrains.annotations.Nullable)

Example 39 with ReferenceType

use of com.sun.jdi.ReferenceType in project kotlin by JetBrains.

the class AbstractPositionManagerTest method getReferenceMap.

private static Map<String, ReferenceType> getReferenceMap(OutputFileCollection outputFiles) {
    Map<String, ReferenceType> referencesByName = Maps.newHashMap();
    for (OutputFile outputFile : outputFiles.asList()) {
        String classFileName = outputFile.getRelativePath();
        String name = classFileName.substring(0, classFileName.lastIndexOf('.'));
        referencesByName.put(name, new MockReferenceType(name));
    }
    return referencesByName;
}
Also used : OutputFile(org.jetbrains.kotlin.backend.common.output.OutputFile) ReferenceType(com.sun.jdi.ReferenceType)

Example 40 with ReferenceType

use of com.sun.jdi.ReferenceType in project kotlin by JetBrains.

the class AbstractPositionManagerTest method performTest.

private void performTest() {
    Project project = getProject();
    List<KtFile> files = new ArrayList<KtFile>(PluginJetFilesProvider.allFilesInProject(project));
    if (files.isEmpty())
        return;
    final List<Breakpoint> breakpoints = Lists.newArrayList();
    for (KtFile file : files) {
        breakpoints.addAll(extractBreakpointsInfo(file, file.getText()));
    }
    CompilerConfiguration configuration = KotlinTestUtils.newConfiguration(ConfigurationKind.JDK_ONLY, TestJdkKind.MOCK_JDK);
    // TODO: delete this once IDEVirtualFileFinder supports loading .kotlin_builtins files
    configuration.put(JVMConfigurationKeys.ADD_BUILT_INS_FROM_COMPILER_TO_DEPENDENCIES, true);
    GenerationState state = GenerationUtils.compileFiles(files, configuration, new Function1<GlobalSearchScope, PackagePartProvider>() {

        @Override
        public PackagePartProvider invoke(GlobalSearchScope scope) {
            return PackagePartProvider.Empty.INSTANCE;
        }
    });
    Map<String, ReferenceType> referencesByName = getReferenceMap(state.getFactory());
    debugProcess = createDebugProcess(referencesByName);
    final PositionManager positionManager = createPositionManager(debugProcess, files, state);
    ApplicationManager.getApplication().runReadAction(new Runnable() {

        @Override
        public void run() {
            try {
                for (Breakpoint breakpoint : breakpoints) {
                    assertBreakpointIsHandledCorrectly(breakpoint, positionManager);
                }
            } catch (NoDataException e) {
                throw ExceptionUtilsKt.rethrow(e);
            }
        }
    });
}
Also used : PositionManager(com.intellij.debugger.PositionManager) ArrayList(java.util.ArrayList) GenerationState(org.jetbrains.kotlin.codegen.state.GenerationState) ReferenceType(com.sun.jdi.ReferenceType) Project(com.intellij.openapi.project.Project) GlobalSearchScope(com.intellij.psi.search.GlobalSearchScope) PackagePartProvider(org.jetbrains.kotlin.descriptors.PackagePartProvider) CompilerConfiguration(org.jetbrains.kotlin.config.CompilerConfiguration) KtFile(org.jetbrains.kotlin.psi.KtFile) NoDataException(com.intellij.debugger.NoDataException)

Aggregations

ReferenceType (com.sun.jdi.ReferenceType)40 Nullable (org.jetbrains.annotations.Nullable)9 Project (com.intellij.openapi.project.Project)8 Location (com.sun.jdi.Location)5 ObjectReference (com.sun.jdi.ObjectReference)5 AbsentInformationException (com.sun.jdi.AbsentInformationException)4 Method (com.sun.jdi.Method)4 EvaluateException (com.intellij.debugger.engine.evaluation.EvaluateException)3 ClassesTable (com.intellij.debugger.memory.ui.ClassesTable)3 InstancesWindow (com.intellij.debugger.memory.ui.InstancesWindow)3 GlobalSearchScope (com.intellij.psi.search.GlobalSearchScope)3 XDebugSession (com.intellij.xdebugger.XDebugSession)3 SourcePosition (com.intellij.debugger.SourcePosition)2 DebugProcess (com.intellij.debugger.engine.DebugProcess)2 DebugProcessImpl (com.intellij.debugger.engine.DebugProcessImpl)2 InstancesTracker (com.intellij.debugger.memory.component.InstancesTracker)2 InstancesProvider (com.intellij.debugger.memory.utils.InstancesProvider)2 ClassPrepareRequestor (com.intellij.debugger.requests.ClassPrepareRequestor)2 AnActionEvent (com.intellij.openapi.actionSystem.AnActionEvent)2 PsiClass (com.intellij.psi.PsiClass)2