2016-03-21 17 views
0

Xtext a Scopes ile çok özel bir sorunum var. Dilim, sipariş hassas kapsamını gerektirir ve özellikle her değişiklik olduğunda her simgeyi ayrıştırmak zorunda kalmadan bunu nasıl yapabileceğimi bilmiyorum.Xtext siparişe duyarlı kapsam

Bir örnek vereyim: Her birinde bazı sembollerin dışa aktarılması ve bazı sembollerin kaldırılması olan üç dosyamız var.

File1:

Add symbol A, B, C 

File2:

Imports A, B, C from File1 
Removes B, C 
Adds D 

dosya3:

Imports A, D from File2 
Adds B 

daha da karmaşık şeyler için, dosyaların sırası her bir sürüm numarası verilir dosya ve ithalatlar örtük.

Zaten Xtext Documentation'a bir göz attım, ancak genel kapsam belirleme söz konusu olduğunda, belgelerin çok yararlı olmadığını görüyorum. Bakabileceğim bir başlangıç ​​noktası var mı? herhangi bir ipucu veya ipuçları :) için şimdiden

Teşekkür

cevap

1

varsayılan aynı projede tüm diğer dosyalara tüm dosyalardan sembolleri görünür hale getirecek küresel kapsamı. Olası bir çözüm, kapsamayı olduğu gibi bırakmak ve özel davranışınızı bağlantı aşamasında uygulamaktır: DefaultLinkingService alt sınıfı ve getLinkedObjects(...)'u geçersiz kılma. Belirli bir ad için tüm bildirilen sembollerin bir listesini almak için kapsamı kullanın. Ardından, dosyalarınızın sırasına duyarlı semantiklerine dayanarak bu sembollerden birini seçebilirsiniz. , Alt sınıf DefaultResourceDescriptionStrategy createEObjectDescriptions(...) geçersiz kılar ve keyfi dize → dize eşlemeleriyle açıklamaları oluşturmak için EObjectDescription.create(...) kullanın: Eğer bir ilan sembolü içeren dosya üzerinde ek bilgiye ihtiyaç duyarsanız

, sen kullanıcı verilerinin IEObjectDescription ait içine koyabilirsiniz. Bu eşleştirmeler, ilgili EObject'leri çözme ihtiyacı olmadan bağlantı hizmetinde ve diğer hizmetlerde okunabilir.

Bu bağlantı temelli yaklaşımın dezavantajı, dosya semantiklerine göre sembolleri filtrelemek için içerik yardımı teklif sağlayıcısını özelleştirmeniz gerektiğidir. Varsayılan teklif sağlayıcı, kapsamda bulduğu tüm simgeleri sunacaktır.