Generierte Dateien: Implementierungscode

Der Assistent Neues Plug-in-Projekt generiert ein Java™-Paket und eine Java-Klasse für die Implementierung von benutzerdefinierten EGL-Regeln.

Sie müssen dieser Klasse Ihren eigenen Java-Code hinzufügen, um die Analyse ausführen zu können, die für Ihre angepasste Regel erforderlich ist.

Implementierungscode für EGL

Abbildung 1 zeigt ein Beispiel des generierten Codes für eine EGL-Regelklasse. Das Beispiel setzt voraus, dass das folgende Element auf der Seite EGL-Regelschablone ausgewählt wurde:
  • AddStatement
Der Name der Regelklasse (com.example.EglRule) ist der Beispielwertspalte von Tabelle 1 im Abschnitt Generierte Dateien: Regel- und Kategorieerweiterungen entnommen.
Beachten Sie folgende Elemente im generierten Code:
  • Als Paketname wird der entsprechende Namensanteil der Regelklasse com.example verwendet.
  • Als Klassenname wird der entsprechende Namensanteil der Regelklasse EglRule verwendet.
  • Eine Methode visit() wird für einen AST-Visit und einen IR-Visit für jedes der Elemente generiert, die auf der Assistentenseite EGL-Regelschablone ausgewählt sind.
Abbildung 1. Klasse für die Implementierung einer EGL-Regel
package com.example;

import java.util.ArrayList;
import java.util.List;

public class EglRule extends com.ibm.etools.egl.codereview.rules.AbstractEglAnalysisRule {

	@Override
	public List<com.ibm.etools.edt.core.ast.Node> performRule(com.ibm.etools.edt.core.ast.Node baseNode) {
		final List<com.ibm.etools.edt.core.ast.Node> tokens = new ArrayList<com.ibm.etools.edt.core.ast.Node>();
		// Diese Methode wird immer aufgerufen und ihr wird das schlanke AST-Modell und nicht das gebundene IR-Modell übergeben.
		// Verwenden Sie das AST-Modell, wenn weniger Informationen als vom IR-Modell bereitgestellt benötigt werden.
		// Ist das IR-Modell erwünscht, geben Sie entweder null oder eine leere Tokenliste für diesen Return zurück und
		// platzieren Sie den Code zur Analyse des IR-Modells in der IR-Version von 'performRule' (siehe unten).
		// Soll zusätzlicher Text der angezeigten UI-Nachricht des markierten Knotens hinzugefügt werden, können Sie stattdessen für Token
		// List<com.ibm.etools.egl.codereview.NodeStringResult> verwenden. Mit der Klasse NodeStringResult können Sie
		// den Knoten und die Zeichenfolge festlegen, die an die markierte Position in der angezeigten Nachricht angehängt wird.
		baseNode.accept(new com.ibm.etools.egl.codereview.rules.AbstractASTRuleVisitor() {
			@Override
			public boolean visit(com.ibm.etools.edt.core.ast.AddStatement clause) {
				// TODO: Knoten auf Regelverstöße prüfen und betreffende Knoten der Tokenliste hinzufügen wie zum Beispiel:
				tokens.add(clause);
				// 'true' zurückgeben, wenn Visits für Objekte innerhalb dieses Objekts verarbeitet werden sollen, andernfalls 'false'.
				return false;
			}
		});
		return tokens;
	}

	@Override
	public List<com.ibm.etools.edt.core.ir.api.Element> performRule(com.ibm.etools.edt.core.ir.api.Element element) {
		final List<com.ibm.etools.edt.core.ir.api.Element> tokens = new ArrayList<com.ibm.etools.edt.core.ir.api.Element>();
		// Damit diese Methode aufgerufen wird, muss der Analyseparameter "RUN_AS_IR" im Manifest auf "true" gesetzt werden.
		// Anschließend wird diese Klasse unter Übergabe des gebundenen IR-Modells zusätzlich zum schlanken AST-Modell aufgerufen.
		// Verwenden Sie das IR-Modell, wenn mehr Informationen als die durch das AST-Modell gelieferten benötigt werden.
		// Beachten Sie jedoch, dass die Verwendung des IR-Modells nicht so schnell wie die des AST-Modells ist.
		// Soll zusätzlicher Text der angezeigten UI-Nachricht des markierten Elements hinzugefügt werden, können Sie stattdessen für Token
		// List<com.ibm.etools.egl.codereview.ElementStringResult> verwenden. Mit der Klasse ElementStringResult können Sie
		// das Element und die Zeichenfolge festlegen, die an die markierte Position in der angezeigten Nachricht angehängt wird.
		element.accept(new com.ibm.etools.egl.codereview.rules.AbstractIRRuleVisitor() {
			@Override
			public boolean visit(com.ibm.etools.edt.core.ir.api.AddStatement clause) {
				// TODO: Knoten auf Regelverstöße prüfen und betreffende Knoten der Tokenliste hinzufügen wie zum Beispiel:
				tokens.add(clause);
				// 'true' zurückgeben, wenn Visits für Objekte innerhalb dieses Objekts verarbeitet werden sollen, andernfalls 'false'.
				return false;
			}
		});
		return tokens;
	}
}

Feedback
(C) Copyright IBM Corporation 2000, 2015. Alle Rechte vorbehalten.