Contrastive Learning for Source Code with Structural and Functional Properties