类org.eclipse.jface.text.codemining.ICodeMining源码实例Demo

下面列出了怎么用org.eclipse.jface.text.codemining.ICodeMining的API类实例代码及写法,或者点击链接到github查看源代码。


@Override
public CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer,
		IProgressMonitor monitor) {
	return CompletableFuture.supplyAsync(() -> {
		monitor.isCanceled();
		ITextEditor textEditor = super.getAdapter(ITextEditor.class);
		ITypeRoot unit = EditorUtility.getEditorInputJavaElement(textEditor, true);
		if (unit == null) {
			return Collections.emptyList();
		}
		try {
			IJavaElement[] elements = unit.getChildren();
			List<ICodeMining> minings = new ArrayList<>(elements.length);
			collectMinings(unit, textEditor, unit.getChildren(), minings, viewer, monitor);
			monitor.isCanceled();
			return minings;
		} catch (JavaModelException e) {
			// Should never occur
		}
		return Collections.emptyList();
	});
}
 

@Override
public CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer,
		IProgressMonitor monitor) {
	this.viewer = viewer;
	return CompletableFuture.supplyAsync(() -> {
		monitor.isCanceled();
		ITextEditor textEditor = super.getAdapter(ITextEditor.class);
		ITypeRoot unit = EditorUtility.getEditorInputJavaElement(textEditor, true);
		if (unit == null) {
			return null;
		}
		try {
			IJavaElement[] elements = unit.getChildren();
			List<ICodeMining> minings = new ArrayList<>(elements.length);
			collectCodeMinings(unit, elements, minings, viewer, monitor);
			monitor.isCanceled();
			return minings;
		} catch (JavaModelException e) {
			// TODO: what should we done when there are some errors?
		}
		return null;
	});
}
 

@Override
public CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer,
		IProgressMonitor monitor) {
	return CompletableFuture.supplyAsync(() -> {
		monitor.isCanceled();
		ITextEditor textEditor = super.getAdapter(ITextEditor.class);
		ITypeRoot unit = EditorUtility.getEditorInputJavaElement(textEditor, true);
		if (unit == null) {
			return null;
		}
		List<ICodeMining> minings = new ArrayList<>();
		collectCodeMinings(unit, textEditor, viewer, minings);
		monitor.isCanceled();
		return minings;
	});
}
 

@Override
public CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer,
		IProgressMonitor monitor) {
	return CompletableFuture.supplyAsync(() -> {
		monitor.isCanceled();
		ITextEditor textEditor = super.getAdapter(ITextEditor.class);
		ITypeRoot unit = EditorUtility.getEditorInputJavaElement(textEditor, true);
		if (unit == null) {
			return Collections.emptyList();
		}
		fViewer = viewer;
		fUnit = unit;
		try {
			List<ICodeMining> minings = new ArrayList<>();
			collectMinings(unit, textEditor, unit.getChildren(), minings, viewer, monitor);
			monitor.isCanceled();
			return minings;
		} catch (JavaModelException e) {
			// TODO: what should we done when there are some errors?
		}
		return Collections.emptyList();
	});
}
 

@Override
public CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer,
		IProgressMonitor monitor) {
	CompletableFuture<List<? extends ICodeMining>> future = CompletableFuture.supplyAsync(() -> {
		CancelableUnitOfWork<List<ICodeMining>, XtextResource> uow = new CancelableUnitOfWork<List<ICodeMining>, XtextResource>() {
			@Override
			public List<ICodeMining> exec(XtextResource resource, CancelIndicator uowCancelIndicator) throws Exception {
				CombinedCancelIndicator indicator = new CombinedCancelIndicator(monitor, uowCancelIndicator);
				return createCodeMinings(viewer.getDocument(), resource, indicator);
			}

		};
		return xtextDocumentUtil.getXtextDocument(viewer).tryReadOnly(uow, () -> Collections.emptyList());
	});
	return future;
}
 

/**
 * Creates code minings for a document
 * @param document The document
 * @param resource The resource for that document
 * @param indicator Cancelation indicator
 * @return Computed minings
 * @throws BadLocationException when line number doesn't exists
 */
protected List<ICodeMining> createCodeMinings(IDocument document, XtextResource resource,
		CancelIndicator cancelIndicator)
		throws BadLocationException {
	List<ICodeMining> codeMiningList = new ArrayList<>();
	IAcceptor<ICodeMining> acceptor = new IAcceptor<ICodeMining>() {
		@Override
		public void accept(ICodeMining codeMiningObject) {
			if (cancelIndicator.isCanceled()) {
				// do not accept mining and abort processing when operation was canceled
				throw new CancellationException();
			}
			codeMiningList.add(codeMiningObject);
		}
	};
	
	createCodeMinings(document, resource, cancelIndicator, acceptor);

	return codeMiningList;
}
 

@Override
public final CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer,
		IProgressMonitor monitor) {
	return CompletableFuture.supplyAsync(() -> {
		monitor.isCanceled();
		addDebugListener(viewer);
		ITextEditor textEditor = super.getAdapter(ITextEditor.class);
		T stackFrame = getStackFrame(viewer, textEditor);
		if (stackFrame == null) {
			return Collections.emptyList();
		}
		return provideCodeMinings(viewer, stackFrame, monitor);
	});
}
 

public JavaDebugElementCodeMiningASTVisitor(IJavaStackFrame frame, CompilationUnit cu, ITextViewer viewer,
		List<ICodeMining> minings, AbstractDebugVariableCodeMiningProvider provider) {
	this.cu = cu;
	this.minings = minings;
	this.provider = provider;
	this.viewer = viewer;
	this.fFrame = frame;
}
 

@Override
protected List provideCodeMinings(ITextViewer viewer, IJavaStackFrame frame, IProgressMonitor monitor) {
	List<ICodeMining> minings = new ArrayList<>();
	ITextEditor textEditor = super.getAdapter(ITextEditor.class);
	ITypeRoot unit = EditorUtility.getEditorInputJavaElement(textEditor, true);
	if (unit == null) {
		return minings;
	}
	CompilationUnit cu = SharedASTProvider.getAST(unit, SharedASTProvider.WAIT_YES, null);
	JavaDebugElementCodeMiningASTVisitor visitor = new JavaDebugElementCodeMiningASTVisitor(frame, cu, viewer,
			minings, this);
	cu.accept(visitor);
	return minings;
}
 

private void collectCodeMinings(ITypeRoot unit, ITextEditor textEditor, ITextViewer viewer,
		List<ICodeMining> minings) {
	CompilationUnit cu = SharedASTProvider.getAST(unit, SharedASTProvider.WAIT_YES, null);
	JavaCodeMiningASTVisitor visitor = new JavaCodeMiningASTVisitor(cu, textEditor, viewer, minings, this);
	visitor.setShowParameterName(showParameterName);
	visitor.setShowParameterType(showParameterType);
	visitor.setShowParameterOnlyForLiteral(showParameterOnlyForLiteral);
	visitor.setShowParameterByUsingFilters(showParameterByUsingFilters);
	visitor.setShowEndStatement(showEndStatement);
	visitor.setEndStatementMinLineNumber(endStatementMinLineNumber);
	visitor.setShowJava10VarType(showJava10VarType);
	cu.accept(visitor);
}
 

public JavaCodeMiningASTVisitor(CompilationUnit cu, ITextEditor textEditor, ITextViewer viewer,
		List<ICodeMining> minings, ICodeMiningProvider provider) {
	this.cu = cu;
	this.minings = minings;
	this.provider = provider;
	this.textEditor = textEditor;
	this.viewer = viewer;
}
 

@Override
protected void createCodeMinings(IDocument document, XtextResource resource, CancelIndicator indicator,
		IAcceptor<? super ICodeMining> acceptor) throws BadLocationException {
	if (resource.getContents().isEmpty()) {
		return;
	}
	// get all operations to open document
	List<Operation> allOperations = EcoreUtil2.eAllOfType(resource.getContents().get(0), Operation.class);
	// get keyword for ')'
	Keyword rightParenthesisKeyword_4 = grammar.getOperationAccess().getRightParenthesisKeyword_4();
	for (Operation o : allOperations) {
		//inline annotations only for methods with no return type
		if (o.getType() != null) {
			continue;
		}
		// get return type name from operation
		JvmOperation inferredOp = (JvmOperation) jvmModelAssociations.getPrimaryJvmElement(o);
		if (inferredOp == null || inferredOp.getReturnType() == null) {
			continue; // broken model
		}
		String returnTypeName = inferredOp.getReturnType().getSimpleName();
		// find document offset for inline annotation
		ICompositeNode node = NodeModelUtils.findActualNodeFor(o);
		for (Iterator<INode> it = node.getAsTreeIterable().iterator(); it.hasNext();) {
			INode child = it.next();
			if (rightParenthesisKeyword_4.equals(child.getGrammarElement())) {
				// create line content code mining for inline annotation after grammarElement ')'
				String annotationText = " : " + returnTypeName;
				acceptor.accept(createNewLineContentCodeMining(child.getTotalOffset() + 1, annotationText));
			}
		}
	}
}
 

@Override
protected void createCodeMinings(IDocument document, XtextResource resource, CancelIndicator indicator,
	IAcceptor<? super ICodeMining> acceptor) throws BadLocationException {

	EList<EObject> contents = resource.getContents();
	if (contents.isEmpty()) {
		return;
	}

	// get all evaluations contained by the open document
	List<Evaluation> allEvaluations = EcoreUtil2.eAllOfType(contents.get(0), Evaluation.class);

	// get keyword for ';'
	Keyword semicolon = grammar.getEvaluationAccess().getSemicolonKeyword_1();

	for (Evaluation evaluation : allEvaluations) {
		ICompositeNode node = NodeModelUtils.findActualNodeFor(evaluation);
		for (Iterator<INode> it = node.getAsTreeIterable().iterator(); it.hasNext();) {
			INode child = it.next();
			if (semicolon.equals(child.getGrammarElement())) {
				int annotationOffset = child.getTotalOffset();
				String annotationText = getAnnotationText(evaluation);
				acceptor.accept(createNewLineContentCodeMining(annotationOffset, annotationText));
			}
		}
	}
}
 
源代码14 项目: sarl   文件: SARLCodeMiningProvider.java

@Override
public CompletableFuture<List<? extends ICodeMining>> provideCodeMinings(ITextViewer viewer, IProgressMonitor monitor) {
	if (this.codeminingPreferences.isCodeminingEnabled()) {
		return super.provideCodeMinings(viewer, monitor);
	}
	return null;
}
 
源代码15 项目: sarl   文件: SARLCodeMiningProvider.java

@Override
protected void createCodeMinings(IDocument document, XtextResource resource, CancelIndicator indicator,
		IAcceptor<? super ICodeMining> acceptor) throws BadLocationException {
	createImplicitActionReturnType(resource, acceptor);
	createImplicitFieldType(resource, acceptor);
	createImplicitVariableType(resource, acceptor);
}
 
源代码16 项目: sarl   文件: SARLCodeMiningProvider.java

/** Add an annotation when the variable's type is implicit and inferred by the SARL compiler.
 *
 * @param resource the resource to parse.
 * @param acceptor the code mining acceptor.
 */
private void createImplicitVariableType(XtextResource resource, IAcceptor<? super ICodeMining> acceptor) {
	createImplicitVarValType(resource, acceptor, XtendVariableDeclaration.class,
		it -> it.getType(),
		it -> {
			LightweightTypeReference type = getLightweightType(it.getRight());
			if (type.isAny()) {
				type = getTypeForVariableDeclaration(it.getRight());
			}
			return type.getSimpleName();
		},
		it -> it.getRight(),
		() -> this.grammar.getXVariableDeclarationAccess().getRightAssignment_3_1());
}
 
源代码17 项目: sarl   文件: SARLCodeMiningProvider.java

/** Add an annotation when the field's type is implicit and inferred by the SARL compiler.
 *
 * @param resource the resource to parse.
 * @param acceptor the code mining acceptor.
 */
private void createImplicitFieldType(XtextResource resource, IAcceptor<? super ICodeMining> acceptor) {
	createImplicitVarValType(resource, acceptor, XtendField.class,
		it -> it.getType(),
		it -> {
			final JvmField inferredField = (JvmField) this.jvmModelAssocitions.getPrimaryJvmElement(it);
			if (inferredField == null || inferredField.getType() == null || inferredField.getType().eIsProxy()) {
				return null;
			}
			return inferredField.getType().getSimpleName();
		},
		null,
		() -> this.grammar.getAOPMemberAccess().getInitialValueAssignment_2_3_3_1());
}
 
源代码18 项目: balzac   文件: BalzacCodeMiningProvider.java

@Override
protected void createCodeMinings(
    IDocument document,
    XtextResource resource,
    CancelIndicator indicator,
    IAcceptor<? super ICodeMining> acceptor) throws BadLocationException {

    // get all operations to open document
    List<Constant> allConstants = EcoreUtil2.eAllOfType(resource.getContents().get(0), Constant.class);

    Keyword colon = grammar.getConstantAccess().getColonKeyword_2_0();
    Keyword equalsSign = grammar.getConstantAccess().getEqualsSignKeyword_3();

    for (Constant c : allConstants) {
        // find document offset for inline annotation
        ICompositeNode node = NodeModelUtils.findActualNodeFor(c);

        boolean hasType = false;
        for (Iterator<INode> it = node.getAsTreeIterable().iterator(); it.hasNext();) {
            INode child = it.next();
            if (colon.equals(child.getGrammarElement())) {
                hasType = true;
            }
            if (!hasType && equalsSign.equals(child.getGrammarElement())) {
                // create line content code mining for inline annotation after grammarElement
                // ')'
                Result<Type> res = typeSystem.typeExpression(new TypeSubstitutions(), c);
                if (!res.failed()) {
                    String annotationText = ": " + strRep.stringRep(res.getFirst()) + " ";
                    acceptor.accept(createNewLineContentCodeMining(child.getTotalOffset(), annotationText));
                }
            }
        }
    }

    // TODO: implement me
    // use acceptor.accept(super.createNewLineHeaderCodeMining(...)) to add a new
    // code mining to the
    // final list

    // example:
    // acceptor.accept(createNewLineHeaderCodeMining(1, document, "Header
    // annotation"));
}
 
源代码19 项目: sarl   文件: SARLCodeMiningProvider.java

/** Add an annotation when the var/val declaration's type is implicit and inferred by the SARL compiler.
 *
 * @param resource the resource to parse.
 * @param acceptor the code mining acceptor.
 */
@SuppressWarnings({ "checkstyle:npathcomplexity" })
private <T extends EObject> void createImplicitVarValType(XtextResource resource, IAcceptor<? super ICodeMining> acceptor,
		Class<T> elementType,
		Function1<T, JvmTypeReference> getDeclaredTypeLambda,
		Function1<T, String> getInferredTypeLambda,
		Function1<T, XExpression> getExprLambda,
		Function0<Assignment> getAssignmentLambda) {
	final List<T> elements = EcoreUtil2.eAllOfType(resource.getContents().get(0), elementType);

	for (final T element : elements) {
		// inline annotation only for fields with no type
		final JvmTypeReference declaredType = getDeclaredTypeLambda.apply(element);
		final XExpression expr = getExprLambda != null ? getExprLambda.apply(element) : null;
		if (declaredType != null || (getExprLambda != null && expr == null)) {
			continue;
		}
		// get inferred type name from JVM element
		final String inferredType = getInferredTypeLambda.apply(element);
		if (Strings.isEmpty(inferredType)) {
			continue;
		}
		// find document offset for inline annotation
		final ICompositeNode node = NodeModelUtils.findActualNodeFor(element);
		final Assignment elementAssignment = getAssignmentLambda.apply();
		assert elementAssignment != null;
		for (Iterator<INode> it = node.getAsTreeIterable().iterator(); it.hasNext();) {
			final INode child = it.next();
			if (child != node) {
				final EObject grammarElement = child.getGrammarElement();
				if (grammarElement instanceof RuleCall) {
					if (elementAssignment.equals(grammarElement.eContainer())) {
						final String text = this.keywords.getColonKeyword() + " " + inferredType + " "; //$NON-NLS-1$ //$NON-NLS-2$
						final int offset = child.getPreviousSibling().getTotalOffset();
						acceptor.accept(createNewLineContentCodeMining(offset, text));
						break;
					}
				}
			}
		}
	}
}
 
源代码20 项目: sarl   文件: SARLCodeMiningProvider.java

/** Add an annotation when the action's return type is implicit and inferred by the SARL compiler.
 *
 * @param resource the resource to parse.
 * @param acceptor the code mining acceptor.
 */
@SuppressWarnings("checkstyle:npathcomplexity")
private void createImplicitActionReturnType(XtextResource resource, IAcceptor<? super ICodeMining> acceptor) {
	final List<XtendFunction> actions = EcoreUtil2.eAllOfType(resource.getContents().get(0), XtendFunction.class);

	for (final XtendFunction action : actions) {
		// inline annotation only for methods with no return type
		if (action.getReturnType() != null) {
			continue;
		}
		// get return type name from operation
		final JvmOperation inferredOperation = (JvmOperation) this.jvmModelAssocitions.getPrimaryJvmElement(action);
		if (inferredOperation == null || inferredOperation.getReturnType() == null) {
			continue;
		}
		// find document offset for inline annotationn
		final ICompositeNode node = NodeModelUtils.findActualNodeFor(action);
		final Keyword parenthesis = this.grammar.getAOPMemberAccess().getRightParenthesisKeyword_2_5_6_2();
		final Assignment fctname = this.grammar.getAOPMemberAccess().getNameAssignment_2_5_5();
		int offsetFctname = -1;
		int offsetParenthesis = -1;
		for (Iterator<INode> it = node.getAsTreeIterable().iterator(); it.hasNext();) {
			final INode child = it.next();
			if (child != node) {
				final EObject grammarElement = child.getGrammarElement();
				if (grammarElement instanceof RuleCall) {
					if (fctname.equals(grammarElement.eContainer())) {
						offsetFctname = child.getTotalEndOffset();
					}
				} else if (parenthesis.equals(grammarElement)) {
					offsetParenthesis = child.getTotalEndOffset();
					break;
				}
			}
		}
		int offset = -1;
		if (offsetParenthesis >= 0) {
			offset = offsetParenthesis;
		} else if (offsetFctname >= 0) {
			offset = offsetFctname;
		}
		if (offset >= 0) {
			final String returnType = inferredOperation.getReturnType().getSimpleName();
			final String text = " " + this.keywords.getColonKeyword() + " " + returnType; //$NON-NLS-1$ //$NON-NLS-2$
			acceptor.accept(createNewLineContentCodeMining(offset, text));
		}
	}
}
 

/**
 * Collection minings included inside variables of the given stack frame.
 *
 * @param viewer
 * @param stackFrame
 * @param monitor
 * @return
 */
protected abstract List<? extends ICodeMining> provideCodeMinings(ITextViewer viewer, T stackFrame,
		IProgressMonitor monitor);
 

/**
 * Clients have to implement this method to provide code minings.
 * 
 * @param document The document
 * @param resource The resource for that document
 * @param indicator Cancelation indicator
 * @param acceptor Accepts created minings
 * @throws BadLocationException when line number doesn't exists
 */
protected abstract void createCodeMinings(IDocument document, XtextResource resource,
		CancelIndicator indicator, IAcceptor<? super ICodeMining> acceptor) throws BadLocationException;
 
 类所在包
 同包方法