/* * Copyright 2016 Nokia Solutions and Networks * Licensed under the Apache License, Version 2.0, * see license.txt file for details. */ package org.rf.ide.core.testdata.model.table.exec; import java.util.ArrayList; import java.util.List; import java.util.Optional; import org.rf.ide.core.testdata.model.RobotFile; import org.rf.ide.core.testdata.model.RobotFileOutput; import org.rf.ide.core.testdata.model.table.exec.descs.ast.mapping.VariableDeclaration; import org.rf.ide.core.testdata.text.read.IRobotLineElement; import org.rf.ide.core.testdata.text.read.IRobotTokenType; import org.rf.ide.core.testdata.text.read.RobotLine; import org.rf.ide.core.testdata.text.read.recognizer.RobotToken; import org.rf.ide.core.testdata.text.read.recognizer.RobotTokenType; import com.google.common.collect.Range; public class CommentedVariablesFilter { public static class FilteredVariables { private final List<VariableDeclaration> commented = new ArrayList<>(); private final List<VariableDeclaration> used = new ArrayList<>(); public List<VariableDeclaration> getCommented() { return commented; } public List<VariableDeclaration> getUsed() { return used; } } public FilteredVariables filter(final RobotFileOutput rfo, final List<VariableDeclaration> vars) { final FilteredVariables result = new FilteredVariables(); for (final VariableDeclaration var : vars) { if (isInCommentedPart(rfo, var.asToken())) { result.commented.add(var); } else { result.used.add(var); } } return result; } public boolean isInCommentedPart(final RobotFileOutput rfo, final RobotToken token) { boolean result = false; Optional<Integer> startCommentRange = Optional.empty(); final RobotFile fileModel = rfo.getFileModel(); final int tokenOffset = token.getStartOffset(); final Optional<Integer> robotLineIndex = fileModel.getRobotLineIndexBy(tokenOffset); if (robotLineIndex.isPresent()) { final RobotLine robotLine = fileModel.getFileContent().get(robotLineIndex.get()); final List<IRobotLineElement> lineElements = robotLine.getLineElements(); for (final IRobotLineElement lineElem : lineElements) { final List<IRobotTokenType> types = lineElem.getTypes(); if (types.contains(RobotTokenType.START_HASH_COMMENT) || types.contains(RobotTokenType.COMMENT_CONTINUE)) { startCommentRange = Optional.of(lineElem.getStartOffset()); break; } } if (startCommentRange.isPresent()) { final Range<Integer> range = Range.closed(startCommentRange.get(), robotLine.getEndOfLine().getStartOffset()); result = range.contains(tokenOffset); } } return result; } }