소스 검색

Fixed renaming of namespaces

Brian Fiete 5 년 전
부모
커밋
569d121c14
3개의 변경된 파일14개의 추가작업 그리고 4개의 파일을 삭제
  1. 1 1
      IDEHelper/Compiler/BfAutoComplete.cpp
  2. 1 1
      IDEHelper/Compiler/BfAutoComplete.h
  3. 12 2
      IDEHelper/Compiler/BfModuleTypeUtils.cpp

+ 1 - 1
IDEHelper/Compiler/BfAutoComplete.cpp

@@ -3275,7 +3275,7 @@ void BfAutoComplete::FixitAddNamespace(BfAstNode* refNode, const StringImpl& nam
 		usingFinder.mLastIdx, namespaceStr.c_str()).c_str()));
 }
 
-void BfAutoComplete::FixitCheckNamespace(BfTypeDef* activeTypeDef, BfTypeReference* typeRef, BfTokenNode* nextDotToken)
+void BfAutoComplete::FixitCheckNamespace(BfTypeDef* activeTypeDef, BfAstNode* typeRef, BfTokenNode* nextDotToken)
 {
 	if (nextDotToken == NULL)
 		return;

+ 1 - 1
IDEHelper/Compiler/BfAutoComplete.h

@@ -257,7 +257,7 @@ public:
 	void FixitAddCase(BfTypeInstance * typeInst, const StringImpl & caseName, const BfTypeVector & fieldTypes);
 	void FixitAddMethod(BfTypeInstance* typeInst, const StringImpl& methodName, BfType* returnType, const BfTypeVector& paramTypes, bool wantStatic);
 	void FixitAddNamespace(BfAstNode* refNode, const StringImpl& namespacStr);
-	void FixitCheckNamespace(BfTypeDef* activeTypeDef, BfTypeReference* typeRef, BfTokenNode* nextDotToken);
+	void FixitCheckNamespace(BfTypeDef* activeTypeDef, BfAstNode* typeRef, BfTokenNode* nextDotToken);
 
 	void SetResultStringType(BfType* type);
 };

+ 12 - 2
IDEHelper/Compiler/BfModuleTypeUtils.cpp

@@ -6759,7 +6759,7 @@ BfType* BfModule::ResolveTypeResult(BfTypeReference* typeRef, BfType* resolvedTy
 			
 			while (auto qualifiedTypeRef = BfNodeDynCast<BfQualifiedTypeReference>(checkTypeRef))
 			{
-				if ((mCompiler->mResolvePassData->mSourceClassifier != NULL) && (resolvedTypeRef->IsObjectOrInterface()))
+				if ((mCompiler->mResolvePassData->mSourceClassifier != NULL) && (checkTypeRef == typeRef) && (resolvedTypeRef->IsObjectOrInterface()))
 					mCompiler->mResolvePassData->mSourceClassifier->SetElementType(qualifiedTypeRef->mRight, resolvedTypeRef->IsInterface() ? BfSourceElementType_Interface : BfSourceElementType_RefType);
 
 				StringView leftString = qualifiedTypeRef->mLeft->ToStringView();
@@ -6792,7 +6792,7 @@ BfType* BfModule::ResolveTypeResult(BfTypeReference* typeRef, BfType* resolvedTy
 				auto checkNameNode = namedTypeRef->mNameNode;
 				bool setType = false;
 
-				if ((mCompiler->mResolvePassData->mSourceClassifier != NULL) && (resolvedTypeRef->IsObjectOrInterface()))
+				if ((mCompiler->mResolvePassData->mSourceClassifier != NULL) && (checkTypeRef == typeRef) && (resolvedTypeRef->IsObjectOrInterface()))
 				{					
 					if (auto qualifiedNameNode = BfNodeDynCast<BfQualifiedNameNode>(checkNameNode))
 					{
@@ -6818,7 +6818,17 @@ BfType* BfModule::ResolveTypeResult(BfTypeReference* typeRef, BfType* resolvedTy
 							isNamespace = true;
 					}
 					else if ((isValid) && (resolvedTypeInstance->mTypeDef->mNamespace.EndsWith(leftComposite)))
+					{
+						if (autoComplete != NULL)
+						{
+							if (autoComplete->CheckFixit(typeRef))
+								autoComplete->FixitCheckNamespace(GetActiveTypeDef(), qualifiedNameNode->mLeft, qualifiedNameNode->mDot);
+							autoComplete->CheckNamespace(qualifiedNameNode->mLeft, resolvedTypeInstance->mTypeDef->mNamespace);
+						}
+						mCompiler->mResolvePassData->HandleNamespaceReference(qualifiedNameNode->mLeft, resolvedTypeInstance->mTypeDef->mNamespace);
+
 						isNamespace = true;
+					}
 					checkNameNode = qualifiedNameNode->mLeft;
 				}
 				if ((mCompiler->mResolvePassData->mSourceClassifier != NULL) &&