@Override
 public List<ReferenceType> getAllClasses(final SourcePosition source) throws NoDataException {
   PsiFile _file = source.getFile();
   Language _language = _file.getLanguage();
   boolean _notEquals = (!Objects.equal(_language, this.language));
   if (_notEquals) {
     throw NoDataException.INSTANCE;
   }
   final Map<URI, AbstractTraceRegion> traces =
       this._debugProcessExtensions.getTracesForSource(this.process, source);
   final ArrayList<ReferenceType> allClasses = CollectionLiterals.<ReferenceType>newArrayList();
   final int line = source.getLine();
   Set<Map.Entry<URI, AbstractTraceRegion>> _entrySet = traces.entrySet();
   for (final Map.Entry<URI, AbstractTraceRegion> uri2trace : _entrySet) {
     {
       AbstractTraceRegion _value = uri2trace.getValue();
       TreeIterator<AbstractTraceRegion> _treeIterator = _value.treeIterator();
       final Function1<AbstractTraceRegion, Boolean> _function =
           new Function1<AbstractTraceRegion, Boolean>() {
             @Override
             public Boolean apply(final AbstractTraceRegion it) {
               List<ILocationData> _associatedLocations = it.getAssociatedLocations();
               ILocationData _head =
                   IterableExtensions.<ILocationData>head(_associatedLocations);
               int _lineNumber = 0;
               if (_head != null) {
                 _lineNumber = _head.getLineNumber();
               }
               return Boolean.valueOf((_lineNumber == line));
             }
           };
       final AbstractTraceRegion region =
           IteratorExtensions.<AbstractTraceRegion>findFirst(_treeIterator, _function);
       boolean _notEquals_1 = (!Objects.equal(region, null));
       if (_notEquals_1) {
         URI _key = uri2trace.getKey();
         final PsiFile psiFile = this._debugProcessExtensions.getPsiFile(this.process, _key);
         PositionManagerImpl _javaPositionManger =
             this._debugProcessExtensions.getJavaPositionManger(this.process);
         int _myLineNumber = region.getMyLineNumber();
         int _plus = (_myLineNumber + 1);
         SourcePosition _createFromLine = SourcePosition.createFromLine(psiFile, _plus);
         final List<ReferenceType> classes = _javaPositionManger.getAllClasses(_createFromLine);
         allClasses.addAll(classes);
       }
     }
   }
   return allClasses;
 }
 @Override
 public SourcePosition getSourcePosition(final Location location) throws NoDataException {
   int _lineNumber = location.lineNumber();
   final int line = (_lineNumber - 1);
   final PsiFile psiFile = this._debugProcessExtensions.getPsiFile(this.process, location);
   boolean _equals = Objects.equal(psiFile, null);
   if (_equals) {
     throw NoDataException.INSTANCE;
   }
   SourcePosition _createFromLine = SourcePosition.createFromLine(psiFile, line);
   final AbstractTraceRegion trace =
       this._debugProcessExtensions.getTraceForJava(_createFromLine);
   boolean _equals_1 = Objects.equal(trace, null);
   if (_equals_1) {
     throw NoDataException.INSTANCE;
   }
   final URI sourceURI =
       this._debugProcessExtensions.findOriginalDeclaration(this.process, location);
   SourcePosition fallBack = null;
   SourcePosition secondaryFallBack = null;
   TreeIterator<AbstractTraceRegion> iter = trace.treeIterator();
   while (iter.hasNext()) {
     {
       final AbstractTraceRegion n = iter.next();
       int _myLineNumber = n.getMyLineNumber();
       boolean _tripleEquals = (_myLineNumber == line);
       if (_tripleEquals) {
         final ILocationData mergedAssociatedLocation = n.getMergedAssociatedLocation();
         if (((n.isUseForDebugging() && (n.getMyEndLineNumber() == line))
             && (mergedAssociatedLocation.getLineNumber()
                 == mergedAssociatedLocation.getEndLineNumber()))) {
           final PsiFile psi = this._debugProcessExtensions.getPsiFile(this.process, sourceURI);
           int _offset = mergedAssociatedLocation.getOffset();
           return SourcePosition.createFromOffset(psi, _offset);
         } else {
           final PsiFile psi_1 =
               this._debugProcessExtensions.getPsiFile(this.process, sourceURI);
           int _offset_1 = mergedAssociatedLocation.getOffset();
           SourcePosition _createFromOffset = SourcePosition.createFromOffset(psi_1, _offset_1);
           fallBack = _createFromOffset;
         }
       }
       int _myEndLineNumber = n.getMyEndLineNumber();
       boolean _tripleEquals_1 = (_myEndLineNumber == line);
       if (_tripleEquals_1) {
         final ILocationData mergedAssociatedLocation_1 = n.getMergedAssociatedLocation();
         final PsiFile psi_2 = this._debugProcessExtensions.getPsiFile(this.process, sourceURI);
         int _endLineNumber = mergedAssociatedLocation_1.getEndLineNumber();
         SourcePosition _createFromLine_1 = SourcePosition.createFromLine(psi_2, _endLineNumber);
         secondaryFallBack = _createFromLine_1;
       }
     }
   }
   SourcePosition _elvis = null;
   if (fallBack != null) {
     _elvis = fallBack;
   } else {
     _elvis = secondaryFallBack;
   }
   return _elvis;
 }