diff --git a/IDEHelper/Compiler/BfDefBuilder.cpp b/IDEHelper/Compiler/BfDefBuilder.cpp index efa70672..aa19e6e3 100644 --- a/IDEHelper/Compiler/BfDefBuilder.cpp +++ b/IDEHelper/Compiler/BfDefBuilder.cpp @@ -443,17 +443,7 @@ BfMethodDef* BfDefBuilder::CreateMethodDef(BfMethodDeclaration* methodDeclaratio { methodDef->mIsConcrete = true; methodDef->mIsVirtual = false; - } - - if (mCurTypeDef->mTypeCode == BfTypeCode_Interface) - { - // - } - else - { - if (methodDef->mIsConcrete) - Fail("Only interfaces methods can be declared as 'concrete'", methodDeclaration->mVirtualSpecifier); - } + } if (methodDef->mIsAbstract) { diff --git a/IDEHelper/Compiler/BfModule.cpp b/IDEHelper/Compiler/BfModule.cpp index eb6652d5..3d0ef3df 100644 --- a/IDEHelper/Compiler/BfModule.cpp +++ b/IDEHelper/Compiler/BfModule.cpp @@ -22780,6 +22780,11 @@ void BfModule::DoMethodDeclaration(BfMethodDeclaration* methodDeclaration, bool } } + if ((methodDef->mIsConcrete) && (!methodInstance->mIsForeignMethodDef) && (!mCurTypeInstance->IsInterface())) + { + Fail("Only interfaces methods can be declared as 'concrete'", methodDeclaration->mVirtualSpecifier); + } + if ((methodDef->mIsVirtual) && (methodDef->mIsStatic) && (!methodInstance->mIsInnerOverride)) { if ((virtualToken != NULL) && (virtualToken->mToken == BfToken_Override) && (methodDef->mDeclaringType->mTypeCode == BfTypeCode_Extension)) diff --git a/IDEHelper/Compiler/BfModuleTypeUtils.cpp b/IDEHelper/Compiler/BfModuleTypeUtils.cpp index 9f2df9a8..641054e3 100644 --- a/IDEHelper/Compiler/BfModuleTypeUtils.cpp +++ b/IDEHelper/Compiler/BfModuleTypeUtils.cpp @@ -8336,7 +8336,7 @@ BfTypeDef* BfModule::GetActiveTypeDef(BfTypeInstance* typeInstanceOverride, bool useTypeDef = typeInstance->mTypeDef; if ((mCurMethodState != NULL) && (mCurMethodState->mMixinState != NULL) && (useMixinDecl)) useTypeDef = mCurMethodState->mMixinState->mMixinMethodInstance->mMethodDef->mDeclaringType; - else if ((mCurMethodInstance != NULL) && (mCurMethodInstance->mMethodDef->mDeclaringType != NULL)) + else if ((mCurMethodInstance != NULL) && (!mCurMethodInstance->mIsForeignMethodDef) && (mCurMethodInstance->mMethodDef->mDeclaringType != NULL)) useTypeDef = mCurMethodInstance->mMethodDef->mDeclaringType; else if (mContext->mCurTypeState != NULL) {