Eclipse'in JDT derleyicisi, findType(...)
yöntemini, basamaklı derleme yapmanıza olanak veren bir arabirim INameEnvironment
sağlar. Merakla, standart JDK derleyici araç setini kullanarak herhangi bir yol olup olmadığını bilmek ister misiniz?javax.tool ile Cascade In-Bellek Derleme
Not, senaryo arası bağımlılıkları şablon dosyası oluşturan sınıflarının bellek derleme yapmak bir şablon motorudur ve bu size bir şablon dosyasını karşılaştı siparişi tahmin edemez, böylece Foo
kudreti ilk derlenmiş gerekiyor o ana Bar
, zaten derlenmiş olmadan bu nedenle sen Foo
'ın derleme devam etmek başka bir kaynak Bar
üretmek ve sırayla ilk önce derlemeye gerek Foo
derlenmesi sırasında, yani kaskad derlemesini yapmak için bir mekanizma gerekir: gibi bazı kod aşağıda:
private NameEnvironmentAnswer findType(final String name) {
try {
if (!name.contains(TemplateClass.CN_SUFFIX)) {
return findStandType(name);
}
char[] fileName = name.toCharArray();
TemplateClass templateClass = classCache.getByClassName(name);
// TemplateClass exists
if (templateClass != null) {
if (templateClass.javaByteCode != null) {
ClassFileReader classFileReader = new ClassFileReader(templateClass.javaByteCode, fileName, true);
return new NameEnvironmentAnswer(classFileReader, null);
}
// Cascade compilation
ICompilationUnit compilationUnit = new CompilationUnit(name);
return new NameEnvironmentAnswer(compilationUnit, null);
}
// So it's a standard class
return findStandType(name);
} catch (ClassFormatException e) {
// Something very very bad
throw new RuntimeException(e);
}
}
JDT'nin 'INameEnvironment.findType()' noktasının anlamı, kaskatlı derlemeyi yapmamı sağlamasıdır, örneğin 'Bar' sınıfına bağlı olan 'Foo' sınıfına sahibim. Ve benim app "Foo" önce derlemek için çalışır "Bar" derlenir, bu nedenle "Foo" derleme sırasında "Bar" kaynak kodunu oluşturmak için bir mantık uygulayabilir ve derlemek ve sonra Foo 'derleme devam edebilirsiniz. ForwardJavaFileManager' ile bu tür şeyler yapılabilir mi? –
Tanımladığım şeyin üzerine bu tür şeyleri uygulayabilirsiniz. Ben de benzer bir şey yapıyorum. Eğer bazı hataları alırsam, neyin eksik olduğunu bulmak için bir regex kullanırım ve bunun için bir saplama üretir/derler. Ama eğer JDT'nin eksik semboller bulmak için derlemenin tam ortasında size kancalar yaptığını söylerseniz, Javac'ın mevcut olduğunu düşünmüyorum. Ya ya önceden, ya da hata ya da 'liste ile anlamanız gerekir ...) '' arama bir paket içindir, bu nedenle eğer belirli bir paket için bir isteğin bir şeyler üretmeniz gerektiği anlamına gelirse, o zaman kaskat derlemesini buraya koyabilirsiniz. – mentics
hmm ... muhtemelen benim gitmem için bir yol değil. B'yi derlediğimde, A'nın eksik olduğunu, yalnızca A sınıfının eksik olduğunu, kaynak kodunun da hazır olmadığını, kaynak kodunun A şablon dosyasından [a] çıkması gerektiğini buldum. JDT'nin 'findType' çağrısı ihtiyaçları için mükemmel uyuyor. –