Created
October 25, 2016 18:11
-
-
Save quintesse/004e33e84553abd75412ceb3d164bf4a to your computer and use it in GitHub Desktop.
Self-typechecking Ceylon program
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
native("jvm") | |
module selftypecheck "1.0.0" { | |
import ceylon.interop.java "1.3.1-SNAPSHOT"; | |
import com.redhat.ceylon.typechecker "1.3.1-SNAPSHOT"; | |
import com.redhat.ceylon.compiler.java "1.3.1-SNAPSHOT"; | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import java.io{File} | |
import java.util.concurrent{JCallable=Callable} | |
import ceylon.interop.java{JavaList} | |
import com.redhat.ceylon.cmr.api{RepositoryManager} | |
import com.redhat.ceylon.cmr.ceylon{CeylonUtils} | |
import com.redhat.ceylon.compiler.typechecker{TypeCheckerBuilder, TypeChecker} | |
import com.redhat.ceylon.compiler.typechecker.io.cmr.impl{LeakingLogger} | |
import com.redhat.ceylon.compiler.typechecker.util {ModuleManagerFactory} | |
import com.redhat.ceylon.model.typechecker.util {ModuleManager} | |
import com.redhat.ceylon.compiler.typechecker.context {Context,PhasedUnits} | |
import com.redhat.ceylon.compiler.typechecker.analyzer {ModuleSourceMapper} | |
import com.redhat.ceylon.compiler {PhasedUnitsModuleManager} | |
import com.redhat.ceylon.compiler.java.loader.model {LazyModuleSourceMapper} | |
import com.redhat.ceylon.common {ModuleSpec} | |
import com.redhat.ceylon.model.loader.model {LazyModuleManager} | |
late TypeChecker typeChecker; | |
shared void run(){ | |
value args = ["/home/ceylon/ceylon/ceylon-eclipse-workspace/selftypecheck/source"]; | |
RepositoryManager repositoryManager = | |
CeylonUtils.repoManager() | |
.systemRepo("/home/ceylon/ceylon/ceylon/dist/dist/repo") | |
.logger(LeakingLogger()) | |
.buildManager(); | |
value outputRepositoryManager = repositoryManager; | |
TypeCheckerBuilder tcb = | |
TypeCheckerBuilder() | |
.setRepositoryManager(repositoryManager) | |
.verbose(true) | |
.statistics(true); | |
value getTypechecker = object satisfies JCallable<PhasedUnits> { | |
shared actual PhasedUnits call() => typeChecker.phasedUnits; | |
}; | |
value modules = JavaList([ModuleSpec("selftypecheck", "1.0.0")]); | |
value mmf = object satisfies ModuleManagerFactory { | |
shared actual ModuleManager createModuleManager(Context? context) | |
=> PhasedUnitsModuleManager(getTypechecker, context, modules, outputRepositoryManager, false, null); | |
shared actual ModuleSourceMapper createModuleManagerUtil(Context? context, ModuleManager? moduleManager) { | |
assert (is LazyModuleManager moduleManager); | |
return LazyModuleSourceMapper(context, moduleManager, null); | |
} | |
}; | |
tcb.moduleManagerFactory(mmf); | |
for (String path in args) { | |
tcb.addSrcDirectory(File(path)); | |
} | |
typeChecker = tcb.typeChecker; | |
typeChecker.process(); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment