Search in sources :

Example 1 with MethodDefinition

use of nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition in project magik-tools by StevenLooman.

the class DuplicateMethodInFileCheck method walkPostMagik.

@Override
protected void walkPostMagik(final AstNode node) {
    // Test for duplicates.
    final Map<String, List<MethodDefinition>> definitions = this.methodDefinitions.stream().collect(Collectors.toMap(MethodDefinition::getName, List::of, (list1, list2) -> Stream.concat(list1.stream(), list2.stream()).collect(Collectors.toList())));
    definitions.entrySet().stream().filter(entry -> entry.getValue().size() > 1).flatMap(entry -> entry.getValue().stream()).forEach(definition -> {
        AstNode definitionNode = definition.getNode();
        this.addIssue(definitionNode, MESSAGE);
    });
}
Also used : HashSet(java.util.HashSet) AstNode(com.sonar.sslr.api.AstNode) List(java.util.List) MagikCheck(nl.ramsolutions.sw.magik.checks.MagikCheck) Stream(java.util.stream.Stream) MethodDefinition(nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition) Definition(nl.ramsolutions.sw.magik.analysis.definitions.Definition) Map(java.util.Map) Set(java.util.Set) MethodDefinitionParser(nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinitionParser) Rule(org.sonar.check.Rule) Collectors(java.util.stream.Collectors) List(java.util.List) AstNode(com.sonar.sslr.api.AstNode)

Example 2 with MethodDefinition

use of nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition in project magik-tools by StevenLooman.

the class DuplicateMethodInFileCheck method walkPostMethodDefinition.

@Override
protected void walkPostMethodDefinition(final AstNode node) {
    final MethodDefinitionParser parser = new MethodDefinitionParser(node);
    final List<Definition> parsedDefinitions = parser.parseDefinitions();
    if (parsedDefinitions.isEmpty()) {
        // How does this happen?
        return;
    }
    final MethodDefinition methodDefinition = (MethodDefinition) parsedDefinitions.get(0);
    this.methodDefinitions.add(methodDefinition);
}
Also used : MethodDefinitionParser(nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinitionParser) MethodDefinition(nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition) MethodDefinition(nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition) Definition(nl.ramsolutions.sw.magik.analysis.definitions.Definition)

Example 3 with MethodDefinition

use of nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition in project magik-tools by StevenLooman.

the class MagikIndexer method handleDefinition.

private void handleDefinition(final Path path, final MagikFile magikFile, final Definition definition) {
    if (definition instanceof PackageDefinition) {
        final PackageDefinition packageDefinition = (PackageDefinition) definition;
        this.handleDefinition(magikFile, packageDefinition);
    } else if (definition instanceof IndexedExemplarDefinition) {
        final IndexedExemplarDefinition indexedExemplarDefinition = (IndexedExemplarDefinition) definition;
        this.handleDefinition(magikFile, indexedExemplarDefinition);
    } else if (definition instanceof EnumerationDefinition) {
        final EnumerationDefinition enumerationDefinition = (EnumerationDefinition) definition;
        this.handleDefinition(magikFile, enumerationDefinition);
    } else if (definition instanceof SlottedExemplarDefinition) {
        final SlottedExemplarDefinition slottedExemplarDefinition = (SlottedExemplarDefinition) definition;
        this.handleDefinition(magikFile, slottedExemplarDefinition);
    } else if (definition instanceof MixinDefinition) {
        final MixinDefinition mixinDefinition = (MixinDefinition) definition;
        this.handleDefinition(magikFile, mixinDefinition);
    } else if (definition instanceof MethodDefinition) {
        final MethodDefinition methodDefinition = (MethodDefinition) definition;
        this.handleDefinition(magikFile, methodDefinition);
    } else if (definition instanceof GlobalDefinition) {
        final GlobalDefinition globalDefinition = (GlobalDefinition) definition;
        this.handleDefinition(magikFile, globalDefinition);
    } else if (definition instanceof BinaryOperatorDefinition) {
        final BinaryOperatorDefinition binaryOperatorDefinition = (BinaryOperatorDefinition) definition;
        this.handleDefinition(magikFile, binaryOperatorDefinition);
    }
}
Also used : PackageDefinition(nl.ramsolutions.sw.magik.analysis.definitions.PackageDefinition) BinaryOperatorDefinition(nl.ramsolutions.sw.magik.analysis.definitions.BinaryOperatorDefinition) IndexedExemplarDefinition(nl.ramsolutions.sw.magik.analysis.definitions.IndexedExemplarDefinition) MethodDefinition(nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition) GlobalDefinition(nl.ramsolutions.sw.magik.analysis.definitions.GlobalDefinition) EnumerationDefinition(nl.ramsolutions.sw.magik.analysis.definitions.EnumerationDefinition) MixinDefinition(nl.ramsolutions.sw.magik.analysis.definitions.MixinDefinition) SlottedExemplarDefinition(nl.ramsolutions.sw.magik.analysis.definitions.SlottedExemplarDefinition)

Example 4 with MethodDefinition

use of nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition in project magik-tools by StevenLooman.

the class MagikIndexer method handleDefinition.

private void handleDefinition(final MagikFile magikFile, final MethodDefinition definition) {
    final AstNode node = definition.getNode();
    if (node.isNot(MagikGrammar.METHOD_DEFINITION)) {
        // No slot accessors, shared variables, shared constants.
        this.handleMethodDefinitionOther(magikFile, definition);
        return;
    }
    // Get exemplar.
    final GlobalReference globalRef = definition.getTypeGlobalReference();
    final AbstractType exemplarType = this.typeKeeper.getType(globalRef);
    if (exemplarType == UndefinedType.INSTANCE) {
        LOGGER.warn("Unknown type: {}", globalRef);
        return;
    }
    // Combine parameter types with method docs.
    final NewDocParser newDocParser = new NewDocParser(node);
    final Map<String, String> parameterTypes = newDocParser.getParameterTypes();
    final List<Parameter> parameters = definition.getParameters().stream().map(parameterDefinition -> {
        final String name = parameterDefinition.getName();
        final AbstractType type;
        if (!parameterTypes.containsKey(name)) {
            type = UndefinedType.INSTANCE;
        } else {
            final String parameterType = parameterTypes.get(name);
            type = this.typeParser.parseTypeString(parameterType, globalRef.getPakkage());
        }
        final Parameter.Modifier modifier = MagikIndexer.PARAMETER_MODIFIER_MAPPING.get(parameterDefinition.getModifier());
        return new Parameter(name, modifier, type);
    }).collect(Collectors.toList());
    final ParameterDefinition assignParamDef = definition.getAssignmentParameter();
    final Parameter assignmentParameter = assignParamDef != null ? new Parameter(assignParamDef.getName(), MagikIndexer.PARAMETER_MODIFIER_MAPPING.get(assignParamDef.getModifier())) : null;
    // Combine iterator types with method docs.
    final ExpressionResult loopResult = newDocParser.getLoopTypes().stream().map(type -> this.typeParser.parseTypeString(type, globalRef.getPakkage())).collect(ExpressionResult.COLLECTOR);
    // Combine return types with method docs.
    final ExpressionResult callResult = newDocParser.getReturnTypes().stream().map(type -> this.typeParser.parseTypeString(type, globalRef.getPakkage())).collect(ExpressionResult.COLLECTOR);
    // Create method.
    final MagikType magikType = (MagikType) exemplarType;
    final EnumSet<Method.Modifier> modifiers = definition.getModifiers().stream().map(modifier -> MagikIndexer.METHOD_MODIFIER_MAPPING.get(modifier)).collect(Collectors.toCollection(() -> EnumSet.noneOf(Method.Modifier.class)));
    final URI uri = magikFile.getUri();
    final Location location = new Location(uri, node);
    final String methodName = definition.getMethodName();
    final Method method = magikType.addMethod(modifiers, location, methodName, parameters, assignmentParameter, callResult, loopResult);
    // Method doc.
    final String methodDoc = MagikCommentExtractor.extractDocComments(node).map(Token::getValue).map(// Strip '##'
    line -> line.substring(2)).collect(Collectors.joining("\n"));
    method.setDoc(methodDoc);
    // Save used types.
    final AstNode bodyNode = node.getFirstChild(MagikGrammar.BODY);
    final GlobalScope globalScope = magikFile.getGlobalScope();
    final Scope bodyScope = globalScope.getScopeForNode(bodyNode);
    Objects.requireNonNull(bodyScope);
    bodyScope.getSelfAndDescendantScopes().stream().flatMap(scope -> scope.getScopeEntriesInScope().stream()).filter(scopeEntry -> scopeEntry.isType(ScopeEntry.Type.GLOBAL) || scopeEntry.isType(ScopeEntry.Type.DYNAMIC)).map(ScopeEntry::getIdentifier).map(identifier -> {
        AbstractType type = this.typeKeeper.getType(globalRef);
        if (type == UndefinedType.INSTANCE) {
            return null;
        } else if (type == SelfType.INSTANCE) {
            // TODO: Does this actually happen?
            type = this.typeKeeper.getType(globalRef);
        }
        return type;
    }).filter(Objects::nonNull).forEach(method::addUsedType);
    // Save called method names (thus without type).
    node.getDescendants(MagikGrammar.METHOD_INVOCATION).stream().map(invocationNode -> {
        final MethodInvocationNodeHelper invocationHelper = new MethodInvocationNodeHelper(invocationNode);
        return invocationHelper.getMethodName();
    }).forEach(method::addCalledMethod);
    // Save used slot names.
    node.getDescendants(MagikGrammar.SLOT).stream().map(slotNode -> slotNode.getFirstChild(MagikGrammar.IDENTIFIER).getTokenValue()).forEach(method::addUsedSlot);
    final Path path = Paths.get(magikFile.getUri());
    this.indexedMethods.get(path).add(method);
    LOGGER.debug("Indexed method: {}", method);
}
Also used : Method(nl.ramsolutions.sw.magik.analysis.typing.types.Method) MagikType(nl.ramsolutions.sw.magik.analysis.typing.types.MagikType) AstNode(com.sonar.sslr.api.AstNode) SlottedExemplarDefinition(nl.ramsolutions.sw.magik.analysis.definitions.SlottedExemplarDefinition) IndexedType(nl.ramsolutions.sw.magik.analysis.typing.types.IndexedType) LoggerFactory(org.slf4j.LoggerFactory) SlottedType(nl.ramsolutions.sw.magik.analysis.typing.types.SlottedType) Package(nl.ramsolutions.sw.magik.analysis.typing.types.Package) AliasType(nl.ramsolutions.sw.magik.analysis.typing.types.AliasType) IndexedExemplarDefinition(nl.ramsolutions.sw.magik.analysis.definitions.IndexedExemplarDefinition) UndefinedType(nl.ramsolutions.sw.magik.analysis.typing.types.UndefinedType) EnumerationDefinition(nl.ramsolutions.sw.magik.analysis.definitions.EnumerationDefinition) Map(java.util.Map) URI(java.net.URI) Path(java.nio.file.Path) MagikGrammar(nl.ramsolutions.sw.magik.api.MagikGrammar) EnumSet(java.util.EnumSet) MethodInvocationNodeHelper(nl.ramsolutions.sw.magik.analysis.helpers.MethodInvocationNodeHelper) MethodDefinition(nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition) TypeAnnotationHandler(nl.ramsolutions.sw.magik.analysis.typing.TypeAnnotationHandler) PackageNodeHelper(nl.ramsolutions.sw.magik.analysis.helpers.PackageNodeHelper) Set(java.util.Set) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) List(java.util.List) Stream(java.util.stream.Stream) ParameterDefinition(nl.ramsolutions.sw.magik.analysis.definitions.ParameterDefinition) GlobalDefinition(nl.ramsolutions.sw.magik.analysis.definitions.GlobalDefinition) HashMap(java.util.HashMap) SelfType(nl.ramsolutions.sw.magik.analysis.typing.types.SelfType) ITypeKeeper(nl.ramsolutions.sw.magik.analysis.typing.ITypeKeeper) HashSet(java.util.HashSet) TypeParser(nl.ramsolutions.sw.magik.analysis.typing.TypeParser) AbstractType(nl.ramsolutions.sw.magik.analysis.typing.types.AbstractType) Location(nl.ramsolutions.sw.magik.analysis.Location) Nullable(javax.annotation.Nullable) GlobalScope(nl.ramsolutions.sw.magik.analysis.scope.GlobalScope) MagikCommentExtractor(nl.ramsolutions.sw.magik.parser.MagikCommentExtractor) GlobalReference(nl.ramsolutions.sw.magik.analysis.typing.types.GlobalReference) Token(com.sonar.sslr.api.Token) Slot(nl.ramsolutions.sw.magik.analysis.typing.types.Slot) Logger(org.slf4j.Logger) MagikFile(nl.ramsolutions.sw.magik.MagikFile) IOException(java.io.IOException) Parameter(nl.ramsolutions.sw.magik.analysis.typing.types.Parameter) NewDocParser(nl.ramsolutions.sw.magik.parser.NewDocParser) BinaryOperatorDefinition(nl.ramsolutions.sw.magik.analysis.definitions.BinaryOperatorDefinition) MixinDefinition(nl.ramsolutions.sw.magik.analysis.definitions.MixinDefinition) IntrinsicType(nl.ramsolutions.sw.magik.analysis.typing.types.IntrinsicType) PackageDefinition(nl.ramsolutions.sw.magik.analysis.definitions.PackageDefinition) Paths(java.nio.file.Paths) Definition(nl.ramsolutions.sw.magik.analysis.definitions.Definition) ScopeEntry(nl.ramsolutions.sw.magik.analysis.scope.ScopeEntry) Scope(nl.ramsolutions.sw.magik.analysis.scope.Scope) Collections(java.util.Collections) BinaryOperator(nl.ramsolutions.sw.magik.analysis.typing.BinaryOperator) ExpressionResult(nl.ramsolutions.sw.magik.analysis.typing.types.ExpressionResult) Path(java.nio.file.Path) GlobalScope(nl.ramsolutions.sw.magik.analysis.scope.GlobalScope) GlobalReference(nl.ramsolutions.sw.magik.analysis.typing.types.GlobalReference) ExpressionResult(nl.ramsolutions.sw.magik.analysis.typing.types.ExpressionResult) Token(com.sonar.sslr.api.Token) Method(nl.ramsolutions.sw.magik.analysis.typing.types.Method) URI(java.net.URI) MagikType(nl.ramsolutions.sw.magik.analysis.typing.types.MagikType) MethodInvocationNodeHelper(nl.ramsolutions.sw.magik.analysis.helpers.MethodInvocationNodeHelper) NewDocParser(nl.ramsolutions.sw.magik.parser.NewDocParser) GlobalScope(nl.ramsolutions.sw.magik.analysis.scope.GlobalScope) Scope(nl.ramsolutions.sw.magik.analysis.scope.Scope) AbstractType(nl.ramsolutions.sw.magik.analysis.typing.types.AbstractType) Parameter(nl.ramsolutions.sw.magik.analysis.typing.types.Parameter) AstNode(com.sonar.sslr.api.AstNode) ParameterDefinition(nl.ramsolutions.sw.magik.analysis.definitions.ParameterDefinition) Location(nl.ramsolutions.sw.magik.analysis.Location)

Example 5 with MethodDefinition

use of nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition in project magik-tools by StevenLooman.

the class MagikIndexer method handleMethodDefinitionOther.

private void handleMethodDefinitionOther(final MagikFile magikFile, final MethodDefinition definition) {
    // Slot accessors, shared variables, shared constants.
    final GlobalReference globalRef = definition.getTypeGlobalReference();
    final AbstractType exemplarType = this.typeKeeper.getType(globalRef);
    if (exemplarType == UndefinedType.INSTANCE) {
        LOGGER.warn("Unknown type: {}", globalRef);
        return;
    }
    // Get method return types from docs, if any.
    final AstNode node = definition.getNode();
    final NewDocParser methodDocParser = new NewDocParser(node);
    final List<AbstractType> methodReturnTypes = methodDocParser.getReturnTypes().stream().map(typeStr -> this.typeParser.parseTypeString(typeStr, globalRef.getPakkage())).collect(Collectors.toList());
    // Get slot type from docs, if any.
    final AstNode statementNode = node.getFirstAncestor(MagikGrammar.STATEMENT);
    final AbstractType slotType;
    if (statementNode != null) {
        final NewDocParser exemplarDocParser = new NewDocParser(statementNode);
        final String slotName = definition.getMethodName();
        final String slotTypeStr = exemplarDocParser.getSlotTypes().get(slotName);
        slotType = this.typeParser.parseTypeString(slotTypeStr, globalRef.getPakkage());
    } else {
        slotType = UndefinedType.INSTANCE;
    }
    // Determine the result to use.
    final ExpressionResult result = !methodReturnTypes.isEmpty() ? new ExpressionResult(methodReturnTypes) : new ExpressionResult(slotType);
    // Create method.
    final MagikType magikType = (MagikType) exemplarType;
    final EnumSet<Method.Modifier> modifiers = definition.getModifiers().stream().map(modifier -> MagikIndexer.METHOD_MODIFIER_MAPPING.get(modifier)).collect(Collectors.toCollection(() -> EnumSet.noneOf(Method.Modifier.class)));
    final URI uri = magikFile.getUri();
    final Location location = new Location(uri, node);
    final String methodName = definition.getMethodName();
    final List<Parameter> parameters = Collections.emptyList();
    final Parameter assignmentParameter = null;
    final Method method = magikType.addMethod(modifiers, location, methodName, parameters, assignmentParameter, result);
    // TODO: Will this work?
    // TODO: Ensure we don't pick up class comment of def_slotted_exemplar.
    final String methodDoc = MagikCommentExtractor.extractDocComments(node).map(Token::getValue).collect(Collectors.joining("\n"));
    method.setDoc(methodDoc);
    final Path path = Paths.get(magikFile.getUri());
    this.indexedMethods.get(path).add(method);
    LOGGER.debug("Indexed method: {}", method);
}
Also used : Method(nl.ramsolutions.sw.magik.analysis.typing.types.Method) MagikType(nl.ramsolutions.sw.magik.analysis.typing.types.MagikType) AstNode(com.sonar.sslr.api.AstNode) SlottedExemplarDefinition(nl.ramsolutions.sw.magik.analysis.definitions.SlottedExemplarDefinition) IndexedType(nl.ramsolutions.sw.magik.analysis.typing.types.IndexedType) LoggerFactory(org.slf4j.LoggerFactory) SlottedType(nl.ramsolutions.sw.magik.analysis.typing.types.SlottedType) Package(nl.ramsolutions.sw.magik.analysis.typing.types.Package) AliasType(nl.ramsolutions.sw.magik.analysis.typing.types.AliasType) IndexedExemplarDefinition(nl.ramsolutions.sw.magik.analysis.definitions.IndexedExemplarDefinition) UndefinedType(nl.ramsolutions.sw.magik.analysis.typing.types.UndefinedType) EnumerationDefinition(nl.ramsolutions.sw.magik.analysis.definitions.EnumerationDefinition) Map(java.util.Map) URI(java.net.URI) Path(java.nio.file.Path) MagikGrammar(nl.ramsolutions.sw.magik.api.MagikGrammar) EnumSet(java.util.EnumSet) MethodInvocationNodeHelper(nl.ramsolutions.sw.magik.analysis.helpers.MethodInvocationNodeHelper) MethodDefinition(nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition) TypeAnnotationHandler(nl.ramsolutions.sw.magik.analysis.typing.TypeAnnotationHandler) PackageNodeHelper(nl.ramsolutions.sw.magik.analysis.helpers.PackageNodeHelper) Set(java.util.Set) Collectors(java.util.stream.Collectors) Objects(java.util.Objects) List(java.util.List) Stream(java.util.stream.Stream) ParameterDefinition(nl.ramsolutions.sw.magik.analysis.definitions.ParameterDefinition) GlobalDefinition(nl.ramsolutions.sw.magik.analysis.definitions.GlobalDefinition) HashMap(java.util.HashMap) SelfType(nl.ramsolutions.sw.magik.analysis.typing.types.SelfType) ITypeKeeper(nl.ramsolutions.sw.magik.analysis.typing.ITypeKeeper) HashSet(java.util.HashSet) TypeParser(nl.ramsolutions.sw.magik.analysis.typing.TypeParser) AbstractType(nl.ramsolutions.sw.magik.analysis.typing.types.AbstractType) Location(nl.ramsolutions.sw.magik.analysis.Location) Nullable(javax.annotation.Nullable) GlobalScope(nl.ramsolutions.sw.magik.analysis.scope.GlobalScope) MagikCommentExtractor(nl.ramsolutions.sw.magik.parser.MagikCommentExtractor) GlobalReference(nl.ramsolutions.sw.magik.analysis.typing.types.GlobalReference) Token(com.sonar.sslr.api.Token) Slot(nl.ramsolutions.sw.magik.analysis.typing.types.Slot) Logger(org.slf4j.Logger) MagikFile(nl.ramsolutions.sw.magik.MagikFile) IOException(java.io.IOException) Parameter(nl.ramsolutions.sw.magik.analysis.typing.types.Parameter) NewDocParser(nl.ramsolutions.sw.magik.parser.NewDocParser) BinaryOperatorDefinition(nl.ramsolutions.sw.magik.analysis.definitions.BinaryOperatorDefinition) MixinDefinition(nl.ramsolutions.sw.magik.analysis.definitions.MixinDefinition) IntrinsicType(nl.ramsolutions.sw.magik.analysis.typing.types.IntrinsicType) PackageDefinition(nl.ramsolutions.sw.magik.analysis.definitions.PackageDefinition) Paths(java.nio.file.Paths) Definition(nl.ramsolutions.sw.magik.analysis.definitions.Definition) ScopeEntry(nl.ramsolutions.sw.magik.analysis.scope.ScopeEntry) Scope(nl.ramsolutions.sw.magik.analysis.scope.Scope) Collections(java.util.Collections) BinaryOperator(nl.ramsolutions.sw.magik.analysis.typing.BinaryOperator) ExpressionResult(nl.ramsolutions.sw.magik.analysis.typing.types.ExpressionResult) Path(java.nio.file.Path) GlobalReference(nl.ramsolutions.sw.magik.analysis.typing.types.GlobalReference) ExpressionResult(nl.ramsolutions.sw.magik.analysis.typing.types.ExpressionResult) Method(nl.ramsolutions.sw.magik.analysis.typing.types.Method) URI(java.net.URI) MagikType(nl.ramsolutions.sw.magik.analysis.typing.types.MagikType) NewDocParser(nl.ramsolutions.sw.magik.parser.NewDocParser) AbstractType(nl.ramsolutions.sw.magik.analysis.typing.types.AbstractType) Parameter(nl.ramsolutions.sw.magik.analysis.typing.types.Parameter) AstNode(com.sonar.sslr.api.AstNode) Location(nl.ramsolutions.sw.magik.analysis.Location)

Aggregations

MethodDefinition (nl.ramsolutions.sw.magik.analysis.definitions.MethodDefinition)5 Definition (nl.ramsolutions.sw.magik.analysis.definitions.Definition)4 AstNode (com.sonar.sslr.api.AstNode)3 HashSet (java.util.HashSet)3 List (java.util.List)3 Map (java.util.Map)3 Set (java.util.Set)3 Collectors (java.util.stream.Collectors)3 Stream (java.util.stream.Stream)3 BinaryOperatorDefinition (nl.ramsolutions.sw.magik.analysis.definitions.BinaryOperatorDefinition)3 EnumerationDefinition (nl.ramsolutions.sw.magik.analysis.definitions.EnumerationDefinition)3 GlobalDefinition (nl.ramsolutions.sw.magik.analysis.definitions.GlobalDefinition)3 IndexedExemplarDefinition (nl.ramsolutions.sw.magik.analysis.definitions.IndexedExemplarDefinition)3 MixinDefinition (nl.ramsolutions.sw.magik.analysis.definitions.MixinDefinition)3 PackageDefinition (nl.ramsolutions.sw.magik.analysis.definitions.PackageDefinition)3 SlottedExemplarDefinition (nl.ramsolutions.sw.magik.analysis.definitions.SlottedExemplarDefinition)3 Token (com.sonar.sslr.api.Token)2 IOException (java.io.IOException)2 URI (java.net.URI)2 Path (java.nio.file.Path)2