docs: private JavaAnalysisResult analyze(JavaAnalysisResult result,
                                         BoundIdentifiers availableIdentifiers) throws RecognitionException {
          final Set<String> identifiers = result.getIdentifiers();
          final Set<String> notBound = new HashSet<String>( identifiers );
          
          Map<String, Class<?>> usedDecls = new HashMap<String, Class<?>>();
          Map<String, Class<?>> usedGlobals = new HashMap<String, Class<?>>();
          Map<String, EvaluatorWrapper> usedOperators = new HashMap<String, EvaluatorWrapper>();
   
          for ( Entry<String, Class<?>> entry : availableIdentifiers.getDeclrClasses().entrySet() ) {
              if ( identifiers.contains( entry.getKey() ) ) {
                  usedDecls.put( entry.getKey(), entry.getValue() );
                  notBound.remove( entry.getKey() );
              }
          }
  
          for ( String identifier : identifiers ) {
              Class<?> type = availableIdentifiers.resolveVarType( identifier );
              if (type != null) {
                  usedGlobals.put( identifier, type );
                  notBound.remove( identifier );
              }
          }
  
          for ( Map.Entry<String, EvaluatorWrapper> op : availableIdentifiers.getOperators().entrySet() ) {
              if ( identifiers.contains( op.getKey() ) ) {
                  usedOperators.put( op.getKey(), op.getValue() );
                  notBound.remove( op.getKey() );
              }
          }
  
          BoundIdentifiers boundIdentifiers = new BoundIdentifiers( usedDecls,
                                                                    availableIdentifiers.getContext(),
                                                                    usedOperators,
                                                                    availableIdentifiers.getThisClass() );
          boundIdentifiers.setGlobals( usedGlobals );
  
          result.setBoundIdentifiers( boundIdentifiers );
          result.setNotBoundedIdentifiers( notBound );
  
          return result;
      }