private void VerifyProjectReference(INamedTag classTag, IDeclaredElement typeElement) { Logger.LogMessage("VerifyProjectReference"); // TODO: verify if this logic works if the mapped class is references as an assembly instead of a project if ((classTag == null) || (typeElement == null)) { Logger.LogMessage("classtag {0}, typeElement {1}", classTag, typeElement); return; } IProject projectOfMappings = classTag.GetProject(); if (projectOfMappings == null) { Logger.LogMessage("Project of mapping not found"); return; } Logger.LogMessage("ProjectOfMappings {0}", projectOfMappings.Name); foreach (IProjectFile projectFile in typeElement.GetProjectFiles()) { Logger.LogMessage("Project {0}", projectFile.GetProject().Name); if (projectFile.GetProject() == projectOfMappings) { Logger.LogMessage("Type is defined in same project"); return; } foreach (IProjectReference projectReference in classTag.GetProject().GetProjectReferences()) { Logger.LogMessage("Project reference {0}", projectReference.ResolveReferencedProject().Name); if (projectReference.ResolveReferencedProject() == projectFile.GetProject()) { return; } } } IElement typeElementTag = classTag.GetNameAttribute(); AddHighlighting(typeElementTag, new ReferenceHighlighting(string.Format("Mapping project '{0}' should reference project '{1}'", projectOfMappings.Name, typeElement.GetProjectFiles()[0].GetProject().Name))); }
private void ProcessJoinedSubclassElement(INamedTag joinedSubclassTag) { ITypeElement typeElement = HighlightUndefinedType(joinedSubclassTag, "name"); VerifyProjectReference(joinedSubclassTag, typeElement); }