BfResolvePass.h 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119
  1. #pragma once
  2. #include "BfSystem.h"
  3. #include "BfResolvedTypeUtils.h"
  4. #include "BfSourceClassifier.h"
  5. NS_BF_BEGIN
  6. enum BfResolveType
  7. {
  8. BfResolveType_None,
  9. BfResolveType_Classify,
  10. BfResolveType_ClassifyFullRefresh,
  11. BfResolveType_Autocomplete,
  12. BfResolveType_Autocomplete_HighPri,
  13. BfResolveType_GoToDefinition,
  14. BfResolveType_GetSymbolInfo,
  15. BfResolveType_RenameSymbol,
  16. BfResolveType_ShowFileSymbolReferences,
  17. BfResolveType_GetNavigationData,
  18. BfResolveType_GetCurrentLocation,
  19. BfResolveType_GetFixits,
  20. BfResolveType_GetTypeDefList,
  21. BfResolveType_GetTypeDefInto,
  22. BfResolveType_GetResultString,
  23. BfResolveType_VerifyTypeName
  24. };
  25. class BfLocalVariable;
  26. enum BfGetSymbolReferenceKind
  27. {
  28. BfGetSymbolReferenceKind_None,
  29. BfGetSymbolReferenceKind_Local,
  30. BfGetSymbolReferenceKind_Method,
  31. BfGetSymbolReferenceKind_Field,
  32. BfGetSymbolReferenceKind_Property,
  33. BfGetSymbolReferenceKind_Type,
  34. BfGetSymbolReferenceKind_TypeGenericParam,
  35. BfGetSymbolReferenceKind_MethodGenericParam,
  36. BfGetSymbolReferenceKind_Namespace
  37. };
  38. class BfEmitEmbedEntry
  39. {
  40. public:
  41. int mCursorIdx;
  42. int mRevision;
  43. BfParser* mParser;
  44. Array<BfSourceClassifier::CharData> mCharData;
  45. public:
  46. BfEmitEmbedEntry()
  47. {
  48. mCursorIdx = -1;
  49. mRevision = -1;
  50. mParser = NULL;
  51. }
  52. };
  53. class BfResolvePassData
  54. {
  55. public:
  56. BfResolveType mResolveType;
  57. Array<BfParser*> mParsers;
  58. Dictionary<BfParser*, BfParser*> mCompatParserMap;
  59. BfAutoComplete* mAutoComplete;
  60. Array<BfTypeDef*> mAutoCompleteTempTypes; // Contains multiple values when we have nested types
  61. Dictionary<BfTypeDef*, BfStaticSearch> mStaticSearchMap;
  62. Dictionary<BfTypeDef*, BfInternalAccessSet> mInternalAccessMap;
  63. Array<BfAstNode*> mExteriorAutocompleteCheckNodes;
  64. BfGetSymbolReferenceKind mGetSymbolReferenceKind;
  65. String mQueuedReplaceTypeDef;
  66. BfTypeDef* mSymbolReferenceTypeDef;
  67. String mQueuedSymbolReferenceNamespace;
  68. BfAtomComposite mSymbolReferenceNamespace;
  69. int mSymbolReferenceLocalIdx;
  70. int mSymbolReferenceFieldIdx;
  71. int mSymbolReferenceMethodIdx;
  72. int mSymbolReferencePropertyIdx;
  73. int mSymbolMethodGenericParamIdx;
  74. int mSymbolTypeGenericParamIdx;
  75. bool mIsClassifying;
  76. bool mHasCursorIdx;
  77. bool mHadEmits;
  78. typedef Dictionary<BfParserData*, String> FoundSymbolReferencesParserDataMap;
  79. FoundSymbolReferencesParserDataMap mFoundSymbolReferencesParserData;
  80. //std::vector<BfIdentifierNode*> mSymbolReferenceIdentifiers;
  81. Dictionary<String, BfEmitEmbedEntry> mEmitEmbedEntries;
  82. public:
  83. void RecordReplaceNode(BfParserData* parser, int srcStart, int srcLen);
  84. void RecordReplaceNode(BfAstNode* node);
  85. BfAstNode* FindBaseNode(BfAstNode* node);
  86. public:
  87. BfResolvePassData();
  88. ~BfResolvePassData();
  89. void HandleLocalReference(BfIdentifierNode* identifier, BfTypeDef* typeDef, BfMethodDef* methodDef, int localVarIdx);
  90. void HandleLocalReference(BfIdentifierNode* identifier, BfIdentifierNode* origNameNode, BfTypeDef* typeDef, BfMethodDef* methodDef, int localVarIdx);
  91. void HandleTypeGenericParam(BfAstNode* node, BfTypeDef* typeDef, int genericParamIdx);
  92. void HandleMethodGenericParam(BfAstNode* node, BfTypeDef* typeDef, BfMethodDef* methodDef, int genericParamIdx);
  93. void HandleMethodReference(BfAstNode* node, BfTypeDef* typeDef, BfMethodDef* methodDef);
  94. void HandleFieldReference(BfAstNode* node, BfTypeDef* typeDef, BfFieldDef* fieldDef);
  95. void HandlePropertyReference(BfAstNode* node, BfTypeDef* typeDef, BfPropertyDef* propDef);
  96. void HandleTypeReference(BfAstNode* node, BfTypeDef* typeDef);
  97. void HandleNamespaceReference(BfAstNode* node, const BfAtomComposite& namespaceName);
  98. BfSourceClassifier* GetSourceClassifier(BfAstNode* astNode);
  99. BfSourceClassifier* GetSourceClassifier(BfParser* parser);
  100. //void ReplaceIdentifiers();
  101. };
  102. NS_BF_END