⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jbrowselineparser.java

📁 java写的多功能文件编辑器
💻 JAVA
📖 第 1 页 / 共 4 页
字号:
							}							// Create and Insert Attribute Node							currentElement = new UML.Attribute(memberName, memberType, mod,									parentNode.getElement(), curTokenLine);							insertAsNode(currentElement, curElementStartPos, parentNode);							if ( ( (UML.Attribute) currentElement).isPrimitive()) {								results.incPrimAttrCount();							} else {								results.incObjAttrCount();							}							if ( token.equals(",") ) {								// more should follow								memberName = null;								continue;							} else if ( token.equals("=") ) {								// more may follow, so skip until ";" or ","								if ( ",".equals( ts.skipUntil( ",;".toCharArray() )) ) {									// more should follow, so maintain type but clear name									memberName = null;									continue;								}								// ";" assume found so fall into prepare for next element							}							// prepare for next element							curElementStartPos = -1;							mod = 0;							memberType = null;							memberName = null;												} // end of else if for attributes					} else if ( token.equals("[") || token.equals("]") ) {						if (memberName != null) {							// attribute							memberName += token;						} else if (memberType != null) {							// attribute or method							memberType += token;						} else {							// unexpected							badFlag = true;							resetFlag = true;							msgStr = null;						}					} else if (token.equals("(") ) {						if (memberType == null) {							// unexpected token							badFlag = true;							resetFlag = true;							msgStr = null;						} else if (memberName == null) {							// handle constructors							if (memberType.equals(parentNode.getElement().getName()) ) {								memberName = memberType;								memberType = null; // the expected value for constructors								// Check if constructor is appropriate								if ( parentNode.getElement().isInterface() ) {									badFlag = true;									msgStr = "Interfaces can't have constructors";								} else if ( !RWModifier.isValidForConstructor(mod) ) {									badFlag = true;									msgStr = "Constructor can't be native/abstract/static/synchronized/final";								}							} else {								// Report missing name or misspelled constructor								badFlag = true;								if ( parentNode.getElement().isInterface()										|| !RWModifier.isValidForConstructor(mod) ) {									memberName = MISSING_LABEL;									msgStr = "Missing operation type or name";								} else {									memberName = memberType;									memberType = null; // the expected value for constructors									msgStr = "Misspelled constructor name?";								}							}						}						// Operation Node						if ( !resetFlag ) {							// Create Operation Node							currentElement = new UML.Operation(memberName, memberType, mod,									parentNode.getElement(), curTokenLine);							if (memberType == null ) {								( ( UML.Operation) currentElement).setConstructor(true);							}							isBodyRequired = ( (UML.Operation) currentElement).isBodyRequired();							// Insert Operation Node							nodeStack.push( parentNode = insertAsNode(									currentElement, curElementStartPos, parentNode) );							results.incMethodCount();							if ( parentNode.getElement().getParentElement().isInterface() 									&& !RWModifier.isValidInterfaceMethod(mod) ) {								// Interface methods can't be native/static/synchronized/final/private/protected								String msgStr2 = "Invalid modifiers for a method in an interface";								// Create error node and increment count								results.incErrorCount();								messageElement = new UML.Message(msgStr2, UML.Type.ERROR,										parentNode.getElement().getParentElement(), curTokenLine);								insertAsNode(messageElement, curElementStartPos, 										(UMLTree.Node) parentNode.getParent());							} else if (RWModifier.isAbstract(mod) 									&& !RWModifier.isValidAbstractMethod(mod)) {								// Abstract methods can't be native/static/synchronized/final/private								String msgStr2 = "Invalid modifiers for an abstract method";								// Create error node and increment count								results.incErrorCount();								messageElement = new UML.Message(msgStr2, UML.Type.ERROR,										parentNode.getElement().getParentElement(), curTokenLine);								insertAsNode(messageElement, curElementStartPos, 										(UMLTree.Node) parentNode.getParent());							}							// Setup for next state							parseSubState = ParseSubState.OP_PARMS;							lastToken = ""; // if there are any parameters signal that next token is start of first							parmType = "";							parmName = "";							methodBraceCount = 0;							methodParmsCount = 0;						} // if ( !resetFlag )				    } else if ( token.equals("{")							&& ( mod == RWModifier.setStatic(0)								|| mod == 0 ) ) {				   		// static block or object block						ts.skipUntil( "}" );						curElementStartPos = -1;						mod = 0;						memberType = null;						memberName = null;					} else if (token.equals("}") ) {						// pop parent from stack						//nodeStack.pop();						UMLTree.Node o = (UMLTree.Node) nodeStack.pop();						parentNode = (UMLTree.Node) nodeStack.peek();						if (parentNode == root ) {							parseState = ParseState.POST_HEADER;							parseSubState = ParseSubState.SCANNING;						} else {							parseState = ParseState.PACKAGE_MEMBER;							parseSubState = ParseSubState.BODY;							mod = 0;							memberType = null;							memberName = null;						}						curElementStartPos = -1;					} else {						// Unexpected token						badFlag = true;						resetFlag = true;					} // if - else if for PACKAGE_MEMBER - BODY					if (badFlag) {						if (msgStr == null) {							// Unexpected token							msgStr = "Unexpected token: '" + token + "'";						}						// increment count						results.incErrorCount();						// attempt to continue by ignoring						if (resetFlag) {							// Create error node as daughter of parent							messageElement = new UML.Message(msgStr, UML.Type.ERROR,									parentNode.getElement(), curTokenLine);							insertAsNode(messageElement, curElementStartPos, parentNode);							curElementStartPos = -1;							memberType = null;							memberName = null;						} else {							// Create error node as sister of parent							messageElement = new UML.Message(msgStr, UML.Type.ERROR,									parentNode.getElement().getParentElement(), curTokenLine);							insertAsNode(messageElement, curElementStartPos, 									(UMLTree.Node) parentNode.getParent());							badFlag = false;							resetFlag = false;						}					} // if (badFlag) for PACKAGE_MEMBER - BODY				// ------------------------------				// PACKAGE_MEMBER - OP_PARMS				// ------------------------------				} else if (parseSubState == ParseSubState.OP_PARMS) {					if ( token.equals(")") || token.equals(",") ) {						if (! "".equals(parmType) ) {							// Attempt to add the parameter							// insure parameter identifier not missing							if ( "".equals(parmName) ) {								msgStr = "Expecting type & identifier for method parameter.";								// Create error node (as sister of parent) and increment count								results.incErrorCount();								messageElement = new UML.Message(msgStr, UML.Type.ERROR,										parentNode.getElement().getParentElement(), curTokenLine);								insertAsNode(messageElement, curElementStartPos, 										(UMLTree.Node) parentNode.getParent());								// attempt to continue as if an identifier for the parameter was found.								parmName = MISSING_LABEL;							}							// insure closing ']' not missing							if ( "[".equals(lastToken) ) {								msgStr = "Missing ']' after '[' for method parameter.";								// create error node (as sister of parent) and increment count								results.incErrorCount();								messageElement = new UML.Message(msgStr, UML.Type.ERROR,										parentNode.getElement().getParentElement(), curTokenLine);								insertAsNode(messageElement, curElementStartPos, 										(UMLTree.Node) parentNode.getParent());								// attempt to continue as if "]" was found.								parmType += "[]";							}							// Add the parameter							( (UML.Operation) currentElement).addArgument(parmType, parmName);							methodParmsCount++;						} else {							// i.e. parmType not specified							// insure ',' was not superfluous							if ( token.equals(",") ) {								msgStr = "Missing method parameter before ','.";								// Create error node and increment count								results.incErrorCount();								messageElement = new UML.Message(msgStr, UML.Type.ERROR,										parentNode.getElement().getParentElement(), curTokenLine);								insertAsNode(messageElement, curElementStartPos, 										(UMLTree.Node) parentNode.getParent());								// attempt to continue as if superfluous "," was not there.							}						} // if (! "".equals(parmType) )						// Handle for end or more parameters ( ')' vs. ',')						if (token.equals(",") ) {							// Prepare for next parameter							parmType = "";  // if there are any more args signal that next token is type							parmName = "";						} else { // i.e. token is ")"							// insure was not preceded by a superfluous ','							if ( lastToken.equals(",") ) {								msgStr = "Missing method parameter after ','.";								// Create error node and increment count								results.incErrorCount();								messageElement = new UML.Message(msgStr, UML.Type.ERROR,										parentNode.getElement().getParentElement(), curTokenLine);								insertAsNode(messageElement, curElementStartPos, 										(UMLTree.Node) parentNode.getParent());								// attempt to continue as if superfluous "," was not there.							}							parseSubState = ParseSubState.OP_POST_PARMS;							throwsFound = false;							throwsOK    = true;						} // ( ')' vs. ',')					} else {						// Assume Parameter type or formal name						if ( Character.isJavaIdentifierStart(tokenStartChar) ) {							if ( "".equals(parmType) ) {								// type								parmType = token;							} else if ( "[".equals(lastToken) ) {								msgStr = "Missing ']' after '[' for method parameter.";								// create error node and increment count								results.incErrorCount();								messageElement = new UML.Message(msgStr, UML.Type.ERROR,										parentNode.getElement().getParentElement(), curTokenLine);								insertAsNode(messageElement, curElementStartPos, 										(UMLTree.Node) parentNode.getParent());								// attempt to continue as if "]" was found.								parmType += "[]";								parmName = token;							} else {								// formal name								parmName = token;							}						} else if ("[".equals(token) ) {							// then check that next token is "]"						} else if ("]".equals(token) ) {							if ( "[".equals(lastToken) ) {								parmType += "[]";							} else {								msgStr = "Missing '[' before ']' for method parameter.";								// Create error node and increment count								results.incErrorCount();								messageElement = new UML.Message(msgStr, UML.Type.ERROR,										parentNode.getElement().getParentElement(), curTokenLine);								insertAsNode(messageElement, curElementStartPos, 										(UMLTree.Node) parentNode.getParent());								// attempt to continue as if "]" was found.								parmType += "[]";							}						} else {							msgStr = "Unexpected token \"" + token + "\" in method parameter.";							// Create error node and increment count							results.incErrorCount();							messageElement = new UML.Message(msgStr, UML.Type.ERROR,									parentNode.getElement().getParentElement(), curTokenLine);							insertAsNode(messageElement, curElementStartPos, 									(UMLTree.Node) parentNode.getParent());							// attempt to continue (i.e. ignore)						}					} // if - else if for PACKAGE_MEMBER - OP_PARMS					lastToken = token;				// ------------------------------				// PACKAGE_MEMBER - OP_POST_PARMS				// ------------------------------				} else if (parseSubState == ParseSubState.OP_POST_PARMS) {					// Parameter list finished, parse throws clause					// and Determine Next State					badFlag = false;					if ( token.equals("{") || token.equals(";") ) {						if (!throwsOK) {							curElementStartPos = ls.getStartOffset() + curTokenPos;							curTokenLine = ts.getCurrentLineNum();							msgStr = "Missing type specification in throws clause";							// Create error node and increment count							results.incErrorCount();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -